diff --git a/.gitattributes b/.gitattributes index 6825630198..51bd409b7f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -18,3 +18,17 @@ research/coordinated-frames-and-entrance-banks/** -text -whitespace # Frozen PR210 package and round-nine evidence retain their audited bytes. research/five-stage-source527-banks/** -text -whitespace research/community-round9-audit/** -text -whitespace + +# Frozen replicated E8 sources and witnesses preserve their committed bytes. +research/e8-r740-replica32/** -text +# Byte-identical PR442 proof packages, including original whitespace. +research/e8-early-reset-kernel/** -text -whitespace +research/e8-early-reset-reuse/** -text -whitespace +research/idle-axis-hosting/** -text -whitespace +research/split-centres-global/** -text -whitespace +# Preserve source pins and the literal evidence diff, including removed whitespace. +research/e8-target-mixing-whole/** -text +research/e8-target-mixing-whole-validation/FINAL-COSMETIC.diff -text -whitespace +# R715 source-pinned words and upstream discovery artifacts retain exact bytes. +research/e8-r715-whole-hosted/** -text +research/e8-r715-whole-hosted/upstream*/** -whitespace diff --git a/.github/workflows/e8-complex-adapted-kernel.yml b/.github/workflows/e8-complex-adapted-kernel.yml new file mode 100644 index 0000000000..a3c418423c --- /dev/null +++ b/.github/workflows/e8-complex-adapted-kernel.yml @@ -0,0 +1,60 @@ +name: e8-complex-adapted-kernel +on: + pull_request: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/r740-hosted-rank149/**' + - 'research/e8-target-mixing-whole/**' + - 'research/e8-complex-adapted-kernel/**' + - 'research/whole-hosted-format-ceiling/**' + - 'research/cross-family-residual-obstruction/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/e8-complex-adapted-kernel.yml' + push: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/r740-hosted-rank149/**' + - 'research/e8-target-mixing-whole/**' + - 'research/e8-complex-adapted-kernel/**' + - 'research/whole-hosted-format-ceiling/**' + - 'research/cross-family-residual-obstruction/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/e8-complex-adapted-kernel.yml' + workflow_dispatch: +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: ${{ matrix.python-version }} + - run: sudo apt-get update && sudo apt-get install -y libboost-dev + - run: python -m pip install -r research/e8-r740-replica32/parent436/requirements.txt + - name: Exact cross-family route obstruction + run: python -B research/cross-family-residual-obstruction/verify.py + - name: Exact scoped architecture ceiling + run: python -B research/whole-hosted-format-ceiling/verify.py + - name: Full parent, local phases and both eleven-stage suppliers + run: E8_REPLAY_PHASES=1 python -B research/e8-complex-adapted-kernel/verify.py "$RUNNER_TEMP/e8-complex-adapted-kernel-full" + - name: Require an unchanged tracked tree + run: git diff --exit-code diff --git a/.github/workflows/e8-r715-whole-hosted.yml b/.github/workflows/e8-r715-whole-hosted.yml new file mode 100644 index 0000000000..b1bcff0f09 --- /dev/null +++ b/.github/workflows/e8-r715-whole-hosted.yml @@ -0,0 +1,62 @@ +name: e8-r715-whole-hosted +on: + pull_request: + paths: + - 'research/e8-r715-whole-hosted/**' + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/r740-hosted-rank149/**' + - 'research/e8-target-mixing-whole/**' + - 'research/e8-complex-adapted-kernel/**' + - 'research/whole-hosted-format-ceiling/**' + - 'research/cross-family-residual-obstruction/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/e8-r715-whole-hosted.yml' + push: + paths: + - 'research/e8-r715-whole-hosted/**' + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/r740-hosted-rank149/**' + - 'research/e8-target-mixing-whole/**' + - 'research/e8-complex-adapted-kernel/**' + - 'research/whole-hosted-format-ceiling/**' + - 'research/cross-family-residual-obstruction/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/e8-r715-whole-hosted.yml' + workflow_dispatch: +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: ${{ matrix.python-version }} + - run: sudo apt-get update && sudo apt-get install -y libboost-dev + - run: python -m pip install -r research/e8-r740-replica32/parent436/requirements.txt + - name: Exact cross-family route obstruction + run: python -B research/cross-family-residual-obstruction/verify.py + - name: Exact scoped architecture ceiling + run: python -B research/whole-hosted-format-ceiling/verify.py + - name: Full paid-complex parent and R715 whole-hosted composition + run: E8_REPLAY_PHASES=1 python -B research/e8-r715-whole-hosted/verify.py "$RUNNER_TEMP/e8-r715-whole-hosted-full" + - name: Require an unchanged tracked tree + run: git diff --exit-code diff --git a/.github/workflows/e8-r740-replica32.yml b/.github/workflows/e8-r740-replica32.yml new file mode 100644 index 0000000000..4975bb39f4 --- /dev/null +++ b/.github/workflows/e8-r740-replica32.yml @@ -0,0 +1,34 @@ +name: e8-r740-replica32 +on: + pull_request: + paths: + - 'research/e8-r740-replica32/**' + - '.github/workflows/e8-r740-replica32.yml' + push: + paths: + - 'research/e8-r740-replica32/**' + - '.github/workflows/e8-r740-replica32.yml' + workflow_dispatch: +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: ${{ matrix.python-version }} + - run: sudo apt-get update && sudo apt-get install -y libboost-dev + - run: python -m pip install -r research/e8-r740-replica32/parent436/requirements.txt + - name: Full parent reconstruction and kernel verification + run: bash research/e8-r740-replica32/verify.sh "$RUNNER_TEMP/e8-r740-replica32-full" + - name: Require an unchanged tracked tree + run: git diff --exit-code diff --git a/.github/workflows/e8-target-mixing-whole.yml b/.github/workflows/e8-target-mixing-whole.yml new file mode 100644 index 0000000000..437cdc4ce8 --- /dev/null +++ b/.github/workflows/e8-target-mixing-whole.yml @@ -0,0 +1,54 @@ +name: e8-target-mixing-whole +on: + pull_request: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/r740-hosted-rank149/**' + - 'research/e8-target-mixing-whole/**' + - 'research/cross-family-residual-obstruction/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/e8-target-mixing-whole.yml' + push: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/r740-hosted-rank149/**' + - 'research/e8-target-mixing-whole/**' + - 'research/cross-family-residual-obstruction/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/e8-target-mixing-whole.yml' + workflow_dispatch: +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: ${{ matrix.python-version }} + - run: sudo apt-get update && sudo apt-get install -y libboost-dev + - run: python -m pip install -r research/e8-r740-replica32/parent436/requirements.txt + - name: Exact cross-family route obstruction + run: python -B research/cross-family-residual-obstruction/verify.py + - name: Full parent, local phases and both eleven-stage suppliers + run: E8_REPLAY_PHASES=1 python -B research/e8-target-mixing-whole/verify.py "$RUNNER_TEMP/e8-target-mixing-whole-full" + - name: Require an unchanged tracked tree + run: git diff --exit-code diff --git a/.github/workflows/r740-hosted-eleven.yml b/.github/workflows/r740-hosted-eleven.yml new file mode 100644 index 0000000000..6936cc187d --- /dev/null +++ b/.github/workflows/r740-hosted-eleven.yml @@ -0,0 +1,46 @@ +name: r740-hosted-eleven +on: + pull_request: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/r740-hosted-eleven.yml' + push: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/r740-hosted-eleven.yml' + workflow_dispatch: +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: ${{ matrix.python-version }} + - run: sudo apt-get update && sudo apt-get install -y libboost-dev + - run: python -m pip install -r research/e8-r740-replica32/parent436/requirements.txt + - name: Full parent reconstruction and hosted verification + run: python -B research/r740-hosted-eleven/verify.py "$RUNNER_TEMP/r740-hosted-eleven-full" + - name: Require an unchanged tracked tree + run: git diff --exit-code diff --git a/.github/workflows/r740-hosted-rank149.yml b/.github/workflows/r740-hosted-rank149.yml new file mode 100644 index 0000000000..9902b04897 --- /dev/null +++ b/.github/workflows/r740-hosted-rank149.yml @@ -0,0 +1,52 @@ +name: r740-hosted-rank149 +on: + pull_request: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/r740-hosted-rank149/**' + - 'research/cross-family-residual-obstruction/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/r740-hosted-rank149.yml' + push: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/r740-hosted-eleven/**' + - 'research/r740-hosted-rank149/**' + - 'research/cross-family-residual-obstruction/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/r740-hosted-rank149.yml' + workflow_dispatch: +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: ${{ matrix.python-version }} + - run: sudo apt-get update && sudo apt-get install -y libboost-dev + - run: python -m pip install -r research/e8-r740-replica32/parent436/requirements.txt + - name: Exact cross-family route obstruction + run: python -B research/cross-family-residual-obstruction/verify.py + - name: Full parent, local phases and both eleven-stage suppliers + run: E8_REPLAY_PHASES=1 python -B research/r740-hosted-rank149/verify.py "$RUNNER_TEMP/r740-hosted-rank149-full" + - name: Require an unchanged tracked tree + run: git diff --exit-code diff --git a/.github/workflows/r740-idle-hosted-replicas.yml b/.github/workflows/r740-idle-hosted-replicas.yml new file mode 100644 index 0000000000..5c7e732117 --- /dev/null +++ b/.github/workflows/r740-idle-hosted-replicas.yml @@ -0,0 +1,44 @@ +name: r740-idle-hosted-replicas +on: + pull_request: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/r740-idle-hosted-replicas.yml' + push: + paths: + - 'research/r740-idle-hosted-replicas/**' + - 'research/split-centres-global/**' + - 'research/e8-early-reset-reuse/**' + - 'research/e8-early-reset-kernel/**' + - 'research/idle-axis-hosting/**' + - 'research/e8-r740-replica32/**' + - '.github/workflows/r740-idle-hosted-replicas.yml' + workflow_dispatch: +permissions: + contents: read +jobs: + verify: + runs-on: ubuntu-latest + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + python-version: ['3.11', '3.14'] + steps: + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + with: + persist-credentials: false + - uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7 + with: + python-version: ${{ matrix.python-version }} + - run: sudo apt-get update && sudo apt-get install -y libboost-dev + - run: python -m pip install -r research/e8-r740-replica32/parent436/requirements.txt + - name: Full parent reconstruction and hosted verification + run: python -B research/r740-idle-hosted-replicas/verify.py "$RUNNER_TEMP/r740-idle-hosted-replicas-full" + - name: Require an unchanged tracked tree + run: git diff --exit-code diff --git a/certificates/joint-dual-kappa.json b/certificates/joint-dual-kappa.json index b7f7b89bc2..1f35b89221 100644 --- a/certificates/joint-dual-kappa.json +++ b/certificates/joint-dual-kappa.json @@ -842,7 +842,7 @@ "scripts/experiments/pin_joint_dual_sources.py": "4d31cc0e38b7902709ca5f8f714cba109760d2592346dd7f8dc0b900a2d9fe00", "scripts/experiments/verify_joint_dual.py": "7a31bba1e9c0ded32ae285df2ca9bc91ef20c330f6789fdba361876f3c7a1985" }, - "source_manifest_sha256": "4f3c15b82a2d97335d4fe95fb8bcb96bd2a921087da289d9da16c68213a17f17", + "source_manifest_sha256": "698fe862a620e5b80b85fbc6034c9456fa0fa9aea638dbbbcb3f9edd24c0415e", "sources": [ { "files": { diff --git a/certificates/joint-dual-validation.json b/certificates/joint-dual-validation.json index 194861d3c3..61a8d41622 100644 --- a/certificates/joint-dual-validation.json +++ b/certificates/joint-dual-validation.json @@ -226,7 +226,7 @@ } }, "bit_saving": "2382370177/50000000000000", - "certificate_sha256": "9801147b1502cf1e43d5fa39aa37f5291f03b48c30c4dd4f272e0877894a1c24", + "certificate_sha256": "6f684fa7f747073a132e8d0b5652cf12a8afa389f2a16ff6ade8e080d786dd22", "kappa": "4764513337/100000000000000", "margins": 7, "producer_words_regenerated_and_matched": true, diff --git a/research/cross-copy-hosting-r715/EXPECTED.json b/research/cross-copy-hosting-r715/EXPECTED.json new file mode 100644 index 0000000000..a08a65e2aa --- /dev/null +++ b/research/cross-copy-hosting-r715/EXPECTED.json @@ -0,0 +1,10 @@ +{ + "status": "PASS_CONDITIONAL_CROSS_COPY_ELEVEN_STAGE_R715_ASSEMBLY", + "kappa": "68627507968399/50000000000000000", + "kappa_decimal": "0.001372550159367980", + "bit_lower": "687218321300411808399/500000000000000000000000", + "complex_lower": "718766148669433/500000000000000000", + "binding_component": "bit", + "emitted_program_sha256": "4c78424ddb3ef40f82f9e1d88d56ad009ce3664db483d15bf563f40b491bc704", + "complex_template_sha256": "848ad045872f55c43cc1623600d1ba81e32fe33b68683cb56c39324287bf9fa4" +} diff --git a/research/cross-copy-hosting-r715/LICENSE b/research/cross-copy-hosting-r715/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/cross-copy-hosting-r715/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/cross-copy-hosting-r715/MANIFEST.json b/research/cross-copy-hosting-r715/MANIFEST.json new file mode 100644 index 0000000000..9cb56d2124 --- /dev/null +++ b/research/cross-copy-hosting-r715/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "files": { + "EXPECTED.json": "5755b762bfefd12b706ad48a97391661e8cf7adb63a2a259962f8496e947cc7d", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "PROOF.md": "3ed952270f76fef7d90c703c80ecdbab76651bff959e97545c13f537ddbef595", + "README.md": "462e641e2d915f34da0320cf751a4d5c4b7a3f64d254df13813b006feba23f11", + "SELECTION.json": "4413561eb3e773d549d195098b051ad9c672d8cc446daa44ec24d54872e9e1c1", + "assemble_split11.py": "3b97a6179516a42cba9207e539fd6e98e4788878ca68538ecef87ca8476fafac", + "audit_split.py": "549d41ce1d6587eae37e43d906297cc356c924d11b668c0bce89474acb5b690b", + "audit_split11.py": "2ce7b9d10da70cde7bf4d63b054eb955fdffbed99b0b3ab12cd74ac0f8f98c99", + "bit_split11.py": "6e717ca8495a1cec7eef7ff09508517c4df567807fffa2855be26c2a9912b869", + "complex_split.py": "eeee31964ea328c893d4fe10f5ec4c4f3a055769be39ef455186754459502c3a", + "tape_core.py": "bd1b68b56e382d014c1afeb4a735b26b469681192263f7b0da21c4288afaf3de", + "verify.py": "f5cea73f77a656d2253d4fa63d8c9ca95984b94b2afcb6d5cbaca4217064f537" + }, + "parent_manifest_sha256": "60d469ea1165f5861a4912c735d43b3eec67579645da2f3081b5393c4aa786f2" +} diff --git a/research/cross-copy-hosting-r715/PROOF.md b/research/cross-copy-hosting-r715/PROOF.md new file mode 100644 index 0000000000..8cf0e62a26 --- /dev/null +++ b/research/cross-copy-hosting-r715/PROOF.md @@ -0,0 +1,63 @@ +# Cross-copy idle-axis hosting on #472's R715 eleven-stage word + +The cross-copy slot of #448 (`research/cross-copy-hosting`, PROOF.md §2 and §7, `toy_two_family_check.py`) applied to +#472's suppliers. Nothing in #472's bit construction changes except where helper residuals live: its R715 local word, +109-pivot kernel (entrance rank 120), 56 target mixes, retimings, residual isometries, eleven-stage schedule (K = 5, +m = 78), eight replicas and bridges are byte-identical. The complex supplier is #448's cross-copy hosted #433 word. + +## 1. What changes + +#472 hosts every one of the 62,920 helper residual occurrences whole on one idle data family, pooling the eight +replicas (an owner may be in another replica). Residual widths are 8 − e (606 of width 8, 98 of width 7, 11 of width 6 +per replica), the children have ranks 7, 14, 28, 42 and 56, so copies are left partly empty and paid as remainder +children: #472's bit profile carries remainders of rank 6, 7, 28 and 56. + +Here the pending sets of a child's 2V·T = 1,920 pooled copies are concatenated into one tape and residuals are laid +along it widest first; a residual that straddles a copy boundary is owned by two copies of the same child. Both +copies share the child's window, so #442's lemma applies to each piece and #448 §2 gives the complete-program +identity family by family (the exact finite check of §7 covers the two-family case in the model of #451's note). +The remainder of every copy is exact, and concave costs make the contiguous fill optimal: filled copies pay nothing, +and the unfilled copies of the rank-56 final children pay the whole child. + +## 2. Accounting + +- Paid profile: the local word's climbs and copies, plus every nonzero copy remainder, once per copy (the template + pools replicas, as #472 does). Deficit (2KV − 72L)·T = 3,264 is unchanged. +- Physical prefix bound: #472's chronological norm bound is recomputed on the new owners; a split owner's two + families both receive the update (the bound is monotone in that choice). 1,161 bits, charged 1,216. This treatment of a + split owner in the chronological norm bound is new here and is a review point of its own. +- Finite invoice: #472's eleven-stage invoice (three-level halving, max child 56, complete row bound 19,431 < 20,161) + with one further route factor per helper selector for the split (three extra instead of #472's two). The complex + invoice is #448's (#442's formulas with the hosted stock). +- The integer programme (`tape_core.solve`, frozen in `SELECTION.json`) maximises Σ ln(m/r)·(hosted coordinates); + the generator completes any residual the solver leaves out on an in-window child with room. + +## 3. Checks + +`audit_split11.py` shares no code with the generators: windows re-derived from the schedule; every residual has +exactly one owner record; pieces on copies of the named child, inside the pending set, widths summing to the residual +width, disjoint per (child, copy), inside the window, off the active pair; owner families recomputed from the piece +copies; the unchanged parts of the template byte-identical to #472's; remainders, profile, live stock, deficit, the +emitted-program digest and the physical prefix bits recomputed; fifteen mutation controls rejected. +`assemble_split11.py` runs both rational moment engines per supplier, both finite invoices, six bootstrap levels and +the 47 strict outer inequalities; the next grid point and the zero-η, zero-β, unit-β controls are rejected. + +## 4. Result + +| | #472 | this package | +| --- | ---: | ---: | +| bit live / physical | 9,600 / 9,609 | 9,600 / 9,609 | +| hosted residuals (split) | 62,920 (0) | 62,920 (14,612) | +| bit saving c | 1.293771·10⁻³ | **1.374423·10⁻³** | +| complex saving b | 1.297204·10⁻³ (#458) | 1.437532·10⁻³ (#448) | +| κ | 1.292100·10⁻³ | **1.372550·10⁻³** | + +κ = 1372550159367980/10¹⁸ ≈ 1.37255·10⁻³, bit-bound, +6.23 % over #472 and +1.63 % over #469. + +## 5. Scope + +Conditional like its parents. The review point is the cross-copy slot of #448 (a residual's physical slot in two +data families of one idle child), on which #450, #453, #464 and #469 also rest; #451's trace note and the reply on +that thread describe the disagreement. #472's own review points (R715 word, kernel, mixing, pooled whole hosting, +eleven-stage row bound) and all inherited interfaces remain assumptions. No Lean proof and no unconditional +integer-multiplication theorem is claimed. diff --git a/research/cross-copy-hosting-r715/README.md b/research/cross-copy-hosting-r715/README.md new file mode 100644 index 0000000000..741885809d --- /dev/null +++ b/research/cross-copy-hosting-r715/README.md @@ -0,0 +1,36 @@ +# Cross-copy hosting on #472's R715 eleven-stage word: conditional κ ≈ 1.3725502·10⁻³ + +#448's cross-copy slot applied to #472's suppliers: chafreaky's R715 word with shared kernel, target mixing and +retimings in eleven compressed stages (bit), and #448's cross-copy hosted #433 word (complex). Neither local word nor +any schedule, isometry or bridge changes; only the owners of the helper residuals do. + +**Result:** κ = 1372550159367980/10¹⁸ ≈ 1.372550159367980·10⁻³, bit-bound, **+6.23 % over #472** (1.2920996·10⁻³) +and +1.63 % over #469 (1.3505809·10⁻³). + +| supplier | parent saving | this saving | hosted residuals (split) | max child | +| --- | --- | --- | --- | --- | +| bit, m = 78, R = 715, eleven stages, 8 replicas | 1.293771·10⁻³ | **1.374423·10⁻³** | 62,920 (14,612) | 56 | +| complex, m = 73, R = 560 (#448) | 1.437532·10⁻³ | 1.437532·10⁻³ | 40,320 (13,720) | 48 | + +[PROOF.md](PROOF.md) gives the construction, the accounting and the scope. + +## Verify + +```sh +python3 -B research/cross-copy-hosting-r715/verify.py /absolute/new/output # full +python3 -B research/cross-copy-hosting-r715/verify.py /absolute/new/output --quick # skips only #443's inherited exhaustive controls +``` + +- The output directory must not exist. #472's parents need numpy, mpmath, sympy, a C++17 compiler and Boost + headers (`BOOST_INCLUDE`); the new steps use the standard library (scipy only for `--discover`). +- It runs #472's complete `verify.py` (which rebuilds #458's complex supplier and the R715 composition), then both + generators, the independent audit (fifteen mutation controls) and the exact assembly, and compares every value, + the emitted-program digest and the complex template hash with `EXPECTED.json`. + +## Scope and credits + +Conditional, like its parents; the review point is #448's cross-copy slot. Builds on and runs unchanged: #472, #467, +#463 (R715 word: DreamingOfClouds), #458, #454, #451, #443–#445 (chafreaky), #442 (DaysSky), #450 (target mixing), +#441/#440/#436 (eumemic), #434 (Rohan Arun), #433 (icekylinx), #425/#386 (Zhihao Chen), #370 (Dylan Crow), Jacob +Sussman's E8 unit and interfaces. The cross-copy generators, audit and assembly were prepared by higherbeing with +Claude (Anthropic) assistance. diff --git a/research/cross-copy-hosting-r715/SELECTION.json b/research/cross-copy-hosting-r715/SELECTION.json new file mode 100644 index 0000000000..70d70216fc --- /dev/null +++ b/research/cross-copy-hosting-r715/SELECTION.json @@ -0,0 +1,617 @@ +{ + "bit": { + "counts": [ + [ + 0, + 0, + 8, + 417 + ], + [ + 0, + 1, + 4, + 6 + ], + [ + 1, + 2, + 7, + 104 + ], + [ + 1, + 2, + 8, + 119 + ], + [ + 2, + 0, + 4, + 4 + ], + [ + 2, + 1, + 7, + 104 + ], + [ + 2, + 1, + 8, + 637 + ], + [ + 2, + 2, + 4, + 6 + ], + [ + 2, + 3, + 4, + 6 + ], + [ + 2, + 3, + 8, + 104 + ], + [ + 3, + 4, + 4, + 6 + ], + [ + 3, + 4, + 7, + 96 + ], + [ + 3, + 4, + 8, + 123 + ], + [ + 4, + 0, + 8, + 16 + ], + [ + 4, + 2, + 8, + 118 + ], + [ + 4, + 4, + 8, + 499 + ], + [ + 4, + 5, + 8, + 624 + ], + [ + 5, + 6, + 4, + 6 + ], + [ + 5, + 6, + 7, + 104 + ], + [ + 5, + 6, + 8, + 116 + ], + [ + 6, + 3, + 8, + 520 + ], + [ + 6, + 4, + 8, + 14 + ], + [ + 6, + 5, + 4, + 6 + ], + [ + 6, + 7, + 8, + 402 + ], + [ + 6, + 8, + 8, + 321 + ], + [ + 7, + 6, + 8, + 521 + ], + [ + 7, + 8, + 4, + 6 + ], + [ + 7, + 8, + 8, + 316 + ], + [ + 8, + 7, + 4, + 6 + ], + [ + 8, + 7, + 7, + 104 + ], + [ + 8, + 7, + 8, + 235 + ], + [ + 8, + 8, + 7, + 104 + ] + ], + "proxy_saving": 40958.72701043286 + }, + "bit715": { + "counts": [ + [ + 0, + 1, + 8, + 3360 + ], + [ + 1, + 2, + 6, + 88 + ], + [ + 1, + 2, + 8, + 1614 + ], + [ + 2, + 0, + 8, + 4662 + ], + [ + 2, + 1, + 7, + 784 + ], + [ + 2, + 2, + 7, + 784 + ], + [ + 2, + 3, + 7, + 784 + ], + [ + 3, + 4, + 6, + 88 + ], + [ + 3, + 4, + 7, + 784 + ], + [ + 3, + 4, + 8, + 928 + ], + [ + 4, + 0, + 6, + 88 + ], + [ + 4, + 0, + 7, + 784 + ], + [ + 4, + 1, + 8, + 1114 + ], + [ + 4, + 2, + 8, + 3234 + ], + [ + 4, + 3, + 6, + 88 + ], + [ + 4, + 3, + 8, + 4848 + ], + [ + 4, + 5, + 6, + 88 + ], + [ + 5, + 6, + 6, + 88 + ], + [ + 5, + 6, + 8, + 1614 + ], + [ + 6, + 0, + 8, + 186 + ], + [ + 6, + 1, + 6, + 88 + ], + [ + 6, + 1, + 8, + 374 + ], + [ + 6, + 6, + 8, + 3234 + ], + [ + 7, + 8, + 8, + 1680 + ], + [ + 8, + 4, + 8, + 3920 + ], + [ + 8, + 6, + 7, + 777 + ], + [ + 8, + 9, + 8, + 4848 + ], + [ + 8, + 10, + 8, + 1252 + ], + [ + 9, + 5, + 7, + 784 + ], + [ + 9, + 5, + 8, + 4848 + ], + [ + 9, + 6, + 7, + 6 + ], + [ + 9, + 7, + 7, + 784 + ], + [ + 9, + 8, + 8, + 3168 + ], + [ + 9, + 9, + 7, + 784 + ], + [ + 10, + 7, + 6, + 88 + ], + [ + 10, + 7, + 8, + 4848 + ], + [ + 10, + 8, + 6, + 88 + ], + [ + 10, + 8, + 7, + 784 + ], + [ + 10, + 9, + 6, + 88 + ], + [ + 10, + 10, + 6, + 88 + ], + [ + 10, + 10, + 7, + 784 + ], + [ + 10, + 10, + 8, + 236 + ], + [ + 11, + 10, + 8, + 3360 + ] + ], + "proxy_saving": 470531.2626393047 + }, + "complex": { + "counts": [ + [ + 0, + 0, + 9, + 213 + ], + [ + 1, + 2, + 9, + 106 + ], + [ + 2, + 1, + 9, + 213 + ], + [ + 3, + 2, + 9, + 106 + ], + [ + 4, + 3, + 9, + 426 + ], + [ + 5, + 4, + 9, + 106 + ], + [ + 6, + 0, + 9, + 78 + ], + [ + 6, + 2, + 9, + 348 + ], + [ + 7, + 4, + 9, + 106 + ], + [ + 8, + 0, + 9, + 269 + ], + [ + 8, + 1, + 9, + 23 + ], + [ + 8, + 4, + 9, + 348 + ], + [ + 9, + 6, + 9, + 106 + ], + [ + 10, + 1, + 9, + 324 + ], + [ + 10, + 5, + 9, + 316 + ], + [ + 11, + 6, + 9, + 106 + ], + [ + 12, + 3, + 9, + 134 + ], + [ + 12, + 5, + 9, + 87 + ], + [ + 12, + 7, + 9, + 347 + ], + [ + 14, + 6, + 9, + 348 + ], + [ + 14, + 8, + 9, + 78 + ], + [ + 15, + 5, + 9, + 157 + ], + [ + 15, + 8, + 9, + 269 + ], + [ + 16, + 7, + 9, + 213 + ], + [ + 17, + 8, + 9, + 213 + ] + ], + "proxy_saving": 43915.96552502435 + } +} diff --git a/research/cross-copy-hosting-r715/assemble_split11.py b/research/cross-copy-hosting-r715/assemble_split11.py new file mode 100644 index 0000000000..06a12b208c --- /dev/null +++ b/research/cross-copy-hosting-r715/assemble_split11.py @@ -0,0 +1,90 @@ +"""Exact assembly: #472's eleven-stage bit invoice (three-level halving, complete row bound) with the cross-copy hosted +stock, plus #448's cross-copy complex supplier with its #442-style invoice; six bootstrap levels and the 47 strict +outer inequalities. usage: assemble_split11.py VERIFIED472_OUT BIT_DIR COMPLEX_DIR AUDIT.json OUT.json""" +import gzip, hashlib, importlib.util, json, math, sys +from fractions import Fraction as Q +from pathlib import Path +v472, bd, cd, ap, outp = map(Path, sys.argv[1:6]) +parent458 = v472 / 'parent458'; upstream = parent458 / 'parent454/parent451/parent445/parent444/upstream442'; par = upstream / 'parent/changed' +sys.path.insert(0, str(Path(__file__).resolve().parents[1] / 'r740-hosted-rank149/code')) # chafreaky's complete row bound, unchanged +def load(name): + sp = importlib.util.spec_from_file_location('hosted_' + name, par / 'work/pr361/code/engines' / (name + '.py')) + mod = importlib.util.module_from_spec(sp); sp.loader.exec_module(mod); return mod +M, Other, Outer = load('moment'), load('base_two_moment'), load('outer') +import row_bound as RB +audit = json.loads(ap.read_text()); bg = json.loads((bd / 'GLOBAL.json').read_text()); ch = json.loads((cd / 'HOSTED.json').read_text()) +assert audit['template_sha256'] == bg['template_sha256'] and audit['complex_template_sha256'] == ch['template_sha256'] +assert json.loads((upstream / 'RECEIPT.json').read_text())['status'] == 'PASS_FULL_IDLE_AXIS_HOSTING_COMPOSITION' +assert json.loads((v472 / 'RECEIPT.json').read_text())['status'].startswith('PASS_R715') +# ---------------- bit (eleven stages, m=78): #472's invoice with the hosted stock, +1 route factor for the split +P = {int(r): n for r, n in audit['profile'].items()}; m, W = 78, audit['live']; E = sum(P.values()) +geo = json.loads((bd / 'GEOMETRY.json').read_text()); pg = bg +T, L, R, V, K = 8, 11, 715, 120, 5 +assert pg['replicas'] == T and pg['R'] == R +mass = sum(r * z for r, z in P.items()); assert m * W - mass == (2 * K * V - L * 72) * T +physical = W + 9; d = m * m; N = 2 * m +unit = L * T * pg['local_additions'] + pg['bridge_additions'] +J = 8 * T * L * (2 * V + R) + 8 * (2 * K * V * T) + 2 * L * T * R + 2 * pg['copy_erase_episodes'] +high = 16 * (d + 1) ** 2; good = 8 * m * m + 8; compiler = 128 * N ** 3 +selectors = 2 * L * T * ((W - 1) + R * m * (geo['max_route_factors'] + 144 + 3 + (m - 1) + m)) # 144: residual isometry; +3: hosted slot permutation, U_q and the cross-copy split +prefix = int(pg['global_prefix_bound']); charged_prefix = 64 * ((prefix.bit_length() + 63) // 64) +assert prefix < 1 << charged_prefix and charged_prefix == pg['charged_prefix_bits'] and audit['physical_prefix_bits'] == prefix.bit_length() +coefficient = unit + J * high + J * physical + E * (good + compiler) + 16 * m ** 3 + pg['copy_erase_episodes'] + selectors + prefix + 1 +two = (coefficient + 1) ** 3 * (E + 1) ** 3; charged_two = 64 * ((two.bit_length() + 63) // 64) +assert two < 1 << charged_two and 2 * max(P) ** 3 < m ** 3 +assert coefficient < 1 << 100000 and 32 * m * (coefficient + 1) ** 2 < 1 << 210000 +rows = RB.bound(m, physical, max(P), 3); row = rows['complete_row_coefficient']; assert row < 20161 +row_rejected = RB.controls() +root = M.certify(P, m, W, True); c = Q(root['lower']); chi = Q(root['upper']) +fb = 32 * m * m * E +lo, hi = Other.moment(m, W, list(P.items()), c); bl, bh = Other.moment(m, W, [(1, fb)], c); assert hi + bh / 10 ** 16 < 1 +lo2, hi2 = Other.moment(m, W, list(P.items()), chi); bl2, bh2 = Other.moment(m, W, [(1, fb)], chi); assert lo2 + bl2 / 10 ** 16 > 1 +# ---------------- complex (#448's cross-copy hosted #433 word, nine stages, m=73): #442's invoice with the hosted stock +PC = {int(r): n for r, n in audit['complex_profile'].items()}; mc, WC = 73, audit['complex_live']; EC = sum(PC.values()) +massc = sum(r * z for r, z in PC.items()); assert mc * WC - massc == 2496 +rc = M.certify(PC, mc, WC, True); b = Q(int(Q(rc['lower']) * 10 ** 18), 10 ** 18) +fbc = 32 * mc * mc * EC +l3, h3 = Other.moment(mc, WC, list(PC.items()), b); b3, bh3 = Other.moment(mc, WC, [(1, fbc)], b); assert h3 + bh3 / 10 ** 16 < 1 +integ = json.loads((par / 'split-centres/INTEGRATION.json').read_text()); inv = integ['finite_invoice'] +physc = ch['physical']; compilerc = 64 * (mc + 1) ** 3 +pervertex = inv['pervertex'] - integ['physical'] * (64 + 1) + physc * (64 + 1) - integ['live'] + WC +r_ = mc // 2; group = 2 ** (r_ * r_) * math.prod(2 ** (2 * i) - 1 for i in range(1, r_ + 1)); stock = group * physc +smass = group * massc; logical = group * max(pervertex, inv['pervertex']) + 64; router = compilerc * (logical + 1) * (stock + 1) ** 2 +GG, EE, C0 = 1 << 30000, 1 << 100000, 1 << 210000; BB = smass + EE +literal = 2 * GG * stock ** 2 + 8 * smass + 4 * stock + 4 + 32 * mc +assert logical < 1 << 6050 and router < GG and literal < EE and BB < 1 << 100001 and 32 * mc * BB * BB < C0 and 2 * BB + 18 < C0 +depth = 2; assert mc ** depth > 2 * max(PC) ** depth +rowc = depth * stock.bit_length() + 9909 + 252; assert rowc < 20161 +# ---------------- outer assembly exactly as #434's combined.py +eta = beta = Q(1, 10 ** 18); grid = Q(1, 10 ** 18); s = min(c, (1 - beta) * b) - Q(1, 10 ** 24) +assert 0 < s < c and s < (1 - beta) * b +chain = [Q(384599, 10 ** 10)]; cutoffs = [] +def ceil(x): return -((-x.numerator) // x.denominator) +for j in range(6): + old = chain[-1]; a = (1 - s) * s + s * old + gap = min(s - a, 1 - a - s, 1 - a - s * (1 - old), 1 - s); assert old < a < s < 1 - a and gap > 0 + cutoff = max(ceil(36 / gap ** 2), ceil(2 * (4 + charged_two) / gap)); assert cutoff * gap ** 2 >= 36 and cutoff * gap >= 2 * (4 + charged_two) + cutoffs.append(dict(gap=str(gap), cutoff_log2=str(cutoff))); chain.append(a) +q = chain[-1] * (1 - 2 * eta); margin = (1 - eta) * q / (1 + q); ticks = margin / grid; k = grid * ((ticks.numerator - 1) // ticks.denominator) +bridge = {'semantic': {'C0': {'base': 2, 'exponent': 210000}, 'strict_literal_gap': 1}, 'rows': {'degree_gap': Q(10 ** 6) - Q(51 * 20161, 25)}} +a = Outer.assembly(chain[-1], b, bridge, k, eta=eta, beta=beta) +assert len(a['strict_constraints']) == 47 and all(x > 0 for x in a['strict_constraints'].values()) +controls = [] +for name, kk, ee, bb in [('next_grid', k + grid, eta, beta), ('zero_eta', k, Q(0), beta), ('zero_beta', k, eta, Q(0)), ('unit_beta', k, eta, Q(1))]: + try: Outer.assembly(chain[-1], b, bridge, kk, eta=ee, beta=bb) + except AssertionError: controls.append(name) + else: raise AssertionError(name) +parent_k = Q(json.loads((v472 / 'RESULT.json').read_text())['kappa']) +res = dict(status='PASS_CONDITIONAL_CROSS_COPY_ELEVEN_STAGE_R715_ASSEMBLY', kappa=str(k), kappa_decimal=format(float(k), '.18f'), + bit_lower=str(c), complex_lower=str(b), binding_component='bit' if c < (1 - beta) * b else 'complex', + gain_over_pr472_percent=float(100 * (k / parent_k - 1)), + bit=dict(live=W, physical=physical, maxchild=max(P), rank_mass=mass, hosted_residuals=audit['hosted_residuals'], split_residuals=audit['split_residuals'], + prefix_bits=prefix.bit_length(), charged_prefix_bits=charged_prefix, coefficient_bits=coefficient.bit_length(), + three_level_coefficient_bits=two.bit_length(), charged_three_level_coefficient_bits=charged_two, row_coefficient=row, row_controls_rejected=row_rejected), + complex=dict(live=WC, physical=physc, maxchild=max(PC), rank_mass=massc, hosted_residuals=audit['complex_hosted_residuals'], split_residuals=audit['complex_split_residuals'], + physical_stock_bits=stock.bit_length(), router_bits=router.bit_length(), literal_bits=literal.bit_length(), row_coefficient=rowc), + strict_outer_constraints={n: str(x) for n, x in a['strict_constraints'].items()}, outer_controls=controls, bootstrap=cutoffs, + bit_template_sha256=bg['template_sha256'], complex_template_sha256=ch['template_sha256'], emitted_program_sha256=bg['emitted_program_sha256'], + parent_kappa=str(parent_k), additional_interface='PR442 idle-data hosting during untouched windows, with PR448 cross-copy slots (one residual on two copies of one idle child)') +outp.write_text(json.dumps(res, indent=2) + '\n') +print(res['status'], res['kappa_decimal'], 'binding', res['binding_component'], 'gain over #472 %.4f%%' % res['gain_over_pr472_percent']) diff --git a/research/cross-copy-hosting-r715/audit_split.py b/research/cross-copy-hosting-r715/audit_split.py new file mode 100644 index 0000000000..ce80cf4e1d --- /dev/null +++ b/research/cross-copy-hosting-r715/audit_split.py @@ -0,0 +1,158 @@ +"""Independent audit of the two cross-copy hosted templates (no code shared with the generators). +Re-derives the windows from each template's schedule and checks, per replica and invocation: every helper residual has +exactly one owner record; a hosted residual's pieces (one or two) lie on data families of the idle child they name, +inside that child's pending coordinates, on copies of the same child, with piece widths summing to the residual width, +pairwise disjoint per (child, copy), with the invocation strictly inside the window and off the active pair; remainder +children exact; banks tiled exactly (bit) or padded (complex); profile, live stock and deficit 2496 recomputed. +usage: audit_split.py PARENT_CHANGED_DIR BIT_DIR COMPLEX_DIR OUT.json""" +import copy, gzip, hashlib, json, sys +from collections import Counter, defaultdict +from pathlib import Path +V, K, T, L = 120, 4, 8, 9 +DATA = 2 * K * V * T +def wins(events): + last = {}; seen = []; w = {} + for pos, e in enumerate(events): + if e[0] == 'local': seen.append((pos, e[1], e[2])); last[e[2]] = pos + elif e[0] == 'bridge': last[e[1]] = pos; last[e[2]] = pos + else: + lo = last.get(e[2], -1); w[e[1]] = {s for q, s, p in seen if lo < q < pos and p != e[2]} + return w +def check_pieces(hs, W, rank, widths, copies): + used = defaultdict(set); hosted = {} + for s, h, i, segs in hs['pieces']: + assert s in W[i], ('window', i, s); assert 1 <= len(segs) <= 2 + assert sum(w for _, _, w in segs) == widths[h] and all(w > 0 for _, _, w in segs) + for cp, off, w in segs: + assert 0 <= cp < copies and 0 <= off and off + w <= rank[i] + cells = set(range(off, off + w)); assert not cells & used[i, cp], ('overlap', i, cp); used[i, cp] |= cells + assert (s, h) not in hosted; hosted[s, h] = (i, segs) + return used, hosted +def audit_bit(t, parent_t, widths): + assert t['local_programs'] == parent_t['local_programs'] and len(t['calls']) == 72 + ev = []; rank = {}; pair = {} + for e in t['schedule']: + if e['kind'] == 'local_cover_sweep': ev.append(('local', e['stage'], e['pair'])) + elif e['kind'] == 'bridge': ev.append(('bridge', e['dst'], e['src'])) + elif e['kind'] == 'idle': ev.append(('idle', e['idx'], e['pair'])); rank[e['idx']] = e['rank']; pair[e['idx']] = e['pair'] + W = wins(ev); hs = t['hosting'] + used, hosted = check_pieces(hs, W, rank, widths, 2 * V) + rem = {} + for i in rank: + if rank[i] == 0: continue + for cp in range(2 * V): rem[i, cp] = rank[i] - len(used[i, cp]) + rr = Counter(rem[i, cp] for cp in range(2 * V)) + if str(i) in hs['remainders']: assert {int(k): v for k, v in hs['remainders'][str(i)].items()} == dict(rr) + else: assert rr == Counter({rank[i]: 2 * V}) + occ = defaultdict(set); LIVE = t['live'] + for c in t['calls']: + s, rep, p = c['stage'], c['replica'], c['pair']; own = c['owners']; assert len(own) == 2 * V + len(widths) + assert own[:2 * V] == next(q for q in parent_t['calls'] if (q['stage'], q['replica']) == (s, rep))['owners'][:2 * V] + for h, (f, r) in enumerate(own[2 * V:]): + if (s, h) in hosted: + i, segs = hosted[s, h]; fam = lambda cp: rep * 960 + (2 * pair[i] + cp // V) * V + cp % V + assert pair[i] != p + if len(segs) == 1: + cp, off, w = segs[0]; assert r == ['hosted', i, off, w] and f == fam(cp) + else: + (c1, o1, w1), (c2, o2, w2) = segs; assert c1 != c2 + assert r == ['hosted-split', i, o1, w1, fam(c2), o2, w2] and f == fam(c1) + else: + assert r[0] == 'bank' and r[2] == widths[h] and DATA <= f < LIVE + cells = set(range(r[1], r[1] + r[2])); assert cells <= set(range(64)) and not cells & occ[f]; occ[f] |= cells + banks = sorted(occ); assert banks == list(range(DATA, LIVE)) and all(occ[f] == set(range(64)) for f in banks) + paid = Counter() + for c in t['calls']: + for z in t['local_programs'][c['orientation']]: + if z[0] == 0 and z[4]: paid[z[4]] += 1 + if z[0] == 2: paid[z[5]] += 1 + for (i, cp), r_ in rem.items(): + if r_: paid[r_] += T + mass = sum(r * n for r, n in paid.items()); assert 64 * LIVE - mass == 2496 + assert 64 * 64 > 2 * max(paid) ** 2 + return paid, len(hosted) * T, sum(1 for _, segs in hosted.values() if len(segs) == 2) * T +def audit_complex(t, parent_t, local_checks): + R = 560; m = 73 + assert t['local_programs'] == parent_t['local_programs'] and len(t['calls']) == 72 + prank = {} + for it in parent_t['idle_children']: prank.setdefault(it['child'], it['rank']) + stage_pair = {e['stage']: e['pair'] for e in t['recipe'] if e['kind'] == 'local'} + ev = []; side = {}; pairs = {} + for e in t['execution_schedule']: + if e['kind'] == 'local_cover_sweep': ev.append(('local', e['stage'], stage_pair[e['stage']])) + elif e['kind'] == 'bridge': ev.append(('bridge', e['dst'], e['src'])) + elif e['kind'] == 'idle_cover_sweep': + for sd, ch in enumerate(e['child_indices']): + if ch in prank: ev.append(('idle', ch, e['pair'])); side[ch] = sd; pairs[ch] = e['pair'] + W = wins(ev); hs = t['hosting'] + used, hosted = check_pieces(hs, W, prank, [9] * R, V) + rem = {} + for it in parent_t['idle_children']: rem[it['child'], it['port']] = it['rank'] - len(used[it['child'], it['port']]) + got = {(it['child'], it['port']): it['rank'] for it in t['idle_children']} + assert got == {k: r for k, r in rem.items() if r} and all(it['replicas'] == T for it in t['idle_children']) + LIVE = t['live']; occ = defaultdict(set) + for c in t['calls']: + s, rep, p = c['stage'], c['replica'], c['pair']; own = c['owners']; assert len(own) == 2 * V + R + assert own[:2 * V] == next(q for q in parent_t['calls'] if (q['stage'], q['replica']) == (s, rep))['owners'][:2 * V] + for h, (f, r) in enumerate(own[2 * V:]): + if (s, h) in hosted: + i, segs = hosted[s, h]; fam = lambda port: rep * 960 + (2 * pairs[i] + side[i]) * V + port + assert pairs[i] != p + if len(segs) == 1: + port, off, w = segs[0]; assert r == [3, i, off] and f == fam(port) and w == 9 + else: + (p1, o1, w1), (p2, o2, w2) = segs; assert p1 != p2 + assert r == [5, i, o1, w1, fam(p2), o2, w2] and f == fam(p1) + else: + assert r[0] == 2 and 0 <= r[1] < 8 and DATA <= f < LIVE and r[1] not in occ[f]; occ[f].add(r[1]) + banks = sorted(occ); assert banks == list(range(DATA, LIVE)) + paid = Counter() + for c in t['calls']: + for r_, z in local_checks[c['orientation']]['paid_profile'].items(): paid[int(r_)] += z + for (ch, port), r_ in rem.items(): + if r_: paid[r_] += T + for f in banks: paid[m - 9 * len(occ[f])] += 1 + mass = sum(r * n for r, n in paid.items()); assert m * LIVE - mass == 2496 + assert m * m > 2 * max(paid) ** 2 + return paid, len(hosted) * T, sum(1 for _, segs in hosted.values() if len(segs) == 2) * T +def main(): + par, bd, cd, outp = map(Path, sys.argv[1:5]) + pbt = json.loads(gzip.decompress((par / 'bit426-source-centres/global/GLOBAL-TEMPLATE.json.gz').read_bytes())) + bt = json.loads(gzip.decompress((bd / 'GLOBAL-TEMPLATE.json.gz').read_bytes())); bg = json.loads((bd / 'GLOBAL.json').read_text()) + assert hashlib.sha256(gzip.decompress((bd / 'GLOBAL-TEMPLATE.json.gz').read_bytes())).hexdigest() == bg['template_sha256'] + st = json.loads((par / 'bit426-source-centres/records/249-states.json').read_text()) + fs = json.loads((par / 'bit426-source-centres/records/frames.json').read_text())['frames'] + widths = [8 - fs[str(st['initial'][str(i)])]['dim'] for i in range(240, 987)] + pct = json.loads(gzip.decompress((par / 'split-centres/GLOBAL-TEMPLATE.json.gz').read_bytes())) + ct = json.loads(gzip.decompress((cd / 'GLOBAL-TEMPLATE.json.gz').read_bytes())); ch = json.loads((cd / 'HOSTED.json').read_text()) + assert hashlib.sha256(gzip.decompress((cd / 'GLOBAL-TEMPLATE.json.gz').read_bytes())).hexdigest() == ch['template_sha256'] + lc = json.loads((par / 'split-centres/LOCAL-CHECKS.json').read_text()) + bp, bh, bs = audit_bit(bt, pbt, widths); assert bp == Counter({int(k): v for k, v in bg['profile'].items()}) + cp, chh, cs = audit_complex(ct, pct, lc); assert cp == Counter({int(k): v for k, v in ch['global_profile'].items()}) + controls = [] + def reject(name, fn, which): + q = copy.deepcopy(bt if which == 'bit' else ct); fn(q) + try: (audit_bit(q, pbt, widths) if which == 'bit' else audit_complex(q, pct, lc)) + except (AssertionError, KeyError, IndexError, StopIteration, ValueError): controls.append(name) + else: raise AssertionError('mutation accepted: ' + name) + def first_split(q): return next(pc for pc in q['hosting']['pieces'] if len(pc[3]) == 2) + def outside(q): + pc = q['hosting']['pieces'][0]; pc[0] = next(s for s in range(9) if s not in q['hosting']['windows'][str(pc[2])][2]) + reject('bit: hosted residual outside its window', outside, 'bit') + reject('bit: split piece widths do not sum to the residual width', lambda q: first_split(q)[3][1].__setitem__(2, first_split(q)[3][1][2] + 1), 'bit') + reject('bit: split pieces on two different children', lambda q: (lambda pc: q['hosting']['pieces'].__setitem__(q['hosting']['pieces'].index(pc), [pc[0], pc[1], (pc[2] + 1) % 9 if (pc[2] + 1) % 9 in [int(k) for k in q['hosting']['windows']] else 0, pc[3]]))(first_split(q)), 'bit') + reject('bit: overlapping hosted coordinates', lambda q: q['hosting']['pieces'][1][3][0].__setitem__(1, q['hosting']['pieces'][0][3][0][1]) if q['hosting']['pieces'][1][3][0][0] == q['hosting']['pieces'][0][3][0][0] and q['hosting']['pieces'][1][2] == q['hosting']['pieces'][0][2] else q['hosting']['pieces'][1][3][0].__setitem__(0, q['hosting']['pieces'][0][3][0][0]) or q['hosting']['pieces'][1][3][0].__setitem__(1, q['hosting']['pieces'][0][3][0][1]), 'bit') + reject('bit: understated live stock', lambda q: q.__setitem__('live', q['live'] - 1), 'bit') + reject('bit: hosted owner on the active pair', lambda q: q['calls'][0]['owners'].__setitem__(240 + next(h for h in range(747) if q['calls'][0]['owners'][240 + h][1][0] == 'hosted'), [0, ['hosted', 0, 0, 8]]), 'bit') + reject('bit: missing remainder child', lambda q: q['hosting']['pieces'].pop(), 'bit') + reject('complex: hosted residual outside its window', outside, 'complex') + reject('complex: split piece widths do not sum to nine', lambda q: first_split(q)[3][0].__setitem__(2, first_split(q)[3][0][2] + 1), 'complex') + reject('complex: remainder child understated', lambda q: q['idle_children'][0].__setitem__('rank', q['idle_children'][0]['rank'] - 1), 'complex') + reject('complex: dropped bank', lambda q: q.__setitem__('live', q['live'] - 1), 'complex') + reject('complex: duplicated hosted residual', lambda q: q['hosting']['pieces'].append(list(q['hosting']['pieces'][0])), 'complex') + res = dict(status='PASS_INDEPENDENT_CROSS_COPY_HOSTING_AUDIT', bit_template_sha256=bg['template_sha256'], complex_template_sha256=ch['template_sha256'], + bit_profile={str(k): v for k, v in sorted(bp.items())}, complex_profile={str(k): v for k, v in sorted(cp.items())}, + bit_live=bt['live'], complex_live=ct['live'], bit_hosted_residuals=bh, complex_hosted_residuals=chh, + bit_split_residuals=bs, complex_split_residuals=cs, bit_maxchild=max(bp), complex_maxchild=max(cp), mutations_rejected=controls) + outp.write_text(json.dumps(res, indent=2) + '\n'); print(json.dumps({k: v for k, v in res.items() if 'profile' not in k})) +if __name__ == '__main__': main() diff --git a/research/cross-copy-hosting-r715/audit_split11.py b/research/cross-copy-hosting-r715/audit_split11.py new file mode 100644 index 0000000000..02010b9109 --- /dev/null +++ b/research/cross-copy-hosting-r715/audit_split11.py @@ -0,0 +1,136 @@ +"""Independent audit of the cross-copy hosted eleven-stage R715 bit template (8 pooled replicas) and of the cross-copy +hosted complex template; no code shared with the generators. +usage: audit_split11.py PARENT_BIT_DIR LOCAL_DIR BIT_DIR UPSTREAM442_CHANGED COMPLEX_DIR OUT.json""" +import copy, gzip, hashlib, json, sys +from collections import Counter, defaultdict +from pathlib import Path +sys.path.insert(0, str(Path(__file__).resolve().parent)) +from audit_split import audit_complex, check_pieces, wins +V, K, L, T, R, M = 120, 5, 11, 8, 715, 78 +LOCAL = 2 * V + R; DATA = 2 * K * V * T +def digest(t): + h = hashlib.sha256(); n = 0 + for call in t['calls']: + for z in t['local_programs'][call['orientation']]: + x = [z[0], call['owners'][z[1]]] + if z[0] == 0: x.extend(z[2:]) + else: x.append(call['owners'][z[2]] if z[2] < LOCAL else [t['live'], ['private', 0]]); x.extend(z[3:]) + h.update(json.dumps(x, separators=(',', ':')).encode()); h.update(b'\n'); n += 1 + return h.hexdigest(), n +def prefix_bits(t): + live = t['live']; norm = [1] * live + [0]; prefix = 1; callmap = {(c['stage'], c['replica']): c for c in t['calls']} + fams = lambda o: [o[0]] + ([o[1][4]] if o[1][0] == 'hosted-split' else []) + for e in t['schedule']: + if e['kind'] == 'local_cover_sweep': + for rep in range(T): + call = callmap[e['stage'], rep]; own = call['owners'] + for z in t['local_programs'][call['orientation']]: + if z[0] == 0: continue + xs = fams(own[z[1]]); ys = fams(own[z[2]]) if z[2] < LOCAL else [live] + if z[0] == 1: + inc = abs(z[3]) * max(norm[y] for y in ys) + for x in xs: norm[x] += inc; prefix = max(prefix, norm[x]) + elif z[0] == 2: norm[live] = max(norm[x] for x in xs); prefix = max(prefix, norm[live]) + else: norm[live] = 0 + elif e['kind'] == 'bridge': + d, ss = e['dst'], e['src'] + for rep in range(T): + for port in range(V): + for x, y in [(rep * 1200 + 2 * d * V + port, rep * 1200 + 2 * ss * V + port), (rep * 1200 + (2 * ss + 1) * V + port, rep * 1200 + (2 * d + 1) * V + port)]: + norm[x] += norm[y]; prefix = max(prefix, norm[x]) + assert norm[live] == 0 + return prefix.bit_length() +def audit_bit(t, parent_t, widths): + mutable = {'version', 'live', 'hosting', 'helper_route', 'calls', 'schedule'} + assert set(t) == set(parent_t) + assert {k: v for k, v in t.items() if k not in mutable} == {k: v for k, v in parent_t.items() if k not in mutable} + assert t['replicas'] == T and t['m'] == M and t['stages'] == L and t['live'] == DATA and len(t['calls']) == L * T + assert t['schedule'] == parent_t['schedule'] + ev = []; rank = {}; pair = {} + for e in t['schedule']: + if e['kind'] == 'local_cover_sweep': ev.append(('local', e['stage'], e['pair'])) + elif e['kind'] == 'bridge': ev.append(('bridge', e['dst'], e['src'])) + elif e['kind'] == 'idle': ev.append(('idle', e['idx'], e['pair'])); rank[e['idx']] = e['rank']; pair[e['idx']] = e['pair'] + W = wins(ev); hs = t['hosting']; copies = 2 * V * T + assert hs['windows'] == {str(i): [pair[i], rank[i], sorted(W[i])] for i in W if rank[i] > 0 and W[i]} + wid = [widths[h % R] for h in range(R * T)] + used, hosted = check_pieces(hs, W, rank, wid, copies) + assert set(hosted) == {(s, h) for s in range(L) for h in range(R * T)} + rem = {} + for i in rank: + if rank[i] == 0: continue + for cp in range(copies): rem[i, cp] = rank[i] - len(used[i, cp]) + rr = Counter(rem[i, cp] for cp in range(copies)) + if str(i) in hs['remainders']: assert {int(k): v for k, v in hs['remainders'][str(i)].items()} == dict(rr) + else: assert rr == Counter({rank[i]: copies}) + assert {(c['stage'], c['replica']) for c in t['calls']} == {(s, r) for s in range(L) for r in range(T)} + fam = lambda i, cp: (cp // (2 * V)) * (2 * K * V) + (2 * pair[i] + (cp % (2 * V)) // V) * V + cp % V + for c, pc in zip(t['calls'], parent_t['calls']): + assert {k: v for k, v in c.items() if k != 'owners'} == {k: v for k, v in pc.items() if k != 'owners'} + s, rep, p = c['stage'], c['replica'], c['pair']; own = c['owners']; assert len(own) == LOCAL and own[:2 * V] == pc['owners'][:2 * V] + for r, (f, rt) in enumerate(own[2 * V:]): + i, segs = hosted[s, rep * R + r]; assert pair[i] != p and 0 <= f < DATA + if len(segs) == 1: + cp, off, w = segs[0]; assert rt == ['hosted', i, off, w] and f == fam(i, cp) + else: + (c1, o1, w1), (c2, o2, w2) = segs; assert c1 != c2 + assert rt == ['hosted-split', i, o1, w1, fam(i, c2), o2, w2] and f == fam(i, c1) + assert len({(f, tuple(rt)) for f, rt in own}) == LOCAL + paid = Counter() + for c in t['calls']: + for z in t['local_programs'][c['orientation']]: + if z[0] == 0 and z[4]: paid[z[4]] += 1 + if z[0] == 2: paid[z[5]] += 1 + for (i, cp), r_ in rem.items(): + if r_: paid[r_] += 1 + mass = sum(r * n for r, n in paid.items()); assert M * DATA - mass == (2 * K * V - L * 72) * T + assert M ** 3 > 2 * max(paid) ** 3 + return paid, len(hosted), sum(1 for _, segs in hosted.values() if len(segs) == 2) +def main(): + par, local, bd, chg, cd, outp = map(Path, sys.argv[1:7]) + tpl = lambda p: json.loads(gzip.decompress(Path(p).read_bytes())) + pbt = tpl(par / 'GLOBAL-TEMPLATE.json.gz'); pg = json.loads((par / 'GLOBAL.json').read_text()) + bt = tpl(bd / 'GLOBAL-TEMPLATE.json.gz'); bg = json.loads((bd / 'GLOBAL.json').read_text()) + th = hashlib.sha256(gzip.decompress((bd / 'GLOBAL-TEMPLATE.json.gz').read_bytes())).hexdigest() + assert th == bg['template_sha256'] and bg['parent_template_sha256'] == pg['template_sha256'] + st = json.loads((local / 'records/249-states.json').read_text()); fs = json.loads((local / 'records/frames.json').read_text())['frames'] + widths = [8 - fs[str(st['initial'][str(h)])]['dim'] for h in range(2 * V, LOCAL)] + bp, bh, bs = audit_bit(bt, pbt, widths); assert bp == Counter({int(k): v for k, v in bg['profile'].items()}) + assert bg['hosted_residuals'] == bh and bg['live'] == bt['live'] and bg['split_residuals'] == bs + dg, n = digest(bt); assert dg == bg['emitted_program_sha256'] and n == bg['emitted_events'] == pg['emitted_events'] and dg != pg['emitted_program_sha256'] + pb = prefix_bits(bt); assert pb == bg['global_prefix_bits'] + pct = tpl(chg / 'split-centres/GLOBAL-TEMPLATE.json.gz'); ct = tpl(cd / 'GLOBAL-TEMPLATE.json.gz'); ch = json.loads((cd / 'HOSTED.json').read_text()) + assert hashlib.sha256(gzip.decompress((cd / 'GLOBAL-TEMPLATE.json.gz').read_bytes())).hexdigest() == ch['template_sha256'] + lc = json.loads((chg / 'split-centres/LOCAL-CHECKS.json').read_text()) + cp, chh, cs = audit_complex(ct, pct, lc); assert cp == Counter({int(k): v for k, v in ch['global_profile'].items()}) + controls = [] + def reject(name, fn, which): + q = copy.deepcopy(bt if which == 'bit' else ct); fn(q) + try: (audit_bit(q, pbt, widths) if which == 'bit' else audit_complex(q, pct, lc)) + except (AssertionError, KeyError, IndexError, StopIteration, ValueError, TypeError): controls.append(name) + else: raise AssertionError('mutation accepted: ' + name) + def first_split(q): return next(pc for pc in q['hosting']['pieces'] if len(pc[3]) == 2) + def outside(q): + pc = q['hosting']['pieces'][0]; pc[0] = next(s for s in range(L) if s not in q['hosting']['windows'][str(pc[2])][2]) + reject('bit: hosted residual outside its window', outside, 'bit') + reject('bit: split piece widths do not sum to the residual width', lambda q: first_split(q)[3][1].__setitem__(2, first_split(q)[3][1][2] + 1), 'bit') + reject('bit: split pieces on two different children', lambda q: first_split(q).__setitem__(2, (first_split(q)[2] + 1) % len(q['hosting']['windows'])), 'bit') + reject('bit: overlapping hosted coordinates', lambda q: q['hosting']['pieces'][1][3][0].__setitem__(0, q['hosting']['pieces'][0][3][0][0]) or q['hosting']['pieces'][1][3][0].__setitem__(1, q['hosting']['pieces'][0][3][0][1]), 'bit') + reject('bit: overstated live stock', lambda q: q.__setitem__('live', q['live'] + 1), 'bit') + reject('bit: hosted owner on the active pair', lambda q: q['calls'][0]['owners'].__setitem__(240, [q['calls'][0]['pair'] * V * 2, ['hosted', 0, 0, 8]]), 'bit') + reject('bit: missing hosted residual', lambda q: q['hosting']['pieces'].pop(), 'bit') + reject('bit: changed idle rank', lambda q: next(e for e in q['schedule'] if e['kind'] == 'idle').__setitem__('rank', 1), 'bit') + reject('bit: wrong owner family', lambda q: q['calls'][0]['owners'].__setitem__(241, [q['calls'][0]['owners'][241][0] + 1, q['calls'][0]['owners'][241][1]]), 'bit') + reject('bit: changed local program', lambda q: q['local_programs']['forward'].pop(), 'bit') + reject('complex: hosted residual outside its window', outside, 'complex') + reject('complex: split piece widths do not sum to nine', lambda q: first_split(q)[3][0].__setitem__(2, first_split(q)[3][0][2] + 1), 'complex') + reject('complex: remainder child understated', lambda q: q['idle_children'][0].__setitem__('rank', q['idle_children'][0]['rank'] - 1), 'complex') + reject('complex: dropped bank', lambda q: q.__setitem__('live', q['live'] - 1), 'complex') + reject('complex: duplicated hosted residual', lambda q: q['hosting']['pieces'].append(list(q['hosting']['pieces'][0])), 'complex') + res = dict(status='PASS_INDEPENDENT_CROSS_COPY_ELEVEN_STAGE_AUDIT', template_sha256=th, emitted_program_sha256=dg, emitted_events=n, + profile={str(k): v for k, v in sorted(bp.items())}, live=bt['live'], physical=bt['live'] + 9, hosted_residuals=bh, split_residuals=bs, + physical_prefix_bits=pb, rank_mass=sum(r * z for r, z in bp.items()), deficit=(2 * K * V - L * 72) * T, maxchild=max(bp), + complex_template_sha256=ch['template_sha256'], complex_profile={str(k): v for k, v in sorted(cp.items())}, complex_live=ct['live'], + complex_hosted_residuals=chh, complex_split_residuals=cs, complex_maxchild=max(cp), mutations_rejected=controls) + outp.write_text(json.dumps(res, indent=2) + '\n'); print(json.dumps({k: v for k, v in res.items() if 'profile' not in k})) +if __name__ == '__main__': main() diff --git a/research/cross-copy-hosting-r715/bit_split11.py b/research/cross-copy-hosting-r715/bit_split11.py new file mode 100644 index 0000000000..ad54bf2925 --- /dev/null +++ b/research/cross-copy-hosting-r715/bit_split11.py @@ -0,0 +1,131 @@ +"""Cross-copy idle-axis hosting for #472's eleven-stage R715 bit template (m=78, K=5, 8 pooled replicas). +Reads #472's emitted whole-hosted template (code/emit.py output), keeps every local program, data owner, isometry +and bridge, and re-hosts every helper residual on the tape of each child's 2V*T pooled copies; a residual may be +split across two copies of the same child. Recomputes paid profile, remainders, emitted digest and the physical +prefix bound. usage: bit_split11.py PARENT_BIT_DIR LOCAL_DIR OUT [--discover]""" +import gzip, hashlib, json, math, sys, time +from collections import Counter +from pathlib import Path +HERE = Path(__file__).resolve().parent; sys.path.insert(0, str(HERE)) +import tape_core as TC +H, V, R, L, K, T, M = 8, 120, 715, 11, 5, 8, 78 +LOCAL = 2 * V + R; DATA = 2 * K * V * T; LIVE = DATA +DISCOVER = False +def digest(t): + h = hashlib.sha256(); n = 0 + for call in t['calls']: + own = call['owners'] + for z in t['local_programs'][call['orientation']]: + if z[0] == 0: x = [z[0], own[z[1]], *z[2:]] + else: x = [z[0], own[z[1]], own[z[2]] if z[2] < LOCAL else [t['live'], ['private', 0]], *z[3:]] + h.update((json.dumps(x, separators=(',', ':')) + '\n').encode()); n += 1 + return h.hexdigest(), n +def prefix_bound(t): + """physical-family norm growth in chronological order; a split owner updates both of its families""" + live = t['live']; norm = [1] * live + [0]; prefix = 1 + callmap = {(c['stage'], c['replica']): c for c in t['calls']} + fams = lambda o: [o[0]] + ([o[1][4]] if o[1][0] == 'hosted-split' else []) + for e in t['schedule']: + if e['kind'] == 'local_cover_sweep': + for rep in range(T): + call = callmap[e['stage'], rep]; own = call['owners'] + for z in t['local_programs'][call['orientation']]: + op = z[0] + if op == 0: continue + xs = fams(own[z[1]]); ys = fams(own[z[2]]) if z[2] < LOCAL else [live] + if op == 1: + inc = abs(z[3]) * max(norm[y] for y in ys) + for x in xs: norm[x] += inc; prefix = max(prefix, norm[x]) + elif op == 2: norm[live] = max(norm[x] for x in xs); prefix = max(prefix, norm[live]) + else: norm[live] = 0 + elif e['kind'] == 'bridge': + d, ss = e['dst'], e['src'] + for rep in range(T): + for port in range(V): + for x, y in [(rep * 1200 + 2 * d * V + port, rep * 1200 + 2 * ss * V + port), (rep * 1200 + (2 * ss + 1) * V + port, rep * 1200 + (2 * d + 1) * V + port)]: + norm[x] += norm[y]; prefix = max(prefix, norm[x]) + assert norm[live] == 0 + return prefix +def main(parent, local, out): + t0 = time.monotonic(); out.mkdir(parents=True, exist_ok=False) + blob = gzip.decompress((parent / 'GLOBAL-TEMPLATE.json.gz').read_bytes()); t = json.loads(blob) + g = json.loads((parent / 'GLOBAL.json').read_text()); assert hashlib.sha256(blob).hexdigest() == g['template_sha256'] + assert g['replicas'] == T and g['R'] == R and t['m'] == M and t['stages'] == L + st = json.loads((local / 'records/249-states.json').read_text()) + fs = json.loads((local / 'records/frames.json').read_text())['frames']; dims = {int(f): z['dim'] for f, z in fs.items()} + width = [H - dims[st['initial'][str(i)]] for i in range(2 * V, LOCAL)] + sched = []; idx = 0 + for e in t['schedule']: + if e['kind'] == 'local_cover_sweep': sched.append(dict(kind='local', stage=e['stage'], pair=e['pair'])) + elif e['kind'] == 'bridge': sched.append(dict(kind='bridge', dst=e['dst'], src=e['src'])) + elif e['kind'] == 'idle': assert e['idx'] == idx; sched.append(dict(kind='idle', pair=e['pair'], rank=e['rank'], idx=idx)); idx += 1 + win = {k: x for k, x in TC.windows(sched).items() if x[1] > 0 and x[2]} + copies = 2 * V * T # pooled: every copy of every replica is a host + avail = Counter() + for s in range(L): + for rep in range(T): + for w in width: avail[s, w] += 1 + sel = HERE / 'SELECTION.json'; key = 'bit715' + if DISCOVER: + counts, val = TC.solve(win, copies, dict(avail), M, sorted({w for (_, w) in avail}, reverse=True), dict(vars=lambda st: [], rows=lambda *a: [])) + TC.save(sel, key, counts, val) + counts, val = TC.load(sel, key) + # complete the integer programme's choice: place any residual it left out on an in-window child with room (largest ln(m/r) first) + hostedc = Counter(); usedc = Counter() + for (i, s, w), n in counts.items(): hostedc[s, w] += n; usedc[i] += w * n + for (s, w), a in sorted(avail.items()): + for _ in range(a - hostedc[s, w]): + i = max((i for i in win if s in win[i][2] and usedc[i] + w <= win[i][1] * copies), key=lambda i: math.log(M / win[i][1])) + counts[i, s, w] = counts.get((i, s, w), 0) + 1; usedc[i] += w + helpers = {s: [(i, width[i % R]) for i in range(R * T)] for s in range(L)} # helper index i = rep*R + r + pieces, rem = TC.expand(win, counts, helpers, copies) + assert len(pieces) == L * R * T, ('every residual must be hosted', len(pieces), L * R * T) + split = 0 + fam = lambda i, cp: (lambda owner_rep, within: owner_rep * (2 * K * V) + (2 * win[i][0] + within // V) * V + within % V)(*divmod(cp, 2 * V)) + for c in t['calls']: + s, rep, p = c['stage'], c['replica'], c['pair']; own = c['owners'][:2 * V] + for r in range(R): + i, segs = pieces[s, rep * R + r]; assert win[i][0] != p + if len(segs) == 1: + cp, off, w = segs[0]; own.append([fam(i, cp), ['hosted', i, off, w]]) + else: + (c1, o1, w1), (c2, o2, w2) = segs; own.append([fam(i, c1), ['hosted-split', i, o1, w1, fam(i, c2), o2, w2]]); split += 1 + assert len({(f, tuple(rt)) for f, rt in own}) == LOCAL and all(0 <= f < LIVE for f, rt in own) + c['owners'] = own + paid = Counter() + for c in t['calls']: + for z in t['local_programs'][c['orientation']]: + if z[0] == 0 and z[4]: paid[z[4]] += 1 + if z[0] == 2: paid[z[5]] += 1 + remainder = {} + for e in t['schedule']: + if e['kind'] == 'idle' and e['rank']: + i = e['idx'] + if i in win: + rr = Counter(rem[i, cp] for cp in range(copies)); remainder[str(i)] = {str(k): v for k, v in sorted(rr.items())} + for r_, n in rr.items(): + if r_: paid[r_] += n + else: paid[e['rank']] += copies + mass = sum(r * n for r, n in paid.items()); deficit = (2 * K * V - L * 72) * T; assert M * LIVE - mass == deficit, (M * LIVE - mass, deficit) + t.update(version=t['version'] + '+cross-copy', live=LIVE, + hosting=dict(windows={str(i): [w[0], w[1], sorted(w[2])] for i, w in win.items()}, + pieces=[[s, h, i, [list(x) for x in segs]] for (s, h), (i, segs) in sorted(pieces.items())], remainders=remainder, + rule='helper (stage s, replica-helper index h = rep*R + r) owns, on the pending idle-child projector of child i, the coordinates ' + '[off, off+w) of pooled copy cp (owner replica cp // 240, side/port cp % 240) for each piece; one or two pieces on two copies of ' + 'the same child; s strictly inside the window; the child keeps the remaining coordinates.'), + helper_route='hosted owner (one or two data families of one idle child, in any replica, pending idle coordinates; exact residual isometry then the slot placement)') + prefix = prefix_bound(t); charged_prefix = 64 * ((prefix.bit_length() + 63) // 64) + tb = json.dumps(t, separators=(',', ':'), sort_keys=True).encode(); (out / 'GLOBAL-TEMPLATE.json.gz').write_bytes(gzip.compress(tb, mtime=0)) + dg, nev = digest(t) + res = dict(g); res.update(status='PASS_CROSS_COPY_HOSTED_ELEVEN_STAGE_BIT_TEMPLATE', live=LIVE, physical=LIVE + 9, template_sha256=hashlib.sha256(tb).hexdigest(), + parent_template_sha256=g['template_sha256'], profile=dict(sorted(paid.items())), paid_calls=sum(paid.values()), rank_mass=mass, deficit=deficit, + maxchild=max(paid), halving_integer_inequality=[M ** 3, 2 * max(paid) ** 3], hosted_residuals=len(pieces), split_residuals=split, + hosted_coordinates=sum(sum(w for _, _, w in segs) for _, segs in pieces.values()), saved_idle_cost_proxy=val, + emitted_program_sha256=dg, emitted_events=nev, global_prefix_bound=str(prefix), global_prefix_bits=prefix.bit_length(), charged_prefix_bits=charged_prefix, + seconds=time.monotonic() - t0) + res['scope'] = res.get('scope', '') + ' Cross-copy slots (PR448) are assumed in addition; every window and coordinate ownership is audited.' + (out / 'GLOBAL.json').write_text(json.dumps(res, indent=2) + '\n') + print(json.dumps({k: res[k] for k in ('live', 'maxchild', 'hosted_residuals', 'split_residuals', 'rank_mass', 'profile', 'global_prefix_bits')}), flush=True) +if __name__ == '__main__': + DISCOVER = '--discover' in sys.argv; args = [a for a in sys.argv[1:] if a != '--discover'] + main(Path(args[0]), Path(args[1]), Path(args[2])) diff --git a/research/cross-copy-hosting-r715/complex_split.py b/research/cross-copy-hosting-r715/complex_split.py new file mode 100644 index 0000000000..4de0d0123c --- /dev/null +++ b/research/cross-copy-hosting-r715/complex_split.py @@ -0,0 +1,87 @@ +"""Cross-copy idle-axis hosting for #433's compressed nine-stage complex template (m=73, R=560, rank-nine residuals), +on top of #442's windows. Residuals of a child are laid along the concatenated pending sets of its 120 port copies; +a residual may be split across two ports (two data families of the same child, same window). Unhosted residuals are +re-tiled eight per bank with one paid pad. usage: complex_split.py SPLIT_CENTRES_DIR OUT [--discover]""" +import gzip, hashlib, json, sys, time +from collections import Counter +from pathlib import Path +HERE = Path(__file__).resolve().parent; sys.path.insert(0, str(HERE)) +import tape_core as TC +V, K, T, L, M, R = 120, 4, 8, 9, 73, 560 +DATA = 2 * K * V * T +DISCOVER = False +def main(src, out): + t0 = time.monotonic(); out.mkdir(parents=True, exist_ok=False) + blob = gzip.decompress((src / 'GLOBAL-TEMPLATE.json.gz').read_bytes()); t = json.loads(blob) + integ = json.loads((src / 'INTEGRATION.json').read_text()); checks = json.loads((src / 'LOCAL-CHECKS.json').read_text()) + assert hashlib.sha256(blob).hexdigest() == integ['global_template_sha256'] and t['live'] == integ['live'] + rank = {} + for it in t['idle_children']: + assert it['replicas'] == T; rank.setdefault(it['child'], it['rank']); assert rank[it['child']] == it['rank'] + pair_of_stage = {e['stage']: e['pair'] for e in t['recipe'] if e['kind'] == 'local'} + sched = []; side_of = {}; pair_of = {} + for e in t['execution_schedule']: + if e['kind'] == 'local_cover_sweep': sched.append(dict(kind='local', stage=e['stage'], pair=pair_of_stage[e['stage']])) + elif e['kind'] == 'bridge': sched.append(dict(kind='bridge', dst=e['dst'], src=e['src'])) + elif e['kind'] == 'idle_cover_sweep': + for sd, ch in enumerate(e['child_indices']): + if ch in rank: + sched.append(dict(kind='idle', pair=e['pair'], rank=rank[ch], idx=ch)); side_of[ch] = sd; pair_of[ch] = e['pair'] + win = {k: x for k, x in TC.windows(sched).items() if x[1] > 0 and x[2]} + avail = {(s, 9): R for s in range(L)} + sel = HERE / 'SELECTION.json'; key = 'complex' + if DISCOVER: + counts, val = TC.solve(win, V, avail, M, [9], dict(vars=lambda st: [], rows=lambda *a: [])) + TC.save(sel, key, counts, val) + counts, val = TC.load(sel, key) + pieces, rem = TC.expand(win, counts, {s: [(h, 9) for h in range(R)] for s in range(L)}, V) + base = [DATA]; tile = {}; partial = Counter() + for s in range(L): + left = [(rep, h) for rep in range(T) for h in range(R) if (s, h) not in pieces] + for z, (rep, h) in enumerate(left): tile[s, rep, h] = divmod(z, 8) + nb = -(-len(left) // 8); base.append(base[-1] + nb) + if len(left) % 8: partial[M - 9 * (len(left) % 8)] += 1 + partial[M - 72] += len(left) // 8 + W = base[-1]; split = 0 + for c in t['calls']: + s, rep, p = c['stage'], c['replica'], c['pair']; own = c['owners'][:2 * V] + for h in range(R): + if (s, h) in pieces: + i, segs = pieces[s, h]; fam = lambda port: rep * 960 + (2 * pair_of[i] + side_of[i]) * V + port + if len(segs) == 1: + port, off, w = segs[0]; own.append([fam(port), [3, i, off]]) + else: + (p1, o1, w1), (p2, o2, w2) = segs; own.append([fam(p1), [5, i, o1, w1, fam(p2), o2, w2]]); split += 1 + else: + b, sl = tile[s, rep, h]; own.append([base[s] + b, [2, sl]]) + assert len({(f, tuple(r)) for f, r in own}) == 2 * V + R and all(f < W for f, r in own) + c['owners'] = own + paid = Counter() + for c in t['calls']: + for r_, z in checks[c['orientation']]['paid_profile'].items(): paid[int(r_)] += z + newidle = [] + for it in t['idle_children']: + ch, port = it['child'], it['port']; rr = rem.get((ch, port), it['rank']) if ch in win else it['rank'] + if rr: newidle.append(dict(child=ch, port=port, rank=rr, hosted=it['rank'] - rr, replicas=T)); paid[rr] += T + for r_, n in partial.items(): paid[r_] += n + mass = sum(r * n for r, n in paid.items()); D = M * W - mass; assert D == 2496, D + t.update(version='hamming-mutable-basis-nine-v1+idle-axis-hosting+cross-copy', live=W, idle_children=newidle, + physical=W + R + (integ['physical'] - integ['live'] - R), + hosting=dict(windows={str(i): [w[0], w[1], sorted(w[2])] for i, w in win.items()}, sides=side_of, pairs=pair_of, + pieces=[[s, h, i, [list(x) for x in segs]] for (s, h), (i, segs) in sorted(pieces.items())], + banks=[base[s + 1] - base[s] for s in range(L)])) + t['bank_padding']['families'] = list(range(DATA, W)); t['cover_final_correction']['families'] = [0, W] + t['cover_final_correction']['charged_calls_per_cover'] = W + for e in t['execution_schedule']: + if e['kind'] == 'bank_padding_cover_sweep': e['families'] = [DATA, W] + elif e['kind'] == 'translate_every_live_family': e.update(t['cover_final_correction']) + tb = json.dumps(t, sort_keys=True, separators=(',', ':')).encode(); (out / 'GLOBAL-TEMPLATE.json.gz').write_bytes(gzip.compress(tb, mtime=0)) + res = dict(status='PASS_CROSS_COPY_HOSTED_COMPLEX_TEMPLATE', parent_template_sha256=integ['global_template_sha256'], + template_sha256=hashlib.sha256(tb).hexdigest(), live=W, physical=t['physical'], global_profile=dict(sorted(paid.items())), + rank_mass=mass, deficit=D, maxchild=max(paid), hosted_residuals=len(pieces) * T, split_residuals=split, + banks_per_stage=t['hosting']['banks'], saved_cost_proxy=val, seconds=time.monotonic() - t0) + (out / 'HOSTED.json').write_text(json.dumps(res, indent=2) + '\n') + print(json.dumps({k: res[k] for k in ('live', 'maxchild', 'hosted_residuals', 'split_residuals', 'banks_per_stage', 'deficit', 'global_profile')})) +if __name__ == '__main__': + DISCOVER = '--discover' in sys.argv; args = [a for a in sys.argv[1:] if a != '--discover'] + main(Path(args[0]), Path(args[1])) diff --git a/research/cross-copy-hosting-r715/tape_core.py b/research/cross-copy-hosting-r715/tape_core.py new file mode 100644 index 0000000000..b7cea4707b --- /dev/null +++ b/research/cross-copy-hosting-r715/tape_core.py @@ -0,0 +1,95 @@ +"""Cross-copy idle-axis hosting. A child advancing pair j by rank r has, per replica, C copies (data families) with r +pending coordinates each; they share one window. Concatenate the C pending sets into a tape of C*r coordinates and +place whole residuals (stage in window, width w) contiguously; a residual may straddle a copy boundary, in which case +its two pieces are owned by two families of the same child. Integer programme: maximise saved idle cost (first-order +r ln(m/r) proxy) subject to residual availability and exact bank tiling of what is left. Standard library plus scipy +for the solve; a frozen selection replays without scipy.""" +import math, json +from collections import Counter, defaultdict +from pathlib import Path + +def windows(schedule): + last = {}; out = {}; locals_ = [] + for pos, e in enumerate(schedule): + k = e['kind'] + if k == 'local': locals_.append((pos, e['stage'], e['pair'])); last[e['pair']] = pos + elif k == 'bridge': last[e['dst']] = pos; last[e['src']] = pos + elif k == 'idle': + p = e['pair']; lo = last.get(p, -1) + out[e['idx']] = (p, e['rank'], frozenset(s for q, s, pp in locals_ if lo < q < pos and pp != p)) + return out + +def cost(r, m): return r * math.log(m / r) if r else 0.0 + +def solve(win, copies, avail, m, widths, tiling): + """win: {idx: (pair, rank, stages)}; copies per child per replica; avail: {(stage, width): count per replica}; + tiling: function(leftover counts per stage as dict width->var expressions) -> list of (row, lo, hi) built by caller. + Returns counts {(idx, stage, width): n} maximising sum_i ln(m/r_i) * used_i (used_i = coordinates hosted on child i).""" + import numpy as np + from scipy.optimize import milp, LinearConstraint, Bounds + var = []; index = {} + for idx, (p, r, st) in win.items(): + for s in sorted(st): + for w in widths: + if avail.get((s, w), 0): index[(idx, s, w)] = len(var); var.append(('n', idx, s, w)) + stages = sorted({s for (s, _) in avail}) + extra = tiling['vars'](stages) # list of names of integer slack vars + for name in extra: index[name] = len(var); var.append(name) + n = len(var); c = np.zeros(n); lb = np.zeros(n); ub = np.full(n, np.inf) + for key in list(index): + if isinstance(key, tuple) and len(key) == 3 and key[0] in win: + idx, s, w = key; r = win[idx][1]; c[index[key]] = -math.log(m / r) * w + rows, lo, hi = [], [], [] + for idx, (p, r, st) in win.items(): # capacity of the tape + row = np.zeros(n) + for key, j in index.items(): + if isinstance(key, tuple) and len(key) == 3 and key[0] == idx: row[j] = key[2] + rows.append(row); lo.append(0); hi.append(copies * r) + for (s, w), a in avail.items(): # availability and tiling of the leftover + row = np.zeros(n) + for key, j in index.items(): + if isinstance(key, tuple) and len(key) == 3 and key[0] in win and key[1] == s and key[2] == w: row[j] = 1 + rows.append(row); lo.append(0); hi.append(a) + for row, l, h in tiling['rows'](index, n, avail, win): + rows.append(row); lo.append(l); hi.append(h) + res = milp(c, constraints=LinearConstraint(np.array(rows), lo, hi), integrality=np.ones(n), bounds=Bounds(lb, ub), + options=dict(time_limit=600, disp=False)) + assert res.x is not None, res.message + x = [int(round(t)) for t in res.x] + counts = {key: x[j] for key, j in index.items() if isinstance(key, tuple) and len(key) == 3 and key[0] in win and x[j]} + return counts, -res.fun + +def expand(win, counts, helpers, copies): + """helpers: {stage: [(helper, width), ...]} for one replica (sorted). Lay the residuals of each child along the tape + in (stage, helper) order. Returns pieces {(stage, helper): (idx, [(copy, off, w), ...])} and the remainder rank of + every (idx, copy).""" + pool = defaultdict(list) + for s, hs in helpers.items(): + for h, w in hs: pool[s, w].append(h) + for k in pool: pool[k].sort() + pieces = {}; rem = {} + for idx in sorted(win): + p, r, st = win[idx]; pos = 0 + items = [] + for (i2, s, w), cnt in sorted(counts.items()): + if i2 != idx: continue + for _ in range(cnt): items.append((s, w, pool[s, w].pop(0))) + items.sort(key=lambda t: (-t[1], t[0], t[2])) # wide first: fewer straddles + for s, w, h in items: + a, b = pos, pos + w; segs = [] + while a < b: + cp = a // r; end = min(b, (cp + 1) * r); segs.append((cp, a - cp * r, end - a)); a = end + pieces[s, h] = (idx, segs); pos = b + assert pos <= copies * r + for cp in range(copies): + used = max(0, min(r, pos - cp * r)); rem[idx, cp] = r - used + return pieces, rem + +def save(path, key, counts, val): + p = Path(path); d = json.loads(p.read_text()) if p.exists() else {} + d[key] = dict(counts=sorted([[i, s, w, n] for (i, s, w), n in counts.items()]), proxy_saving=val) + p.write_text(json.dumps(d, indent=1, sort_keys=True) + '\n') + +def load(path, key): + d = json.loads(Path(path).read_text())[key] + return {(i, s, w): n for i, s, w, n in d['counts']}, d['proxy_saving'] diff --git a/research/cross-copy-hosting-r715/verify.py b/research/cross-copy-hosting-r715/verify.py new file mode 100644 index 0000000000..c8b1e4ff76 --- /dev/null +++ b/research/cross-copy-hosting-r715/verify.py @@ -0,0 +1,39 @@ +"""Fresh replay: #472 in full (its #458 complex parent and the R715 whole-hosted bit composition), then cross-copy +idle-axis hosting of the R715 eleven-stage bit template and of #442's complex template, independent audit and exact +assembly. usage: python -B research/cross-copy-hosting-r715/verify.py /absolute/new/output [--quick] +(--quick is passed through to #472 and skips only #443's inherited exhaustive negative controls; #472's parent needs +numpy, mpmath, sympy, a C++17 compiler and Boost headers, BOOST_INCLUDE if they are not on the include path.)""" +from pathlib import Path +import gzip, hashlib, json, os, subprocess, sys, time +assert __debug__ +ROOT = Path(__file__).resolve().parent; PARENT = ROOT.parent / 'e8-r715-whole-hosted' +out = Path(sys.argv[1]).resolve(); quick = '--quick' in sys.argv[2:]; assert not out.exists() and not out.is_relative_to(ROOT.parent) +read = lambda p: json.loads(Path(p).read_text()); sha = lambda p: hashlib.sha256(Path(p).read_bytes()).hexdigest() +def integrity(): + files = {p.relative_to(ROOT).as_posix(): sha(p) for p in ROOT.rglob('*') if p.is_file() and p.name != 'MANIFEST.json' and '__pycache__' not in p.parts} + assert files == read(ROOT / 'MANIFEST.json')['files'], 'manifest mismatch' + assert sha(PARENT / 'MANIFEST.json') == read(ROOT / 'MANIFEST.json')['parent_manifest_sha256'], 'parent package changed' +integrity(); out.mkdir(parents=True) +env = dict(os.environ, PYTHONDONTWRITEBYTECODE='1', PYTHONINTMAXSTRDIGITS='0'); env.pop('PYTHONOPTIMIZE', None); steps = [] +def run(name, file, *args, cwd=None): + t = time.monotonic(); log = out / (name + '.log'); print('RUN', name, flush=True) + with log.open('w') as f: q = subprocess.run([sys.executable, '-B', str(file), *map(str, args)], cwd=cwd, env=env, stdout=f, stderr=subprocess.STDOUT) + if q.returncode: raise RuntimeError((name, q.returncode, log.read_text()[-3000:])) + steps.append(dict(name=name, seconds=round(time.monotonic() - t, 1), log_sha256=sha(log))); print('PASS', name, flush=True) +try: + run('parent-472-full', PARENT / 'verify.py', out / 'parent', *(['--quick'] if quick else [])) + rep = out / 'parent'; changed = rep / 'parent458/parent454/parent451/parent445/parent444/upstream442/parent/changed' + run('bit-cross-copy-hosting-r715', ROOT / 'bit_split11.py', rep / 'bit', rep / 'local', out / 'bit') + (out / 'bit/GEOMETRY.json').write_bytes((rep / 'bit/GEOMETRY.json').read_bytes()) + run('complex-cross-copy-hosting', ROOT / 'complex_split.py', changed / 'split-centres', out / 'complex') + run('independent-audit', ROOT / 'audit_split11.py', rep / 'bit', rep / 'local', out / 'bit', changed, out / 'complex', out / 'AUDIT.json') + run('exact-assembly', ROOT / 'assemble_split11.py', rep, out / 'bit', out / 'complex', out / 'AUDIT.json', out / 'RESULT.json') + actual = read(out / 'RESULT.json'); expected = read(ROOT / 'EXPECTED.json') + for k, v in expected.items(): assert actual[k] == v, (k, actual[k], v) + h = hashlib.sha256(gzip.decompress((out / 'complex/GLOBAL-TEMPLATE.json.gz').read_bytes())).hexdigest(); assert h == expected['complex_template_sha256'] + integrity() + receipt = dict(status='PASS_FULL_CROSS_COPY_R715_COMPOSITION', mode='quick' if quick else 'full', kappa=actual['kappa'], kappa_decimal=actual['kappa_decimal'], + gain_over_pr472_percent=actual['gain_over_pr472_percent'], manifest_sha256=sha(ROOT / 'MANIFEST.json'), checks=steps, python=sys.version.split()[0]) + (out / 'RECEIPT.json').write_text(json.dumps(receipt, indent=2) + '\n'); print(json.dumps(receipt, indent=2)) +except BaseException as e: + (out / 'FAILURE.json').write_text(json.dumps(dict(error=repr(e), completed=steps), indent=2) + '\n'); raise diff --git a/research/cross-family-residual-obstruction/EXPECTED.json b/research/cross-family-residual-obstruction/EXPECTED.json new file mode 100644 index 0000000000..149851fe5c --- /dev/null +++ b/research/cross-family-residual-obstruction/EXPECTED.json @@ -0,0 +1,424 @@ +{ + "status": "PASS_CROSS_FAMILY_ROUTE_OBSTRUCTION", + "reviewed_pr": 448, + "reviewed_head": "9b966d8188e1cadd00aa834078ee6a8742a9d9b4", + "bit": [ + { + "q": 3, + "m": 2, + "ranks": [ + 1, + 1 + ], + "dimension": 162, + "whole_trace": 90, + "split_trace": 54, + "same_family_identity": true, + "not_similar_by_trace": true, + "distinct_column": { + "input": [ + 0, + [ + 0, + 0, + 0, + 1 + ] + ], + "whole": [ + 0, + [ + 0, + 1, + 0, + 0 + ] + ], + "split": [ + 0, + [ + 0, + 0, + 0, + 1 + ] + ] + }, + "whole_sha256": "5922ff9046806e99dccc93100cc1e70b6652dea3cae3fba29716c2f8b548af93", + "split_sha256": "94186aaf90f78695c762198e7efdb84eafe12bb782101c8f58f968e6f220c887" + }, + { + "q": 3, + "m": 3, + "ranks": [ + 1, + 1 + ], + "dimension": 1458, + "whole_trace": 810, + "split_trace": 486, + "same_family_identity": true, + "not_similar_by_trace": true, + "distinct_column": { + "input": [ + 0, + [ + 0, + 0, + 0, + 0, + 1, + 0 + ] + ], + "whole": [ + 0, + [ + 0, + 1, + 0, + 0, + 0, + 0 + ] + ], + "split": [ + 0, + [ + 0, + 0, + 0, + 0, + 1, + 0 + ] + ] + }, + "whole_sha256": "a2c7f305cfbbbf85a968b2a4a5ef0aec25e7611cefed9663fe55a07ac070648c", + "split_sha256": "0d323074b120550e07b47c8d09d0c36598d9dc2ad9b4515a64a2217e723bdfc4" + }, + { + "q": 3, + "m": 3, + "ranks": [ + 1, + 2 + ], + "dimension": 1458, + "whole_trace": 756, + "split_trace": 324, + "same_family_identity": true, + "not_similar_by_trace": true, + "distinct_column": { + "input": [ + 0, + [ + 0, + 0, + 0, + 0, + 0, + 1 + ] + ], + "whole": [ + 0, + [ + 0, + 0, + 1, + 0, + 0, + 0 + ] + ], + "split": [ + 0, + [ + 0, + 0, + 0, + 0, + 0, + 1 + ] + ] + }, + "whole_sha256": "1b8041d497b9cd4c7a8591dd9d044c97a7555cb81abc4ba523dfd47cf388a761", + "split_sha256": "6326e20aea48c078df46393f365b9cbe1be0cb8244b13f1dc68fec4f29426e16" + } + ], + "complex": [ + { + "m": 2, + "ranks": [ + 1, + 1 + ], + "dimension": 8, + "whole_trace_gaussian_integer": [ + 4, + 2 + ], + "split_trace_gaussian_integer": [ + 4, + 4 + ], + "same_family_identity": true, + "not_similar_by_trace": true + }, + { + "m": 3, + "ranks": [ + 1, + 2 + ], + "dimension": 16, + "whole_trace_gaussian_integer": [ + 6, + 2 + ], + "split_trace_gaussian_integer": [ + 4, + 8 + ], + "same_family_identity": true, + "not_similar_by_trace": true + } + ], + "actual_bit_rank8": [ + { + "m": 64, + "q": 3, + "ranks": [ + 1, + 7 + ], + "whole_trace": "11791981588038497602731286041242028270717943067903378960203362", + "split_trace": "3935452556812604350804863826626035037011931624307893923018190", + "difference": "7856529031225893251926422214615993233706011443595485037185172" + }, + { + "m": 64, + "q": 3, + "ranks": [ + 2, + 6 + ], + "whole_trace": "11791981588038497602731286041242028270717943067903378960203362", + "split_trace": "1326193601336850233284926714178088519321829013122934116523938", + "difference": "10465787986701647369446359327063939751396114054780444843679424" + }, + { + "m": 64, + "q": 3, + "ranks": [ + 3, + 5 + ], + "whole_trace": "11791981588038497602731286041242028270717943067903378960203362", + "split_trace": "485192780976896426811558553967593360727498419435219798728270", + "difference": "11306788807061601175919727487274434909990444648468159161475092" + }, + { + "m": 64, + "q": 3, + "ranks": [ + 4, + 4 + ], + "whole_trace": "11791981588038497602731286041242028270717943067903378960203362", + "split_trace": "291115668586137856086935132380556016436499051661131879236962", + "difference": "11500865919452359746644350908861472254281444016242247080966400" + }, + { + "m": 64, + "q": 3, + "ranks": [ + 5, + 3 + ], + "whole_trace": "11791981588038497602731286041242028270717943067903378960203362", + "split_trace": "485192780976896426811558553967593360727498419435219798728270", + "difference": "11306788807061601175919727487274434909990444648468159161475092" + }, + { + "m": 64, + "q": 3, + "ranks": [ + 6, + 2 + ], + "whole_trace": "11791981588038497602731286041242028270717943067903378960203362", + "split_trace": "1326193601336850233284926714178088519321829013122934116523938", + "difference": "10465787986701647369446359327063939751396114054780444843679424" + }, + { + "m": 64, + "q": 3, + "ranks": [ + 7, + 1 + ], + "whole_trace": "11791981588038497602731286041242028270717943067903378960203362", + "split_trace": "3935452556812604350804863826626035037011931624307893923018190", + "difference": "7856529031225893251926422214615993233706011443595485037185172" + } + ], + "actual_complex_rank9": [ + { + "m": 73, + "ranks": [ + 1, + 8 + ], + "whole_trace_gaussian_integer": [ + 9739880870918643253248, + 295147905179352825856 + ], + "split_trace_gaussian_integer": [ + 5312662293228350865408, + 4722366482869645213696 + ], + "difference": [ + 4427218577690292387840, + -4427218577690292387840 + ] + }, + { + "m": 73, + "ranks": [ + 2, + 7 + ], + "whole_trace_gaussian_integer": [ + 9739880870918643253248, + 295147905179352825856 + ], + "split_trace_gaussian_integer": [ + 590295810358705651712, + 4132070672510939561984 + ], + "difference": [ + 9149585060559937601536, + -3836922767331586736128 + ] + }, + { + "m": 73, + "ranks": [ + 3, + 6 + ], + "whole_trace_gaussian_integer": [ + 9739880870918643253248, + 295147905179352825856 + ], + "split_trace_gaussian_integer": [ + -2361183241434822606848, + 1180591620717411303424 + ], + "difference": [ + 12101064112353465860096, + -885443715538058477568 + ] + }, + { + "m": 73, + "ranks": [ + 4, + 5 + ], + "whole_trace_gaussian_integer": [ + 9739880870918643253248, + 295147905179352825856 + ], + "split_trace_gaussian_integer": [ + -3541774862152233910272, + -1180591620717411303424 + ], + "difference": [ + 13281655733070877163520, + 1475739525896764129280 + ] + }, + { + "m": 73, + "ranks": [ + 5, + 4 + ], + "whole_trace_gaussian_integer": [ + 9739880870918643253248, + 295147905179352825856 + ], + "split_trace_gaussian_integer": [ + -3541774862152233910272, + -1180591620717411303424 + ], + "difference": [ + 13281655733070877163520, + 1475739525896764129280 + ] + }, + { + "m": 73, + "ranks": [ + 6, + 3 + ], + "whole_trace_gaussian_integer": [ + 9739880870918643253248, + 295147905179352825856 + ], + "split_trace_gaussian_integer": [ + -2361183241434822606848, + 1180591620717411303424 + ], + "difference": [ + 12101064112353465860096, + -885443715538058477568 + ] + }, + { + "m": 73, + "ranks": [ + 7, + 2 + ], + "whole_trace_gaussian_integer": [ + 9739880870918643253248, + 295147905179352825856 + ], + "split_trace_gaussian_integer": [ + 590295810358705651712, + 4132070672510939561984 + ], + "difference": [ + 9149585060559937601536, + -3836922767331586736128 + ] + }, + { + "m": 73, + "ranks": [ + 8, + 1 + ], + "whole_trace_gaussian_integer": [ + 9739880870918643253248, + 295147905179352825856 + ], + "split_trace_gaussian_integer": [ + 5312662293228350865408, + 4722366482869645213696 + ], + "difference": [ + 4427218577690292387840, + -4427218577690292387840 + ] + } + ], + "conclusion": "D_(P1+P2) on one family plus identity on a second family is not similar to D_P1 on the first and D_P2 on the second. The analogous exact complex residual also fails the trace invariant.", + "scope": "Refutes the stated elementary-permutation derivation for splitting one residual across two families. Does not rule out a different compiler with additional operations, changed storage or charged work." +} diff --git a/research/cross-family-residual-obstruction/LICENSE b/research/cross-family-residual-obstruction/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/cross-family-residual-obstruction/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/cross-family-residual-obstruction/README.md b/research/cross-family-residual-obstruction/README.md new file mode 100644 index 0000000000..dd2f752df6 --- /dev/null +++ b/research/cross-family-residual-obstruction/README.md @@ -0,0 +1,85 @@ +# A trace obstruction to splitting one residual across two families + +PR448 at [`9b966d8`](https://github.com/CrocSwap/integer-mult-bounds/blob/9b966d8188e1cadd00aa834078ee6a8742a9d9b4/research/cross-copy-hosting/PROOF.md) +proposes routing one residual onto pending coordinate sets in two different +families by an elementary coordinate permutation. Its proof uses the valid +same-family factorization `D_(P1+P2) = D_P1 D_P2`, then assigns the two factors +to different families. That assignment needs a new operator theorem: it is +not a consequence of the factorization or a coordinate conjugation. + +The obstruction is invariant under **every invertible linear change of +storage**, not only coordinate permutations. Consider one residual on family +A and identity on an otherwise unused family B. Replacing it with one factor +on A and the other on B gives different traces. + +## Bit permutation + +Let each family have addresses `(x,y)` in `F_q^m × F_q^m`. A rank-r coordinate +operator `D_r` exchanges r selected coordinates between x and y. It fixes +`q^(2m-r)` addresses, so this is the trace of its permutation matrix. If the +residual has positive ranks a and b, with a+b≤m, then + +``` +trace(D_(a+b) ⊕ I) = q^(2m-a-b) + q^(2m) +trace(D_a ⊕ D_b) = q^(2m-a) + q^(2m-b) +``` + +Their difference is + +``` +q^(2m-a-b) (q^a−1) (q^b−1) > 0. +``` + +Thus the two operators are not similar. Disjoint coordinate factors on the +**same** family do multiply correctly; putting them on separate families +changes the operator. Independent routing conjugations inside each family +do not change this trace conclusion. + +The smallest enumerated odd-field control uses q=3, m=2 and a=b=1. On the +162 physical scalar coordinates of two families, the whole residual plus +identity has trace90; the split action has trace54. The script explicitly +constructs both permutations, checks bijectivity and involutivity, verifies +the valid same-family product, and emits a differing input column. Additional +controls cover m=3 and the exact rank-eight formulas at the proposed m=64. + +## Complex factor + +For the inherited complex factor, the exact Fourier multiplier on r selected +binary coordinates is `i^(sum y_j)`. Therefore + +``` +trace(C_r) = 2^(m-r) (1+i)^r. +``` + +The difference between `trace(C_(a+b) ⊕ I)` and `trace(C_a ⊕ C_b)` is + +``` +2^(m-a-b) [2^a−(1+i)^a] [2^b−(1+i)^b], +``` + +which is nonzero for positive a,b because each bracket is nonzero. +For m=2, a=b=1 the traces are exactly `4+2i` and `4+4i`. The script enumerates +the exact Fourier exponents and sums them as Gaussian integers, with no +floating-point arithmetic. It also verifies the same-family factorization +and the exact rank-nine formulas at the proposed m=73. + +## Scope and reproduction + +```sh +python -B research/cross-family-residual-obstruction/verify.py +``` + +This refutes the stated coordinate-permutation derivation for a **single +residual split between two families**. It does not rule out a different +compiler that changes the local program, introduces and charges additional +operations or storage, or proves a global regrouping theorem. Those changes +are not supplied by the two inherited hosting facts alone. A scalar count or +slot-packing audit cannot establish the missing operator identity. + +The adjacent `r740-hosted-rank149` certificate retains whole-residual hosting +and does not use the cross-family extension. + +Prepared by chafreaky with OpenAI Codex assistance, Apache-2.0. The reviewed +proposal is by Sreekanth Nair / higherbeing with substantial Anthropic Claude +assistance; its exact commit and proof are linked above. This review does not +claim their endorsement. diff --git a/research/cross-family-residual-obstruction/verify.py b/research/cross-family-residual-obstruction/verify.py new file mode 100644 index 0000000000..830f459968 --- /dev/null +++ b/research/cross-family-residual-obstruction/verify.py @@ -0,0 +1,80 @@ +"""Exact obstruction to replacing one residual by factors on different families. +Read-only review of PR448 head9b966d8188e1cadd00aa834078ee6a8742a9d9b4. +Chafreaky with OpenAI Codex assistance. Standard library only. +""" +from itertools import product +from pathlib import Path +import hashlib,json + +def bit(q,m,a,b): + states=list(product(range(2),product(range(q),repeat=2*m))) + index={x:i for i,x in enumerate(states)} + def perm(first,second): + out=[] + for family,word in states: + w=list(word) + for i in (first if family==0 else second):w[i],w[m+i]=w[m+i],w[i] + out.append(index[family,tuple(w)]) + assert sorted(out)==list(range(len(states))) and all(out[out[i]]==i for i in range(len(out))) + return out + A=list(range(a));B=list(range(a,a+b)) + whole=perm(A+B,[]);left=perm(A,[]);right=perm(B,[]);split=perm(A,B) + compose=[left[right[i]] for i in range(len(left))] + assert compose==whole,'same-family factorization must hold' + count=lambda p:sum(i==j for i,j in enumerate(p)) + w,s=count(whole),count(split) + assert w==q**(2*m)+q**(2*m-a-b) + assert s==q**(2*m-a)+q**(2*m-b) + assert w-s==q**(2*m-a-b)*(q**a-1)*(q**b-1)>0 + bad=next(i for i in range(len(states)) if whole[i]!=split[i]) + return dict(q=q,m=m,ranks=[a,b],dimension=len(states),whole_trace=w,split_trace=s, + same_family_identity=True,not_similar_by_trace=True, + distinct_column=dict(input=states[bad],whole=states[whole[bad]],split=states[split[bad]]), + whole_sha256=hashlib.sha256(json.dumps(whole).encode()).hexdigest(),split_sha256=hashlib.sha256(json.dumps(split).encode()).hexdigest()) + +def complex_case(m,a,b): + # In the exact Fourier basis C_u has multiplier i^parity(u.y). + # Store eigenvalues by their exponents modulo four; sum as Gaussian integers. + whole=[];split=[] + for family in range(2): + for y in range(1<>a)&((1<s;actual.append(dict(m=m,q=q,ranks=[a,b],whole_trace=str(w),split_trace=str(s),difference=str(w-s))) +def mul(z,w):return (z[0]*w[0]-z[1]*w[1],z[0]*w[1]+z[1]*w[0]) +def power(n): + z=(1,0) + for _ in range(n):z=mul(z,(1,1)) + return z +def scale(n,z):return (n*z[0],n*z[1]) +actual_complex=[] +for a in range(1,9): + b=9-a;m=73 + z=scale(2**(m-9),power(9));whole=(z[0]+2**m,z[1]) + x=scale(2**(m-a),power(a));y=scale(2**(m-b),power(b));split=(x[0]+y[0],x[1]+y[1]) + pa,pb=power(a),power(b) + difference=scale(2**(m-9),mul((2**a-pa[0],-pa[1]),(2**b-pb[0],-pb[1]))) + assert difference==(whole[0]-split[0],whole[1]-split[1]) and difference!=(0,0) + actual_complex.append(dict(m=m,ranks=[a,b],whole_trace_gaussian_integer=whole,split_trace_gaussian_integer=split,difference=difference)) +out=dict(status='PASS_CROSS_FAMILY_ROUTE_OBSTRUCTION',reviewed_pr=448,reviewed_head='9b966d8188e1cadd00aa834078ee6a8742a9d9b4', + bit=rows,complex=complex_rows,actual_bit_rank8=actual,actual_complex_rank9=actual_complex, + conclusion='D_(P1+P2) on one family plus identity on a second family is not similar to D_P1 on the first and D_P2 on the second. The analogous exact complex residual also fails the trace invariant.', + scope='Refutes the stated elementary-permutation derivation for splitting one residual across two families. Does not rule out a different compiler with additional operations, changed storage or charged work.') +expected=json.loads(Path(__file__).with_name('EXPECTED.json').read_text()) +assert json.loads(json.dumps(out))==expected, 'exact counterexample differs from frozen output' +print(json.dumps(out,indent=2)) diff --git a/research/e8-complex-adapted-kernel-portability/COMPARISON.json b/research/e8-complex-adapted-kernel-portability/COMPARISON.json new file mode 100644 index 0000000000..aecd1f1ebe --- /dev/null +++ b/research/e8-complex-adapted-kernel-portability/COMPARISON.json @@ -0,0 +1,16 @@ +{ + "status": "PASS_UNCHANGED_EXACT_RESULT", + "original_head": "66f35b78d6fa32b2fea08765c2d6ae85e1c72fc3", + "reported_by_pr460": "f30e2caf7d3053d16cd88fac1e06d3e3447994f0", + "synthetic_before_failure": "gain_percent_float + 2.1e-12 rejected by the old absolute tolerance", + "same_input_after": "PASS_EXACT_COMPLEX_KERNEL_REBUILD", + "metadata_differences": { + "complex_coarse_float": -2.0816681711721685e-17, + "gain_percent_float": -2.0889956431346945e-12 + }, + "new_manifest_sha256": "8378e54cba9d89d355c2d5d0a11349369e050324eff11964fb2856c6daf6921b", + "python311_full_result_sha256": "e2d8378237f5a618e6a4720599cba5821a8650a81ab7b08aca0c4cfe7d13c09a", + "original_python314_result_sha256": "e2d8378237f5a618e6a4720599cba5821a8650a81ab7b08aca0c4cfe7d13c09a", + "exact_results_byte_identical": true, + "original_verifier_on_fresh_python311_parent": "REJECTED at old absolute-tolerance assertion; exact original source loaded from pinned git object" +} diff --git a/research/e8-complex-adapted-kernel-portability/LICENSE b/research/e8-complex-adapted-kernel-portability/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/e8-complex-adapted-kernel-portability/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/e8-complex-adapted-kernel-portability/MANIFEST.json b/research/e8-complex-adapted-kernel-portability/MANIFEST.json new file mode 100644 index 0000000000..845b0dacc4 --- /dev/null +++ b/research/e8-complex-adapted-kernel-portability/MANIFEST.json @@ -0,0 +1,9 @@ +{ + "COMPARISON.json": "dce698141256ec21a069ff2673880922b495913a7d5fcbdfa284830c0a8a723b", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "ORIGINAL-PYTHON311-REPRO.txt": "b0f6795db254a1a71b14fe21b1752eb01b5702d0d97619191470f9b5afb9cea8", + "PYTHON311-CONTROLS.json": "38ded18c97b40e0e9c4520df9909ee1c634db7d63aa56fc223a768d6383fde9f", + "PYTHON311-FULL.json": "a4acfe83907949e61ad37849ffce0025a21a53903e3870a5549b33e3b9a3f4b9", + "PYTHON314-CONTROLS.json": "38ded18c97b40e0e9c4520df9909ee1c634db7d63aa56fc223a768d6383fde9f", + "README.md": "077aa9d1ac762f1dd7c4c3620a26ea923e671815e1eedeb2efc56373097087aa" +} diff --git a/research/e8-complex-adapted-kernel-portability/ORIGINAL-PYTHON311-REPRO.txt b/research/e8-complex-adapted-kernel-portability/ORIGINAL-PYTHON311-REPRO.txt new file mode 100644 index 0000000000..15f9ae5ce2 --- /dev/null +++ b/research/e8-complex-adapted-kernel-portability/ORIGINAL-PYTHON311-REPRO.txt @@ -0,0 +1,6 @@ +Traceback (most recent call last): + File "", line 7, in + File "original-pr458-66f35b7/rebuild.py", line 95, in + assert abs(out['report'][key]-expected['report'][key])<1e-12 + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError diff --git a/research/e8-complex-adapted-kernel-portability/PYTHON311-CONTROLS.json b/research/e8-complex-adapted-kernel-portability/PYTHON311-CONTROLS.json new file mode 100644 index 0000000000..cdd38a63f4 --- /dev/null +++ b/research/e8-complex-adapted-kernel-portability/PYTHON311-CONTROLS.json @@ -0,0 +1,38 @@ +{ + "status": "PASS_DISCOVERY_METADATA_PORTABILITY", + "controls": [ + { + "name": "baseline", + "status": "ACCEPTED_IDENTICAL_EXACT_REBUILD" + }, + { + "name": "complex_coarse_float_drift", + "status": "ACCEPTED_IDENTICAL_EXACT_REBUILD" + }, + { + "name": "gain_percent_float_drift", + "status": "ACCEPTED_IDENTICAL_EXACT_REBUILD" + }, + { + "name": "nan", + "status": "REJECTED" + }, + { + "name": "infinite", + "status": "REJECTED" + }, + { + "name": "changed_exact_gate", + "status": "REJECTED" + }, + { + "name": "changed_register_count", + "status": "REJECTED" + }, + { + "name": "unknown_report_field", + "status": "REJECTED" + } + ], + "canonical_word_sha256": "33c0b0f61b4f76a71a1e64243d3c92f871e65942c822d3045862e4f2a68e7f2f" +} diff --git a/research/e8-complex-adapted-kernel-portability/PYTHON311-FULL.json b/research/e8-complex-adapted-kernel-portability/PYTHON311-FULL.json new file mode 100644 index 0000000000..02d3088203 --- /dev/null +++ b/research/e8-complex-adapted-kernel-portability/PYTHON311-FULL.json @@ -0,0 +1,76 @@ +{ + "status": "PASS_COMPLEX_ADAPTED_KERNEL_FULL_COMPOSITION", + "mode": "full", + "kappa": "1274032589159993/1000000000000000000", + "manifest_sha256": "8378e54cba9d89d355c2d5d0a11349369e050324eff11964fb2856c6daf6921b", + "source_sha256": "db4995de0050e5d8222d3d2c7bc2c4c59c7c9e69fe2495d80c711bbd15347ce4", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "checks": [ + { + "name": "parent454", + "seconds": 552.92, + "log_sha256": "5b1559e54a317504f9b12cda250ce0019ad3794606012a272a94dded646e1f4d" + }, + { + "name": "baseline-scalar", + "seconds": 0.67, + "log_sha256": "c65b502e1852b05e7dffe1a1c882781e0dff55013ff763dc117f8b63e546f50b" + }, + { + "name": "baseline-programs", + "seconds": 0.49, + "log_sha256": "5bc5e23a3a722fe5484b8603dfe38870c66841c1469ba6685eee6a1b7251d566" + }, + { + "name": "kernel-rebuild", + "seconds": 0.29, + "log_sha256": "77f36bd16cd226c95cec1f9b87e049c09d68a0e51445562681ed51563fd96b94" + }, + { + "name": "discovery-metadata-controls", + "seconds": 2.41, + "log_sha256": "92913db89b60451c9a5a2a80c871b8bb6d7f939fad4aeb71fe2afbe12af446f6" + }, + { + "name": "kernel-scalar", + "seconds": 0.68, + "log_sha256": "4e744f4488e278ea57c4434c4ec49972e79d55197aef85744f86648a8d20dde3" + }, + { + "name": "kernel-programs", + "seconds": 0.49, + "log_sha256": "2f9364d416bbb5dc0ef7a9cc18b1ff0a37874626e92ab3e03f535979cd5ee679" + }, + { + "name": "kernel-exact-phases", + "seconds": 81.31, + "log_sha256": "01d8ce35ec9217497de4590860fee7da0996312d569e5909ccb95fc29887111a" + }, + { + "name": "residual-adapters", + "seconds": 0.76, + "log_sha256": "1f86fc2f0dd4683467fe0813febbeb731b530bcc200ec6ff91cd8e9a6579f07d" + }, + { + "name": "independent-local-audit", + "seconds": 1.45, + "log_sha256": "287170c58787fea9e2996b468064d65d94445273fcb389fde0c4807d83f28519" + }, + { + "name": "global-emit", + "seconds": 9.02, + "log_sha256": "d429520e1698e975fe445957e6ee8f9844809e20dc966f485b620d6995792f94" + }, + { + "name": "independent-global-audit", + "seconds": 28.6, + "log_sha256": "c55d0f076e5f123efe2ca28a1d15dc908562e47a09bbe6b63a75452847b44f1a" + }, + { + "name": "exact-assembly", + "seconds": 0.26, + "log_sha256": "2df6cadf71463154c352b303bf74407b6a65e220ce6713cad12734ee48865858" + } + ], + "python": "3.11.15" +} diff --git a/research/e8-complex-adapted-kernel-portability/PYTHON314-CONTROLS.json b/research/e8-complex-adapted-kernel-portability/PYTHON314-CONTROLS.json new file mode 100644 index 0000000000..cdd38a63f4 --- /dev/null +++ b/research/e8-complex-adapted-kernel-portability/PYTHON314-CONTROLS.json @@ -0,0 +1,38 @@ +{ + "status": "PASS_DISCOVERY_METADATA_PORTABILITY", + "controls": [ + { + "name": "baseline", + "status": "ACCEPTED_IDENTICAL_EXACT_REBUILD" + }, + { + "name": "complex_coarse_float_drift", + "status": "ACCEPTED_IDENTICAL_EXACT_REBUILD" + }, + { + "name": "gain_percent_float_drift", + "status": "ACCEPTED_IDENTICAL_EXACT_REBUILD" + }, + { + "name": "nan", + "status": "REJECTED" + }, + { + "name": "infinite", + "status": "REJECTED" + }, + { + "name": "changed_exact_gate", + "status": "REJECTED" + }, + { + "name": "changed_register_count", + "status": "REJECTED" + }, + { + "name": "unknown_report_field", + "status": "REJECTED" + } + ], + "canonical_word_sha256": "33c0b0f61b4f76a71a1e64243d3c92f871e65942c822d3045862e4f2a68e7f2f" +} diff --git a/research/e8-complex-adapted-kernel-portability/README.md b/research/e8-complex-adapted-kernel-portability/README.md new file mode 100644 index 0000000000..ce1cb96023 --- /dev/null +++ b/research/e8-complex-adapted-kernel-portability/README.md @@ -0,0 +1,9 @@ +# Discovery metadata portability repair + +PR460 reported that Python 3.11 reconstruction rejected a 2.09e-12 difference in an inherited floating-point gain estimate. Both a local control adding 2.1e-12 and the naturally regenerated Python 3.11 parent output reproduced the old failure. The latter differs by -2.0889956431346945e-12 in gain_percent_float. The exact kernel, frames, operator, prices and source pins were unchanged. + +The rebuild now requires the two discovery estimates to be finite floats and normalizes them before exact whole-word comparison. Every other field still compares exactly. Eight controls accept the baseline and the two separate small perturbations with identical exact output, and reject NaN, infinity, an altered gate, an altered register count and an unknown report field. They pass under Python 3.11.15 and 3.14.8. + +A fresh full Python 3.11.15 replay, including all inherited controls and regenerated exact phases, passed. Its entire RESULT.json is byte-identical to the original Python 3.14.8 result. The new receipt binds the updated manifest; the original validation directory remains historical evidence for head 66f35b7. This directory does not claim a new Linux full replay or completed GitHub CI. + +Credit: Rohan Arun with OpenAI Codex reported and isolated the downstream portability failure in PR460. Chafreaky with OpenAI Codex implemented and checked this upstream repair. Apache-2.0. diff --git a/research/e8-complex-adapted-kernel-validation/CLIFFORD-REVIEW.json b/research/e8-complex-adapted-kernel-validation/CLIFFORD-REVIEW.json new file mode 100644 index 0000000000..deb044c7c2 --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/CLIFFORD-REVIEW.json @@ -0,0 +1,19 @@ +{ + "status": "PASS_NEW_WORD_EXACT_LOCAL_PHASE_RECIPES", + "canonical_word_sha256": "aa0d09948ba0ae1193c640f4cfb80c9ead31c9dce036953a66ac4dfb224c8fbe", + "frames": 970, + "directed_edges": 2932, + "ranks": { + "1": 1438, + "3": 20, + "8": 24, + "5": 294, + "2": 932, + "4": 224 + }, + "endpoint_adapters": 240, + "all_child_equalities_include_global_phase": true, + "recipe_sha256": "0af2286e5cf8eefd7939c20dead1de8dd8535fbd79ffe4777c66f1f3ad5a8af1", + "seconds": 94.02611029916443, + "scope": "Every local frame and center transition. Expanded scalar-interface integration and global emitted program are separate obligations." +} diff --git a/research/e8-complex-adapted-kernel-validation/CROSS-PLATFORM.json b/research/e8-complex-adapted-kernel-validation/CROSS-PLATFORM.json new file mode 100644 index 0000000000..f7b2f257f2 --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/CROSS-PLATFORM.json @@ -0,0 +1,12 @@ +{ + "status": "PASS_CROSS_PLATFORM_EXACT_RELEASE", + "entire_result_byte_identical": true, + "new_manifest_files": 21, + "upstream_pinned_files": 304, + "manifest_sha256": "f0c44127f32efd5f3793aa31fb6f6914e91b52d23060591186cf7419965d4e1c", + "source_sha256": "db4995de0050e5d8222d3d2c7bc2c4c59c7c9e69fe2495d80c711bbd15347ce4", + "complex_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "linux_mode": "full", + "macos_mode": "quick; only inherited PR443 exhaustive controls skipped", + "new_phase_replay": "all new phase edges regenerated on both platforms" +} diff --git a/research/e8-complex-adapted-kernel-validation/DEFAULT-REGRESSION.json b/research/e8-complex-adapted-kernel-validation/DEFAULT-REGRESSION.json new file mode 100644 index 0000000000..322077cafc --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/DEFAULT-REGRESSION.json @@ -0,0 +1,108 @@ +{ + "status": "PASS_FRESH_DEFAULT_LOCAL_PROGRAM_REGRESSION", + "local_programs_equal": true, + "local_checks_equal": true, + "canonical_only_differences": [ + "empty target_levels metadata", + "explicit center directed edge inventory" + ], + "additional_edges": [ + [ + 0, + 948 + ], + [ + 0, + 949 + ], + [ + 0, + 950 + ], + [ + 0, + 951 + ], + [ + 0, + 952 + ], + [ + 0, + 953 + ], + [ + 0, + 954 + ], + [ + 0, + 955 + ], + [ + 464, + 0 + ], + [ + 465, + 0 + ], + [ + 466, + 0 + ], + [ + 467, + 0 + ], + [ + 468, + 0 + ], + [ + 469, + 0 + ], + [ + 470, + 0 + ], + [ + 471, + 0 + ], + [ + 948, + 0 + ], + [ + 949, + 0 + ], + [ + 950, + 0 + ], + [ + 951, + 0 + ], + [ + 952, + 0 + ], + [ + 953, + 0 + ], + [ + 954, + 0 + ], + [ + 955, + 0 + ] + ], + "fresh_program_sha256": "e50c84f2323839b4f5ca7aed911587dfdd754ad27ba356d303936cfe46206a3a" +} diff --git a/research/e8-complex-adapted-kernel-validation/FORMAT-CEILING.json b/research/e8-complex-adapted-kernel-validation/FORMAT-CEILING.json new file mode 100644 index 0000000000..66e2d5b24d --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/FORMAT-CEILING.json @@ -0,0 +1,27 @@ +{ + "status": "PASS_SCOPED_WHOLE_HOSTED_FORMAT_CEILING", + "uniform_complex_supplier_upper": "2/125", + "uniform_balanced_outer_upper": "2/127", + "eleven_stage_balanced_outer_upper": "1/87", + "examples": { + "bit": { + "D": "17/50", + "m": 78, + "maxchild": 56, + "supplier_upper": "1/75", + "outer_upper": "1/76", + "next_reciprocal_control_rejected": 76 + }, + "complex": { + "D": "17/50", + "m": 89, + "maxchild": 64, + "supplier_upper": "1/86", + "outer_upper": "1/87", + "next_reciprocal_control_rejected": 87 + } + }, + "exact_stage_controls": 254, + "boundary_control": "D=g gives equality, not the claimed strict inequality", + "scope": "Only the fixed 120-port, copied-rank72, bank-free compressed-window moment/outer format. Not an integer-multiplication lower bound." +} diff --git a/research/e8-complex-adapted-kernel-validation/GLOBAL-AUDIT.json b/research/e8-complex-adapted-kernel-validation/GLOBAL-AUDIT.json new file mode 100644 index 0000000000..7ac69c8923 --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/GLOBAL-AUDIT.json @@ -0,0 +1,87 @@ +{ + "status": "PASS_INDEPENDENT_ADAPTED_KERNEL_GLOBAL_AUDIT", + "template_sha256": "23142d89d88dcc871c52034b4014fc98ddc76d9cce15621f88b9ec4fd0f198d6", + "emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "local_events": 2107512, + "profile": { + "1": 175744, + "2": 82016, + "3": 4968, + "4": 20344, + "5": 37072, + "6": 1264, + "7": 2568, + "8": 7264, + "16": 8, + "46": 512, + "64": 1912 + }, + "live": 9600, + "physical": 10178, + "hosted_residuals": 49280, + "bank_assignments": 0, + "rank_mass": 851136, + "deficit": 3264, + "maxchild": 64, + "exact_phase_equalities": 8520, + "exact_orthogonal_data_routes": 1320, + "exact_residual_route_instances": 49280, + "nontrivial_adapter_frames": 14, + "wrapper_events": 13904, + "charged_wrapper_groups": 788480, + "max_helpers_per_physical_family_per_call": 1, + "omitted_bridge_shears_rejected": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + "mutations_rejected": [ + "omit a call", + "alias physical helper family", + "cross replica helper", + "wrong residual width", + "negative slot offset", + "wrong hosting stage", + "duplicate helper slot", + "missing helper slot", + "omit paid residual pre adapter", + "omit post adapter after cleanup", + "wrong local orientation", + "omit terminal translations", + "omit cover correction", + "undercharge cover correction", + "omit idle remainder", + "understate physical reserve", + "claim a recursive helper entrance", + "wrong route target axis", + "spectator aliases selected axis", + "omit residual phase", + "undercharge wrappers", + "disjoint slots but two helpers per host in one call", + "wrong stage phase", + "omit idle phase correction", + "omit terminal phase" + ], + "scope": "Finite exact operator/ownership template with distinct borrowed families per call. Complete cover enumeration and all-size compilation remain inherited contracts." +} diff --git a/research/e8-complex-adapted-kernel-validation/JOINT-VERIFY.txt b/research/e8-complex-adapted-kernel-validation/JOINT-VERIFY.txt new file mode 100644 index 0000000000..336e10b622 --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/JOINT-VERIFY.txt @@ -0,0 +1,60 @@ +python3 scripts/experiments/verify_skip_frame.py +PASS h=23: full dirty basis, exact frame path, every fixed-basis profile +PASS h=25: full dirty basis, exact frame path, every fixed-basis profile +PASS conditional kappa=4669442391/100000000000000; bit saving=116741511/2500000000000 +PASS exact recurrence, 47 strict inequalities, seven margins, eventual cutoffs +python3 scripts/experiments/verify_joint_dual.py +built 23 36626 regions +augment 100 11854 +augment 200 11954 +matched 11974 seconds 0.8493311405181885 +compile 23 0 6 reclaimed 0 seconds 0.8510582447052002 +compile 23 5000 16729 reclaimed 19 seconds 1.027156114578247 +compile 23 10000 20965 reclaimed 172 seconds 3.6846671104431152 +compile 23 15000 22929 reclaimed 607 seconds 6.379122018814087 +compile 23 20000 25536 reclaimed 1200 seconds 11.34896206855774 +compile 23 25000 28333 reclaimed 1562 seconds 20.094038009643555 +compile 23 30000 30127 reclaimed 1786 seconds 29.12151002883911 +compile 23 35000 30688 reclaimed 1853 seconds 32.71058106422424 +PASS h=23: full dirty basis, exact frame path, every fixed-basis profile +built 25 48675 regions +augment 100 16090 +augment 200 16190 +matched 16276 seconds 1.5329651832580566 +compile 25 0 6 reclaimed 0 seconds 1.5355589389801025 +compile 25 5000 19564 reclaimed 0 seconds 1.6200871467590332 +compile 25 10000 25624 reclaimed 50 seconds 4.412474870681763 +compile 25 15000 28089 reclaimed 718 seconds 7.974707841873169 +compile 25 20000 29883 reclaimed 986 seconds 11.111041069030762 +compile 25 25000 32329 reclaimed 1785 seconds 17.27794885635376 +compile 25 30000 35471 reclaimed 2135 seconds 27.9431312084198 +compile 25 35000 37806 reclaimed 2408 seconds 40.45063900947571 +compile 25 40000 39609 reclaimed 2613 seconds 53.5547661781311 +compile 25 45000 40338 reclaimed 2711 seconds 60.31234407424927 +PASS h=25: full dirty basis, exact frame path, every fixed-basis profile +PASS conditional kappa=4764513337/100000000000000; bit saving=2382370177/50000000000000 +PASS exact recurrence, 47 strict inequalities, seven margins, eventual cutoffs +python3 -m unittest discover -s tests -p 'test_joint_reclaim.py' -v +test_aliased_terminal_role_is_rejected (test_joint_reclaim.JointReclamationControls.test_aliased_terminal_role_is_rejected) ... ok +test_cancelled_repetitions_of_paid_scatter_are_rejected (test_joint_reclaim.JointReclamationControls.test_cancelled_repetitions_of_paid_scatter_are_rejected) ... ok +test_complete_pr58_profile_fails_new_bit_saving (test_joint_reclaim.JointReclamationControls.test_complete_pr58_profile_fails_new_bit_saving) ... ok +test_missing_copied_center_is_rejected (test_joint_reclaim.JointReclamationControls.test_missing_copied_center_is_rejected) ... ok +test_missing_scatter_is_rejected_by_each_helper (test_joint_reclaim.JointReclamationControls.test_missing_scatter_is_rejected_by_each_helper) ... ok +test_negative_operation_frame_index_is_rejected (test_joint_reclaim.JointReclamationControls.test_negative_operation_frame_index_is_rejected) ... ok +test_non_nested_operation_frame_is_rejected (test_joint_reclaim.JointReclamationControls.test_non_nested_operation_frame_is_rejected) ... ok +test_omitted_literal_xor_is_rejected (test_joint_reclaim.JointReclamationControls.test_omitted_literal_xor_is_rejected) ... ok +test_omitted_transition_cannot_reduce_paid_profile (test_joint_reclaim.JointReclamationControls.test_omitted_transition_cannot_reduce_paid_profile) ... ok +test_optimized_helpers_reject_unchecked_word (test_joint_reclaim.JointReclamationControls.test_optimized_helpers_reject_unchecked_word) ... ok +test_optimized_python_is_rejected_by_every_new_entry (test_joint_reclaim.JointReclamationControls.test_optimized_python_is_rejected_by_every_new_entry) ... ok +test_scatter_order_preserves_the_complete_basis_receipt (test_joint_reclaim.JointReclamationControls.test_scatter_order_preserves_the_complete_basis_receipt) ... ok +test_selected_words_pass_independent_replay (test_joint_reclaim.JointReclamationControls.test_selected_words_pass_independent_replay) ... ok +test_self_cancelling_uncharged_scatter_is_rejected (test_joint_reclaim.JointReclamationControls.test_self_cancelling_uncharged_scatter_is_rejected) ... ok +test_self_xor_is_rejected (test_joint_reclaim.JointReclamationControls.test_self_xor_is_rejected) ... ok +test_understated_physical_width_is_rejected (test_joint_reclaim.JointReclamationControls.test_understated_physical_width_is_rejected) ... ok + +---------------------------------------------------------------------- +Ran 16 tests in 19.985s + +OK +python3 scripts/audit_joint_candidate.py --check docs/research/community-round2-arithmetic.json +PASS independent PR60/61 moments, complete child ledger, assembly and Lean source binding diff --git a/research/e8-complex-adapted-kernel-validation/LINUX-FULL.json b/research/e8-complex-adapted-kernel-validation/LINUX-FULL.json new file mode 100644 index 0000000000..50f1e2d293 --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/LINUX-FULL.json @@ -0,0 +1,71 @@ +{ + "status": "PASS_COMPLEX_ADAPTED_KERNEL_FULL_COMPOSITION", + "mode": "full", + "kappa": "1274032589159993/1000000000000000000", + "manifest_sha256": "f0c44127f32efd5f3793aa31fb6f6914e91b52d23060591186cf7419965d4e1c", + "source_sha256": "db4995de0050e5d8222d3d2c7bc2c4c59c7c9e69fe2495d80c711bbd15347ce4", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "checks": [ + { + "name": "parent454", + "seconds": 579.32, + "log_sha256": "266fb647b2b462b1c589821f44dd9f6588ee2f3f27d7e515e5f3970d68ce884d" + }, + { + "name": "baseline-scalar", + "seconds": 0.69, + "log_sha256": "6534f52f2343c074d5c87d18b2e58cc4f0e9219098c42af67c9fae79215b45c8" + }, + { + "name": "baseline-programs", + "seconds": 0.52, + "log_sha256": "5bc5e23a3a722fe5484b8603dfe38870c66841c1469ba6685eee6a1b7251d566" + }, + { + "name": "kernel-rebuild", + "seconds": 0.33, + "log_sha256": "77f36bd16cd226c95cec1f9b87e049c09d68a0e51445562681ed51563fd96b94" + }, + { + "name": "kernel-scalar", + "seconds": 0.69, + "log_sha256": "c61a0b813c824c2566d095865bfc49f9c3ccc1330c737cb90bafb961436d26e5" + }, + { + "name": "kernel-programs", + "seconds": 0.52, + "log_sha256": "2f9364d416bbb5dc0ef7a9cc18b1ff0a37874626e92ab3e03f535979cd5ee679" + }, + { + "name": "kernel-exact-phases", + "seconds": 94.07, + "log_sha256": "fbb30b63264309052cd23d8c5398613f9eb8c83efb83603a9553ca8005b93f32" + }, + { + "name": "residual-adapters", + "seconds": 0.91, + "log_sha256": "1f86fc2f0dd4683467fe0813febbeb731b530bcc200ec6ff91cd8e9a6579f07d" + }, + { + "name": "independent-local-audit", + "seconds": 1.67, + "log_sha256": "287170c58787fea9e2996b468064d65d94445273fcb389fde0c4807d83f28519" + }, + { + "name": "global-emit", + "seconds": 12.16, + "log_sha256": "d429520e1698e975fe445957e6ee8f9844809e20dc966f485b620d6995792f94" + }, + { + "name": "independent-global-audit", + "seconds": 38.17, + "log_sha256": "c55d0f076e5f123efe2ca28a1d15dc908562e47a09bbe6b63a75452847b44f1a" + }, + { + "name": "exact-assembly", + "seconds": 0.3, + "log_sha256": "2df6cadf71463154c352b303bf74407b6a65e220ce6713cad12734ee48865858" + } + ], + "python": "3.12.3" +} diff --git a/research/e8-complex-adapted-kernel-validation/LOCAL-REVIEW.json b/research/e8-complex-adapted-kernel-validation/LOCAL-REVIEW.json new file mode 100644 index 0000000000..3f5addfafa --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/LOCAL-REVIEW.json @@ -0,0 +1,64 @@ +{ + "status": "PASS_INDEPENDENT_COMPLEX_KERNEL_LOCAL_REALIZATION", + "nontrivial_entrance_frames": 14, + "wrappers_per_call": 158, + "helper_entry_recursive_calls": 0, + "checks": { + "backward": { + "sha256": "7a6efcbf6e613bdd715bda228dec783fe1408707580efa6db02dfb7b99c99f99", + "events": 23949, + "scalar_macros": 19729, + "real_component_primitive_bound": 221682, + "paid_profile": { + "1": 1981, + "2": 932, + "3": 20, + "4": 224, + "5": 392, + "8": 24 + }, + "all_columns": 800, + "private_centers_cleared": true, + "private_coefficient_stream_cleared_after_each_macro": true, + "wrappers": 158, + "max_exact_scalar_numerator_bits": 4, + "max_exact_scalar_denominator_bits": 4, + "common_labels_checked": true, + "helpers_restored_as_scalar_rows": true + }, + "forward": { + "sha256": "5d792a99132cb569478778c16d70fb752d7575a43c0940fb54451b61f5c3d31d", + "events": 23949, + "scalar_macros": 19729, + "real_component_primitive_bound": 221586, + "paid_profile": { + "1": 1981, + "2": 932, + "3": 20, + "4": 224, + "5": 392, + "8": 24 + }, + "all_columns": 800, + "private_centers_cleared": true, + "private_coefficient_stream_cleared_after_each_macro": true, + "wrappers": 158, + "max_exact_scalar_numerator_bits": 4, + "max_exact_scalar_denominator_bits": 4, + "common_labels_checked": true, + "helpers_restored_as_scalar_rows": true + } + }, + "mutations_rejected": [ + "omit first pre adapter", + "omit final post adapter", + "scalar at wrong frame", + "omit helper scalar restoration", + "wrong residual global phase", + "wrong residual width", + "wrong pre adapter order" + ], + "canonical_word_sha256": "28bb4713cc403a192333d3e24d0db3e16a3f590175587f7405aab8dd668a9123", + "adapters_sha256": "bdbe82de9c75a42248d1c627df53e8a2db54071a83e49c762f65e8ac072e0e5c", + "phase_recipes_sha256": "0af2286e5cf8eefd7939c20dead1de8dd8535fbd79ffe4777c66f1f3ad5a8af1" +} diff --git a/research/e8-complex-adapted-kernel-validation/MACOS-QUICK.json b/research/e8-complex-adapted-kernel-validation/MACOS-QUICK.json new file mode 100644 index 0000000000..49edae10b9 --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/MACOS-QUICK.json @@ -0,0 +1,71 @@ +{ + "status": "PASS_COMPLEX_ADAPTED_KERNEL_FULL_COMPOSITION", + "mode": "quick", + "kappa": "1274032589159993/1000000000000000000", + "manifest_sha256": "f0c44127f32efd5f3793aa31fb6f6914e91b52d23060591186cf7419965d4e1c", + "source_sha256": "db4995de0050e5d8222d3d2c7bc2c4c59c7c9e69fe2495d80c711bbd15347ce4", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "checks": [ + { + "name": "parent454", + "seconds": 428.98, + "log_sha256": "e0aa3e6efdb1ca4a80f2d399d965fc2b419f2b2d9ee857c47366728ef0d2c553" + }, + { + "name": "baseline-scalar", + "seconds": 0.53, + "log_sha256": "5e6fbb7ba41d12381759b294f839e7acb41475f5494c81dc3a64ffb2f3950dad" + }, + { + "name": "baseline-programs", + "seconds": 0.45, + "log_sha256": "5bc5e23a3a722fe5484b8603dfe38870c66841c1469ba6685eee6a1b7251d566" + }, + { + "name": "kernel-rebuild", + "seconds": 0.26, + "log_sha256": "77f36bd16cd226c95cec1f9b87e049c09d68a0e51445562681ed51563fd96b94" + }, + { + "name": "kernel-scalar", + "seconds": 0.54, + "log_sha256": "305c7aa37ff495566d6e80844404a013d97e761279ee1856bb7c25c962e7583b" + }, + { + "name": "kernel-programs", + "seconds": 0.42, + "log_sha256": "2f9364d416bbb5dc0ef7a9cc18b1ff0a37874626e92ab3e03f535979cd5ee679" + }, + { + "name": "kernel-exact-phases", + "seconds": 83.21, + "log_sha256": "647fe389643decf6a1c26a94a25cfbabdd20ce157b099c314e2c85fe649ea9ec" + }, + { + "name": "residual-adapters", + "seconds": 0.81, + "log_sha256": "1f86fc2f0dd4683467fe0813febbeb731b530bcc200ec6ff91cd8e9a6579f07d" + }, + { + "name": "independent-local-audit", + "seconds": 1.13, + "log_sha256": "287170c58787fea9e2996b468064d65d94445273fcb389fde0c4807d83f28519" + }, + { + "name": "global-emit", + "seconds": 8.36, + "log_sha256": "d429520e1698e975fe445957e6ee8f9844809e20dc966f485b620d6995792f94" + }, + { + "name": "independent-global-audit", + "seconds": 27.13, + "log_sha256": "c55d0f076e5f123efe2ca28a1d15dc908562e47a09bbe6b63a75452847b44f1a" + }, + { + "name": "exact-assembly", + "seconds": 0.28, + "log_sha256": "2df6cadf71463154c352b303bf74407b6a65e220ce6713cad12734ee48865858" + } + ], + "python": "3.14.8" +} diff --git a/research/e8-complex-adapted-kernel-validation/MANIFEST.json b/research/e8-complex-adapted-kernel-validation/MANIFEST.json new file mode 100644 index 0000000000..d7c406e390 --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/MANIFEST.json @@ -0,0 +1,13 @@ +{ + "CLIFFORD-REVIEW.json": "020b0658aac9c989a6fb5accabc8785a02de11ebee340b930e8acc7917c3ab3c", + "CROSS-PLATFORM.json": "824a308ba77e515f7c2253dabb60c5db534262c217cba7c00a812d433846357b", + "DEFAULT-REGRESSION.json": "150dceeb5a37787a8e4941cb6d65d4302dce24c015239812db8da16bb52ca44d", + "FORMAT-CEILING.json": "70c2d9d0e01e50651b6712e8acf4ef0ce7262f91886811905bb23b0c989641ce", + "GLOBAL-AUDIT.json": "fbadd20431064957f7de44dd49f917aa4c96f2cddd7ec93d6c06d70efe0e33b4", + "JOINT-VERIFY.txt": "40faf06847d8fb640a69256dc9070d6422d7ea59d253db0f6460d0f8b86c52d9", + "LINUX-FULL.json": "b84703a2fdae74591c2a96251710e1bc08760adec2a5df1ac88e4940bac58dd2", + "LOCAL-REVIEW.json": "b2d4f7256a07d7600a70d36ba2c0f2347edfd2f4c7b7241eb373aeb19462e2a3", + "MACOS-QUICK.json": "176b6d1b3209ca10b050f630ae61130f00bf61dcfe1c6b945c81a9cbdf01d650", + "README.md": "f028d4c122f14290a4298f3d7db17883c5731f9bcbc045ae97e03795b6244db8", + "RESULT.json": "e2d8378237f5a618e6a4720599cba5821a8650a81ab7b08aca0c4cfe7d13c09a" +} diff --git a/research/e8-complex-adapted-kernel-validation/README.md b/research/e8-complex-adapted-kernel-validation/README.md new file mode 100644 index 0000000000..82a3d618ad --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/README.md @@ -0,0 +1,7 @@ +# Validation receipts + +Linux Python 3.12.3 completed the full verifier; macOS Python 3.14.8 completed quick mode with E8_REPLAY_PHASES=1. Quick mode skips only inherited PR443 exhaustive controls. Every new check ran on both platforms, including freshly regenerated phase edges. The entire RESULT.json is byte-identical. Both receipts bind the unchanged package manifest and upstream source inventory. + +The independent audits, fresh default-program regression, repository make verify-joint output and scoped format-ceiling controls are included. The ceiling verifier also passed on Linux after its final integrity manifest was added. CI results are separate and are not claimed by these receipts. + +The first macOS attempt stopped on a parent source-inventory check because an earlier local import had created an untracked Python cache file inside the frozen vendor directory. All source hashes were unchanged. That run-owned cache was removed; the second complete attempt passed. No source change was required. Future verifier subprocesses disable bytecode writing. diff --git a/research/e8-complex-adapted-kernel-validation/RESULT.json b/research/e8-complex-adapted-kernel-validation/RESULT.json new file mode 100644 index 0000000000..115034e456 --- /dev/null +++ b/research/e8-complex-adapted-kernel-validation/RESULT.json @@ -0,0 +1,186 @@ +{ + "status": "PASS_CONDITIONAL_COMPLEX_ADAPTED_KERNEL", + "kappa": "1274032589159993/1000000000000000000", + "kappa_decimal": "0.001274032589159993", + "bit_lower": "10205262550350024303/8000000000000000000000", + "complex_lower": "1297203880559577927527/1000000000000000000000000", + "binding_component": "bit", + "gain_over_pr454_percent": 0.5918852405270859, + "bit": { + "live": 9600, + "physical": 9609, + "maxchild": 56, + "rank_mass": 745536, + "hosted_residuals": 65120, + "prefix_bits": 155, + "charged_prefix_bits": 192, + "coefficient_bits": 155, + "three_level_coefficient_bits": 520, + "charged_three_level_coefficient_bits": 1024, + "row_coefficient": 19431 + }, + "complex": { + "live": 9600, + "physical": 10178, + "maxchild": 64, + "rank_mass": 851136, + "hosted_residuals": 49280, + "wrapper_events": 13904, + "charged_wrapper_groups": 788480, + "max_helpers_per_physical_family_per_call": 1, + "physical_stock_bits": 3929, + "router_bits": 11850, + "literal_bits": 37859, + "row_coefficient": 20161, + "row_bound": { + "status": "PASS_FRACTIONAL_DEPTH_ROW_RESERVE", + "block_steps": 9, + "block_halvings": 4, + "exact_shrink_inequality": [ + 350356403707485209, + 288230376151711744 + ], + "stock_bits": 3929, + "row_slope": "76005/4", + "additive_stock_charge": 35361, + "minimum_log2_width": 32, + "retained_row_coefficient": 20161, + "threshold_margin": "1751", + "coarse_three_level_row": 21948, + "finite_three_level_halving": [ + 704969, + 524288 + ] + }, + "row_controls": [ + "coarse three-level row exceeds reserve", + "nine steps do not guarantee five halvings", + "insufficient row cutoff" + ], + "local_bound": 18687781085682, + "pervertex": 1772686901993840, + "halving_depth": 3 + }, + "strict_outer_constraints": { + "bit_positive": "9966076709326195566738766647771506443575826219285587790664756972730970245307336659187146482070177457870298604021455953526961591040250713354215070240184100350342167/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_above_bit": "168328607545506992065920852228493556424173780714412209335243027269029754692663340812853517929822542129701395978544046473038408959749286645784929759815899649657833/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_below_one_over32": "29952796119440422072473/1000000000000000000000000", + "beta_positive": "1/1000000000000000000", + "beta_below_one": "999999999999999999/1000000000000000000", + "leaf_saving_above_bit": "168328607545506981931515535356790997619486280714412209335243027269029754692663340812853517929822542129701395978544046473038408959749286645784929759815899649657833/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_positive": "4983038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/3906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_internal": "9966076709326195566738766647771506443575826219285587790664756972730970245307336659187146482070177457870298604021455953526961591040250713354215070240184100350342167/3906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_leaf": "84164303772753500931834477004591065548509788128712548243447732920102668011088643137397004272247930251997180059449481106817808501330596849854055920158663179043986740184100350342167/3906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_positive": "4983038354663098749965806614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/3906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_below_one": "3901266961645336901250034193385440442344950853538128712548243447732920102668011088643137397004272247930251997180059449481106817808501330596849854055920158663179043986740184100350342167/3906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_reservations": "1/4000000000000000000", + "lambda_above_tau": "9966076709326195566738766647771506443575826219285587790664756972730970245307336659187146482070177457870298604021455953526961591040250713354215070240184100350342167/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_sigma": "168328607545507002031997561554689123162940428485918652911069246554617545357420313543823763237159201316847878048721504343337012981205240172746520800066613003872903240184100350342167/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_internal": "9966076709326195566738766647771506443575826219285587790664756972730970245307336659187146482070177457870298604021455953526961591040250713354215070240184100350342167/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_prime_above_lambda": "9966076709326195566738766647771506443575826219285587790664756972730970245307336659187146482070177457870298604021455953526961591040250713354215070240184100350342167/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_leaf": "84164303772753500931834477004591065548509788128712548243447732920102668011088643137397004272247930251997180059449481106817808501330596849854055920158663179043986740184100350342167/3906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_reservations": "1/4000000000000000000", + "lambda_prime_below_one": "4983038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/3906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "epsilon_positive": "3906249999999999996093750000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833", + "epsilon_below_one": "4983038354663101679653306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833", + "guard_width": "4983038354663101679653306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833", + "K_geometry": "2934670538354663098749965806614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833000000000000000000", + "K_dominates_log": "4983038354663098744982768259896458905083339847311729796707405805208609880232359089782705663738840712885399824212798449145179371558118884256963752581171933670810069179974562828701819740184100350342167/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833000000000000000000", + "record_suffix": "4983038354663101679653306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833", + "phase_local": "39864306837304809525993414561813363466989865080410741959003271674767891204154738587820926633833105201121419563796652081397454712048804706307985361140061291417502161998685860376306650740184100350342167/31289864306837304782187226452916476461240393171694970299614052418136639178655911290854900823965822016557984022559524404151145457531989355225201167552638730694567648106078527197197262664000000000000000000", + "phase_boundary": "7972861367460958776212252228632194474675327724434502267761337165456548279425705903900267461175491954734201516177128760481088686457320526147051319029076735763383677135864102618496519540184100350342167/6257972861367460956437445290583295292248078634338994059922810483627327835731182258170980164793164403311596804511904880830229091506397871045040233510527746138913529621215705439439452532800000000000000000", + "gamma_sublinear": "1/2000000000000000000", + "cell_above_band": "7812499999999999988276266961645336902226596693385440442344950853538128712548243447732920102668011088643137397004272247930251997180059449481106817808501330596849854055920158663179043986740184100350342167/15644932153418652391093613226458238230620196585847485149807026209068319589327955645427450411982911008278992011279762202075572728765994677612600583776319365347283824053039263598598631332000000000000000000", + "prime_interval_packing": "4983038354663101679653306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833", + "alpha_positive": "9966076709326199448073574874456017536694986309183017248463958072288507212221270446645308659466592782633402644153348968038361563056788287407109696661013270491766082439790462478359652740184100350342167/7822466076709326195546806613229119115310098292923742574903513104534159794663977822713725205991455504139496005639881101037786364382997338806300291888159682673641912026519631799299315666000000000000000000", + "alpha_below_one": "7812499999999999996098733038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833/7822466076709326195546806613229119115310098292923742574903513104534159794663977822713725205991455504139496005639881101037786364382997338806300291888159682673641912026519631799299315666000000000000000000", + "alpha_below_one_fourth": "1945650442468005349438628078432823761290829586921752626477414318061251441453773185231785992838397283252240598765816926291408229532692546414167963275378907397918711924190117487346469263759815899649657833/7822466076709326195546806613229119115310098292923742574903513104534159794663977822713725205991455504139496005639881101037786364382997338806300291888159682673641912026519631799299315666000000000000000000", + "delta_positive": "1/8000000000000000000", + "delta_below_one_eighth": "999999999999999999/8000000000000000000", + "short_record_fallback": "30478598476511706431024567082987969105375839294687592497690793597955073870141137474441935830007548093665036984092966951678301937223502619004194672759469460224017020606396925018267635026481255358644771702582510939366017476904558361489777840885667669931959115946648816091836997577473413807127507907872630784760995285791770977487688671768629033978255889/30556508112145805451354713332926246544180071456733369433216848064586561697906163369975489085904123063044906272030785550928852985871083354712110515188123760443913718853592311716012951820312500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "small_field_exposure": "1/1000000000000000000", + "artificial_boundary": "219068914454698438300481510738395800983243355293403441069877566784478727291602559983640446283722542866534459989463378489418407668715736493358288886995605853765991622680867741588040969351779447698948973499/31289864306837304782187226452916476461240393171694970299614052418136639178655911290854900823965822016557984022559524404151145457531989355225201167552638730694567648106078527197197262664000000000000000000", + "literal_scalar_guard": "1", + "row_product_gap": "23971789/25", + "balanced_prefix_above_kappa": "4045468819851490189401480006201574325107529753481304086824854316417593490928821107367398336193093387166274340668677616382682031032273159246039865623585785382853934337512826232657324831/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833000000000000000000", + "coordinate_movement_above_kappa": "12697106513750254238766647771506443575826219285587790664756972730970245307336659187146482070177457870298604021455953526961591040250713354215070240184100350342167/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_phase_layer_above_kappa": "67117890748413545814038349793507383726240303509716399686548882075256796798416098005267866598682817548263168924368532931894424420387244921444859839752972023016489162126505166503833499/1955616519177331548886701653307279778827524573230935643725878276133539948665994455678431301497863876034874001409970275259446591095749334701575072972039920668410478006629907949824828916500000000000000000", + "bulk_exposure_above_kappa": "12697106513750254238766647771506443575826219285587790664756972730970245307336659187146482070177457870298604021455953526961591040250713354215070240184100350342167/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gaussian_arithmetic_above_kappa": "12807585367038606026344823516539796812584992295541076257340051770005348440770624302154873674566108336981454711249718178466990337300691926952568195268287076378726694633803530363010309483/31289864306837304782187226452916476461240393171694970299614052418136639178655911290854900823965822016557984022559524404151145457531989355225201167552638730694567648106078527197197262664000000000000000000", + "scalar_work_above_kappa": "5690503504091451683487687348599607008641037776277712281429415595814733606019715989516464817309803869052089344505896076108512613213337320913033755808921288345202103737368558792321788163/6257972861367460956437445290583295292248078634338994059922810483627327835731182258170980164793164403311596804511904880830229091506397871045040233510527746138913529621215705439439452532800000000000000000", + "dimension_above_kappa": "3901266961645336898459565513236930631746430859739703037655773201214224189492865405060730887933093355297650333373152836647381158477178946979531885088193317909218909610325969483204276504512826232657324831/3911233038354663097773403306614559557655049146461871287451756552267079897331988911356862602995727752069748002819940550518893182191498669403150145944079841336820956013259815899649657833000000000000000000" + }, + "outer_controls": [ + "next_grid", + "zero_eta", + "zero_beta", + "unit_beta" + ], + "bootstrap": [ + { + "gap": "394560299626152449704787507599550919609969/250000000000000000000000000000000000000000000000", + "cutoff_log2": "14452924988782" + }, + { + "gap": "251661965601853643089249074774761811264167434753102626482482953/125000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "8881521227214325033" + }, + { + "gap": "160517277056504562406197836976658546419443310699747899442685055981767860395084180961/62500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "5457816972736447330150835" + }, + { + "gap": "102382559764306574540499089777812253261274647675987315920495989221745685653535849478340800795877451358457/31250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "3353903610185135321783844597196" + }, + { + "gap": "65302556435728193499811063235771030982105668330413282928545270571274337808648422369631901888319950896069998229008955935600209/15625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "2061019906421122020121383674985274827" + }, + { + "gap": "41651858352228493556424173780714412209335243027269029754692663340812853517929822542129701395978544046473038408959749286645784929759815899649657833/7812500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "1266525084908344172623892115269137484923953" + } + ], + "bit_template_sha256": "ecea4ea3ca01911127e70043644765f2991218755d97f26c96df6a79006f088d", + "complex_template_sha256": "23142d89d88dcc871c52034b4014fc98ddc76d9cce15621f88b9ec4fd0f198d6", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "emitted_program_sha256": "ca6f38adf4dcc53d756ff0e27febeed2080ba09d6d181b094b889aa5393b2ee3", + "bank_assignments": 0, + "bit_profile": { + "1": 217576, + "2": 93392, + "3": 24064, + "4": 31112, + "5": 8624, + "6": 5664, + "7": 5168, + "8": 792, + "35": 8, + "56": 440 + }, + "parent_kappa": "126653614863031/100000000000000000", + "additional_interface": "Explicit paid two-sided residual adapters; distinct borrowed host families within every invocation; inherited Gaussian compiler and idle-data hosting", + "row_bound": { + "method": "successive nonzero-norm vectors in nondegenerate complements", + "minimum_q": 3, + "column_exponent": 3003, + "factor_two_power": 78, + "cover_exponent": 3081, + "physical_families": 9609, + "physical_exponent": 9, + "stock_exponent": 3090, + "halving_depth": 3, + "complete_row_coefficient": 19431, + "retained_row_coefficient": 20161 + }, + "row_controls": [ + "false two-level halving", + "understated row reserve" + ], + "halving_depth": 3, + "finite_controls": [ + "old 128-bit prefix charge insufficient", + "old 512-bit composite charge insufficient" + ] +} diff --git a/research/e8-complex-adapted-kernel/EXPECTED.json b/research/e8-complex-adapted-kernel/EXPECTED.json new file mode 100644 index 0000000000..e06a17c177 --- /dev/null +++ b/research/e8-complex-adapted-kernel/EXPECTED.json @@ -0,0 +1,81 @@ +{ + "status": "PASS_CONDITIONAL_COMPLEX_ADAPTED_KERNEL", + "kappa": "1274032589159993/1000000000000000000", + "kappa_decimal": "0.001274032589159993", + "bit_lower": "10205262550350024303/8000000000000000000000", + "complex_lower": "1297203880559577927527/1000000000000000000000000", + "binding_component": "bit", + "bit": { + "live": 9600, + "physical": 9609, + "maxchild": 56, + "rank_mass": 745536, + "hosted_residuals": 65120, + "prefix_bits": 155, + "charged_prefix_bits": 192, + "coefficient_bits": 155, + "three_level_coefficient_bits": 520, + "charged_three_level_coefficient_bits": 1024, + "row_coefficient": 19431 + }, + "complex": { + "live": 9600, + "physical": 10178, + "maxchild": 64, + "rank_mass": 851136, + "hosted_residuals": 49280, + "wrapper_events": 13904, + "charged_wrapper_groups": 788480, + "max_helpers_per_physical_family_per_call": 1, + "physical_stock_bits": 3929, + "router_bits": 11850, + "literal_bits": 37859, + "row_coefficient": 20161, + "row_bound": { + "status": "PASS_FRACTIONAL_DEPTH_ROW_RESERVE", + "block_steps": 9, + "block_halvings": 4, + "exact_shrink_inequality": [ + 350356403707485209, + 288230376151711744 + ], + "stock_bits": 3929, + "row_slope": "76005/4", + "additive_stock_charge": 35361, + "minimum_log2_width": 32, + "retained_row_coefficient": 20161, + "threshold_margin": "1751", + "coarse_three_level_row": 21948, + "finite_three_level_halving": [ + 704969, + 524288 + ] + }, + "row_controls": [ + "coarse three-level row exceeds reserve", + "nine steps do not guarantee five halvings", + "insufficient row cutoff" + ], + "local_bound": 18687781085682, + "pervertex": 1772686901993840, + "halving_depth": 3 + }, + "emitted_program_sha256": "ca6f38adf4dcc53d756ff0e27febeed2080ba09d6d181b094b889aa5393b2ee3", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "bit_profile": { + "1": 217576, + "2": 93392, + "3": 24064, + "4": 31112, + "5": 8624, + "6": 5664, + "7": 5168, + "8": 792, + "35": 8, + "56": 440 + }, + "parent_kappa": "126653614863031/100000000000000000", + "bank_assignments": 0, + "bit_template_sha256": "ecea4ea3ca01911127e70043644765f2991218755d97f26c96df6a79006f088d", + "complex_template_sha256": "23142d89d88dcc871c52034b4014fc98ddc76d9cce15621f88b9ec4fd0f198d6" +} diff --git a/research/e8-complex-adapted-kernel/LICENSE b/research/e8-complex-adapted-kernel/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/e8-complex-adapted-kernel/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/e8-complex-adapted-kernel/MANIFEST.json b/research/e8-complex-adapted-kernel/MANIFEST.json new file mode 100644 index 0000000000..dfbce9065f --- /dev/null +++ b/research/e8-complex-adapted-kernel/MANIFEST.json @@ -0,0 +1,24 @@ +{ + "EXPECTED.json": "a4312cb0c53c2066a28b683a971a41e7d76c5f6d828a96481c3ae7b3c01bb2f3", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "NOTICE.md": "099bb7b9802689dc9e54ad5033a8af33133708c111b666a1ac17fa4c2fabbfdc", + "PROOF.md": "8aed82d7ac3f917976b8f3e72ce1bd124e2f95322f4b666c37025c88b95de4be", + "README.md": "d0cea560d1c2055caf47c2cbe7f840b757cfece384691dc52d22dec3c6f77d25", + "SOURCE.json": "db4995de0050e5d8222d3d2c7bc2c4c59c7c9e69fe2495d80c711bbd15347ce4", + "code/adapters.py": "001b80a9366e29f28f3785e146062e12b1913e5da79b5e6d6b7090c6425d7015", + "code/assemble.py": "eb72118930262057fccd85216f683112dfd4f84be192cc82b34e5708cd1feb05", + "code/audit.py": "2dd35e3d583ae27004d1ff53fd0f96e0f2f10dae3b5376dc8bb6aebeafe9f349", + "code/check_metadata.py": "f36600aa4d44a0694a567f450c5b7a944c940496ca9a4958083aa9d5f5d7392d", + "code/emit.py": "b5170f68223c910ae806255ee1975b33801df3a729da0d6c2ba50ae96ec0c911", + "code/local_audit.py": "ae5baeaaeea26cf0a1faa59fbc18a8ad4805f5a8f2eba9644abf44f82c74845d", + "code/rebuild.py": "da5b22a63074f8da43b2aefd489049a3a4622518f19d72654ea82d091243a0f7", + "data/hosting.json": "dc5fe719e71c26e856f0da96518af635ed2026b1c323052d97ee4e6b9839f2f1", + "data/kernel.json": "91aa509f2542c89928c7f31209bd010ea322f643bd7ca65ac0e449850eb5ada6", + "data/word.json.gz": "2e13b2dd1e1b0dfa341dbd57b91ee1758ad041cd5ce2e734bf2f9fd0bac155cb", + "upstream449/NOTICE.md": "4c111ede74aa51bb9c50b6093817aa3a9eecc5eeb3444867926e2998e322b1bb", + "upstream449/PROOF.md": "070d44b14efd5b62f44cb8eb6be35fb19090e6dce88f1a1768789d31b53241a5", + "upstream449/audit_cxg.py": "12e8fe32136a0f32e5363f97113cf0c32efda6a331dc391758cd58ed8f5f9d1b", + "upstream449/emit_cxg.py": "26c646d5a777c1306224abb08d4031b3b1ffcbed8a212a0e58579de13b0ee658", + "upstream449/phases_cxg.py": "0f2795aaffafe0c64d77f3748ef2109a3c42c58da867e4cf269a0a8cb6109466", + "verify.py": "e469d30bd603654302579b0b9fbfa528f694252479f860d8f45d9cec5a44055f" +} diff --git a/research/e8-complex-adapted-kernel/NOTICE.md b/research/e8-complex-adapted-kernel/NOTICE.md new file mode 100644 index 0000000000..f9585ff61c --- /dev/null +++ b/research/e8-complex-adapted-kernel/NOTICE.md @@ -0,0 +1,20 @@ +# Attribution and assistance + +The shared-donor complex kernel selection and three generalized local +checker/emitter/phase scripts come from DreamingOfClouds PR449 at +`7fac5292693bf738ff5eed6ec754f8ec22ebcf8e`, prepared with Claude Opus 5.5 +through Claude Code. The original PROOF and NOTICE are retained verbatim +under `upstream449`. That draft's entrance-gauge construction and numerical +claims are not adopted here. + +Exact frozen reconstruction, the paid two-sided residual construction, +distinct-host assignment, independent local/global audits, new cost invoice +and this release were prepared by chafreaky with OpenAI Codex assistance. +They build on PR454 target mixing, PR451's eleven-stage complex geometry, +PR443–445 kernels and row bounds, DaysSky's PR442 idle-data hosting, +icekylinx's PR433 split centres, Zhihao Chen's PR425 common-frame realization +and PR377/386 geometry, and the inherited E8 work by Jacob Sussman, Dylan +Crow, eumemic and other contributors. All parent notices and licenses remain +in their source-pinned packages. + +Apache License 2.0; see LICENSE. This is a conditional research artifact. diff --git a/research/e8-complex-adapted-kernel/PROOF.md b/research/e8-complex-adapted-kernel/PROOF.md new file mode 100644 index 0000000000..4a47218aea --- /dev/null +++ b/research/e8-complex-adapted-kernel/PROOF.md @@ -0,0 +1,232 @@ +# Paid residual adapters with distinct borrowed families + +This is a conditional finite construction under the inherited exact Gaussian +rank-zero compiler and analytic interfaces. It supplies explicit local and +global operator arguments for the new construction. It does not assume that +an isotropic entrance is orthogonally conjugate to a coordinate entrance. + +## 1. Exact kernel and common-frame realization + +Start with PR433's R560 split-centre complex word, freshly rebuilt through +PR454/451. The frozen PR449 selection partitions its chosen helpers into +14 disjoint classes. In each class a rank-one entrance E is contained in the +first frame of every donor and pivot. Exact elimination verifies every +response relation `col(p) = sum_d q_d col(d)`. Donor columns are independent; +pivots and donors have disjoint roles, including across classes. + +Insert `d <- d - q_d p` at E before the old main word, let p start at E, +and rebuild the complete full-frame cleanup as the exact inverse of all +non-target gates. There are 79 pivots and 229 inserted additions. The new +response of each pivot is zero, so zero-frame dirty compensation never reads +a helper whose entrance is nonzero. The literal emitter and independent +label audit check this condition rather than assuming it. All coefficients +are dyadic and every scalar operand pair shares its actual current frame. +The rank-one entrances are isotropic; no coordinate-entrance test is used. + +`rebuild.py` reconstructs all gates and their exact coefficients from the +parent word and the frozen selection. It recomputes the frame chains and +paid profile. Only two old floating discovery estimates are copied as +non-semantic metadata; their final bits vary by platform and they are never +used for reconstruction or pricing. The exact word and all its mathematical +inputs are compared to the frozen output. Both scalar orientations are +replayed on all 800 columns, including every initial target and dirty helper. +The forward result is `(x,h,y) -> (x,h,y+x)`; the other is the inherited +inverse-transpose result `(x,h,y) -> (x-y,h,y)`. + +For a local binary frame F, let T_F be the canonical Clifford representative +in the retained `clifford_exact.py`. Its definition and exact lowering for +arbitrary, possibly degenerate subspaces are part of the inherited finite +realization. A climb A -> B applies `T_B T_A^-1`. Common-frame scalar gates +commute with the common T_F. Induction through the emitted program therefore +gives the scalar matrix conjugated by its current block-diagonal labels. +Every centre copy, directed centre child and cleared work lifetime is +explicit. The new 2,932 phase-edge equalities and all 240 data endpoint +adapters are checked, including global phase. + +A helper beginning at E and ending at FULL consequently has physical +residual + +``` +S_E = T_FULL T_E^-1. +``` + +This formula means apply `T_E^-1` first, then `T_FULL`. The initial label is +an interpretation of its arbitrary physical input: if that input is h, its +logical scalar value is `T_E^-1 h`. No T_E entrance transform is executed or +silently charged as rank zero. We remove the upstream emitter's generic +helper adapter placeholders and retain the checked data endpoint adapters. +The independent auditor rejects missing paid wrappers and wrong labels. + +Both scalar orientations leave every helper row equal to its input and +use the same helper frame chain. Thus both have the same residual S_E; +the backward scalar orientation does not replace it by S_E^-1. + +## 2. Two-sided monomials, including their exact phase + +For each of the 14 nonzero canonical entrance frames, exact Clifford +lowering gives + +``` +S_E = L_E (C_[w] tensor I) R_E, w = 9 - dim(E) = 8. +``` + +L_E and R_E are explicit Gaussian monomials: invertible binary address +permutations, quadratic phases, translations and a scalar power of i. +The tableaus and a nonzero exact Gaussian state vector agree, which fixes +the otherwise undetermined global phase. The independent adapter audit does +not call the lowering generator: it decodes the serialized monomials and +checks the complete product against the canonical S_E. + +Apply `R_E^-1` before the entire local invocation and `L_E^-1` after its +full-frame cleanup. The exact residual becomes + +``` +L_E^-1 S_E R_E^-1 = C_[w] tensor I. +``` + +For the 481 helpers with E=0, S_E is already C_[9] and both adapters are +identity. There are 158 nontrivial wrapper events per call, 13,904 across +all 88 calls. Wrong width, wrong pre-adapter order and wrong global phase +are rejected. The 79 nonzero entrances have no additional recursive child: +C_[w] here is the proved normal form of their already charged local climbs, +not a second invocation appended to the program. + +These are two-sided paid adapters, not an orthogonal conjugation of S_E. +They may mix the selected eight axes with one spectator axis. Their complete +product restores the spectator identically, for arbitrary input data. +This distinction is essential for isotropic entrances. + +## 3. Routing and why simultaneous borrowing is valid + +Use the unchanged 11-stage dimension 89 data geometry, five data pairs and +eight replicas. There are 1,200 data families per replica. At a local call, +its 240 active data families and all 560 borrowed helper families are +pairwise distinct. The frozen assignment enforces **at most one helper per +physical data family in that call**. It hosts every one of the 49,280 +helper occurrences without a bank or padding child. + +The windows are derived from the complete schedule. A borrowed host pair +is not the active pair. Its invocation lies strictly after the host pair's +last data invocation or bridge and before the relevant pending idle child. +Every assignment has its own width-eight or width-nine interval. Every +helper occurs once, intervals within one idle child are disjoint, and the +one-helper rule is checked independently of coordinate-slot disjointness. +A mutation that packs two helpers into disjoint slots on one family in the +same call is explicitly rejected. + +For the host's port q, the parent supplies the orthonormal basis +`B_q = U_q direct_sum I`. Let its assigned pending interval contain vectors +`b_1,...,b_w`. Choose the first w columns of sigma to be those vectors. Add +the first unused basis vectors until its first nine columns are specified; +these are the local spectator coordinates. Append all other unused basis +vectors in order. Hence sigma is a permutation of B_q, belongs to O(89,2), +and is completely specified by the recorded nine indices. The independent +audit checks the parent basis, every selected vector, the spectator and +completion, and all 49,280 route instances. + +Use the inherited convention `g = d sigma^-1` for the owner cover class. +Right multiplication is a bijection on O(89,2). At local cover class d, +the helper residual is `P_d (S_E tensor I) P_d^-1`. The paid wrappers are +`P_d (R_E^-1 tensor I) P_d^-1` and +`P_d (L_E^-1 tensor I) P_d^-1`. Since d=g sigma, their complete effect is + +``` +P_g P_sigma (C_[w] tensor I) P_sigma^-1 P_g^-1 + = P_g (product of C_b over the assigned pending vectors b) P_g^-1. +``` + +The equality includes global phase and identity on all spectators. The +route only permutes an orthonormal basis. Nonorthogonal address maps occur +inside the separately charged Gaussian monomials; they do not relabel the +orthogonal cover classes. + +Because each helper has a different physical family within the call, +these before/after wrappers act on distinct streams. For a fixed family, +d -> g is a bijection, so different d invocations in the same cover sweep +also have distinct owners. No two simultaneously realized logical variables +are identified. The all-column local theorem applies to arbitrary borrowed +values, including values correlated with active data or other idle streams. +The local data result is independent of those helper values, and each helper +has the displayed block-diagonal residual. + +After a complete call, the host therefore has only its assigned coordinate +factor. Factors from different calls use disjoint pending coordinates and +commute. They also commute with the retained idle translations. The remaining +idle child fills the unassigned coordinates, and the parent's exact phase +correction is left unchanged. The original idle operator is recovered. +Intermediate monomials need not commute with earlier stored data: their +complete wrapped map is proved for every input, and no other helper aliases +that host during the call. This is why the one-helper rule is required here. + +## 4. Complete program and independent verification + +The same signed bridges, data route corrections, terminal translations, +signed exchange and all-live cover correction are retained and rechecked. +There are 8,520 exact data/idle/terminal phase equalities, 1,320 orthogonal +data routes and 24 omitted bridge-shear controls. Ten exact global integer +data rows compose to the identity; combined with the two independent local +800-column theorems and the distinct-owner argument above, this establishes +the finite scalar/physical template uniformly over all ports and cover +classes. It is not an enumeration of the astronomical complete cover. + +The emitter serializes both pre/post monomial recipes at each renamed +physical owner. The independent decoder recomputes the instruction digest +from the local records, owner tables and exact adapter recipes. It checks +2,107,512 events and rejects 25 global mutations. Seven additional local +controls check adapters, common labels and restored helper rows. + +A fresh default regression runs the generalized PR449 checker/emitter on +the unmodified parent. Its newly emitted local programs and local checks +are exactly equal to the parent. The only canonical metadata differences +are an empty target-level map and explicit centre-edge inventory; that +inventory is independently derived. Copied parent global files are not used +as evidence of regenerated local programs. + +## 5. Paid profile, finite costs and outer assembly + +The exact complex profile is + +``` +rank 1 2 3 4 5 6 7 8 16 46 64 +count 175744 82016 4968 20344 37072 1264 2568 7264 8 512 1912 +``` + +Its rank mass is 851,136 and `89*9,600 - 851,136 = 3,264`. There are 9,600 +live families and 10,178 physical families, including the unchanged restored +private reserve of 560 tableau,16 centre and 2 coefficient families. The +largest child remains64. The inherited bound `89^9 > 16*64^9`, including +its additive depth constant, retains row allowance 20,161 for +`log2(width) >= 32`; the already retained finite leaves cover smaller widths. + +Every wrapper is charged eight restored rank-zero compiler groups. Two +cover-coordinate permutations and the fixed monomial's diagonal, address +permutation, translation and scalar phase use at most six such groups; +two further groups cover owner/window selectors. The invoice deliberately +charges pre and post wrappers for all 560 helpers, not just the 79 pivots: +`2*560*8*88 = 788,480` groups. This overcharge is added explicitly to the +new local primitive counts, existing route/phase charges and all bridge, +terminal, work and cover-correction costs. No extra persistent work survives +a child. The local bound is 18,687,781,085,682<2^48; the router takes 11,850 +bits and the literal charge 37,859 bits, within the retained2^30000 and +2^100000 limits. The2^210000 precision guard and three-level envelope pass. + +Two independent rational moment engines certify + +``` +b >= 0.001297203880559577927527 +``` + +and reject the upper interval endpoint one 10^-24 step later. The complete +fresh PR454 bit verifier supplies +`c = 0.001275657818793753037875`, which now binds. Both finite invoices, +six exact bootstrap levels and all 47 strict outer constraints give + +``` +kappa = 1274032589159993 / 10^18 = 0.001274032589159993. +``` + +The next10^-18 grid point and zero-eta, zero-beta and unit-beta controls fail. +This is 0.591885% above PR454. The local/all-size Gaussian compiler, +restored-work, fine-grid, precision, row-divisor and analytic interfaces +remain conditional. No unconditional multiplication theorem, new Lean +proof or kappa=1 claim follows from these finite certificates. diff --git a/research/e8-complex-adapted-kernel/README.md b/research/e8-complex-adapted-kernel/README.md new file mode 100644 index 0000000000..54ca8009c4 --- /dev/null +++ b/research/e8-complex-adapted-kernel/README.md @@ -0,0 +1,67 @@ +# Complex kernel with paid residual adapters + +Conditional **κ = 0.001274032589159993**, **0.591885% above PR454** at +`d14eb0dd425bd681e3b43f208d089e679d600176`. +The complex lower endpoint is `0.001297203880559577927527`; the unchanged +PR454 bit endpoint `0.001275657818793753037875` now binds. + +PR449's shared-donor kernel has 79 isotropic rank-one entrances. Such an +entrance cannot be orthogonally identified with a coordinate axis. This +package instead gives each residual explicit, paid Gaussian monomials +before and after the complete local call. Their exact product turns the +residual into a coordinate C factor and restores its spectator axis. +There are no uncharged helper entrance transforms. + +To make that physical construction valid, at most one helper occupies each +host family within an invocation. A new frozen assignment hosts all 49,280 +complex helper occurrences under this restriction in the eleven-stage +dimension 89 schedule. All residuals remain whole. The9,600 live families, +10,178 physical families and 20,161 row allowance are unchanged. + +The uniform operator and borrowing proof is in `PROOF.md`. It explicitly +separates the paid two-sided adapters from orthogonal cover-class routing. +The kernel is reconstructed by exact rational elimination; no discovery +optimizer is required for verification. Both800-column orientations, +2,932 phase edges,14 nontrivial adapter frames, all 49,280 owner/route +instances and 25 global mutations are checked. The fresh finite invoice +charges 788,480 extra rank-zero compiler groups conservatively. + +## Reproduce + +Python 3.11+, SymPy, a C++17 compiler and Boost headers are required: + +```sh +python -m pip install -r research/e8-r740-replica32/parent436/requirements.txt +E8_REPLAY_PHASES=1 python -B research/e8-complex-adapted-kernel/verify.py /tmp/complex-kernel-new +``` + +The output directory must not exist. Set `BOOST_INCLUDE` when needed. +The verifier rebuilds PR454 and its complete parent chain, runs the default +local-program regression, reconstructs the kernel, regenerates all new +phase recipes, validates the adapters, emits and independently audits the +global program, and recomputes both moment engines, invoices and 47 strict +outer inequalities. `--quick` skips only inherited PR443 exhaustive controls. +Every new check runs in both modes. + +The package manifest, upstream source inventory and exact expected results +are mandatory. Generated canonical words are bound by their decoded +canonical JSON so gzip container differences do not alter the operator +identity across Python versions. Frozen source bytes remain individually +hash-pinned. Receipts record completed checks, modes and source hashes. + +The two inherited floating-point discovery estimates are finite provenance +metadata, normalized to the frozen report before exact word comparison. +Their numerical agreement is not a proof condition. The verifier tests +2.1e-12 perturbations independently, rejects nonfinite estimates, and rejects +changes to exact gates, register counts or unrecognized report fields. +This fixes the Python 3.11 portability failure reported by PR460; the operator, +kernel selection, exact prices and expected result remain unchanged. + +## Scope + +The new paid adapter and distinct-host argument is supplied here. The +inherited all-size Gaussian/bit compilers, mutable-basis realization, +restored work, compressed geometry, fine-grid precision, row-divisor and +analytic transfer contracts remain conditional. No cross-family residual +split or entrance-gauge construction from PR449 is used. This is neither +an unconditional multiplication theorem nor a κ=1 result. diff --git a/research/e8-complex-adapted-kernel/SOURCE.json b/research/e8-complex-adapted-kernel/SOURCE.json new file mode 100644 index 0000000000..46f5203dc4 --- /dev/null +++ b/research/e8-complex-adapted-kernel/SOURCE.json @@ -0,0 +1,408 @@ +{ + "upstream443": "5a514e94f156edcc5fd827b87494d962f79d0f6c", + "upstream442": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "packages": { + "e8-r740-replica32": { + "commit": "5a514e94f156edcc5fd827b87494d962f79d0f6c", + "files": { + "PROOF.md": "380a5269e012cb7d54cdf13289b7187aa82c16d23ed1689c5986485398f5cdca", + "EXPECTED.json": "02f3fd3ac40f17f25822fa49d01ae6e84c2e02e2fafbf24f02845f24e02ec931", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "20b4bc7418b62a7126fc476b0e8757f713f09dbe03b430048e9f66326688ea88", + "verify.sh": "3720f542e9cf1ec35b052dec130b9cb6eefa37798f73ba5a4026b400c78d0697", + "README.md": "86030e96e06e0df02cc775ed1e41122854bc8dba2d1f90eb30b646436028ae5f", + "MANIFEST.json": "11f8fc7eb52127b078c1d29029ba71a2e1bd3340e9f4d76c92fae1e22511d550", + "NOTICE.md": "cb5bb6520addd9517672136c5519df4a2c06ed17b8afa1ce24e63855689c114d", + "parent436/MANIFEST.sha256": "7c6d4bd2ac74710d8a8a68fd637b31df9028a2376b569732374a739092c34310", + "parent436/EXPECTED.json": "a9655e303cb2c40ce024443b27c0a810ffc24f1ee1e5b07eb19241fad399b5e2", + "parent436/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/requirements.txt": "b9f87c1ec529679c19b8421a7a69b377b54b89949cfc5e1b1ed8c134bfab8917", + "parent436/SOURCE-pr381.json": "c457c422d54645ad841c8528bf2efa6c253d1c134ee86c875b9b7d76d4f9520c", + "parent436/SOURCE-pr417.json": "d9b7e606f09b840ed9fe10dc8c8250b4cab9bbe5d0cacb62864ca8366a28b2b1", + "parent436/SOURCE-pr426.json": "f884cc42793a3afd249ebee20985f61422e7b5baf7c1fcab5b990e1959f31697", + "parent436/SOURCE-pr386.json": "bba849ed0a1af4d45a76ec734d5f0d07806da2b161f1b5ad8ea63cf2d64b5aa4", + "parent436/verify.sh": "19bf483b109163b0ccc941f459e70c2e37d20c9c04e69e7c8eb98f329577b26c", + "parent436/SOURCE-pr431.json": "71cd86e64217fc4db0199ae8e5ef65cb0cc2ed593e15f03bc1501d4b32fdeb66", + "parent436/README.md": "d737a3b77de97bdf67d2a140465be5b8886af6aa57516f78ad8f2839f3dae8cc", + "parent436/SOURCE-pr370.json": "352a68f0898535311c63cac879a52b686246ba80844f1a3cc2f3c3f6b1046b4d", + "parent436/SOURCE-pr425.json": "a2c5e2f0e03b0dbcba4ca18282a4ff390a6a395f14411410cfff42d5281d0289", + "parent436/SOURCE-pr433.json": "f1181aa9f30dcc2e5df7e94738fa0c0cabe5f56b31c8eb843fa0a257da79ed91", + "parent436/SOURCE-pr376.json": "1608c15638f874243c3ad00bd6a08b30f0e9608de83002273819365ab300b0e7", + "parent436/NOTICE.md": "eb9cb7eab03977930484fee70d0aea066803917a6304b1ad2644cfcc6bf2acd4", + "code/iface386.py": "1b7c998513759195dee3e82a34c1a46dc3310236530a7f1dfbeefe00f108fc4f", + "code/config.py": "283d7fad45155ee91e704d63ec947cf4a60aeff5cc43510bc0e835f7da7d8767", + "code/global_kernel.py": "01cf4be0ab9affe48598062c4ae3610882aa77a9e18e75c4e596e2f08d8b2173", + "code/e8core.py": "1cb286196c1530d06f50f0997febc5993b388f33464e295611b920ba30a24eeb", + "code/replica_kernel.py": "780e08ad63983d0256271e8c7803c74bb1623d15cc202d98177c440ff3726aad", + "code/stages.py": "e73ab7836519510ed30dd7e3022dae557fa50fc513d723197929bff741859668", + "code/bank_routes.py": "7c6997c455bd55acca3a1603797c34e7733d557c27a7694a1429ff15773a505d", + "code/audit_kernel.py": "e49f9b499f98dc2938b10e32db28da3e4f38291dc345c0b5e7b906ca2b0cfb9c", + "code/export249.py": "6d9817f7c431573aff695e1eacfa7c2ca6d3a2a10baa3a2ea814ab9b9f7b13ab", + "code/compose_kernel.py": "010e081821f20bcf6e097306289031804b2609e5160dba1c743272126ef7472a", + "code/tile_m.py": "d6ae4a556472d403773cd2117c992bfc10e1187112da1b3893f3fae628a131dd", + "code/rebuild.py": "3efb6c81a247ac6d5cab87c47030a332292c2c46d482ff996588858f41cdad4d", + "data/word.json.gz": "d8d6d3d3f336720302bc40b3c1504fe3c3583a7a8d707bb9bd7b21f85e5e69c6", + "data/residual-isometries.json": "e12ed7ddd13cee101ba74a083b54665fd64d0b122b0bad5b83d817dcc8bae9d8", + "data/post-retiming.json": "d25a636bcebf97b46b01cd39259e8c4f59ab92a188f4cb4bd0b0b34936cf3b56", + "data/selection.json": "1a96e47f1889bc690316f95a3858b0062ce212ea876dd15e5123ed89d09a9c39", + "data/retiming.json": "f2b041a33577eebbf47f740ae1d7b94a68f2424de39df0c4ef075fad055c0793", + "data/upstream441/window-retime-selection.json": "170a2190b6bae36de3a18a8b4c1a152cebd95b839ae889da3049f9d9b0109e30", + "data/upstream441/pair-retime-selection.json": "201d8cbc8ac1df10ee74246815f3ce8507b94395af69835e8098a8274bca5651", + "code/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "code/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "code/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "parent436/discovery/README.md": "d840952ed60b4b460da83b04c4c8be3622b9bef04b62961c0d496c445f8b84d1", + "parent436/discovery/search_params.py": "57de04a8ea7e2df8b783e02c454bb102edab48206db0a41a1f28d50e7f164441", + "parent436/code/provenance.py": "e28fd87d0e34a6f6f6f1fddb6c4891deac220662c954de855d7aa5a7f9cceca4", + "parent436/data/complex-b-433.json": "161663bf22c8e6a62e2dce194b326016c11e551f31691140ef34355e9b2e4e92", + "parent436/data/complex-b-b4.json": "1bdd6a649615ddb6bf7cdf24abd7bb1bbd6cc9284e2aa44f796786310d3e1a3b", + "parent436/data/complex-b-nine.json": "2815ca568c88edde758c31e756d0d07aa08233243f365bc111383d7f0c1c757a", + "parent436/data/bit/bitE8-r740.json.gz": "f8daa4982d865748fa9a3095b2cf4290f34e2c085d6d35673fd7171cab95623c", + "parent436/data/bit/reuse-ledger.json": "e7bb324150a5342076c9a268f69b83c65f817a7cfc1d14fda9558a9f7e486f0b", + "parent436/data/bit/bitE8-r865.json.gz": "1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55", + "parent436/data/controls/pr426-bit-candidate.json.gz": "bd3b84244528767b85d8d7fe423b155630b5c659e21e51563674b1dcb6305ad7", + "parent436/data/controls/pr417-bitE8-nine-kernel.json.gz": "acc2b138ce16be1ff12570d3ec1634fe28cccaf259de797be0f62628fb37cccb", + "parent436/data/controls/LICENSE-pr426": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/data/params/params-r740.json": "871fc75ce6fea2638f68553bcfe771d09297e987d59c123338227e29415851d1", + "parent436/data/controls/pr386/COMBINED.json": "6043a7486790ac8ca04dc67ddf5b57076e7c880b66eb456127c6cd933c77764a", + "parent436/data/controls/pr386/AUDIT.json": "59625785de14c3df03abe009cdc67c7918b8fcfa8dc5f468c3d363af0494cbb7", + "parent436/data/controls/pr386/GLOBAL.json": "55af2a11552c04f5a87268bc2d1798246297874e9e87b50e49773e91cc495c2d", + "parent436/data/controls/pr433/CERTIFICATE.json": "f71580f22193726fb582eae604807ff70a7302265e001d9484a718e63bbe14c4", + "parent436/data/controls/pr376/LICENSE-pr376": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/data/controls/pr376/reuse-selection.json": "0b300bab47cf0d69cbc7965bf01c2a27c96b97677ee651334470d8c968b603f1", + "parent436/data/controls/pr376/frame-selection.json": "a83d4880579fb1f8cffb701d1d685c157b7fa14ef9d6642e42ff1e4f5a1b8c5c", + "parent436/data/controls/pr431/VALIDATION-LOCAL.json": "2b77c882ac524adbbacc9775ee172c854ecd4027e36db59ed15a7d1b6b9e1ce5", + "parent436/data/controls/pr425/FINAL.json": "46ea33ad1979cd14a2b686e8742792739312a07ab72945517c3809b647b31c42", + "parent436/code/reuse/controls.py": "89df84f78064de12cd11f0f5f63aa9cad2385f5d18d2e4ade7409a5ae0435721", + "parent436/code/reuse/ecost.py": "901c61f0a8082fc87012f91372aafbb2a1b464be685426e32e77cc9f0e393958", + "parent436/code/reuse/reuse.py": "b802483c024d23c92df30f1a2d93838280e39dfa0bd7129b879d6cc0b84c80a4", + "parent436/code/reuse/regen.py": "972740a54e487b12aebc09f2fab5f2878835727cb4ad82fb1aa26a0f2d34f517", + "parent436/code/reuse/retime.py": "d8530464a6e00e0a509cf8b392cae70579c8d0f636a0dc86677f5dee0863d34d", + "parent436/code/bit/mutate_records.py": "b0e75d6550412a7be4017695e6b237392b611bb852ad8ff309d6682c9f166a4e", + "parent436/code/bit/receipts_k.py": "67f714e10a846e9cc62996342f825cd715055031e0b12591abdafd225717e195", + "parent436/code/bit/export_records.py": "8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3", + "parent436/code/b4/kappa_b4.py": "cc47efc71334d7d41d6475c5dfc8080a278d3b694b335c6a9873dad4632d1f7e", + "parent436/code/nine/compose433.py": "27dd61574f1f6921238ff9f57c6fd536e6f0a0983138bc5c99aeb141d3ccc195", + "parent436/code/nine/certify_g.py": "97a5f7e9bf2202d170da17d5d17d876903641d7d24433115c27ea95b9fe65ccd", + "parent436/code/nine/audit_g.py": "48ac1d66a406ed72dd9192a19118776ba253f5c90e96185f5c1b98bb670a6361", + "parent436/code/nine/regress386.py": "bf97418a9aec7c3f55d04d4754e626f17f44aa2059ffd8acd7b315dcf9e89110", + "parent436/code/nine/global_word_g.py": "ff8d6be2432b79584dc2f2d2bdcd3cefede0d0730d1eecb0a6859dd527f5fce4", + "parent436/code/nine/geometry.py": "36eeda3184bd009e89462b65c8725d10860c444f8da8f1f87e5f6e50120011ca", + "parent436/code/nine/cited.py": "b6722d990fba39ef41b3d658326bdde97c25b749a454bda2509fdffeabd31a86", + "parent436/code/tail/bootstrap.py": "6811203fb7df1ac8a9eee3fbeca722de98dbc99077921fe77e0d452c760f0ffc", + "parent436/code/tail/e8core.py": "1cb286196c1530d06f50f0997febc5993b388f33464e295611b920ba30a24eeb", + "parent436/code/tail/apply376.py": "ac49a9a7da44a1e8fbf468c6d8901b5712705d3caa9dd3e0cb89f056f0e67b2a", + "parent436/code/pricing/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "parent436/code/pricing/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "parent436/code/pricing/prime_witnesses.py": "98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab", + "parent436/code/pricing/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "parent436/code/tail/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "parent436/code/tail/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "parent436/code/tail/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "parent436/code/complex/code/bridged.py": "5fe7174cd3a6580a74e4c1bf8fa7b426e8673f1c285603bf3076d4e758d70731", + "parent436/code/bit/producer/e8lib.py": "4f8a6843e83bc4f7055d7337f33dbe12ce499051f46bee1b81bbf6b34c652574", + "parent436/code/bit/producer/ham1.py": "359040fb432fd392472af6b8f5dca0234dd6c2be744a791df27ba62bc5da5175", + "parent436/code/bit/producer/params-r865.json": "1256c54debe0a551da8e24896ab73ef0bd4a5233ff8e6fedf21a9e6301d6e6f3", + "parent436/code/bit/producer/compile2.py": "0e23d4282ceb75768e82631da016aaff9818aec53c7d75a6b2a28ee1b1160dc3", + "parent436/code/bit/producer/frames.py": "ba71f77dd3e3c1c54f361c066cebe9faadbc78db46376046e7af625bf1de8c24", + "parent436/code/bit/producer/compile.py": "60fea6a9d6617a3f87376d3fda040642e9cb70e7c179015e03ede8d289f30357", + "parent436/code/bit/producer/fullword.py": "0daf87599e9e48646b985ad87351c56c1b73cfc99cdf9eca081483846ddbfa90", + "parent436/code/bit/producer/price.py": "46c858e60ba0a117bf8227b864abf55e85ebee2d56a0dce64472b706499ac405", + "parent436/code/bit/producer/ham2.py": "fdf0af785ce697bd7f80b4e75f7163735f3b599d9dc42f652f0ffdbdf18ea8bf", + "parent436/code/bit/checkers/gram_frames.py": "223a5a07731fc315a90a3e48177796babc155c1d9985c7ae5017eff6af2a0608", + "parent436/code/bit/checkers/tile_k.py": "64255088821f601ede2c3006f08cb97c39a4fa10dbbeb93a8a71fcfa0e1d8d77", + "parent436/code/bit/checkers/json.hpp": "aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63", + "parent436/code/bit/checkers/legality_h.cpp": "6c1ef2b24e57781d6951c172a1024fc4300e6fd392c9d6672079a7806ab663b3", + "parent436/code/bit/checkers/finite_k.py": "7e67dc75e63a11e38ac6d6615656c7cf6982e5a33dd404d04b967bf474cad02e", + "parent436/code/bit/checkers/certify_bit_k.py": "e68a81ef7981a90d613752003cd5cab5351e260f909b094f1668d8a4dfe480df", + "parent436/code/bit/checkers/columns_k.cpp": "1c344d18fcd494eeca93e259f10cafae7705780e6592f6dcb35b34752dab9bc2", + "parent436/code/bit/checkers/columns_h.cpp": "d1297f9052be4f2496e1ff2a77e4db2c0cdbd7d460d489b4c03e50bf317238ce", + "parent436/code/bit/checkers/cost.py": "d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f", + "parent436/code/bit/checkers/geometry_k.py": "646b7e8773d9c99376cb00627f109a97319e6d72b439ff513c39035c28c3f70f", + "parent436/code/bit/independent/mutate.py": "0ff65aace5da4b57d96235bf830f8f11969322e75134d498aeb70e9753ec6b0d", + "parent436/code/bit/independent/checkword.py": "11bf9620ca9db16d52d9fe806b814fc9ec9a89c4d7645354d1861d96f6e805ad", + "parent436/code/bit/regression/stage_cohort.py": "6c288f6f234b528c1a7c0a4adfb724e91e0fe6b18c8dffad96af3f973de1829a", + "parent436/portable-include/bits/stdc++.h": "420094be2af295eed03a983dd66debbbe9cfb78d8252859f4498a615a0074b99" + } + }, + "idle-axis-hosting": { + "commit": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "files": { + "PROOF.md": "cfe34bf0b64259661312dae22c3a23adc5bf6f6326951eee5c1488ccfc347542", + "audit.py": "38594423a401110bd430b734037c6ecba422ee6a94d71709984e0afa9cd1edf8", + "EXPECTED.json": "ed83c1bf1ca2d01eaab5149a34520806a07ef375dfa9e3ed69d123f4be4c9960", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "complex_hosted.py": "829c5c4f4bdfccedadd31505f1f0a394f7a208d1446b7bbf9cc92d3aa1530c0c", + "bit_hosted.py": "6dfbf26213e8adf87563b3575cfb722bd07ecd65627f056b3293411dd3d89a61", + "assemble.py": "f9a2e6a42aadcf971702a5a867760a092566ed03356f4f34387d38f4093ad1a6", + "README.md": "1151f74cad54ac4937282b7a8b5d1108ed4ce35944ef9b7bb7d17abfce1fe4a0", + "hosting_core.py": "d8b90cd5d152df3c7c351230863d9e61816ad5e1f21d69bea1a86a5daad559a3", + "MANIFEST.json": "f68b82604363329618529313ac9c3796dc1e88b176eaee4a7b0dec9be428e987", + "SELECTION.json": "315d54be472842707cce879618be477d8b897050e873bc136d114eec6a232f97", + "verify.py": "737a974d79fdd232b6c4b9e059c56835079971447342ed7ca3b82a614e30cb53", + "NOTICE.md": "027a868628d0408602dbeae688b031ed9b4abfd6e5401f6e8106a3eb25ebc4ca" + } + }, + "e8-early-reset-kernel": { + "commit": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "files": { + "PROOF.md": "fb4e1c3a23e3a0be48b5254133e584dad6fb523042ca8ef70358684fb9185962", + "EXPECTED.json": "6710a99055d7ee1d83d9f811822bb72db84f6ce95bd4e1e17f1df1659c7e958b", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "a5e84250b687624b2158597831fb36a5f2b068983862c491f8e1020c9806cc65", + "bit_global.py": "79c7dc84e65dca10c35c842cf170e4719d45c38a25d03bf762332b24c700b6c9", + "bit_audit.py": "203bb609952ad7b7ca761e9f9883ee9fa35a0a0474503b396d47a31169102e7d", + "README.md": "4d7d736eda667533ab55bf3949e30832d4676d7ebeee00d9608307ecc5aacd4b", + "VALIDATION.json": "77ad775cf69f5d913568b6276b0dfeb2eaef0306f57b71c0a467bff793807267", + "MANIFEST.json": "95a9570287b64d22de30e6ae3acf931d5f6daef1a163f0c99532e1a24639fbc2", + "SELECTION.json": "b5f5d8c78d912820c8ed1a67c21062bec799714b9caa6724dfd515306ad42a2b", + "bit_price.py": "36bf15803567a95b139a908461541bf19efe1f5b85fb31c270021833ab1393ee", + "verify.py": "16c07414bc956744dc93b8e35b642267ea9819be922b0d3e081c543fdbf92a70", + "NOTICE.md": "ff88b6031fe2fb5cbc483e8fcc08d228eaf2c982221adb3659da234dfa24cfeb", + "combined.py": "4d514b6c70e969ec306d8c2bb38edec95b0cb7fa09f48dadbec8aa1eead69ce1", + "source_span.py": "4772d177f37254c6f854af5ee3871aca193cfb24307a53c143c3bf517e56631e", + "apply.py": "0d530e9703e1d1734c7af205bd393cba89ac41f75ed9781ea3dc5e46650f44f5", + "local-evidence/ASSEMBLY.json": "7c3cc4b503e4cf0fd3e050be46ad0da183c5b1c490f4901245df944fd9d6194e", + "local-evidence/SOURCE-SPANS.log": "bdf95dbce8337be57aab8a3d3b42a711ee276496c40cbb4c5356fc9cc9b2e811", + "local-evidence/AUDIT.json": "76a146a9123d8b653e6e46ff93f153653f9cefd0f5c3fdd264a59f1322110262", + "local-evidence/FULL-PYTHON314.json": "85797531db037d06fb597a4c9b6ef6bd71e6a0ab4f220ae70b1b6bf3aeda205f", + "local-evidence/GLOBAL.json": "16c4e829eea1b2d12b70cec7e6a9c0e33ea0eae98a40894a3b779790fd2efbb3", + "local-evidence/BIT-PRICE.json": "9a4a320cab1ce62b0c2329ac1bf3b81f73580fd603a406e4bfaae2962dfdad35", + "local-evidence/FULL-PYTHON311.json": "62b37525bf7b60c0d9101ed571681f3bf46ea75df065939864307e4986018332", + "vendor/kernel417/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "vendor/kernel417/e8core.py": "3f4e25f700b7eb5821ab9cdfc65541f3f921baffeb8704beb21c6d7072052d29", + "vendor/kernel417/stages.py": "e73ab7836519510ed30dd7e3022dae557fa50fc513d723197929bff741859668", + "vendor/kernel417/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "vendor/kernel417/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "vendor/kernel417/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c" + } + }, + "e8-early-reset-reuse": { + "commit": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "files": { + "PROOF.md": "09388e2f9e6b8fcc626a5172d55c45a957835075c51c68d1e86fd42ff4655ae8", + "EXPECTED.json": "5521c7e995fec77941243b28e090f95f2188f193d5f61275275cfa11215eecc0", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "c52287239c43aece2b3533ef48ee204d845d652066bca716c288b0c47e779521", + "bit_global.py": "9c2178df133dc663416aac13d8c8da80a9e4f5f7174bb36413180fcbad994ffb", + "bit_audit.py": "219eb4dd8e5380fb0432daa6a30c265755a78834616b2c5fc7aa161feb0231ee", + "README.md": "442bf686c0b24b9d7781b7b138f32fddea5d4efffeddc6e41d04719d2545e0cd", + "replay.py": "e0782ba05dda36323500390349d1180f6117a9c6112b09b9e21e29f67c4e5f5f", + "VALIDATION.json": "bcb864a6b73d4ff4a24ab70ad51287653723c2115ce1c81db7817b81df2d9e92", + "MANIFEST.json": "4d23bafa43634a59e25f875333408b67cbecb1c912929824b5d45dea4de51da7", + "SELECTION.json": "9d47ade3fb69b3ef62a1a3ae75cebdddd57d144923977c5f2a07848ab596ea32", + "bit_price.py": "36bf15803567a95b139a908461541bf19efe1f5b85fb31c270021833ab1393ee", + "verify.py": "4e2082878acc1298f4354325b28f3cf047006170a9883148e7cf23002f6f02f1", + "NOTICE.md": "c4085541471fe63d8f735beacd397d356446376ad3e56b2673940a2df3b8437e", + "combined.py": "dc621dce9ac1634a2701318311b30dffee7cce7e0c6be7ae808f44b27eb17f0f", + "local-evidence/PYTHON311-GZIP-FAILURE.log": "ec1937c575536aeebe8f9c22d673fd66d1355ff870e2fdc80346205b29e42784", + "local-evidence/ASSEMBLY.json": "c9ce28f59a5e460d39a888bbbc464e3fd6dd1c0b2c54ae86baeeea99febc8176", + "local-evidence/FULL-PORTABLE-PYTHON311.json": "1dcca855b20cbac311a435f23f60001c342083edbef3194ba42a30e1f24c1982", + "local-evidence/PYTHON311-INITIAL-FAILURE.json": "7902e8ca1e167b98d1c29170f8d57c9896b38ccab89065e4ed4e2c3feea79076", + "local-evidence/BIT-AUDIT.json": "2e458c3936e42539095610a50c730266dddd96e94d1ead171a99dd5f1fe9ef47", + "local-evidence/BIT-GLOBAL.json": "39f89d1e5bf51e9b1f1155e123dc3226627e465a246d37bb00f55d44d20bcaa0", + "local-evidence/FULL-PYTHON314-INITIAL.json": "0966528d4b30459d8b35296f31dbadfa34cdc7792419b34ab2505b7098923325", + "local-evidence/FULL-PORTABLE-PYTHON314.json": "5687ed9209e11e64304d008a4a10678dc07cdc3522f5112c9a80557d45125c4a", + "local-evidence/BIT-PRICE.json": "96ec606146b5157871048e28f6649c31c1b6117d43be732e6a96bcc269c0e1b6", + "local-evidence/PARENT-FULL-REPLAY.json": "0ba447d6de6edd9fbe2371c36e3605dffa0c6526a874cfcb9bd19285c056bf1e", + "local-evidence/FAILED-LATE-RESET.json": "f6ed36b59de745d50f37fcb4c80d129d9a2de0dfe1fe3de2d18e678135f7d9b6", + "local-evidence/FAILED-INLINING.json": "95cbb0e6df953d25a888198c1072edf03db85b7c967a234680db3e095abd2dc7" + } + }, + "split-centres-global": { + "commit": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "files": { + "SOURCES.json": "11aa666d678fed084b01d1e8e47239e1674eaedbc6fe0cee7edb2753477af9be", + "PROOF.md": "6983e75f29af6eeaab20a30b08307ec6fab75ccb8b10291df8f9eb04d497f894", + "EXPECTED.json": "9b8e56eee3d5bdabd2e3e6e4ba0d9eba537525fba25a54126f9f0e41d2491a06", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "README.md": "b432292594adf2fcba2a8ddd87eda6167c76ff055e85aa5e3e2af7dd7e0f976e", + "CERTIFICATE.json": "f71580f22193726fb582eae604807ff70a7302265e001d9484a718e63bbe14c4", + "VALIDATION.json": "656d9bd7bd66058fdeb60cc90bd887e7ce75c0e0f9a100514e2bd84b95de89b6", + ".gitattributes": "2f9541c7c27f084baad73b4cd50ddaeb264cc3aa8dbf13ec21df5ab3f673ca7e", + "MANIFEST.json": "3129eb4321f706542470f8443f66a6b4351a12a9ceec85e7f76aa19db1e1e32f", + "verify.py": "12fcdb20a87f75812b09c4916fbfc86305982cb410247186a123b5c58d517b4c", + "NOTICE.md": "66101a9e74d0ba9c2da4c8802bcb1968534adfa7130b954628eb8bf515fc0389", + "proofs/PR386-BIT-GEOMETRY.txt": "c5f077b849e9add9957ab4ee36095dd47bc678dee7e09baa146dac4c0a0d66b2", + "proofs/INHERITED-COMPLEX-GEOMETRY.txt": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2", + "proofs/PR426.md": "5787738ceb6faf14d3d96e8452592860a6c6a469733a9bcf196e8d1562ba1ffb", + "proofs/PR425-COMPLEX.txt": "2cda27b9b9a1eb24127c38c2c7a6e085155a2472183e220189a3ea2c2b7720dc", + "code/complex_emit.py": "f56d5f01f7c121741f175814138dca7190d769920f0a27e2d5b99c21aebed0f1", + "code/complex_phases_full.py": "0f2795aaffafe0c64d77f3748ef2109a3c42c58da867e4cf269a0a8cb6109466", + "code/bit_global.py": "3b2cb3ba21e5cf9b4deddb9e606322f33e9d8082020c0ee9092c21f4ebd9ad48", + "code/bit_audit.py": "7fdbc077b7501a53662769ff2bf2ab44cc2e32dafc34478d7ef2c10e3144503a", + "code/complex_construct.py": "0f7f45b2333ec7daf4291e2bf675b49bc330b97fb5965dd27220ba353c291d6f", + "code/bit_construct.py": "a461e6c983531beb5c8ac82ff593f39ce4e056387d1d6061f6e6b294dde4395f", + "code/complex_audit.py": "adeba5ea113652b60105db2e8719b18ffa292d3cc23730cca614b40272348330", + "code/bit_price.py": "36bf15803567a95b139a908461541bf19efe1f5b85fb31c270021833ab1393ee", + "code/complex_integrate.py": "3792f41e409383e6989bda22801a4836a646a530f99e99bbd7244a8f3a1a8b4f", + "code/complex_phases.py": "13a959c52092776ae217df554b51c0298fa9eb3a350279acff6dece651c3f9cc", + "code/combined.py": "9c5bc70f2331b7342ceb252adcddb993581c45f80c37bcc58642dbad3b9775c2", + "code/complex_replay.py": "be2dccce2d1ad2c4f5c01a851c9c3896cc88236b5aeae706aad2ab16d6bfdad9", + "notices/PR426.md": "6a5593d0f284a2f0865037f5c5fa9e5f76f9e12cf50ec5284486d3b8137c89da", + "notices/PR426-SOURCE-PINS.json": "18ace817f2f9af22511bb303e99656ed114e534b87f3dd95a65ca4ca670baf2f", + "notices/NOTICE-PR352.md": "967e6d7e76e216e4898cf543c75b527e8d397ec1ddba3800cb20701f24c89524", + "notices/PR386.txt": "ae2241615a23063b18a04f1b7a88a52e62b3d7d42e333fbd21e3668567ab83d1", + "notices/SUSSMAN-NOTICE": "9419dd03a2f52cf8bdfc4d18216ce29f263ab583b27f01ced8e420985bcb7c81", + "notices/NOTICE.md": "025773f32fb43667395e64c627a1752877bdc93afbfe01b106703eee438d21d3", + "vendor/clifford_exact.py": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "vendor/export_records.py": "8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3", + "vendor/hamming_packets.py": "daa9301e2767a711cfe66c6bebaad68e1a3bdb97ec9e848c927527ab43b37ae5", + "inputs/bit-geometry.json.gz": "5c980202227859e8bb9b863f94503930c2a59d460c0421356688e2b0d828b4a1", + "inputs/complex-template.json.gz": "1b84904a31a733aab9bfdda3f528c06719f590d2133a43687a8bded955dc991e", + "inputs/e8-r865.json.gz": "1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55", + "inputs/complex-phase-receipt.json": "01763fee5017745de982f2ff5ee68004e815d6684097cc88011dfbfb1e789581", + "inputs/bit-r767.json.gz": "bd3b84244528767b85d8d7fe423b155630b5c659e21e51563674b1dcb6305ad7", + "inputs/complex-ports.json.gz": "77b0c0fa19ef3da1c7316010e13493aa5eea1a50c3506eddc08f7480e659878b", + "inputs/complex-phase-recipes.json.gz": "b5472bb1d3f9ff41b0819780a42886a7686b4caf3c0617bb1dc86158b3fb8671", + "inputs/complex-data-phases.json.gz": "c972b5b60649c2a52354f5160f69adc0f4a270fa09d32012beff9888774ab84f", + "vendor/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "vendor/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "vendor/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c" + } + }, + "r740-idle-hosted-replicas": { + "commit": "8c4242ea61c67827fe62b07b2edc093d7ddfa631", + "files": { + "PROOF.md": "8757a118f5521c46b9d271a91acdee6cd517dc0082cfeba8d638161df5b7ff9b", + "EXPECTED.json": "b1bfb2e2be69bd56efcc8436cca367dd9647b3144547a1b4eee4066ce46d0763", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "a7b3296796d1803eca966f3adf3bc99da5a53b60c321c077663f72687bb3afeb", + "README.md": "76b018c2aaf43934f84a0db641a13552023ede87cb3cbfe2388078e9d3fa6e27", + "MANIFEST.json": "bf48d4222cef9988f1051562df890c48d5c6f5c694efe9eb15c36b3197130515", + "verify.py": "357aaa68588b79f0fed00efb221fef2ce48ea2399752d1101c74ca6e9de85fa2", + "NOTICE.md": "15f8199a97de6c409e08aac13471307f10575c8590cd881f6423d4013788d6be", + "code/audit.py": "e770305d5b23967bf0fcd3757c9b04587b28931ae1ed30e9bc9e6f53d5e86218", + "code/assemble.py": "47df60e607f72c7b247f9ed7b6be30ca457a92003ac36ead76d6802561f3527d", + "code/emit.py": "29d8a75b4bb934485090688287ef7f26e5e29796bdc3fe162ed9c0b9badfa3fe", + "data/selection.json": "8510b140456e244be5d5f197372d97fd03c634967db487745b7f4be0a5bf83d1" + } + }, + "r740-hosted-eleven": { + "commit": "40ab91daf2b5e87fc4071dedae1699d5d7e7cecc", + "files": { + "PROOF.md": "4aede2a05d9570cc5d8a19032513c973137ee9083f079ae845b04f3f362e2ca0", + "EXPECTED.json": "1a2e35da8c586be03201a8d102c72f681b0b6698bbcb3a2ea286d8b0d9c0c1e4", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "976eebfec20d467f3384194fc03bd6f5b289a615e3b2deb70a7be910aaee8579", + "README.md": "15e76f8a2200af0f871b04d410ebd7fac059b800b5ec4a1f376a333c9f5638bf", + "MANIFEST.json": "4d53297535ffb17603f916fa59cdc4b7f941c3166fe9f8e576f9588fd2fb79a6", + "verify.py": "4a161d35c65fa1d35e655c3957c05a8164a003ca05c3effe9fee7dc8d0f38090", + "NOTICE.md": "b80411c1db53d12bf43d6cbb8bf2804102f2e57be2a2f55dd7820c6c2f2b9570", + "proof/UPSTREAM-PR234-NOTICE.md": "ce978c8dfc8a2b36eed7a53014b1a792248b22ef4cee3edd8adab825a571c429", + "proof/INHERITED-ROW-DIVISOR.tex": "6ad97a5cd7d6aecf978a81226e1c2763d37840caca130c61f3bf5c4ac111c5c8", + "code/audit.py": "9900a1b2f1f314f2b93ca8f99b5516ed2e1a7295d668ea51df2df89cef84e381", + "code/assemble.py": "42dbfaddd284088474a80f0b6e894332b6737b8e9f9b5c45260e21c5df139792", + "code/geometry.py": "9554182d67e434ea84b4430f909a2c400abc755d8487b51454a8e6968e62859d", + "code/emit.py": "ac63ee481f3d75cb9f0658faaa2412db81d55bc44d9f1ff1c0329ce1e75aa0d4", + "code/row_bound.py": "de4a9b9cd797e1a05da56f62cfe725c8728cea3a4aa031b7d1b0a68f869760d6", + "data/selection.json": "52dbbb68e8c147690d15eaa1d952df05d074b0c121885a4159d9f6732f391872" + } + }, + "r740-hosted-rank149": { + "commit": "f3a38153678b55063fc005901cc968266166507d", + "files": { + "PROOF.md": "78c291727cfcf5ee598a5119f1fc3a27f9e07c4bf9d7fc66c9d5fbca2e966aeb", + "EXPECTED.json": "ce9aada22438fa609a5b66dc9a8674dca4fecedfe9768708679d3945f433528e", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "e9aa01762c3ef08b97df664a1f8d1d47c0075b661df0f1f136612776bee98628", + "README.md": "99d3ac21b980c5e56a341c3040f7892ec26772cf2ea88c725c296875db93613a", + "MANIFEST.json": "79e7f24adc51d8b48cb9defe4d7a55035c00d29c81f9188853fce108361062f8", + "verify.py": "d8b76f61ee9002ff55890a3f05d6098bce6ff3cc9d1bd58e82ad243048f4e201", + "NOTICE.md": "2a8fab92450dda396139d23c3d641e378b17c4a472b7c8c684caf58ccc2759b2", + "code/audit.py": "837e91985e8a15c7d9cad5f3d6cbdebafc5cb899562bff1d11b61fcdaf77f99f", + "code/complex_emit.py": "1b635008cd5ea3ef9f08a878857a4560e9123fd0bca1e4607048fcda0e278e84", + "code/complex_rows.py": "382578f17ddd1b82edaf98f7276c905af15bf7b28f5a00eb1644f7bcdbba70cc", + "code/local_audit.py": "fe52247472e710bc58880df92c85e188a10bb15d912ecc720597feccbe818f6c", + "code/assemble.py": "83f9c1bf9c707e404d3705ead330fabadf0af0c589b63f4c8a8868c200c51349", + "code/geometry.py": "eee458c6892d952d221dd9a60cd8bed1a646eca361c7d43f9c1ea19172bdf738", + "code/complex_audit.py": "403f95ed28025e552f33d54a5e61da24714bcb757f12a75f66012999c7f37896", + "code/hosted_kernel.py": "6f932cdb1260239d8f550cf7f9fc1a6a5872a44eca5e5b0c6de81de3c563bebf", + "code/emit.py": "ac63ee481f3d75cb9f0658faaa2412db81d55bc44d9f1ff1c0329ce1e75aa0d4", + "code/row_bound.py": "de4a9b9cd797e1a05da56f62cfe725c8728cea3a4aa031b7d1b0a68f869760d6", + "code/complex_phases.py": "4339fde687c041c381d01bc81e90a2abec0092c51920eb02166aaf628a7f25a2", + "code/rebuild.py": "4899984fc63971aaabb742d60457d7057325e67a54a909c54ce10aba96a47a5b", + "upstream377/data_phases.py": "671d6f8144c6d31e1766c6a0e144172da661a63f86b3d4d17fe2710f3ef752c4", + "data/word.json.gz": "41626789888ee070e1b435fa380b10ab9b88e3cf7d8d8e166ecef17269bbcf47", + "data/kernel.json": "afe2b65a3f9bbe04595b4cc50b902b9b556b0cd03e59c1cd949b4fbd7679c0a7", + "data/residual-isometries.json": "b23fda74a7979179e8fd83ee9870c1e232442cc90c05077adaabfe31d050d1e4", + "data/complex-selection.json": "ebd16be92d59c7199dfe090d720ed7ce3d4d83262fcefa28709235d45fb56536", + "data/selection.json": "4d9c2cf6a3d31a6faa287731e0721cb16601b0bc5c1a186b9645bfb5760ce8db" + } + }, + "e8-target-mixing-whole": { + "commit": "d14eb0dd425bd681e3b43f208d089e679d600176", + "files": { + "PROOF.md": "5147c687fec7bfc6ebc730fda1a30c7c843dc4326bd131f799cd88d5a8353124", + "EXPECTED.json": "ad2dea247e4e1fd3b91f2dabec9b8a6b813e85b4b2f1a122404f5acb0b2f89ef", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "d98ac9478b88b51fe025d16d2a5a33c84b8cadab4e11546fbffef05b5aaa0f6b", + "README.md": "3bdad32529feb14dc29735a478199ae06d3936def7ea78b4506391db94740ee9", + "MANIFEST.json": "57a986e2df51ef6cb1ae6486d599bde7f8e822df6b22c3463e1b37aa5ef74ae4", + "verify.py": "c99894e87e8531e3927012f93409a1901b59362f140b64354f338e182c5275fd", + "NOTICE.md": "18686ca9f8fa4a5d302eb5d346012200c7d473828d3fc68068de87ae972ce332", + "upstream450/mix_check.py": "8ca68056025e61aa1229cd169b5d30c02094d67c9deb0b7f1a3084ad314497e1", + "upstream450/mix_target.py": "6e9f0b1aa73c4f7a937ae3a0732556e1b3275f10c863f79ce3db9c7749df986c", + "upstream450/BIT-LABEL-LEMMA.md": "c84d1aef0b8769b7a4222ec93f40d6c1f88856497e36c487170ea63ef5cc3c98", + "code/labels.py": "bc9628ddf7a8aa913d15372755b7cde69709fc178e3ab48038cc518f9df64753", + "code/assemble.py": "ef710106296ccf0afe58cf4cc99da498d2c82022845315780a8a50961e61b09e", + "code/rebuild.py": "631d0a96aff0768f75b5d73a335a2654410cc74c91f3c5aaf4c94c1ae3f99f5d", + "data/word.json.gz": "409271ca43be8494ea29d969e0aa5ac8336fb2e074c42a30bdcdb3f9755e91a0", + "data/selection.json": "d4cef560b4019df1e98e3fe643154521585f0f0378959930732e66aaa84d5efa" + } + } + }, + "parent444": "8c4242ea61c67827fe62b07b2edc093d7ddfa631", + "inherited_row_proof": { + "INHERITED-ROW-DIVISOR.tex": { + "repository_path": "research/five-stage-source527-banks/proof/three-stage-cover-rows.tex", + "snapshot_commit": "8c4242ea61c67827fe62b07b2edc093d7ddfa631", + "sha256": "6ad97a5cd7d6aecf978a81226e1c2763d37840caca130c61f3bf5c4ac111c5c8", + "git_blob": "590da4b892a08b9d5182fb3d8a983c6239dd27db" + }, + "UPSTREAM-PR234-NOTICE.md": { + "repository_path": "research/five-stage-source527-banks/UPSTREAM-PR234-NOTICE.md", + "snapshot_commit": "8c4242ea61c67827fe62b07b2edc093d7ddfa631", + "sha256": "ce978c8dfc8a2b36eed7a53014b1a792248b22ef4cee3edd8adab825a571c429", + "git_blob": "5f8fbb25c12781420284bc220a041592619e27c0" + } + }, + "upstream445": "40ab91daf2b5e87fc4071dedae1699d5d7e7cecc", + "upstream377": { + "commit": "d0a620fcc99ba012468d61d01f5bb14007076d50", + "path": "research/nine-stage-complex-e8/work/odd-stages/data_phases.py", + "vendored": "upstream377/data_phases.py", + "sha256": "671d6f8144c6d31e1766c6a0e144172da661a63f86b3d4d17fe2710f3ef752c4" + }, + "comparison447": { + "commit": "d3cf3079091bb7e93a23e9cd98e82ccb89697328", + "kappa": "1265848755025709/1000000000000000000", + "dependency": false + }, + "upstream451": "f3a38153678b55063fc005901cc968266166507d", + "target_mixing": { + "upstream_pr": 450, + "commit": "6faca41020a620689de013cdab9f61a22deca314", + "files": { + "mix_check.py": "8ca68056025e61aa1229cd169b5d30c02094d67c9deb0b7f1a3084ad314497e1", + "mix_target.py": "6e9f0b1aa73c4f7a937ae3a0732556e1b3275f10c863f79ce3db9c7749df986c", + "BIT-LABEL-LEMMA.md": "c84d1aef0b8769b7a4222ec93f40d6c1f88856497e36c487170ea63ef5cc3c98" + }, + "scope": "Only target mixing; the cross-copy hosting construction is not used." + }, + "upstream454": "d14eb0dd425bd681e3b43f208d089e679d600176", + "complex_kernel": { + "upstream_pr": 449, + "commit": "7fac5292693bf738ff5eed6ec754f8ec22ebcf8e", + "files": { + "audit_cxg.py": "12e8fe32136a0f32e5363f97113cf0c32efda6a331dc391758cd58ed8f5f9d1b", + "PROOF.md": "070d44b14efd5b62f44cb8eb6be35fb19090e6dce88f1a1768789d31b53241a5", + "emit_cxg.py": "26c646d5a777c1306224abb08d4031b3b1ffcbed8a212a0e58579de13b0ee658", + "phases_cxg.py": "0f2795aaffafe0c64d77f3748ef2109a3c42c58da867e4cf269a0a8cb6109466", + "NOTICE.md": "4c111ede74aa51bb9c50b6093817aa3a9eecc5eeb3444867926e2998e322b1bb" + }, + "selection_sha256": "91aa509f2542c89928c7f31209bd010ea322f643bd7ca65ac0e449850eb5ada6", + "frozen_word_sha256": "2e13b2dd1e1b0dfa341dbd57b91ee1758ad041cd5ce2e734bf2f9fd0bac155cb", + "scope": "Kernel only. New paid two-sided residual adapters and distinct-host construction; original gauge construction not used." + } +} diff --git a/research/e8-complex-adapted-kernel/code/adapters.py b/research/e8-complex-adapted-kernel/code/adapters.py new file mode 100644 index 0000000000..84e0db89a1 --- /dev/null +++ b/research/e8-complex-adapted-kernel/code/adapters.py @@ -0,0 +1,41 @@ +"""Exact paid two-sided adapters for the fourteen isotropic helper entrances. +Each wrapped residual is a coordinate C child; no orthogonal-conjugacy claim. +Chafreaky with OpenAI Codex; uses inherited Gaussian compiler. Apache-2.0. +Usage: adapters.py LOCAL_SPLIT_CENTRES_DIR +""" +import gzip,hashlib,json,sys +from pathlib import Path +ROOT=Path(__file__).resolve().parents[1] +sys.path.insert(0,str(ROOT.parent/'split-centres-global/vendor')) +from clifford_exact import canonical_frame,lower_child,monomial,diag,perm,xgate,Op,identity,fourier +out=Path(sys.argv[1]);ld=lambda p:json.loads(gzip.decompress(p.read_bytes())) if p.suffix=='.gz' else json.loads(p.read_text()) +word=ld(out/'CANONICAL-WORD.json.gz');raw=ld(out/'LOCAL-PROGRAMS.json.gz');n=word['h'];v=word['v'];R=word['R'];full=tuple(1<=2*v: + assert e[1] in ('old_to_new','new_to_old') and e[3]==(word['start'] if e[1]=='old_to_new' else word['final'])[e[2]];removed.append(e) + else:body.append(e) + assert len(removed)==2*R + # Both scalar orientations leave helpers unchanged; both residuals are S, + # not inverses. Wrappers surround the ENTIRE invocation including cleanup. + pre=[['residual_adapter','pre',r,word['start'][r]] for r in helpers] + post=[['residual_adapter','post',r,word['start'][r]] for r in helpers] + programs[orientation]=pre+body+post +(out/'RESIDUAL-ADAPTERS.json').write_text(json.dumps(dict(h=n,recipes=recipes,helper_entry_gate='none: initial frame is the interpretation of arbitrary helper data',factorization='S=L C_w R; pre=R^-1; post=L^-1; same residual in both scalar orientations'),indent=2)+'\n') +(out/'ADAPTED-PROGRAMS.json.gz').write_bytes(gzip.compress(canonical(programs),mtime=0)) +print('PASS constructed 14 exact nontrivial two-sided adapters, 79 wrapped helpers in each orientation') diff --git a/research/e8-complex-adapted-kernel/code/assemble.py b/research/e8-complex-adapted-kernel/code/assemble.py new file mode 100644 index 0000000000..f87d49d0f4 --- /dev/null +++ b/research/e8-complex-adapted-kernel/code/assemble.py @@ -0,0 +1,118 @@ +# Adapted from DaysSky PR442 with Claude assistance; Eleven-stage R740 integration by chafreaky with OpenAI Codex. Apache-2.0. +"""Two exact moments for both hosted suppliers, fresh finite invoices with the hosted stock, and the strict outer +assembly of #434 (six bootstrap levels, 47 inequalities, next-grid and parameter controls). +usage: assemble.py VERIFIED454_DIR COMPLEX_DIR""" +import gzip, hashlib, importlib.util, json, math, sys +from fractions import Fraction as Q +from pathlib import Path +parent454, cd = map(Path, sys.argv[1:3]) +parent451=parent454/"parent451" +bd=parent454/"bit" +parent445=parent451/"parent445" +sys.path.insert(0,str(Path(__file__).resolve().parents[2]/"r740-hosted-rank149/code")) +parent444=parent445/"parent444" +upstream=parent444/"upstream442" +ap=bd/"AUDIT.json";outp=cd/"RESULT.json" +from row_bound import bound as row_bound, controls as row_controls +par=upstream / "parent/changed" + +def load(name): + sp = importlib.util.spec_from_file_location('hosted_' + name, par / 'work/pr361/code/engines' / (name + '.py')) + mod = importlib.util.module_from_spec(sp); sp.loader.exec_module(mod); return mod +M, Other, Outer = load('moment'), load('base_two_moment'), load('outer') +audit = json.loads(ap.read_text()); ua=json.loads((upstream/'AUDIT.json').read_text()); ur=json.loads((upstream/'RESULT.json').read_text()); bg = json.loads((bd / 'GLOBAL.json').read_text()); ch = json.loads((cd / 'GLOBAL.json').read_text()); ca=json.loads((cd/'AUDIT.json').read_text()) +assert audit['template_sha256'] == bg['template_sha256'] and ca['template_sha256'] == ch['template_sha256'] +assert json.loads((upstream/'RECEIPT.json').read_text())['status']=='PASS_FULL_IDLE_AXIS_HOSTING_COMPOSITION' +# ---------------- bit: two moments and the parent's invoice formulas with the hosted stock +P = {int(r): n for r, n in audit['profile'].items()}; m, W = 78, audit['live']; E = sum(P.values()) +geo = json.loads((bd / 'GEOMETRY.json').read_text());pg=bg +T, L, R, V, K = 8, 11, 740, 120, 5 +assert pg["replicas"]==T and pg["R"]==R +mass = sum(r * z for r, z in P.items()); assert m * W - mass == (2*K*V-L*72)*T +physical = W + 9; d = m * m; N = 2 * m +unit = L * T * pg['local_additions'] + pg['bridge_additions'] +J = 8 * T * L * (2 * V + R) + 8 * (2 * K * V * T) + 2 * L * T * R + 2 * pg['copy_erase_episodes'] # every helper route charged (bank or hosted) +high = 16 * (d + 1) ** 2; good = 8 * m * m + 8; compiler = 128 * N ** 3 +selectors = 2 * L * T * ((W - 1) + R * m * (geo['max_route_factors'] + 144 + 2 + (m - 1) + m)) # 144: residual isometry; +2: hosted slot permutation and idle basis U_q +prefix = int(pg['global_prefix_bound']); charged_prefix = 64 * ((prefix.bit_length() + 63) // 64) +assert 1<<128 <= prefix < 1< 1 +# ---------------- complex: two moments and the parent's invoice with the hosted stock +PC = {int(r): n for r, n in ca['profile'].items()}; mc, WC = 89, ca['live']; EC = sum(PC.values()) +massc = sum(r * z for r, z in PC.items()); assert mc * WC - massc == 3264 +rc = M.certify(PC, mc, WC, True); b = Q(rc['lower']) +assert b>Q(ur['complex_lower']) +fbc = 32 * mc * mc * EC +l3, h3 = Other.moment(mc, WC, list(PC.items()), b); b3, bh3 = Other.moment(mc, WC, [(1, fbc)], b); assert h3 + bh3 / 10 ** 16 < 1 +bn=Q(rc['upper']) +l4,h4=Other.moment(mc,WC,list(PC.items()),bn);b4,bh4=Other.moment(mc,WC,[(1,fbc)],bn);assert l4+b4/10**16>1 +physc=ch['physical'];Rc=560;v=120;hc=9;lc=11;tc=8;kc=5 +checks=ch['source_local_checks'];private_centers=ch['private_centers'] +compilerc=64*(mc+1)**3 +macros=max(z['scalar_macros'] for z in checks.values());children=sum(checks['forward']['paid_profile'].values()) +adapters=16*(macros+children+2*v+Rc+private_centers)+64*mc +# Eight restored rank-zero compiler groups for EACH pre/post wrapper, +# conservatively charged for all R helpers rather than only the 79 pivots. +wrapper_groups=2*Rc*8 +assert ch['charged_wrapper_groups']==lc*tc*wrapper_groups and ch['wrapper_events']==lc*tc*158 +adapters+=wrapper_groups +local_bound=max(z['real_component_primitive_bound'] for z in checks.values())+adapters*compilerc +scalar_primitives=tc*((kc+1)*checks['forward']['real_component_primitive_bound']+kc*checks['backward']['real_component_primitive_bound']) +bridge_adds=6*(kc-1)*v*tc;terminal_shifts=kc*v*tc;terminal_moves=2*kc*v*tc +# Retain the full unhosted idle count as an overcharge, and charge all helper +# selectors plus two additional hosting factors per helper occurrence. +nonlocal_items=4*v*tc*lc+2*v*tc*lc+4*lc*tc*Rc+(6*kc-4)*v*tc+bridge_adds+terminal_shifts+terminal_moves+WC+physc +outside=8*nonlocal_items+64*mc +pervertex=scalar_primitives+bridge_adds+terminal_shifts+terminal_moves+WC+(lc*tc*adapters+outside)*compilerc+64*physc +r_ = mc // 2; group = 2 ** (r_ * r_) * math.prod(2 ** (2 * i) - 1 for i in range(1, r_ + 1)); stock = group * physc +smass=group*massc;logical=group*pervertex+64;router=compilerc*(logical+1)*(stock+1)**2 +GG, EE, C0 = 1 << 30000, 1 << 100000, 1 << 210000; BB = smass + EE +literal = 2 * GG * stock ** 2 + 8 * smass + 4 * stock + 4 + 32 * mc +assert local_bound<1<<48 and logical<1<<6050 and router2*max(PC)**3 +assert (pervertex+1)**3*(EC+1)**3<1<<1024 +from complex_rows import bound as complex_row_bound, controls as complex_row_controls +complex_rows=complex_row_bound(stock.bit_length());complex_row_rejected=complex_row_controls() +rowc=complex_rows['retained_row_coefficient'] +# ---------------- outer assembly exactly as #434's combined.py +eta = beta = Q(1, 10 ** 18); grid = Q(1, 10 ** 18); s = min(c, (1 - beta) * b) - Q(1, 10 ** 24) +assert 0 < s < c and s < (1 - beta) * b +chain = [Q(384599, 10 ** 10)]; cutoffs = [] +def ceil(x): return -((-x.numerator) // x.denominator) +for j in range(6): + old = chain[-1]; a = (1 - s) * s + s * old + gap = min(s - a, 1 - a - s, 1 - a - s * (1 - old), 1 - s); assert old < a < s < 1 - a and gap > 0 + cutoff = max(ceil(36 / gap ** 2), ceil(2 * (4 + charged_two) / gap)); assert cutoff * gap ** 2 >= 36 and cutoff * gap >= 2 * (4 + charged_two) + cutoffs.append(dict(gap=str(gap), cutoff_log2=str(cutoff))); chain.append(a) +q = chain[-1] * (1 - 2 * eta); margin = (1 - eta) * q / (1 + q); ticks = margin / grid; k = grid * ((ticks.numerator - 1) // ticks.denominator) +bridge = {'semantic': {'C0': {'base': 2, 'exponent': 210000}, 'strict_literal_gap': 1}, 'rows': {'degree_gap': Q(10 ** 6) - Q(51 * 20161, 25)}} +a = Outer.assembly(chain[-1], b, bridge, k, eta=eta, beta=beta) +assert len(a['strict_constraints']) == 47 and all(x > 0 for x in a['strict_constraints'].values()) +controls = [] +for name, kk, ee, bb in [('next_grid', k + grid, eta, beta), ('zero_eta', k, Q(0), beta), ('zero_beta', k, eta, Q(0)), ('unit_beta', k, eta, Q(1))]: + try: Outer.assembly(chain[-1], b, bridge, kk, eta=ee, beta=bb) + except AssertionError: controls.append(name) + else: raise AssertionError(name) +parent_k = Q(json.loads((parent454/'RESULT.json').read_text())['kappa']) +assert json.loads((parent444/'RECEIPT.json').read_text())['status']=='PASS_R740_REPLICATED_HOSTING' +res = dict(status='PASS_CONDITIONAL_COMPLEX_ADAPTED_KERNEL', kappa=str(k), kappa_decimal=format(float(k), '.18f'), + bit_lower=str(c), complex_lower=str(b), binding_component='bit' if c < (1 - beta) * b else 'complex', + gain_over_pr454_percent=float(100 * (k / parent_k - 1)), + bit=dict(live=W, physical=physical, maxchild=max(P), rank_mass=mass, hosted_residuals=audit['hosted_residuals'], + prefix_bits=prefix.bit_length(), charged_prefix_bits=charged_prefix, coefficient_bits=coefficient.bit_length(), + three_level_coefficient_bits=two.bit_length(), charged_three_level_coefficient_bits=charged_two, row_coefficient=row), + complex=dict(live=WC, physical=physc, maxchild=max(PC), rank_mass=massc, hosted_residuals=ca['hosted_residuals'], + wrapper_events=ch['wrapper_events'], charged_wrapper_groups=ch['charged_wrapper_groups'], max_helpers_per_physical_family_per_call=1, physical_stock_bits=stock.bit_length(), router_bits=router.bit_length(), literal_bits=literal.bit_length(), row_coefficient=rowc, row_bound=complex_rows, row_controls=complex_row_rejected, local_bound=local_bound, pervertex=pervertex, halving_depth=3), + strict_outer_constraints={n: str(x) for n, x in a['strict_constraints'].items()}, outer_controls=controls, bootstrap=cutoffs, + bit_template_sha256=bg['template_sha256'], complex_template_sha256=ch['template_sha256'], complex_emitted_program_sha256=ch['emitted_program_sha256'], emitted_program_sha256=bg['emitted_program_sha256'], bank_assignments=audit['bank_assignments'], bit_profile=audit['profile'], parent_kappa=str(parent_k), additional_interface='Explicit paid two-sided residual adapters; distinct borrowed host families within every invocation; inherited Gaussian compiler and idle-data hosting',row_bound=rows,row_controls=row_rejected, halving_depth=3, finite_controls=['old 128-bit prefix charge insufficient','old 512-bit composite charge insufficient']) +outp.write_text(json.dumps(res, indent=2) + '\n') +print(res['status'], res['kappa_decimal'], 'binding', res['binding_component'], 'gain over #454 %.4f%%' % res['gain_over_pr454_percent']) diff --git a/research/e8-complex-adapted-kernel/code/audit.py b/research/e8-complex-adapted-kernel/code/audit.py new file mode 100644 index 0000000000..13957ed138 --- /dev/null +++ b/research/e8-complex-adapted-kernel/code/audit.py @@ -0,0 +1,155 @@ +"""Independent full owner/window/route/phase/program audit of paid adapters. +Does not import the emitter or hosting solver. Parent phase checks are unchanged. +Chafreaky with OpenAI Codex assistance; Apache-2.0. +""" +import copy,gzip,hashlib,importlib.util,json,sys +from collections import Counter,defaultdict +from pathlib import Path +ROOT=Path(__file__).resolve().parents[1];M,H,K,L,T,V,R,W=89,9,5,11,8,120,560,9600 +sp=importlib.util.spec_from_file_location('unchanged_phase_audit',ROOT.parent/'r740-hosted-rank149/code/complex_audit.py');PA=importlib.util.module_from_spec(sp);sp.loader.exec_module(PA) +from local_audit import adapter_check +blob=lambda x:json.dumps(x,sort_keys=True,separators=(',',':')).encode() +sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() +ld=lambda p:json.loads(gzip.decompress(p.read_bytes())) if p.suffix=='.gz' else json.loads(p.read_text()) + +def validate(t,parent,word,programs,ad,ph): + assert (t['m'],t['h'],t['stages'],t['replicas'],t['live'],t['physical'])==(M,H,L,T,W,10178) + unchanged=['cover','recipe','execution_schedule','bank_padding','private_namespace','cover_final_correction','terminal_translations','exact_data_phase_recipe_sha256'] + for k in unchanged:assert t[k]==parent[k],('changed parent field',k) + assert t['source_template_sha256']==hashlib.sha256(blob(parent)).hexdigest() + assert t['local_programs']==programs and t['residual_adapters']==ad + assert t['residual_route_semantics']==dict(chart='sigma columns are the recorded first-nine indices in U_q plus exterior axes, then unused basis indices in increasing order',owner='g=d*sigma^-1 in O(89,2)',pre='P_d (R^-1 tensor I) P_d^-1 before the entire local invocation',post='P_d (L^-1 tensor I) P_d^-1 after full-frame cleanup',net='P_g C_selected_pending_axes P_g^-1; identity on all spectator axes',helper_entry='no entrance gate; the borrowed value has the declared initial label interpretation',monomial_compiler_groups_per_wrapper=8) + idle={};wins={};last={};locals_=[] + for position,e in enumerate(t['execution_schedule']): + k=e['kind'] + if k=='local':locals_.append((position,e['stage'],e['pair']));last[e['pair']]=position + elif k=='bridge':last[e['dst']]=last[e['src']]=position + elif k=='idle': + i,p=e['idx'],e['pair'];assert i==len(idle);idle[i]=e;wins[i]={s for pos,s,pair in locals_ if last.get(p,-1)>j)&1);a=q^(1<>j)&1 else 0) for j in order]+[1<>i&1));a=q^(1<>i&1 else 0) for i in order]+[1<>k&1:x^=rows[k] + if x: + k=x.bit_length()-1 + for j in rows: + if rows[j]>>k&1:rows[j]^=x + rows[k]=x + return tuple(rows[k] for k in sorted(rows,reverse=True)) +def adapter_check(word,ad): + h=word['h'];assert h==9 and ad['h']==h;full=tuple(1<0 + cur['L',r]=new;paid[width]+=1;continue + if tag=='center': + _,r,old,new,width=e;assert centers=={r} and cur['C',r]==old + assert width==abs(len(frames[new])-len(frames[old]))>0 + assert basis(frames[old]+frames[new]) in (basis(frames[old]),basis(frames[new])) + cur['C',r]=new;paid[width]+=1;continue + assert tag=='scalar';_,op,f=e;kind=op[0];t=tuple(op[1]);macros+=1;primitives+=2*bound(op) + if kind=='clear': + assert t[0]=='C';state[t]={};cur[t]=f;centers.discard(t[1]);continue + if t not in cur:assert t[0]=='C';cur[t]=f + assert cur[t]==f + if kind in ('add','copy'):s=tuple(op[2]);assert cur[s]==f,'scalar operands must share their actual current label' + if kind=='copy': + assert t[0]=='C' and not state.get(t);state[t]=dict(state[s]);centers.add(t[1]) + elif kind=='scale':state[t]={i:Q(op[2],op[3])*z for i,z in state[t].items()} + else: + assert kind=='add';q=Q(op[3],op[4]);assert t!=s + if t[0]=='C':centers.add(t[1]) + for i,z in list(state[s].items()): + a=state[t].get(i,Q(0))+q*z + if a:state[t][i]=a + else:state[t].pop(i,None) + for q in state[t].values():largest_num=max(largest_num,abs(q.numerator).bit_length());largest_den=max(largest_den,q.denominator.bit_length()) + wanted=[r for r in range(240,n) if word['start'][r]];assert pre==post==wanted and len(wanted)==79 + assert not centers and all(not row for k,row in state.items() if k[0]=='C') + assert Counter(endpoint)==Counter((direction,r) for direction in ('old_to_new','new_to_old') for r in range(240)) + assert [cur['L',r] for r in range(n)]==word['final'] + for r in range(n): + expected={r:Q(1)} + if back and r=240)];assert body==expected + checks[o]=replay(word,p,o=='backward') + assert set(checks)=={'forward','backward'} + rejected=[] + def reject(name,fn): + try:fn() + except (AssertionError,KeyError,IndexError,ValueError,ZeroDivisionError):rejected.append(name) + else:raise AssertionError('accepted '+name) + reject('omit first pre adapter',lambda:replay(word,ps['forward'][1:],False)) + reject('omit final post adapter',lambda:replay(word,ps['forward'][:-1],False)) + q=copy.deepcopy(ps['forward']);e=next(e for e in q if e[0]=='scalar' and e[1][0]=='add');e[2]=(e[2]+1)%len(word['frames']);reject('scalar at wrong frame',lambda:replay(word,q,False)) + q=copy.deepcopy(ps['forward']);q=[e for e in q if not(e[0]=='scalar' and e[1][0]=='add' and e[1][1][0]=='L' and e[1][1][1]>=240)];reject('omit helper scalar restoration',lambda:replay(word,q,False)) + f=next(k for k,r in ad['recipes'].items() if not r['identity_adapters']) + q=copy.deepcopy(ad);q['recipes'][f]['post']['phase']=(q['recipes'][f]['post']['phase']+1)%4;reject('wrong residual global phase',lambda:adapter_check(word,q)) + q=copy.deepcopy(ad);q['recipes'][f]['rank']+=1;reject('wrong residual width',lambda:adapter_check(word,q)) + q=copy.deepcopy(ad);q['recipes'][f]['pre']=q['recipes'][f]['post'];reject('wrong pre adapter order',lambda:adapter_check(word,q)) + result=dict(status='PASS_INDEPENDENT_COMPLEX_KERNEL_LOCAL_REALIZATION',nontrivial_entrance_frames=nontrivial,wrappers_per_call=158,helper_entry_recursive_calls=0,checks=checks,mutations_rejected=rejected,canonical_word_sha256=hashlib.sha256(blob(word)).hexdigest(),adapters_sha256=hashlib.sha256((out/'RESIDUAL-ADAPTERS.json').read_bytes()).hexdigest(),phase_recipes_sha256=hashlib.sha256((out/'CLIFFORD-RECIPES.json').read_bytes()).hexdigest()) + (out/'LOCAL-REVIEW.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result),flush=True) +if __name__=='__main__':main(Path(sys.argv[1])) diff --git a/research/e8-complex-adapted-kernel/code/rebuild.py b/research/e8-complex-adapted-kernel/code/rebuild.py new file mode 100644 index 0000000000..dd3b2196af --- /dev/null +++ b/research/e8-complex-adapted-kernel/code/rebuild.py @@ -0,0 +1,101 @@ +"""Frozen exact shared-donor kernel reconstruction; no optimizer. +Kernel discovery: DreamingOfClouds/Claude PR449. Exact release reconstruction: +chafreaky/OpenAI Codex. Apache-2.0. Usage: rebuild.py PARENT_FULL_WORD OUT_JSON. +""" +import copy,gzip,hashlib,json,math,sys +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path +ROOT=Path(__file__).resolve().parents[1] +ld=lambda p:json.loads(gzip.decompress(Path(p).read_bytes())) if str(p).endswith('.gz') else json.loads(Path(p).read_text()) +w=ld(sys.argv[1]);expected=ld(ROOT/'data/word.json.gz');selection=ld(ROOT/'data/kernel.json')['classes'] +v=120;R=w['report']['R'];n=240+R;assert R==560 and not w.get('start_extra') and not w.get('target_levels') +def basis(vectors): + rows={} + for x in vectors: + for k in sorted(rows,reverse=True): + if x>>k&1:x^=rows[k] + if x: + k=x.bit_length()-1 + for j in rows: + if rows[j]>>k&1:rows[j]^=x + rows[k]=x + return tuple(rows[k] for k in sorted(rows,reverse=True)) +def contained(a,b):return basis(list(a)+list(b))==basis(b) +def apply(e,rows): + if e[0]=='scale': + q=Q(e[2],e[3]);rows[e[1]]={i:q*z for i,z in rows[e[1]].items()} + else: + d,s=e[1:3];q=Q(e[3],e[4]);assert d!=s + for i,z in list(rows[s].items()): + a=rows[d].get(i,Q(0))+q*z + if a:rows[d][i]=a + else:rows[d].pop(i,None) +M=[{i:Q(1)} for i in range(n)] +for e in w['A']+w['cut']+w['B']:apply(e,M) +dirty=[{} for _ in range(n)] +for t in range(v,2*v):dirty[t]={i:z for i,z in M[t].items() if i>=240} +for e in w['precondition']:apply(e,dirty) +cols=[{t:dirty[v+t][240+h] for t in range(v) if 240+h in dirty[v+t]} for h in range(R)] +first={} +for e in w['A']+w['B']: + for r in [e[1]]+([e[2]] if e[0]=='add' else []): + if r>=240:first.setdefault(r-240,basis(e[-1])) +def solve(ds,p): + a=[[cols[d].get(t,Q(0)) for d in ds]+[cols[p].get(t,Q(0))] for t in range(v)];row=0;piv=[] + for j in range(len(ds)): + k=next((k for k in range(row,len(a)) if a[k][j]),None) + assert k is not None,'the selected donor columns must be independent' + a[row],a[k]=a[k],a[row];q=a[row][j];a[row]=[z/q for z in a[row]] + for k in range(len(a)): + if k!=row and a[k][j]: + q=a[k][j];a[k]=[u-q*z for u,z in zip(a[k],a[row])] + piv.append(j);row+=1 + assert all(not a[k][-1] for k in range(row,len(a))) + result={ds[j]:a[i][-1] for i,j in enumerate(piv) if a[i][-1]} + assert all(cols[p].get(t,0)==sum(z*cols[d].get(t,0) for d,z in result.items()) for t in range(v)) + return result +pre=[];start={};roles=set();relations=[] +for g in selection: + E=g['E'];ds=g['donors'];ps=g['pivots'];all_=ds+ps + assert len(E)==1 and E[0].bit_count()%2==0 and len(set(all_))==len(all_) and not roles&set(all_);roles.update(all_) + assert all(contained(E,first[h]) for h in all_) + for p in ps: + rel=solve(ds,p);start[240+p]=E + for d,q in rel.items():pre.append(['add',240+d,240+p,-q.numerator,q.denominator,E]) + relations.append(dict(pivot=p,entrance=E,donors=[[d,str(q)] for d,q in rel.items()])) +assert len(start)==79 and len(selection)==14 +out=copy.deepcopy(w);out['R']=R;out['A']=pre+out['A'];full=tuple(1<=2*v} +for e in word['precondition']:apply(e,dirty) +comp=[] +for r in range(v,2*v): + for j,q in sorted(dirty[r].items()):comp.append(['add',r,j,-q.numerator,q.denominator,[]]) + +cleanup=[inv(e) for e in reversed(word['A']+word['B']) if not v<=e[1]<2*v] +assert [e[:-1] for e in cleanup]==[e[:-1] for e in word['cleanup']] +program=word['precondition']+comp+main+cleanup +actual=ident() +for e in program:apply(e,actual) +expected=ident() +for t in range(v):expected[v+t][t]=Q(1) +assert actual==expected +print('PASS exact arbitrary dirt and restored sources/helpers',flush=True) +back=ident() +for e in program:apply(dual(e),back) +expected_back=ident() +for t in range(v):expected_back[t][v+t]=Q(-1) +assert back==expected_back +print('PASS exact inverse-transpose on every column',flush=True) +# Independent sparse vector controls avoid repeating a dense full replay. +def vector(es,x): + x=list(map(Q,x)) + for e in es: + if e[0]=='scale':x[e[1]]*=Q(e[2],e[3]) + else:x[e[1]]+=Q(e[3],e[4])*x[e[2]] + return x +sample=[((i*137+13)%101)-50 for i in range(n)] +want=vector(program,sample) +controls={ + 'missing_dirty_compensation':word['precondition']+main+cleanup, + 'missing_Y_inverse_basis':comp+main+cleanup, + 'missing_source_cleanup':word['precondition']+comp+main, + 'wrong_dual_event_order':[dual(e) for e in reversed(program)], +} +for name,es in controls.items(): + expected_sample=vector([dual(e) for e in program],sample) if name=='wrong_dual_event_order' else want + assert vector(es,sample)!=expected_sample,name + +# Orthogonal transvection and a port permutation bring the new geometry onto +# the already fixed 120-port routing family. Every incidence is transformed. +old=json.load(gzip.open('work/higher-stage-e8/verified/gcert1-e8-retimed.json.gz')) +def tau(x):return x^(43 if (x&43).bit_count()%2 else 0) +assert 43 .bit_count()%2==0 +assert set(map(tau,word['ports']))==set(old['ports']) +mapping={i:old['ports'].index(tau(q)) for i,q in enumerate(word['ports'])} +mapping.update({v+i:v+mapping[i] for i in range(v)}) +mapping.update({r:r for r in range(2*v,n)}) +def basis(vs): + b={} + for x in vs: + for k in sorted(b,reverse=True): + if x>>k&1:x^=b[k] + if x: + k=x.bit_length()-1 + for j in b: + if b[j]>>k&1:b[j]^=x + b[k]=x + return tuple(b[k] for k in sorted(b,reverse=True)) +def perp(x):return basis([z for z in range(1,512) if not (x&z).bit_count()%2]) +full=tuple(1<0 + edges.add((old,f));paid[delta]+=1;cur[r]=f +for part in ('A','B'): + if part=='B': + assert all(cur[r]==f for r,f in zip(can['centers'],can['center_frames'])) + assert all(cur[r]==can['target_levels'].get(r-v,0) for r in range(v,2*v)) + for r_c,f in zip(can['centers'],can['center_frames']): + # mass-neutral descent: cf -> served levels (descending) -> lowest served level + served={can['target_levels'].get(e[1]-v,0) for e in can['cut'] if e[2]==r_c} + o=f + for L in sorted(served,key=lambda L:-len(frames[L])): + assert basis(frames[L]+frames[o])==tuple(frames[o]),('centre frame must contain served level',r_c) + if L!=o:paid[len(frames[o])-len(frames[L])]+=1;edges.add((o,L));edges.add((L,o));o=L + if o==f:paid[0]+=0 + for e in can[part]: + rs=[e[1]]+([e[2]] if e[0]=='add' else []) + for r in rs:climb(r,e[-1]);incidences+=1 +for r,f in enumerate(can['final']):climb(r,f) +assert dict(paid)=={int(r):x for r,x in word['report']['local_profile'].items()} +assert sum(r*x for r,x in paid.items())==sum(int(r)*x for r,x in word['report']['local_profile'].items()) +can['local_profile']=dict(sorted(paid.items()));can['edges']=sorted(edges) +cp=OUT/'CANONICAL-WORD.json.gz';cp.write_bytes(gzip.compress(json.dumps(can,sort_keys=True,separators=(',',':')).encode(),mtime=0)) + +b=Q(0);grid=Q(1,10**18) +coeff=Counter(str(Q(e[3],e[4]) if e[0]=='add' else Q(e[2],e[3])) for e in program) +report={'status':'PASS_EXACT_SCALAR_AND_FRAME_RESEARCH_CANDIDATE_NOT_YET_ADMITTED', + 'full_word_sha256':hashlib.sha256(p.read_bytes()).hexdigest(), + 'canonical_word_sha256':hashlib.sha256(cp.read_bytes()).hexdigest(), + 'live_columns_each_orientation':n,'arbitrary_helper_columns':can['R'], + 'all_live_source_and_helper_rows_restored':True,'all_target_rows_correct':True, + 'negative_controls_rejected':list(controls),'old_response_additions':len(comp), + 'complete_forward_scalar_operations':len(program),'coefficient_histogram':dict(coeff), + 'frames':len(frames),'nested_directed_edges':len(edges),'common_frame_incidences':incidences, + 'orthogonal_transport_vector':43,'transported_ports_exactly_match_fixed_routes':True, + 'local_profile':dict(sorted(paid.items())), + 'two_rational_moment_engines':True,'next_b_grid_rejected':True, + 'remaining':['new general scalar-interface proof integration','exact phase and emitted local/global program','finite invoice and outer assembly'], + 'scope':'Substantial new scalar-network candidate. All parameter values remain prospective until the expanded scalar interface and complete phase-aware supplier are admitted.', + 'seconds':time.monotonic()-start} +(OUT/'SCALAR-FRAME-AUDIT.json').write_text(json.dumps(report,indent=2)+'\n') +print('PASS audit',report['seconds'],flush=True) diff --git a/research/e8-complex-adapted-kernel/upstream449/emit_cxg.py b/research/e8-complex-adapted-kernel/upstream449/emit_cxg.py new file mode 100644 index 0000000000..8075000813 --- /dev/null +++ b/research/e8-complex-adapted-kernel/upstream449/emit_cxg.py @@ -0,0 +1,146 @@ +# Adapted from PR425 by icekylinx with Codex assistance. +"""Emit both local programs, integrate the fixed nine-stage geometry, and bill. + +The expanded scalar interface is justified in PROOF.txt. This script does not +claim a Lean proof or discharge the inherited all-size/analytic interfaces. +""" +import copy,gzip,hashlib,importlib.util,json,math +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path + +OUT=Path('split-centres');cp=OUT/'CANONICAL-WORD.json.gz' +c=json.load(gzip.open(cp)) +frames=c['frames'];v,R,h=c['v'],c['R'],c['h'];n=2*v+R +def digest(x):return hashlib.sha256(json.dumps(x,sort_keys=True,separators=(',',':')).encode()).hexdigest() +def basis(vs): + b={} + for x in vs: + for p in sorted(b,reverse=True): + if x>>p&1:x^=b[p] + if x: + p=x.bit_length()-1 + for q in b: + if b[q]>>p&1:b[q]^=x + b[p]=x + return tuple(b[p] for p in sorted(b,reverse=True)) +def dual(e): + e=list(e) + if e[0]=='add':e[1],e[2]=e[2],e[1];e[3]*=-1 + else:e[2],e[3]=e[3],e[2] + return e +def scalar(e,back): + e=dual(e) if back else list(e) + if e[0]=='add':return ['add',['L',e[1]],['L',e[2]],e[3],e[4]] + return ['scale',['L',e[1]],e[2],e[3]] +def primitive_bound(e): + if e[0] in ('clear','copy'):return 1 + q=Q(e[3],e[4]) if e[0]=='add' else Q(e[2],e[3]) + a,b=abs(q.numerator),q.denominator + assert b&(b-1)==0 + if e[0]=='scale': + assert a&(a-1)==0 + return abs(a.bit_length()-b.bit_length())+int(q<0) + # Exact binary Horner multiplication on a cleared private stream, repeated + # halving, signed accumulation into the target, then clear the private stream. + return 3+(a.bit_length()-1)+a.bit_count()+(b.bit_length()-1) + +def emit(back): + out=[];cur=c['start'].copy() + def event(e):out.append(e) + def scal(e,f):event(['scalar',e,f]) + event(['phase','zero_frame_precondition']) + for e in c['precondition']+c['compensation']: + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + assert all(c['start'][r]==0 for r in regs) + scal(scalar(e,back),0) + event(['phase','entry_adapters']) + for r,f in enumerate(c['start']):event(['adapter','old_to_new',r,f]) + def climb(r,f,part): + old=cur[r] + if old==f:return + assert basis(frames[old]+frames[f])==tuple(frames[f]) + rank=len(frames[f])-len(frames[old]);assert rank>0 + event(['climb',part,r,old,f,rank]);cur[r]=f + for part in ('A','centers','B','final'): + event(['phase',part]) + if part in ('A','B'): + for e in c[part]: + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + for r in regs:climb(r,e[-1],part) + scal(scalar(e,back),e[-1]) + elif part=='centers': + tl=c.get('target_levels',{}) + lv=lambda r:tl.get(str(r-v),tl.get(r-v,0)) + assert all(cur[r]==lv(r) for r in range(v,2*v)) + for k,r in enumerate(c['centers']): + cf=c['center_frames'][k];assert cur[r]==cf + terms=[e for e in c['cut'] if e[2]==r] + served=sorted({lv(e[1]) for e in terms},key=lambda L:-len(frames[L])) + path=[cf]+[L for L in served if L!=cf] # descending chain of frames + C=['C',k] + if not back: + scal(['clear',C],cf);scal(['copy',C,['L',r]],cf) + for a in range(len(path)): + if a>0:event(['center',k,path[a-1],path[a],len(frames[path[a-1]])-len(frames[path[a]])]) + for e in terms: + if lv(e[1])==path[a] or (a==0 and lv(e[1])==cf):scal(['add',['L',e[1]],C,e[3],e[4]],path[a]) + scal(['clear',C],path[-1]) + else: + scal(['clear',C],path[-1]) + for a in range(len(path)-1,-1,-1): + for e in terms: + if lv(e[1])==path[a] or (a==0 and lv(e[1])==cf):scal(['add',C,['L',e[1]],e[3],e[4]],path[a]) + if a>0:event(['center',k,path[a],path[a-1],len(frames[path[a-1]])-len(frames[path[a]])]) + scal(['add',['L',r],C,-1,1],cf);scal(['clear',C],cf) + else: + for r,f in enumerate(c['final']):climb(r,f,part) + event(['phase','exit_adapters']) + for r,f in enumerate(c['final']):event(['adapter','new_to_old',r,f]) + event(['phase','full_frame_cleanup']) + for e in c['cleanup']: + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + assert all(c['final'][r]==1 for r in regs) + scal(scalar(e,back),1) + event(['phase','done']) + return out + +def check_local(events,back): + # Literal scalar replay of the emitted stream, including center lifetimes. + state={('L',r):{r:Q(1)} for r in range(n)};live=[];paid=Counter();prims=0;macros=0 + for e in events: + if e[0]=='climb':assert not live;paid[e[5]]+=1 + elif e[0]=='center':assert live==[e[1]];paid[e[4]]+=1 + elif e[0]=='scalar': + op=e[1];tag=op[0];t=tuple(op[1]);macros+=1;prims+=2*primitive_bound(op) + if tag=='clear': + state[t]={} + if t[0]=='C' and t[1] in live:live.remove(t[1]) + elif tag=='copy':state[t]=dict(state.get(tuple(op[2]),{}));live.append(t[1]) + elif tag=='scale':state[t]={j:Q(op[2],op[3])*x for j,x in state[t].items()} + else: + s=tuple(op[2]);q=Q(op[3],op[4]);row=state.setdefault(t,{}) + if t[0]=='C' and t[1] not in live:live.append(t[1]) + for j,x in list(state.get(s,{}).items()): + z=row.get(j,Q(0))+q*x + if z:row[j]=z + else:row.pop(j,None) + assert not live and all(not row for r,row in state.items() if r[0]=='C') + for r in range(n): + expected={r:Q(1)} + if back and r=2*v and f:first.setdefault(x,frames[f]) + pivots={};donors={};by=defaultdict(list) + for lines,p,ds in s['entries']: + E=sum(1<=0 + cur[x]=newf + if f: hist[f]+=1 + events.append([0,x,oldf,newf,f,int(reverse)]) + elif op==1: + assert cur[x]==cur[y]==f and x!=y and x0 + cutoff=max(ceil(36/gap**2),ceil(2*(4+charged_two)/gap)) + assert cutoff*gap**2>=36 and cutoff*gap>=2*(4+charged_two) + cutoffs.append(dict(gap=str(gap),cutoff_log2=str(cutoff)));chain.append(a) +q=chain[-1]*(1-2*eta);margin=(1-eta)*q/(1+q);ticks=margin/grid;k=grid*((ticks.numerator-1)//ticks.denominator) +bridge={'semantic':{'C0':{'base':2,'exponent':210000},'strict_literal_gap':1},'rows':{'degree_gap':Q(10**6)-Q(51*20161,25)}} +a=Outer.assembly(chain[-1],b,bridge,k,eta=eta,beta=beta) +assert len(a['strict_constraints'])==47 and all(x>0 for x in a['strict_constraints'].values()) +controls=[] +for name,kk,ee,bb in [('next_grid',k+grid,eta,beta),('zero_eta',k,Q(0),beta),('zero_beta',k,eta,Q(0)),('unit_beta',k,eta,Q(1))]: + try:Outer.assembly(chain[-1],b,bridge,kk,eta=ee,beta=bb) + except AssertionError:controls.append(name) + else:raise AssertionError(name) +result=dict(status='PASS_CONDITIONAL_EARLY_RESET_KERNEL_ASSEMBLY',kappa=str(k),kappa_decimal=format(float(k),'.18f'),bit_lower=str(c),complex_lower=str(b),binding_component='bit',gain_over_pr425_percent=float(100*(k/Q(1048005508028206,10**18)-1)),bit_invoice=dict(prefix_bits=prefix.bit_length(),charged_prefix_bits=charged_prefix,coefficient_bits=coefficient.bit_length(),two_level_coefficient_bits=two.bit_length(),charged_two_level_coefficient_bits=charged_two,row_coefficient=row,live=W,physical=physical),strict_outer_constraints={n:str(x) for n,x in a['strict_constraints'].items()},outer_controls=controls,bootstrap=cutoffs,bit_template_sha256=g['template_sha256'],complex_template_sha256=cx['global_template_sha256'],scope='Finite research composition with explicit changed words, exact local and global replay and incremental phase evidence. All-size correlated dirty-bank, compressed-window, compiler, restored-work, tape/common-grid, precision and analytic interfaces remain inherited assumptions. This certificate makes no unconditional integer-multiplication or Lean-kernel claim.') +(ROOT/'RESULT.json').write_text(json.dumps(result,indent=2)+'\n') +print(result['status'],result['kappa_decimal'],result['gain_over_pr425_percent'],result['bit_invoice']) diff --git a/research/e8-early-reset-kernel/local-evidence/ASSEMBLY.json b/research/e8-early-reset-kernel/local-evidence/ASSEMBLY.json new file mode 100644 index 0000000000..2d9275b4b3 --- /dev/null +++ b/research/e8-early-reset-kernel/local-evidence/ASSEMBLY.json @@ -0,0 +1,103 @@ +{ + "status": "PASS_CONDITIONAL_EARLY_RESET_KERNEL_ASSEMBLY", + "kappa": "566550276142217/500000000000000000", + "kappa_decimal": "0.001133100552284434", + "bit_lower": "1134385925603239057397/1000000000000000000000000", + "complex_lower": "1183986549206329/1000000000000000000", + "binding_component": "bit", + "gain_over_pr425_percent": 8.119713456118378, + "bit_invoice": { + "prefix_bits": 226, + "charged_prefix_bits": 256, + "coefficient_bits": 226, + "two_level_coefficient_bits": 488, + "charged_two_level_coefficient_bits": 512, + "row_coefficient": 18355, + "live": 14259, + "physical": 14268 + }, + "strict_outer_constraints": { + "bit_positive": "69237422216994571231731016394278971659481331432859237066649424129667134808630398853391912761178763207537908109793203831464837997733885657643609588447593436647051/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_above_bit": "3027381811712032772175233605721028340518668567140762933350575870332865191369601146608087238821236792462091890206796168535162002266114342356390411552406563352949/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_below_one_over32": "30066013450793671/1000000000000000000", + "beta_positive": "1/1000000000000000000", + "beta_below_one": "999999999999999999/1000000000000000000", + "leaf_saving_above_bit": "3027381811712032699910429577014424336612418567140762933350575870332865191369601146608087238821236792462091890206796168535162002266114342356390411552406563352949/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_positive": "34618711108497285546628085980144914598009649322150646873843380631974330337665775297028821571958982750377041293717838708194510889073738997356966796489911060679915911552406563352949/30517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_internal": "69237422216994571231731016394278971659481331432859237066649424129667134808630398853391912761178763207537908109793203831464837997733885657643609588447593436647051/30517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_leaf": "1513690905856016419192637005501783400037225677849353126156619368025669662334224702971178428041017249622958706282161291805489110926261002643033203510088939320084088447593436647051/30517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_positive": "34618711108497293176022617230144914598009649322150646873843380631974330337665775297028821571958982750377041293717838708194510889073738997356966796489911060679915911552406563352949/30517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_below_one": "30482959413891502706823977382769855085401990350677849353126156619368025669662334224702971178428041017249622958706282161291805489110926261002643033203510088939320084088447593436647051/30517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_reservations": "1/4000000000000000000", + "lambda_above_tau": "69237422216994571231731016394278971659481331432859237066649424129667134808630398853391912761178763207537908109793203831464837997733885657643609588447593436647051/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_sigma": "3027381811712032841412655822715599572249684961419734592831907303192102258019025276275222047451635645854004651385559376073070112059318173821228409286292220996558588447593436647051/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_internal": "69237422216994571231731016394278971659481331432859237066649424129667134808630398853391912761178763207537908109793203831464837997733885657643609588447593436647051/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_prime_above_lambda": "69237422216994571231731016394278971659481331432859237066649424129667134808630398853391912761178763207537908109793203831464837997733885657643609588447593436647051/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_leaf": "1513690905856016419192637005501783400037225677849353126156619368025669662334224702971178428041017249622958706282161291805489110926261002643033203510088939320084088447593436647051/30517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_reservations": "1/4000000000000000000", + "lambda_prime_below_one": "34618711108497285546628085980144914598009649322150646873843380631974330337665775297028821571958982750377041293717838708194510889073738997356966796489911060679915911552406563352949/30517578125000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "epsilon_positive": "824799408783783782958984375000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/825735049624553980690449407729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377", + "epsilon_below_one": "935640840770197731465032729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377/825735049624553980690449407729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377", + "guard_width": "935640840770197731465032729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377/825735049624553980690449407729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377", + "K_geometry": "619535197428608034950703313979193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377/825735049624553980690449407729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377000000000000000000", + "K_dominates_log": "30181962605490229417091461309195833846544927717528973213455737846402513917892235976507838913943511293241691126206500399143391103187358578171278036108258119723582489156491283934640879204527843633/26636614504017870344853206700941713090320845378659242063534301116505644577452193352482152416366136863775394107492343364174537498595530722752708776631638980872432359120795472156367000000000000000000", + "record_suffix": "935640840770197731465032729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377/825735049624553980690449407729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377", + "phase_local": "7485126726161581025985212208990865709120246178298925956560470154963351238580616803898817357783948289351013750750911538248082319428974953261114148185014851029252986376468687733612867255340363152623/6605880396996431845523595261833544846399569653907492031756506676893399855208143951415573799258801942216297738658101154315285299651691619242671776604646467256363225061957277094779016000000000000000000", + "phase_boundary": "1497025345232315544609002742154988589464523052305300551355128640243467072065455671439777950742394516312822824269988086019842598075679559123692864467841045938672936810647011910400067255340363152623/1321176079399286369104719052366708969279913930781498406351301335378679971041628790283114759851760388443259547731620230863057059930338323848534355320929293451272645012391455418955803200000000000000000", + "gamma_sublinear": "1/2000000000000000000", + "cell_above_band": "1649598817567567565092233700375446019309550592270806894200053793261563496030436665388325018098982006073053275092649757222962782667737355710589337543538547594666027924419191592954596867255340363152623/3302940198498215922761797630916772423199784826953746015878253338446699927604071975707786899629400971108148869329050577157642649825845809621335888302323233628181612530978638547389508000000000000000000", + "prime_interval_packing": "935640840770197731465032729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377/825735049624553980690449407729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377", + "alpha_positive": "1871281681540394637195015833832230909443005747679902139180462484913459832472653242218467913682491627127709757175045801784107580660260521257281694700164408756834189908510866649350867255340363152623/1651470099249107961380898815458386211599892413476873007939126669223349963802035987853893449814700485554074434664525288578821324912922904810667944151161616814090806265489319273694754000000000000000000", + "alpha_below_one": "1649598817567567566743703799624553980690449407729193105799946206738436503969563334611674981901017993926946724907350242777037217332262644289410662456461452405333972075580808407045403132744659636847377/1651470099249107961380898815458386211599892413476873007939126669223349963802035987853893449814700485554074434664525288578821324912922904810667944151161616814090806265489319273694754000000000000000000", + "alpha_below_one_fourth": "410996243130736595708029688030764321990530097621538349845601204820924031118036343721254894539992629761390898908956276342921223647570465681409704343090239794765867376463818951774337632744659636847377/1651470099249107961380898815458386211599892413476873007939126669223349963802035987853893449814700485554074434664525288578821324912922904810667944151161616814090806265489319273694754000000000000000000", + "delta_positive": "1/8000000000000000000", + "delta_below_one_eighth": "999999999999999999/8000000000000000000", + "short_record_fallback": "50284589023755639450550561947992852913465435982210087302859165385722658942883811531989641634516383968749221857814449882621435887501656295301706001999427642810130314654325274095462490292340911783154748095539039217711968081469021320817854289360191881492365590119398439280952169129815427826165501507629212226183536366779259610196729558300895864773/50398867774936156048001062483471258898922497969875274900486043372294615594544555293392744440145888841371900471939858660242350003446133569661497319066211450625329781051309792288047912597656250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "small_field_exposure": "1/1000000000000000000", + "artificial_boundary": "46248647905701184502994092243542020713267905454447515571451892035362508353573841615159615339773469519511222083986859962853394049210320886809606200206556095266907716722400641979368337398233978910542131/6605880396996431845523595261833544846399569653907492031756506676893399855208143951415573799258801942216297738658101154315285299651691619242671776604646467256363225061957277094779016000000000000000000", + "literal_scalar_guard": "1", + "row_product_gap": "23971789/25", + "balanced_prefix_above_kappa": "550042988388611688369205823989077886773965515878728726747932211633432067386799257451668462594712434857941333397055768012640812633662078222152713997053717290771577011531200424585191/412867524812276990345224703864596552899973103369218251984781667305837490950508996963473362453675121388518608666131322144705331228230726202666986037790404203522701566372329818423688500000000000000000", + "coordinate_movement_above_kappa": "78452961352847598918516394278971659481331432859237066649424129667134808630398853391912761178763207537908109793203831464837997733885657643609588447593436647051/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_phase_layer_above_kappa": "54870185430533879209592448049792533549596965003804189905260217731037830574516104195278040056414925387769089892369778347174192562172540807794291183705325234899550178063548242464601/165147009924910796138089881545838621159989241347687300793912666922334996380203598785389344981470048555407443466452528857882132491292290481066794415116161681409080626548931927369475400000000000000000", + "bulk_exposure_above_kappa": "78452961352847598918516394278971659481331432859237066649424129667134808630398853391912761178763207537908109793203831464837997733885657643609588447593436647051/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gaussian_arithmetic_above_kappa": "4672012566095017110455046145179280659383717220367477108119098713076538168683698149591961776978647743841875247691579066755199689856285989527773563574955434617118216520775908609126171/6605880396996431845523595261833544846399569653907492031756506676893399855208143951415573799258801942216297738658101154315285299651691619242671776604646467256363225061957277094779016000000000000000000", + "scalar_work_above_kappa": "7974952764593233033216843776096053082583502047321223123997352051523238096287770125299748676608048714950024117020629643912842339682131799149109451877278668245299829051754547156515679/6605880396996431845523595261833544846399569653907492031756506676893399855208143951415573799258801942216297738658101154315285299651691619242671776604646467256363225061957277094779016000000000000000000", + "dimension_above_kappa": "411931883971506793163802659524015135469232720619859634789183848572891235797423214669958704933124136063149853928581112713236002168825041809973826595871674018630012430681387472347888511531200424585191/412867524812276990345224703864596552899973103369218251984781667305837490950508996963473362453675121388518608666131322144705331228230726202666986037790404203522701566372329818423688500000000000000000" + }, + "outer_controls": [ + "next_grid", + "zero_eta", + "zero_beta", + "unit_beta" + ], + "bootstrap": [ + { + "gap": "77700191184163087736308252660500911393801/62500000000000000000000000000000000000000000000", + "cutoff_log2": "23292621022833" + }, + { + "gap": "22035500823998869930507930842150868768654091410330107949400549/15625000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "18100755477578231773" + }, + { + "gap": "6249190499590723752847946110114538620601182257691815838869237387367034660501227601/3906250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "14066143459678166113736944" + }, + { + "gap": "1772248437287297768063758813231463857764748822643053531819635241254009676979099435670084333982024596749/976562500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "10930836123019037656056314603016" + }, + { + "gap": "502603420982761311539041506293808216479242223973462530201407562553643345749374692386480249099696279705752331693888441501401/244140625000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "8494380758365423758936869721476641843" + }, + { + "gap": "142536561730721028340518668567140762933350575870332865191369601146608087238821236792462091890206796168535162002266114342356390411552406563352949/61035156250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "6601005051767263055251893981415233874399241" + } + ], + "bit_template_sha256": "f9ce9ac945d9e8ea737dc5e456e366a7e2a21d8b989d24b742d7f124d26fb32f", + "complex_template_sha256": "942d030fa43316c560c88d7d7d904583446e1a96945b3ebd37a91c88a192ab4f", + "scope": "Finite research composition with explicit changed words, exact local and global replay and incremental phase evidence. All-size correlated dirty-bank, compressed-window, compiler, restored-work, tape/common-grid, precision and analytic interfaces remain inherited assumptions. This certificate makes no unconditional integer-multiplication or Lean-kernel claim." +} diff --git a/research/e8-early-reset-kernel/local-evidence/AUDIT.json b/research/e8-early-reset-kernel/local-evidence/AUDIT.json new file mode 100644 index 0000000000..643c814b0b --- /dev/null +++ b/research/e8-early-reset-kernel/local-evidence/AUDIT.json @@ -0,0 +1,34 @@ +{ + "status": "PASS_INDEPENDENT_COMPRESSED_BIT_TEMPLATE_AUDIT", + "template_sha256": "f9ce9ac945d9e8ea737dc5e456e366a7e2a21d8b989d24b742d7f124d26fb32f", + "source_frames": 944, + "exact_nested_frame_pairs": 3357, + "exact_reflected_pairs": 3357, + "orthogonal_lift_argument": "Adding the same orthogonal E_s leaves P_V-P_U unchanged; each audited projector is therefore the literal child projector in every one of the nine windows.", + "exact_bank_families": 6579, + "mixed_width_slots": true, + "entrance_rank_total": 128, + "mutations_rejected": [ + "omit an idle child", + "omit a bridge", + "omit terminal exchange", + "remove a local invocation", + "re-use a helper bank slot", + "understate live stock", + "omit a local paid move", + "wrong reflected copy charge" + ], + "profile": { + "1": 178560, + "2": 74232, + "3": 22248, + "4": 23328, + "5": 9576, + "7": 6768, + "8": 648, + "14": 3840, + "28": 3840, + "42": 3840 + }, + "seconds": 1.8856884160777554 +} diff --git a/research/e8-early-reset-kernel/local-evidence/BIT-PRICE.json b/research/e8-early-reset-kernel/local-evidence/BIT-PRICE.json new file mode 100644 index 0000000000..0339fa04e3 --- /dev/null +++ b/research/e8-early-reset-kernel/local-evidence/BIT-PRICE.json @@ -0,0 +1,17 @@ +{ + "lower": "0.001134385925603239057397", + "upper": "0.001134385925603239057398", + "lower_endpoint_residual_upper": "-1.208815110554072546890868962118806453466727141708111658528148771609217E-24", + "upper_endpoint_residual_lower": "1.206647999073094385830833942650340983281407775833257592984711501729879E-24", + "strict_rational_signs": true, + "moment_minus_one_at_current_k_required_rate": [ + "-0.001059935772403113935979679141367753634160753707351085784521072950941911", + "-0.001059935772403113935979679141367753634160753707351085784521072950867727" + ], + "nominal_k_ceiling_interval": [ + "0.001133100552284434337978314624649498572528216136568917723800228264595422", + "0.001133100552284434337979312359732310865246830293765932499225360045604731" + ], + "source_template_sha256": "f9ce9ac945d9e8ea737dc5e456e366a7e2a21d8b989d24b742d7f124d26fb32f", + "two_exact_engines": true +} diff --git a/research/e8-early-reset-kernel/local-evidence/FULL-PYTHON311.json b/research/e8-early-reset-kernel/local-evidence/FULL-PYTHON311.json new file mode 100644 index 0000000000..e78af127aa --- /dev/null +++ b/research/e8-early-reset-kernel/local-evidence/FULL-PYTHON311.json @@ -0,0 +1,49 @@ +{ + "status": "PASS_FULL_EARLY_RESET_KERNEL_COMPOSITION", + "kappa": "566550276142217/500000000000000000", + "kappa_decimal": "0.001133100552284434", + "source_manifest_sha256": "fcc4de6a0a0bc14011be74ce43402c20490c0441a8688534be23f0f86aa5bfea", + "checks": [ + { + "name": "full-early-reuse434", + "seconds": 120.78334466693923, + "log_sha256": "c0edbb5dd9975ae1879cf20f98ed89b925ff3f9b695f027aca13f4930a6f81a6" + }, + { + "name": "kernel-reconstruction", + "seconds": 0.07485416706185788, + "log_sha256": "3f693dcbe49585d9ce689315e42a81cc7e4a4e45f0990c938217fb43c5150f28" + }, + { + "name": "export", + "seconds": 0.5898666669381782, + "log_sha256": "6c647e3d28cf94ce9f8b9fdcfc5c10797c18d488d74fe09b8de8671dfd7ae107" + }, + { + "name": "integer-source-spans", + "seconds": 0.06577295798342675, + "log_sha256": "bdf95dbce8337be57aab8a3d3b42a711ee276496c40cbb4c5356fc9cc9b2e811" + }, + { + "name": "global-program", + "seconds": 2.7857714579440653, + "log_sha256": "7e97172f5d1a084d7e5b043f4cb772d5d42389a151211c114e5a4632638cc826" + }, + { + "name": "independent-audit", + "seconds": 3.3599830419989303, + "log_sha256": "4ea14031d43b401b0349f6ec33ff189f633e00cc89d1e10017b1df4438e17cf4" + }, + { + "name": "two-moments", + "seconds": 0.13630245893727988, + "log_sha256": "59229b1eb12d77f6e25381ed1715fb134898e731fb30ba564789d62a44253478" + }, + { + "name": "finite-assembly", + "seconds": 0.15192366705741733, + "log_sha256": "e9af1d9589b520a86e59f494ff0a0f18609be39722dc55dc28ed91951b7b2134" + } + ], + "parent_phase_mode": "full replay" +} diff --git a/research/e8-early-reset-kernel/local-evidence/FULL-PYTHON314.json b/research/e8-early-reset-kernel/local-evidence/FULL-PYTHON314.json new file mode 100644 index 0000000000..37155858c0 --- /dev/null +++ b/research/e8-early-reset-kernel/local-evidence/FULL-PYTHON314.json @@ -0,0 +1,49 @@ +{ + "status": "PASS_FULL_EARLY_RESET_KERNEL_COMPOSITION", + "kappa": "566550276142217/500000000000000000", + "kappa_decimal": "0.001133100552284434", + "source_manifest_sha256": "fcc4de6a0a0bc14011be74ce43402c20490c0441a8688534be23f0f86aa5bfea", + "checks": [ + { + "name": "full-early-reuse434", + "seconds": 111.79458600003272, + "log_sha256": "c0edbb5dd9975ae1879cf20f98ed89b925ff3f9b695f027aca13f4930a6f81a6" + }, + { + "name": "kernel-reconstruction", + "seconds": 0.06413062498904765, + "log_sha256": "3f693dcbe49585d9ce689315e42a81cc7e4a4e45f0990c938217fb43c5150f28" + }, + { + "name": "export", + "seconds": 0.37764429196249694, + "log_sha256": "6c647e3d28cf94ce9f8b9fdcfc5c10797c18d488d74fe09b8de8671dfd7ae107" + }, + { + "name": "integer-source-spans", + "seconds": 0.08005450002383441, + "log_sha256": "bdf95dbce8337be57aab8a3d3b42a711ee276496c40cbb4c5356fc9cc9b2e811" + }, + { + "name": "global-program", + "seconds": 2.7084261670242995, + "log_sha256": "8dd0f6c14d141094a7f0432bd7c2e065c7af228d161121e5355b7f6009a4f117" + }, + { + "name": "independent-audit", + "seconds": 1.9340536249801517, + "log_sha256": "e37173420f400387484e79ce9fa0309ea399ef891e44cbe28731b86c603f37a0" + }, + { + "name": "two-moments", + "seconds": 0.14735429198481143, + "log_sha256": "59229b1eb12d77f6e25381ed1715fb134898e731fb30ba564789d62a44253478" + }, + { + "name": "finite-assembly", + "seconds": 0.16268512490205467, + "log_sha256": "e9af1d9589b520a86e59f494ff0a0f18609be39722dc55dc28ed91951b7b2134" + } + ], + "parent_phase_mode": "full replay" +} diff --git a/research/e8-early-reset-kernel/local-evidence/GLOBAL.json b/research/e8-early-reset-kernel/local-evidence/GLOBAL.json new file mode 100644 index 0000000000..9d69b480fb --- /dev/null +++ b/research/e8-early-reset-kernel/local-evidence/GLOBAL.json @@ -0,0 +1,165 @@ +{ + "status": "PASS_SOURCE_BOUND_NINE_STAGE_BIT_TEMPLATE", + "h": 8, + "m": 64, + "v": 120, + "R": 747, + "replicas": 8, + "live": 14259, + "physical": 14268, + "word_sha256": "da4aa797d6dad909fd1faaa90abea749b026299ac8cad3ad0a4a248e16bdb5f5", + "source_records_sha256": "99cb283793818ad03f8f16f95a8eb23d0b18769d0657d58043fb7a427471c35d", + "local_checks": { + "forward": { + "copies": 9, + "adds": 14693, + "records": 19002, + "all_columns": 987, + "cancellation_free_row_l1": 4749881, + "profile": { + "1": 2480, + "2": 1031, + "3": 309, + "4": 324, + "5": 133, + "7": 14, + "8": 9 + }, + "sha256": "4ed9ed1f7756ea6ff2c299b61ed1dc3fe0fa5bbbb91b5170133596b452c8085e" + }, + "reverse": { + "copies": 9, + "adds": 14693, + "records": 19002, + "all_columns": 987, + "cancellation_free_row_l1": 18976518, + "profile": { + "1": 2480, + "2": 1031, + "3": 309, + "4": 324, + "5": 133, + "7": 14, + "8": 9 + }, + "sha256": "ceedc55929da7f5279c330cd9714e78a7c4e294f0cb8e446ace5707369440bd8" + } + }, + "scalar_stages": [ + { + "stage": 0, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + }, + { + "stage": 1, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": true + }, + { + "stage": 2, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + }, + { + "stage": 3, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": true + }, + { + "stage": 4, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + }, + { + "stage": 5, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": true + }, + { + "stage": 6, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + }, + { + "stage": 7, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": true + }, + { + "stage": 8, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + } + ], + "independent_unbanked_scalar_columns": 7683, + "all_scalar_columns_restored": true, + "geometry_sha256": "fc7b29b16ee754ca9717973b745d6322bbf8351a5e35e3fc9e0fbf7a88dc0317", + "template_sha256": "f9ce9ac945d9e8ea737dc5e456e366a7e2a21d8b989d24b742d7f124d26fb32f", + "emitted_program_sha256": "3c56fb306442103076c77a04ed28c2786c456ce3266808b1eeacf36b78a48475", + "emitted_events": 1368144, + "local_invocations": 72, + "bank_assignments": 53784, + "banks_per_stage": 731, + "entrance_rank_total": 128, + "mixed_width_slots": true, + "padding_calls": 0, + "profile": { + "1": 178560, + "2": 74232, + "3": 22248, + "4": 23328, + "5": 9576, + "7": 6768, + "8": 648, + "14": 3840, + "28": 3840, + "42": 3840 + }, + "paid_calls": 326880, + "rank_mass": 910080, + "deficit": 2496, + "maxchild": 42, + "halving_depth": 2, + "halving_integer_inequality": [ + 4096, + 3528 + ], + "local_additions": 14693, + "bridge_additions": 17280, + "copy_erase_episodes": 648, + "global_prefix_bound": "82190131489578773587585573345852919919075549029526266900008239366144", + "global_prefix_bits": 226, + "charged_prefix_bits": 256, + "omitted_bridge_shears_rejected": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17 + ], + "scope": "Complete source-bound finite cover template. Local and unbanked global F2 columns are replayed; arbitrary physical bank dirt follows by injective owner routes and the all-column local theorem. Astronomical cover enumeration and all-size compiler interfaces remain explicit inherited assumptions.", + "seconds": 2.6007981669390574 +} diff --git a/research/e8-early-reset-kernel/local-evidence/SOURCE-SPANS.log b/research/e8-early-reset-kernel/local-evidence/SOURCE-SPANS.log new file mode 100644 index 0000000000..d612f8c813 --- /dev/null +++ b/research/e8-early-reset-kernel/local-evidence/SOURCE-SPANS.log @@ -0,0 +1 @@ +{"status": "PASS_INDEPENDENT_F2_AND_INTEGER_SOURCE_SPANS", "columns": 987, "profile": {"1": 2480, "4": 324, "2": 1031, "3": 309, "5": 133, "8": 9, "7": 14}, "word_sha256": "da4aa797d6dad909fd1faaa90abea749b026299ac8cad3ad0a4a248e16bdb5f5"} diff --git a/research/e8-early-reset-kernel/source_span.py b/research/e8-early-reset-kernel/source_span.py new file mode 100644 index 0000000000..a8722a7e4f --- /dev/null +++ b/research/e8-early-reset-kernel/source_span.py @@ -0,0 +1,10 @@ +"""PR417/435 independent all-column replay, including integer source-span legality.""" +from pathlib import Path +import sys,json,hashlib +ROOT=Path(__file__).resolve().parent;sys.path.insert(0,str(ROOT/'vendor/kernel417')) +from e8core import Lat,replay +w=json.loads(Path(sys.argv[1]).read_text());frames=json.loads(Path(sys.argv[2]).read_text())['frames'];L=Lat(w['lines']);masks=[sum(1</2) for orthogonality + self.ip = [[sum(a * b for a, b in zip(x, y)) // 2 for y in self.lines] for x in self.lines] + + def close(self, mask): + """mask of all root lines in span(roots of mask)""" + if mask in self._close: return self._close[mask] + idx = [i for i in range(self.v) if mask >> i & 1] + basis = [] + for i in idx: + if rank([self.lines[j] for j in basis] + [self.lines[i]]) > len(basis): basis.append(i) + d = len(basis); out = 0 + if d == 8: out = (1 << self.v) - 1 + elif d: + B = [self.lines[j] for j in basis] + for i in range(self.v): + if rank(B + [self.lines[i]]) == d: out |= 1 << i + self._close[mask] = out; self._close[out] = out; self._dim[out] = d + return out + + def dim(self, mask): + if mask not in self._dim: self.close(mask) + return self._dim[mask] + + def basis(self, mask): + b = [] + for i in range(self.v): + if mask >> i & 1 and rank([self.lines[j] for j in b] + [self.lines[i]]) > len(b): b.append(i) + return b + + def perp(self, t): + return self.close(sum(1 << j for j in range(self.v) if self.ip[t][j] == 0)) + + +def to_masks(c, L): + return [L.close(sum(1 << i for i in fr)) for fr in c['frames']] + + +PHASES = ('D', 'A', 'B', 'C') + + +def replay(c, L=None, masks=None, check_f2=True, span=True, span_mode='z'): + """Exact legality + F2 replay + histogram of a bitE8/1 word. Returns dict(H_local, steps, ...). + Legality: each register's frames nested (mask inclusion = exact Q-subspace inclusion for root-spanned frames) and + strictly increasing at each move; every gate at one common frame; D compensation at frame 0; y at frame 0 at the + scatter; COPY of retained totals; final frames (x, helpers FULL; y_t at its cap t-perp). + Source-span: every non-target operand's x-support lies in the gate frame.""" + L = L or Lat(c['lines']); masks = masks or to_masks(c, L) + v, R, h = c['v'], c['R'], c['h']; n = 2 * v + R; FULL = (1 << v) - 1 + cur = [masks[f] for f in c['start']] + for r in range(v): assert cur[r] == L.close(1 << r), 'x start' + for r in range(v, 2 * v): assert cur[r] == 0, 'y start at 0' + sig = [L.dim(cur[r]) for r in range(n)] + H = Counter(); steps = 0; viol = [] + val = [1 << i for i in range(n)] + zsupp = [{i: 1} if i < v else {} for i in range(n)] # integer support of each register over the x columns (all ADDs are +1) + def climb(r, m): + nonlocal steps + if cur[r] == m: return + assert cur[r] & ~m == 0 and cur[r] != m, ('not nested', r) + H[L.dim(m) - L.dim(cur[r])] += 1; steps += 1; cur[r] = m + def run(gates, ph): + for k, (f, d, srcs) in enumerate(gates): + m = masks[f] + assert d not in srcs and len(set(srcs)) == len(srcs), (ph, k) # rohanarun: source destinations allowed (#433 source-basis gates); spans checked below + for x in [d] + srcs: climb(x, m) + for s in srcs: + val[d] ^= val[s] + if span: + if s < v or s >= 2 * v: + ms = sum(1 << i for i in zsupp[s]) + if ms & ~m: viol.append((ph, k, s)) + zd = zsupp[d] + for i, a in zsupp[s].items(): + w = zd.get(i, 0) + a + if w: zd[i] = w + else: zd.pop(i, None) + if span_mode == 'f2': + zsupp[d] = {i: 1 for i in range(v) if val[d] >> i & 1} + if span and (d >= 2 * v or d < v): + md = sum(1 << i for i in zsupp[d]) + if md & ~m: viol.append((ph, k, d)) + run(c['D'], 'D') + for r in range(v, n): assert cur[r] == masks[c['start'][r]], 'D compensation at frame 0 (helpers untouched otherwise)' + run(c['A'], 'A') + for t in range(v): assert cur[v + t] == 0, 'y at frame 0 at the scatter' + copies = [val[q] for q in c['ret']] + for q in c['ret']: + assert q >= 2 * v or q < v; H[L.dim(cur[q])] += 1 # rohanarun: #433 retains totals in source rows + for t, row in enumerate(c['scatter']): + for k in row: val[v + t] ^= copies[k] + run(c['B'], 'B'); run(c['C'], 'C') + for r in range(n): climb(r, masks[c['final'][r]]) + for r in range(v): assert cur[r] == FULL + for r in range(2 * v, n): assert cur[r] == FULL + for t in range(v): assert cur[v + t] == L.perp(t), 'y final at cap' + if check_f2: + for s in range(v): assert val[s] == 1 << s + for t in range(v): assert val[v + t] == (1 << (v + t)) | (1 << t), ('target', t) + for r in range(2 * v, n): assert val[r] == 1 << r, ('helper', r) + return dict(sig=sig, viol=viol, H=H, steps=steps, n=n, v=v, R=R, h=h, L=L, masks=masks, ncopy=len(c['ret'])) + + +def profile(H_local, v, h=8): + prof = Counter({j: 5 * c for j, c in H_local.items()}) + for j in (2 * h - 2, h - 1, 2 * h + 2, 4): prof[j] += 2 * v + return prof + + +def coarse(H, m, W): + grid = Q(1, 10**18) + root = moment.certify(dict(H), m, W, True); c = Q(int(Q(root['lower']) * 10**18), 10**18) + assert moment.moment(H, m, W, c, True)[1] < 1 < moment.moment(H, m, W, c + grid, True)[0] + fb = 32 * m * m * sum(H.values()) + _, up = other.moment(m, W, list(H.items()), c); _, bad = other.moment(m, W, [(1, fb)], c) + lo, _ = other.moment(m, W, list(H.items()), c + grid); blo, _ = other.moment(m, W, [(1, fb)], c + grid) + assert up + Q(1, 10**16) * bad < 1 < lo + Q(1, 10**16) * blo + return c + + +def kappa(c, b): + grid = Q(1, 10**18); eta = Q(1, 10**12); beta = Q(1, 10**9); cap = (1 - beta) * b + sv = min(c, Q(((cap - grid) * 10**18).__floor__(), 10**18)); binding = 'bit' if sv == c else 'complex' + chain = [Q(384599, 10**10)] + for _ in range(3): + a = (1 - sv) * sv + sv * chain[-1]; assert chain[-1] < a < sv < 1 - a; chain.append(a) + bit = chain[-1] + bridge = dict(proof='PROOF.md', representation='Exact powers with source-bound finite overcharges', + semantic=dict(G=dict(base=2, exponent=30000), E=dict(base=2, exponent=100000), B_upper=dict(base=2, exponent=100001), + C0=dict(base=2, exponent=210000), C1=1, strict_literal_gap=1, induction_gap_lower=1), + rows=dict(coefficient=20161, degree=10**6, suffix_slope=4 * 10**6, degree_gap=Q(10**6) - Q(51 * 20161, 25))) + q = bit * (1 - 2 * eta); mn = (1 - eta) * q / (1 + q); t = mn * 10**18; k = Q((t.numerator - 1) // t.denominator, 10**18) + asm = outer.assembly(bit, b, bridge, k, eta=eta, beta=beta) + assert len(asm['strict_constraints']) == 47 and min(asm['strict_constraints'].values()) > 0 + try: + outer.assembly(bit, b, bridge, k + grid, eta=eta, beta=beta); raise SystemExit('ADJACENT ADMITTED') + except AssertionError: pass + return k, binding + + +def price_word(c, **kw): + r = replay(c, **kw) + v, h, R = r['v'], r['h'], r['R']; m = 5 * h + resid = sum(h - r['sig'][x] for x in range(2 * v, 2 * v + R)) + T = 1 if resid % h == 0 else h + W = (4 * v * h + resid) * T // h; assert (4 * v * h + resid) * T % h == 0 + prof = Counter({j: T * k for j, k in profile(r['H'], v, h).items()}); mass = sum(a * b for a, b in prof.items()) + L_copy = h * r['ncopy'] + assert m * W - mass == T * (4 * v - 5 * L_copy), ('deficit', m * W - mass) + assert 2 * max(prof) < m + cc = coarse(prof, m, W) + return dict(c=cc, H=r['H'], prof=prof, W=W, T=T, resid=resid, m=m, deficit=m * W - mass, replay=r) + + +def phi_fn(m, W, a): + """linearized moment term per child of rank r (float), for search scoring""" + import math + return lambda r: r / (m * W) * math.exp(a * math.log(m / r)) diff --git a/research/e8-early-reset-kernel/vendor/kernel417/engines/base_two_moment.py b/research/e8-early-reset-kernel/vendor/kernel417/engines/base_two_moment.py new file mode 100644 index 0000000000..14a90fa0e7 --- /dev/null +++ b/research/e8-early-reset-kernel/vendor/kernel417/engines/base_two_moment.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +"""Maintainer arithmetic cross-check of the pinned PR39 certificate. + +Uses no producer/checker imports. Counts are inputs, not proved by this script. +80-term rational logarithms and 12-term exponentials independently enclose +the two moments. The accompanying written review addresses their realization. +""" +import argparse +from fractions import Fraction as Q +from hashlib import sha256 +import json +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +GRID = 10**30 + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def log_unit(x): + require(1 <= x <= 2, "logarithm range") + z = (x-1)/(x+1) + lo = 2*sum((z**(2*j+1)/(2*j+1) for j in range(80)), Q(0)) + return lo, lo+2*z**161/(161*(1-z*z)) + + +def log_bounds(x): + k = 0 + while x > 2: + x /= 2 + k += 1 + lo, hi = log_unit(x) + l2, u2 = log_unit(Q(2)) + lo, hi = lo+k*l2, hi+k*u2 + # Outward rational rounding keeps later certificates compact. + return Q((lo*GRID).__floor__(), GRID), Q((hi*GRID).__ceil__(), GRID) + + +def exp_bounds(x): + require(0 <= x < 1, "exponential range") + term = total = Q(1) + for j in range(1, 13): + term *= x/j + total += term + tail = term*x/13/(1-x/14) + return total, total+tail + + +def moment(m, W, entries, saving): + lo = hi = Q(0) + for t, count in entries: + t, count = int(t), int(count) + require(0 < t < m and count > 0, "improper child") + l, u = log_bounds(Q(m, t)) + lower = exp_bounds(saving*l)[0] + upper = exp_bounds(saving*u)[1] + lo += Q(t*count, m*W)*lower + hi += Q(t*count, m*W)*upper + return Q((lo*GRID).__floor__(), GRID), Q((hi*GRID).__ceil__(), GRID) + diff --git a/research/e8-early-reset-kernel/vendor/kernel417/engines/moment.py b/research/e8-early-reset-kernel/vendor/kernel417/engines/moment.py new file mode 100644 index 0000000000..7d697cb452 --- /dev/null +++ b/research/e8-early-reset-kernel/vendor/kernel417/engines/moment.py @@ -0,0 +1,113 @@ +"""Independent prospective ordinary five-stage cost, never supplier admission. + +Consumes a raw one-invocation ledger made from the actual source/internal/target +paths. No packed profile is used as an input. Missing physical/finite/compiler +obligations must remain explicit in the accompanying report. +""" +from collections import Counter +from decimal import Decimal, localcontext, ROUND_FLOOR +from fractions import Fraction as F +from functools import lru_cache +from math import factorial +import hashlib, json, sys +from pathlib import Path + +DYAD = 1 << 224 + +def floor(x): return F(x.numerator*DYAD//x.denominator, DYAD) +def ceil(x): return -floor(-x) + +@lru_cache(None) +def logarithm(x): + """Mercator bounds after binary reduction; ln(2) via two Mercator sums. + + For 1 <= y < 2, log(y) is an alternating series in z=y-1. + We instead reduce to 1 <= y < 3/2, and bound log(3/2) and + log(2) by the same alternating series at z=1/2 and z=1/3, + using log(2)=log(3/2)+log(4/3). All sums are exact rationals. + """ + assert x >= 1 + k = 0 + while x >= 2: x /= 2; k += 1 + j = int(x >= F(3, 2)) + if j: x /= F(3, 2) + def mercator(y): + z=y-1 + assert 0 <= z <= F(1,2) + # An even partial sum is below log; the next term bounds its tail. + t=z; s=F(0) + for n in range(1, 225): + s += (t if n & 1 else -t)/n + t *= z + return s, s+t/225 + a,b=mercator(x); c,d=mercator(F(3,2)); e,f=mercator(F(4,3)) + return floor(a+(k+j)*c+k*e), ceil(b+(k+j)*d+k*f) + +def exponential(l,u): + assert 0 <= l <= u < F(1,10) + def poly(x): + s=t=F(1) + for j in range(1,25): t=t*x/j; s+=t + return s,t + lo,_=poly(l);hi,last=poly(u) + return floor(lo),ceil(hi+last*u/25/(1-u/26)) + +def moment(H,m,W,a,bad=False): + lo=hi=F(0) + for r,n in H.items(): + assert 0 < r < m and n > 0 + l,u=logarithm(F(m,r)); e,f=exponential(a*l,a*u) + p=F(r*n,m*W);lo+=p*e;hi+=p*f + if bad: + # Existing envelope shape, only conditionally portable to the new cover. + l,u=logarithm(F(m));e,f=exponential(a*l,a*u) + p=F(32*m*sum(H.values()),10**16*W) + lo+=p*e;hi+=p*f + return floor(lo),ceil(hi) + +def decimal(x): + with localcontext() as c: + c.prec=70 + return str(Decimal(x.numerator)/Decimal(x.denominator)) + +def certify(H,m,W,bad=False): + with localcontext() as c: + c.prec=70 + terms=[(Decimal(r*n)/Decimal(m*W),(Decimal(m)/Decimal(r)).ln()) for r,n in H.items()] + fallback=Decimal(32*m*sum(H.values()))/Decimal(10**16*W) if bad else Decimal(0) + lm=Decimal(m).ln();lo=Decimal(0);hi=Decimal('.003') + for _ in range(210): + a=(lo+hi)/2 + if sum(p*(a*l).exp() for p,l in terms)+fallback*(a*lm).exp()<1:lo=a + else:hi=a + q=int(((lo+hi)/2*10**24).to_integral_value(rounding=ROUND_FLOOR)) + lo=F(q,10**24);hi=lo+F(1,10**24) + lv=moment(H,m,W,lo,bad);hv=moment(H,m,W,hi,bad) + assert lv[1]<10 for v in slacks.values()),{k:str(v) for k,v in slacks.items() if v<=0} + assert min(margins.values())==minimum + assert margins['balanced_prefix']-minimum==eta and 1-eps-r==eta/2 + assert 1-eps*(1+c)==eta-eps*eta/4 + return dict(parameters=dict(a_bit=a,a_complex=b,tau=tau,sigma=sigma, + eta=eta,beta=beta,q=q,c=c,epsilon=eps,lambda_=lam, + lambda_prime=lp,alpha_squared_power=r,delta=delta, + C0=bridge['semantic']['C0'],C1=1,kappa=kappa), + strict_constraints=slacks,margins=margins,minimum_margin=minimum, + absorption_gap=minimum-kappa, + recurrence=dict(internal=internal,leaf=leaf,reservations=1-c)) diff --git a/research/e8-early-reset-kernel/vendor/kernel417/stages.py b/research/e8-early-reset-kernel/vendor/kernel417/stages.py new file mode 100644 index 0000000000..9ef95d52f4 --- /dev/null +++ b/research/e8-early-reset-kernel/vendor/kernel417/stages.py @@ -0,0 +1,143 @@ +"""Transcript stages on the E8 bit word (bitE8/1), applied from frozen selections, each bound to the exact input word. + +retime (our #329 descent2 / #287 concave retiming, ported to E8 frames): every selected gate g gets a new frame F with + close(LB_g + prev frames of its participants) <= F <= rootspan(AND of their next frames), where LB_g is the + x-support of the non-target operands (source-span rule); pinned: D gates (frame 0), y at frame 0 at the scatter, + retained totals at FULL at COPY, start and final frames. Checked on the joint retimed configuration. +kernel (our #320/#329 shared-donor response kernel; #272/#299/#319 lineage): entry = pivot p, entrance E, donors D with + resp(p) = XOR resp(D) over F2, where resp(h) = the targets whose frame-0 completion (D) gates read h; E inside the + first frame of p and of every donor. p starts at E and leaves the D gates; each donor climbs to E at the start of + A and pays d += (its pivots) at E; after C it pays d += (its pivots) again at FULL (F2: d -= p). + Exclusivity: pivots are never donors, a donor serves one entrance. Total entrance rank = 0 mod 8 (integral + B_4 width W; the residuals then tile width-72 banks with 9 replicas, checked separately). + +usage: stages.py retime|kernel IN.json.gz OUT.json.gz SELECTION.json +After applying, the full exact replay of e8core (legality, F2 on all columns, source spans) must pass and the output +must equal the frozen output content hash. (This package uses the kernel stage only: on PR #376's word our retiming +descent finds no move, before or after the kernel.) +Chafik Boukhalfa (chafreaky) with Anthropic Claude assistance; Apache-2.0.""" +import sys, os, json, hashlib +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from e8core import * + + +def content_sha(c): + return hashlib.sha256(json.dumps(c, sort_keys=True, separators=(',', ':')).encode()).hexdigest() + + +class Framer: + def __init__(self, c): + self.fl = c['frames']; self.key = {}; self.v = c['v'] + for k, fr in enumerate(self.fl): self.key.setdefault(sum(1 << i for i in fr), k) + def fid(self, m): + if m not in self.key: self.key[m] = len(self.fl); self.fl.append([i for i in range(self.v) if m >> i & 1]) + return self.key[m] + + +def mask_of(lines): return sum(1 << i for i in lines) + + +def occurrences(c, masks): + """per register: list of (kind, ref) with pins ('p', mask) and gates ('g', (phase, k)) in time order""" + v = c['v']; n = 2 * v + c['R']; FULL = (1 << v) - 1 + occ = [[('p', masks[c['start'][r]])] for r in range(n)] + for ph in ('D', 'A'): + for k, (f, d, s) in enumerate(c[ph]): + for x in [d] + s: occ[x].append(('g', (ph, k))) + for t in range(v): occ[v + t].append(('p', 0)) + for q in c['ret']: occ[q].append(('p', FULL)) + for ph in ('B', 'C'): + for k, (f, d, s) in enumerate(c[ph]): + for x in [d] + s: occ[x].append(('g', (ph, k))) + for r in range(n): occ[r].append(('p', masks[c['final'][r]])) + return occ + + +def lower_bounds(c, L): + v = c['v']; n = 2 * v + c['R']; sup = [1 << i if i < v else 0 for i in range(n)]; lb = {} + for ph in ('D', 'A', 'B', 'C'): + for k, (f, d, srcs) in enumerate(c[ph]): + need = 0 + for s in srcs: + sup[d] |= sup[s] + if s < v or s >= 2 * v: need |= sup[s] + if d >= 2 * v: need |= sup[d] + lb[(ph, k)] = L.close(need) if need else 0 + return lb + + +def retime(c, sel): + L = Lat(c['lines']); masks = to_masks(c, L); occ = occurrences(c, masks); lb = lower_bounds(c, L) + gm = {(ph, k): masks[g[0]] for ph in ('D', 'A', 'B', 'C') for k, g in enumerate(c[ph])} + pos = {} + for r, o in enumerate(occ): + for i, (kind, x) in enumerate(o): + if kind == 'g': pos.setdefault(x, []).append((r, i)) + def fr(r, i): + kind, x = occ[r][i]; return x if kind == 'p' else gm[x] + seen = set() + for ph, k, old_lines, new_lines in sel: + g = (ph, k); assert ph != 'D' and g not in seen; seen.add(g) + assert gm[g] == L.close(mask_of(old_lines)), ('selection not bound to this word', g) + F = L.close(mask_of(new_lines)); assert F == mask_of(new_lines), 'frame given as all its root lines' + gm[g] = F + for g in seen: # the joint retimed configuration: every moved gate inside its feasible interval + F = gm[g]; lo = lb[g]; hi = (1 << c['v']) - 1 + for r, i in pos[g]: lo |= fr(r, i - 1); hi &= fr(r, i + 1) + assert lo & ~F == 0 and F & ~hi == 0, ('outside the feasible interval', g) + out = json.loads(json.dumps(c)); fm = Framer(out) + for ph in ('D', 'A', 'B', 'C'): + out[ph] = [[fm.fid(gm[(ph, k)]), d, list(s)] for k, (f, d, s) in enumerate(c[ph])] + return out + + +def kernel(c, sel): + L = Lat(c['lines']); masks = to_masks(c, L); v = c['v']; n = 2 * v + c['R']; FULL = (1 << v) - 1 + occ = occurrences(c, masks) + gm = {(ph, k): masks[g[0]] for ph in ('D', 'A', 'B', 'C') for k, g in enumerate(c[ph])} + first = {} + for h in range(2 * v, n): + assert masks[c['start'][h]] == 0 + first[h] = next(x if kind == 'p' else gm[x] for kind, x in occ[h][1:] if (x if kind == 'p' else gm[x]) != 0) + resp = {} + for f, t, srcs in c['D']: + assert masks[f] == 0 + for s in srcs: resp[s] = resp.get(s, 0) ^ (1 << (t - v)) + ret = set(c['ret']); pivots = {}; donor_at = {}; tot = 0 + for E_lines, p, D in sel: + E = L.close(mask_of(E_lines)); assert E == mask_of(E_lines) and E != 0 + assert p not in ret and p not in pivots and p not in donor_at and 2 * v <= p < n + x = resp.get(p, 0) + for d in D: + assert d not in ret and d not in pivots and 2 * v <= d < n + assert donor_at.setdefault(d, E) == E, 'donor serves one entrance' + x ^= resp.get(d, 0) + assert x == 0, ('response relation fails', p) + for h in [p] + D: assert E & ~first[h] == 0, ('entrance not inside first frame', h) + pivots[p] = E; tot += L.dim(E) + assert not set(pivots) & set(donor_at) + assert tot % 8 == 0, 'total entrance rank 0 mod 8' + out = json.loads(json.dumps(c)); fm = Framer(out) + for p, E in pivots.items(): out['start'][p] = fm.fid(E) + out['D'] = [[f, t, [s for s in srcs if s not in pivots]] for f, t, srcs in c['D']] + byd = {} + for E_lines, p, D in sel: + for d in D: byd.setdefault((d, mask_of(E_lines)), []).append(p) + out['A'] = [[fm.fid(E), d, sorted(ps)] for (d, E), ps in sorted(byd.items())] + out['A'] + out['C'] = out['C'] + [[fm.fid(FULL), d, sorted(ps)] for (d, E), ps in sorted(byd.items())] + return out, len(sel), tot, len(byd) + + +if __name__ == '__main__': + st, inp, outp, selp = sys.argv[1:5] + c = load_word(inp); sel = json.load(open(selp)) + assert sel['input_sha256'] == content_sha(c), 'selection bound to a different input word' + if st == 'retime': + w = retime(c, sel['gates']); info = '%d gates retimed' % len(sel['gates']) + else: + w, ne, tot, nd = kernel(c, sel['entries']); info = '%d entries, total entrance rank %d, %d donor slots' % (ne, tot, nd) + r = replay(w, span_mode='z'); assert not r['viol'], r['viol'][:5] + assert content_sha(w) == sel['output_sha256'], 'output differs from the frozen stage output' + save_word(w, outp) + print(' stage %s: %s | exact replay PASS (legality, F2 on %d columns, source spans) | local histogram %s | output sha %s' + % (st, info, r['n'], dict(sorted(r['H'].items())), sel['output_sha256'][:16])) diff --git a/research/e8-early-reset-kernel/verify.py b/research/e8-early-reset-kernel/verify.py new file mode 100644 index 0000000000..2cb303ae52 --- /dev/null +++ b/research/e8-early-reset-kernel/verify.py @@ -0,0 +1,32 @@ +"""Fresh parent replay, chronological reset reconstruction, banks and exact assembly.""" +from pathlib import Path +import hashlib,json,os,subprocess,sys,time +assert __debug__ +ROOT=Path(__file__).resolve().parent;PARENT=ROOT.parent/'e8-early-reset-reuse';UPSTREAM=ROOT.parent/'split-centres-global';out=Path(sys.argv[1]).resolve();assert not out.exists() and not out.is_relative_to(ROOT.parent) +read=lambda p:json.loads(p.read_text());sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() +def integrity(): + assert {p.relative_to(ROOT).as_posix():sha(p) for p in ROOT.rglob('*') if p.is_file() and p.name!='MANIFEST.json'}==read(ROOT/'MANIFEST.json')['files'] + assert sha(PARENT/'MANIFEST.json')==read(ROOT/'SOURCE.json')['parent_manifest_sha256'] +integrity();out.mkdir(parents=True);env=dict(os.environ,PYTHONDONTWRITEBYTECODE='1',PYTHONINTMAXSTRDIGITS='0');env.pop('PYTHONOPTIMIZE',None);steps=[] +def run(name,file,*args,cwd=None): + t=time.monotonic();log=out/(name+'.log');print('RUN',name,flush=True) + with log.open('w') as f:q=subprocess.run([sys.executable,'-B',str(file),*map(str,args)],cwd=cwd,env=env,stdout=f,stderr=subprocess.STDOUT) + if q.returncode:raise RuntimeError((name,q.returncode,log.read_text()[-2000:])) + steps.append(dict(name=name,seconds=time.monotonic()-t,log_sha256=sha(log)));print('PASS',name,flush=True) +try: + base=out/'baseline';run('full-early-reuse434',PARENT/'verify.py',base) + changed=out/'changed';changed.mkdir() + for name in ('work','inherited','split-centres'):(changed/name).symlink_to(base/'baseline'/name,target_is_directory=True) + bit=changed/'bit426-source-centres';bit.mkdir() + run('kernel-reconstruction',ROOT/'apply.py',base/'changed/bit426-source-centres/bit-source-centres.json',bit/'bit-source-centres.json') + run('export',UPSTREAM/'vendor/export_records.py',bit/'bit-source-centres.json',bit/'records') + run('integer-source-spans',ROOT/'source_span.py',bit/'bit-source-centres.json',bit/'records/frames.json') + run('global-program',ROOT/'bit_global.py','--source',bit,'--local-check',bit,'--out',bit/'global',cwd=changed) + run('independent-audit',ROOT/'bit_audit.py','--local-check',bit,'--out',bit/'global',cwd=changed) + run('two-moments',ROOT/'bit_price.py',cwd=changed) + env['E8_OUTPUT']=str(changed);run('finite-assembly',ROOT/'combined.py',cwd=changed) + actual=read(changed/'RESULT.json');expected=read(ROOT/'EXPECTED.json') + for k,v in expected.items():assert actual[k]==v,(k,actual[k],v) + integrity();result=dict(status='PASS_FULL_EARLY_RESET_KERNEL_COMPOSITION',kappa=actual['kappa'],kappa_decimal=actual['kappa_decimal'],source_manifest_sha256=sha(ROOT/'MANIFEST.json'),checks=steps,parent_phase_mode=read(base/'RESULT.json')['parent_phase_mode']);(out/'RESULT.json').write_text(json.dumps(result,indent=2)+'\n') +except BaseException as e: + (out/'FAILURE.json').write_text(json.dumps(dict(error=repr(e),completed=steps),indent=2)+'\n');raise diff --git a/research/e8-early-reset-reuse/EXPECTED.json b/research/e8-early-reset-reuse/EXPECTED.json new file mode 100644 index 0000000000..5cb40a0157 --- /dev/null +++ b/research/e8-early-reset-reuse/EXPECTED.json @@ -0,0 +1,10 @@ +{ + "status": "PASS_CONDITIONAL_EARLY_RESET_REUSE_ASSEMBLY", + "kappa": "1128250848293019/1000000000000000000", + "kappa_decimal": "0.001128250848293019", + "bit_lower": "1129525236098815991751/1000000000000000000000000", + "complex_lower": "1183986549206329/1000000000000000000", + "binding_component": "bit", + "bit_template_sha256": "10dfc644197ef152062bf69960ecdc2405c847ce47147b520c3172c51cd82bd9", + "complex_template_sha256": "942d030fa43316c560c88d7d7d904583446e1a96945b3ebd37a91c88a192ab4f" +} diff --git a/research/e8-early-reset-reuse/LICENSE b/research/e8-early-reset-reuse/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/e8-early-reset-reuse/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/e8-early-reset-reuse/MANIFEST.json b/research/e8-early-reset-reuse/MANIFEST.json new file mode 100644 index 0000000000..1980f550b0 --- /dev/null +++ b/research/e8-early-reset-reuse/MANIFEST.json @@ -0,0 +1,30 @@ +{ + "files": { + "EXPECTED.json": "5521c7e995fec77941243b28e090f95f2188f193d5f61275275cfa11215eecc0", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "NOTICE.md": "c4085541471fe63d8f735beacd397d356446376ad3e56b2673940a2df3b8437e", + "PROOF.md": "09388e2f9e6b8fcc626a5172d55c45a957835075c51c68d1e86fd42ff4655ae8", + "README.md": "442bf686c0b24b9d7781b7b138f32fddea5d4efffeddc6e41d04719d2545e0cd", + "SELECTION.json": "9d47ade3fb69b3ef62a1a3ae75cebdddd57d144923977c5f2a07848ab596ea32", + "SOURCE.json": "c52287239c43aece2b3533ef48ee204d845d652066bca716c288b0c47e779521", + "VALIDATION.json": "bcb864a6b73d4ff4a24ab70ad51287653723c2115ce1c81db7817b81df2d9e92", + "bit_audit.py": "219eb4dd8e5380fb0432daa6a30c265755a78834616b2c5fc7aa161feb0231ee", + "bit_global.py": "9c2178df133dc663416aac13d8c8da80a9e4f5f7174bb36413180fcbad994ffb", + "bit_price.py": "36bf15803567a95b139a908461541bf19efe1f5b85fb31c270021833ab1393ee", + "combined.py": "dc621dce9ac1634a2701318311b30dffee7cce7e0c6be7ae808f44b27eb17f0f", + "local-evidence/ASSEMBLY.json": "c9ce28f59a5e460d39a888bbbc464e3fd6dd1c0b2c54ae86baeeea99febc8176", + "local-evidence/BIT-AUDIT.json": "2e458c3936e42539095610a50c730266dddd96e94d1ead171a99dd5f1fe9ef47", + "local-evidence/BIT-GLOBAL.json": "39f89d1e5bf51e9b1f1155e123dc3226627e465a246d37bb00f55d44d20bcaa0", + "local-evidence/BIT-PRICE.json": "96ec606146b5157871048e28f6649c31c1b6117d43be732e6a96bcc269c0e1b6", + "local-evidence/FAILED-INLINING.json": "95cbb0e6df953d25a888198c1072edf03db85b7c967a234680db3e095abd2dc7", + "local-evidence/FAILED-LATE-RESET.json": "f6ed36b59de745d50f37fcb4c80d129d9a2de0dfe1fe3de2d18e678135f7d9b6", + "local-evidence/FULL-PORTABLE-PYTHON311.json": "1dcca855b20cbac311a435f23f60001c342083edbef3194ba42a30e1f24c1982", + "local-evidence/FULL-PORTABLE-PYTHON314.json": "5687ed9209e11e64304d008a4a10678dc07cdc3522f5112c9a80557d45125c4a", + "local-evidence/FULL-PYTHON314-INITIAL.json": "0966528d4b30459d8b35296f31dbadfa34cdc7792419b34ab2505b7098923325", + "local-evidence/PARENT-FULL-REPLAY.json": "0ba447d6de6edd9fbe2371c36e3605dffa0c6526a874cfcb9bd19285c056bf1e", + "local-evidence/PYTHON311-GZIP-FAILURE.log": "ec1937c575536aeebe8f9c22d673fd66d1355ff870e2fdc80346205b29e42784", + "local-evidence/PYTHON311-INITIAL-FAILURE.json": "7902e8ca1e167b98d1c29170f8d57c9896b38ccab89065e4ed4e2c3feea79076", + "replay.py": "e0782ba05dda36323500390349d1180f6117a9c6112b09b9e21e29f67c4e5f5f", + "verify.py": "4e2082878acc1298f4354325b28f3cf047006170a9883148e7cf23002f6f02f1" + } +} diff --git a/research/e8-early-reset-reuse/NOTICE.md b/research/e8-early-reset-reuse/NOTICE.md new file mode 100644 index 0000000000..ba47405801 --- /dev/null +++ b/research/e8-early-reset-reuse/NOTICE.md @@ -0,0 +1,3 @@ +Rohan Arun, with substantial OpenAI Codex assistance. Apache-2.0. + +New contribution: eleven earlier clean resets selected and composed on PR433's R758 bit word. The clean-reset reuse principle and base bit lineage are from ai-nanachi #426; the split-centre complex and mutable-source bit composition are from icekylinx #433. Zhihao Chen supplied #425/#386; Dylan Crow supplied #370; Jacob Sussman supplied E8 and compiler interfaces. All parent notices remain in the pinned sibling package. Adapted bit_global.py, bit_audit.py, bit_price.py and combined.py retain original author notices. diff --git a/research/e8-early-reset-reuse/PROOF.md b/research/e8-early-reset-reuse/PROOF.md new file mode 100644 index 0000000000..933ba6ab83 --- /dev/null +++ b/research/e8-early-reset-reuse/PROOF.md @@ -0,0 +1,9 @@ +# Earlier clean reset and physical slot reuse + +Select a helper whose last main read has completed and which is not read by the subsequent target decoder. Immediately after that last read, cancel its clean source content using the recorded three or four available parent rows. Parent frames must admit the reset before their next use. The slot may retain arbitrary helper dirt. A later logical helper whose first use has not occurred is assigned that physical slot. The selected intervals and eleven physical pairs are disjoint. + +The reconstruction checks each actual reset on source columns with the earlier physical aliases already applied. It emits every reset addition, including its frame transitions. The main helper word is inverted at the full frame after restoring the source basis. The initial target compensation is regenerated from the entire changed raw operator on every independent physical column; no old dirty response is reused. The full emitted forward and reflected words independently verify the target shear, restored sources, restored helpers, and erased private copy row. + +The global nine-stage dimension-64 geometry and data routes are inherited. New ownership is generated for R747: 6,723 complete rank-eight helper banks, 53,784 assignments, 14,403 live and 14,412 physical rows. All 72 invocations and reflected streams are emitted and independently decoded. The two exact moment engines use the reconstructed profile and positive fallback allowance. The changed prefix has 226 bits, charged at 256; the two-level coefficient has 488 bits, charged at 512. Six finite bootstrap levels and 47 strict outer inequalities give the selected conditional bound. + +The parent complex supplier is unchanged and fully replayed, including all Gaussian phase pairs, by verify.py. Parent all-size compiler, dirty-bank, compressed-window, restored-work, tape/common-grid, precision and analytic interfaces remain assumptions. This is not an unconditional multiplication theorem or new Lean proof. diff --git a/research/e8-early-reset-reuse/README.md b/research/e8-early-reset-reuse/README.md new file mode 100644 index 0000000000..5c976801cd --- /dev/null +++ b/research/e8-early-reset-reuse/README.md @@ -0,0 +1,11 @@ +# Earlier clean resets on PR433 + +Conditional kappa = 0.001128250848293019, approximately 0.659% above PR433. Eleven helpers removed, R758 to R747. The exact bit saving is 0.001129525236098815991751; the unchanged complex saving is 0.001183986549206329. + +Run `python -B research/e8-early-reset-reuse/verify.py /absolute/new/output` with Python 3.11 or 3.14. Standard library only. The wrapper freshly verifies the pinned parent with all phases before reconstructing and checking the changed bit program. + +At draft submission the changed emitted bit, independent bank audit, two rational moments and exact finite assembly passed locally against the previously fully replayed parent. The new uninterrupted wrapper and GitHub CI are pending. Local receipts distinguish that scope. + +The initial full Python3.14 wrapper passed. Python3.11 exposed the parent compressed-file metadata mismatch; the package now imports PR433's upstream decoded-witness hash fix at 6d9244518175caf9e0089f92486959bc2c317273. Fresh both-version replays are pending. The original failure and pass receipts are preserved. + +Both fresh portable full replays now passed locally on Python 3.11 and 3.14 against e48f24fd2393500c804a0cbab542e20de8ddee6e. See VALIDATION.json and local-evidence/FULL-PORTABLE-PYTHON*.json. diff --git a/research/e8-early-reset-reuse/SELECTION.json b/research/e8-early-reset-reuse/SELECTION.json new file mode 100644 index 0000000000..9df36fb9ef --- /dev/null +++ b/research/e8-early-reset-reuse/SELECTION.json @@ -0,0 +1,141 @@ +{ + "source_sha256": "015811014644ed62acba1da590d9cf6ebdfe834d89867f8ce2b68722609072ea", + "word_sha256": "98ffef9246c8bf6c537ab5e134321abea05cf0b7830c9e3fd92cbe4e88d8c308", + "R": 747, + "local_profile": { + "1": 2398, + "2": 865, + "3": 475, + "5": 153, + "4": 310, + "8": 9, + "7": 14 + }, + "global_profile": { + "1": 172656, + "2": 62280, + "3": 34200, + "5": 11016, + "4": 22320, + "8": 648, + "7": 6768, + "14": 3840, + "28": 3840, + "42": 3840 + }, + "live": 14403, + "entries": [ + { + "position": 1032, + "new_helper": 949, + "retired_helper": 406, + "parents": [ + 411, + 518 + ], + "frame": 458 + }, + { + "position": 1036, + "new_helper": 950, + "retired_helper": 252, + "parents": [ + 0, + 1, + 512, + 523 + ], + "frame": 458 + }, + { + "position": 1038, + "new_helper": 957, + "retired_helper": 532, + "parents": [ + 533, + 534 + ], + "frame": 459 + }, + { + "position": 1053, + "new_helper": 936, + "retired_helper": 310, + "parents": [ + 315, + 566 + ], + "frame": 461 + }, + { + "position": 1069, + "new_helper": 937, + "retired_helper": 422, + "parents": [ + 427, + 598 + ], + "frame": 463 + }, + { + "position": 1085, + "new_helper": 933, + "retired_helper": 294, + "parents": [ + 299, + 630 + ], + "frame": 465 + }, + { + "position": 1094, + "new_helper": 935, + "retired_helper": 374, + "parents": [ + 379, + 646 + ], + "frame": 466 + }, + { + "position": 1103, + "new_helper": 934, + "retired_helper": 444, + "parents": [ + 439, + 662 + ], + "frame": 467 + }, + { + "position": 1112, + "new_helper": 932, + "retired_helper": 492, + "parents": [ + 487, + 678 + ], + "frame": 468 + }, + { + "position": 1121, + "new_helper": 944, + "retired_helper": 476, + "parents": [ + 471, + 694 + ], + "frame": 469 + }, + { + "position": 1128, + "new_helper": 942, + "retired_helper": 710, + "parents": [ + 455, + 460 + ], + "frame": 470 + } + ] +} diff --git a/research/e8-early-reset-reuse/SOURCE.json b/research/e8-early-reset-reuse/SOURCE.json new file mode 100644 index 0000000000..d9ed13ac34 --- /dev/null +++ b/research/e8-early-reset-reuse/SOURCE.json @@ -0,0 +1,7 @@ +{ + "parent_pr": 433, + "parent_commit": "6d9244518175caf9e0089f92486959bc2c317273", + "parent_manifest_sha256": "3129eb4321f706542470f8443f66a6b4351a12a9ceec85e7f76aa19db1e1e32f", + "attribution": "Rohan Arun with substantial OpenAI Codex assistance. icekylinx PR433 split centres and source reuse; ai-nanachi PR426 clean reset principle and base bit word; Zhihao Chen PR425/386; Dylan Crow PR370; Jacob Sussman E8 and inherited framework.", + "parent_update": "Upstream PR433 gzip portability repair: bind decoded canonical witness rather than platform-dependent gzip header. No construction or price changes." +} diff --git a/research/e8-early-reset-reuse/VALIDATION.json b/research/e8-early-reset-reuse/VALIDATION.json new file mode 100644 index 0000000000..2cfd52731f --- /dev/null +++ b/research/e8-early-reset-reuse/VALIDATION.json @@ -0,0 +1,9 @@ +{ + "status": "PASS_BOTH_FULL_LOCAL_REPLAYS", + "validated_code_head": "e48f24fd2393500c804a0cbab542e20de8ddee6e", + "python": [ + "3.11", + "3.14" + ], + "scope": "Fresh full parent phases and changed bit program, independent audit, finite invoice and exact assembly; GitHub CI pending." +} diff --git a/research/e8-early-reset-reuse/bit_audit.py b/research/e8-early-reset-reuse/bit_audit.py new file mode 100644 index 0000000000..155faf40b0 --- /dev/null +++ b/research/e8-early-reset-reuse/bit_audit.py @@ -0,0 +1,126 @@ +# Adapted with exact rational span checks by icekylinx; Codex assistance. +"""Independent audit of the emitted bit template, including mutation controls. +Prepared by Zhihao Chen with OpenAI Codex assistance; Apache-2.0. +""" +import argparse, copy, gzip, hashlib, json, struct, time +from collections import Counter, defaultdict +from pathlib import Path +from fractions import Fraction as Q + +def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() + +def main(): + ap=argparse.ArgumentParser(); ap.add_argument('--local-check',type=Path,required=True); ap.add_argument('--out',type=Path,required=True) + a=ap.parse_args(); start=time.monotonic(); out=a.out + blob=gzip.decompress((out/'GLOBAL-TEMPLATE.json.gz').read_bytes()); t=json.loads(blob) + g=json.loads((out/'GLOBAL.json').read_text()); geo=json.loads((out/'GEOMETRY.json').read_text()) + assert hashlib.sha256(blob).hexdigest()==g['template_sha256'] + assert t['geometry_sha256']==sha(out/'GEOMETRY.json') and t['source_record_sha256']==sha(a.local_check/'records/249-records.bin') + fs=json.loads((a.local_check/'records/frames.json').read_text())['frames'] + records=list(struct.iter_unpack('<6i',(a.local_check/'records/249-records.bin').read_bytes())) + word=json.loads((a.local_check/'bit-source-centres.json').read_text()) + assert g['word_sha256']==sha(a.local_check/'bit-source-centres.json') + def rank(rows): + piv={} + for rr in rows: + row=list(map(Q,rr)) + for k,b in sorted(piv.items()): + q=row[k] + if q:row=[x-q*y for x,y in zip(row,b)] + k=next((j for j,x in enumerate(row) if x),None) + if k is not None: + q=row[k];piv[k]=[x/q for x in row] + return len(piv) + dimensions={};proj={} + for key,f in fs.items(): + k=int(key);B=f['B'];roots=[word['lines'][j] for j in word['frames'][k]] + assert rank(B)==f['dim']==rank(B+roots)==rank(roots) + dimensions[k]=f['dim'];proj[k]=B + sets=[set(f) for f in word['frames']];pairs={} + for op,x,y,c,r,z in records: + if op==0: + assert sets[y]<=sets[c] and dimensions[c]-dimensions[y]==r + pairs[y,c]=r + # Positive definite rational form: exact inclusion implies commuting + # orthogonal projectors and rank(P_V-P_U)=dim(V)-dim(U), also in reflection. + assert len(proj)==944 + expected={} + for rev in (False,True): + es=[] + for op,x,y,c,f,z in (reversed(records) if rev else records): + if op==0: es.append([0,x,c if rev else y,y if rev else c,f,int(rev)]) + elif op==1: es.append([1,x,y,-c if rev else c,f,int(rev)]) + elif op==(3 if rev else 2): es.append([2,x,y,c,f,abs(dimensions[c]-dimensions[f]),int(rev)]) + else: es.append([3,x,y,c,f,z,int(rev)]) + expected['reverse' if rev else 'forward']=es + assert t['local_programs']==expected + + def validate(q,check_profile=True): + assert (q['m'],q['live'],q['replicas'],q['stages'])==(64,14403,8,9) + assert q['bank_padding'] is None and q['local_programs']==expected + hist=Counter(); occupation=defaultdict(set); calls=set() + for c in q['calls']: + st,rep,p=c['stage'],c['replica'],c['pair']; rev=c['orientation']=='reverse' + assert 0<=st<9 and 0<=rep<8 and p==max(0,(st-1)//2) + assert rev==(st in (1,3,5,7)) and (st,rep) not in calls; calls.add((st,rep)) + own=c['owners']; assert len(own)==987 + assert len({(f,tuple(r)) for f,r in own})==987 + for i,(family,route) in enumerate(own): + assert 0<=family<14403 + if i<240: + side=i//120; side=1-side if rev else side + assert family==rep*960+(2*p+side)*120+i%120 and route==['data',st,i%120] + else: + j=i-240; bank,slot=divmod(rep*747+j,8) + assert family==7680+st*747+bank and route==['bank',slot] + assert slot not in occupation[family]; occupation[family].add(slot) + for e in q['local_programs'][c['orientation']]: + if e[0]==0 and e[4]: hist[e[4]]+=1 + if e[0]==2: hist[e[5]]+=1 + assert calls=={(s,r) for s in range(9) for r in range(8)} + assert set(occupation)==set(range(7680,14403)) and all(s==set(range(8)) for s in occupation.values()) + levels=[-1]*4; scalar=[1<=0 + cur[x]=newf + if f: hist[f]+=1 + events.append([0,x,oldf,newf,f,int(reverse)]) + elif op==1: + assert cur[x]==cur[y]==f and x!=y and x0 + cutoff=max(ceil(36/gap**2),ceil(2*(4+charged_two)/gap)) + assert cutoff*gap**2>=36 and cutoff*gap>=2*(4+charged_two) + cutoffs.append(dict(gap=str(gap),cutoff_log2=str(cutoff)));chain.append(a) +q=chain[-1]*(1-2*eta);margin=(1-eta)*q/(1+q);ticks=margin/grid;k=grid*((ticks.numerator-1)//ticks.denominator) +bridge={'semantic':{'C0':{'base':2,'exponent':210000},'strict_literal_gap':1},'rows':{'degree_gap':Q(10**6)-Q(51*20161,25)}} +a=Outer.assembly(chain[-1],b,bridge,k,eta=eta,beta=beta) +assert len(a['strict_constraints'])==47 and all(x>0 for x in a['strict_constraints'].values()) +controls=[] +for name,kk,ee,bb in [('next_grid',k+grid,eta,beta),('zero_eta',k,Q(0),beta),('zero_beta',k,eta,Q(0)),('unit_beta',k,eta,Q(1))]: + try:Outer.assembly(chain[-1],b,bridge,kk,eta=ee,beta=bb) + except AssertionError:controls.append(name) + else:raise AssertionError(name) +result=dict(status='PASS_CONDITIONAL_EARLY_RESET_REUSE_ASSEMBLY',kappa=str(k),kappa_decimal=format(float(k),'.18f'),bit_lower=str(c),complex_lower=str(b),binding_component='bit',gain_over_pr425_percent=float(100*(k/Q(1048005508028206,10**18)-1)),bit_invoice=dict(prefix_bits=prefix.bit_length(),charged_prefix_bits=charged_prefix,coefficient_bits=coefficient.bit_length(),two_level_coefficient_bits=two.bit_length(),charged_two_level_coefficient_bits=charged_two,row_coefficient=row,live=W,physical=physical),strict_outer_constraints={n:str(x) for n,x in a['strict_constraints'].items()},outer_controls=controls,bootstrap=cutoffs,bit_template_sha256=g['template_sha256'],complex_template_sha256=cx['global_template_sha256'],scope='Finite research composition with explicit changed words, exact local and global replay and incremental phase evidence. All-size correlated dirty-bank, compressed-window, compiler, restored-work, tape/common-grid, precision and analytic interfaces remain inherited assumptions. This certificate makes no unconditional integer-multiplication or Lean-kernel claim.') +(ROOT/'RESULT.json').write_text(json.dumps(result,indent=2)+'\n') +print(result['status'],result['kappa_decimal'],result['gain_over_pr425_percent'],result['bit_invoice']) diff --git a/research/e8-early-reset-reuse/local-evidence/ASSEMBLY.json b/research/e8-early-reset-reuse/local-evidence/ASSEMBLY.json new file mode 100644 index 0000000000..7899c12d17 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/ASSEMBLY.json @@ -0,0 +1,103 @@ +{ + "status": "PASS_CONDITIONAL_EARLY_RESET_REUSE_ASSEMBLY", + "kappa": "1128250848293019/1000000000000000000", + "kappa_decimal": "0.001128250848293019", + "bit_lower": "1129525236098815991751/1000000000000000000000000", + "complex_lower": "1183986549206329/1000000000000000000", + "binding_component": "bit", + "gain_over_pr425_percent": 7.656957873799007, + "bit_invoice": { + "prefix_bits": 226, + "charged_prefix_bits": 256, + "coefficient_bits": 226, + "two_level_coefficient_bits": 488, + "charged_two_level_coefficient_bits": 512, + "row_coefficient": 18355, + "live": 14403, + "physical": 14412 + }, + "strict_outer_constraints": { + "bit_positive": "18506141468243001171708721090504160753359281193270932320673716200550478228569658366279537613727959580145427271328281666596703824135534263924614730977/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_above_bit": "892294153953493164291278909495839246640718806729067679326283799449521771430341633720462386272040419854572728671718333403296175864465736075385269023/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_below_one_over32": "30066013450793671/1000000000000000000", + "beta_positive": "1/1000000000000000000", + "beta_below_one": "999999999999999999/1000000000000000000", + "leaf_saving_above_bit": "892294153953493144892843287299344910640718806729067679326283799449521771430341633720462386272040419854572728671718333403296175864465736075385269023/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_positive": "9253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/8192000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_internal": "18506141468243001171708721090504160753359281193270932320673716200550478228569658366279537613727959580145427271328281666596703824135534263924614730977/8192000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_leaf": "446147076976746590952563111892673627029080493868694593022423092995693206388887017410709421705678576206823978063818746847075359260514534634396458647034263924614730977/8192000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_positive": "9253070734121502615348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/8192000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_below_one": "8182746929265878497384651780922990920795029080493868694593022423092995693206388887017410709421705678576206823978063818746847075359260514534634396458647034263924614730977/8192000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_reservations": "1/4000000000000000000", + "lambda_above_tau": "18506141468243001171708721090504160753359281193270932320673716200550478228569658366279537613727959580145427271328281666596703824135534263924614730977/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_sigma": "892294153953493182797420377738840418349439897233228432685564992720454092104057834270940614841698786134110342399677913548723447192747402672089093158534263924614730977/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_internal": "18506141468243001171708721090504160753359281193270932320673716200550478228569658366279537613727959580145427271328281666596703824135534263924614730977/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_prime_above_lambda": "18506141468243001171708721090504160753359281193270932320673716200550478228569658366279537613727959580145427271328281666596703824135534263924614730977/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_leaf": "446147076976746590952563111892673627029080493868694593022423092995693206388887017410709421705678576206823978063818746847075359260514534634396458647034263924614730977/8192000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_reservations": "1/4000000000000000000", + "lambda_prime_below_one": "9253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/8192000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "epsilon_positive": "8191999999999999991808000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/8201253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023", + "epsilon_below_one": "9253070734121508759348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/8201253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023", + "guard_width": "9253070734121508759348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/8201253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023", + "K_geometry": "6153253070734121502615348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/8201253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023000000000000000000", + "K_dominates_log": "298486152713596858261133817512502470632990336423297619419569593576548431826888260502741412409135756167867272375543865463217697380751748781054158084305815184186507344194653674987571967/264556550668842629050559619970226099329192610306649396948612179900225945380439068160728686792848203916896554065223747782359771762604499531140825920688805346325012428033000000000000000000", + "record_suffix": "9253070734121508759348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/8201253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023", + "phase_local": "74024565872972061873532681881951133072419136972041364050849695749903148941911326953710017832743458407756117597195128601430221103979702469771903690084240423237478610831034263924614730977/65610024565872972004538785752616072633639767356049050443255820615256034454348888903860714324626354571390345408175489450025223397125915883722924828330823725888603082152184000000000000000000", + "phase_boundary": "14804913174594405813704079789093026160605252132801009446193203545075585462800203865138558131659801295479791056803568581251503403246995491432041025425259712355012889083834263924614730977/13122004913174594400907757150523214526727953471209810088651164123051206890869777780772142864925270914278069081635097890005044679425183176744584965666164745177720616430436800000000000000000", + "gamma_sublinear": "1/2000000000000000000", + "cell_above_band": "16383999999999999975414746929265878499432651780922990920795029080493868694593022423092995693206388887017410709421705678576206823978063818746847075359260514534634396458647034263924614730977/32805012282936486002269392876308036316819883678024525221627910307628017227174444451930357162313177285695172704087744725012611698562957941861462414165411862944301541076092000000000000000000", + "prime_interval_packing": "9253070734121508759348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/8201253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023", + "alpha_positive": "18506141468243009317443367419896657842593619935253531608984234307877308180244649058174274362977529864997061465578041082512673259542789677578282441966446006785166996693034263924614730977/16402506141468243001134696438154018158409941839012262610813955153814008613587222225965178581156588642847586352043872362506305849281478970930731207082705931472150770538046000000000000000000", + "alpha_below_one": "16383999999999999991817253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023/16402506141468243001134696438154018158409941839012262610813955153814008613587222225965178581156588642847586352043872362506305849281478970930731207082705931472150770538046000000000000000000", + "alpha_below_one_fourth": "4082120393898817740966230742118607881759891839817812121094504554145624845216560907433120370926169630846899526545390049544063789060826953055104519328710036861252525637818465736075385269023/16402506141468243001134696438154018158409941839012262610813955153814008613587222225965178581156588642847586352043872362506305849281478970930731207082705931472150770538046000000000000000000", + "delta_positive": "1/8000000000000000000", + "delta_below_one_eighth": "999999999999999999/8000000000000000000", + "short_record_fallback": "134065954450456131888572404073222057587195605953853045459726979682067836030854839827324250112657359613753045411329984324417514991266327925496392926819076909098625880785159609317507266039991394147465325581857236255532115555519907868899367780890770924744091711832220085615353750878175230822142166392507469830641670083374529/134369330310907846665295433221357716753694243545188455307787920620044358562506524475106742936834774162207427395943402393651657517313875729864550048421526990619859112247672832000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "small_field_exposure": "1/1000000000000000000", + "artificial_boundary": "459344196526983776126450045233130945570820183505623430783661477680566669551012043961606727517391669910070531137138798564473166705073135613542857400568808263504921467841530897208226155807069/65610024565872972004538785752616072633639767356049050443255820615256034454348888903860714324626354571390345408175489450025223397125915883722924828330823725888603082152184000000000000000000", + "literal_scalar_guard": "1", + "row_product_gap": "23971789/25", + "balanced_prefix_above_kappa": "9220264634419749410126248485777003611646590040381762946804723855588412103267248597113917235579943540037407401432945273428716916281235826485632259566734279018802352149563/8201253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023000000000000000000", + "coordinate_movement_above_kappa": "20879569810177875708721090504160753359281193270932320673716200550478228569658366279537613727959580145427271328281666596703824135534263924614730977/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_phase_layer_above_kappa": "50950578184281395477945013334999726622080956043781582069887313934070389823681874206566397250082460930680711270550454608778199582024817051013332801269065664136348344027/410062653536706075028367410953850453960248545975306565270348878845350215339680555649129464528914716071189658801096809062657646232036974273268280177067648286803769263451150000000000000000", + "bulk_exposure_above_kappa": "20879569810177875708721090504160753359281193270932320673716200550478228569658366279537613727959580145427271328281666596703824135534263924614730977/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gaussian_arithmetic_above_kappa": "32755851721687387778173246790830983497147865725523447047402902960172275292169933211998391431748076713180293331353881281163970707046189184558230058827109403470041890851389/65610024565872972004538785752616072633639767356049050443255820615256034454348888903860714324626354571390345408175489450025223397125915883722924828330823725888603082152184000000000000000000", + "scalar_work_above_kappa": "65560864004623873780442639667139019813967749403547972269030813267800292519344377663928748594061253998875466035441626006176582405609147126419692472992521266414343431927481/65610024565872972004538785752616072633639767356049050443255820615256034454348888903860714324626354571390345408175489450025223397125915883722924828330823725888603082152184000000000000000000", + "dimension_above_kappa": "8182746929265878492268916415342740330921277566270872306239612463474758640011112742605822812688954275690124059558007358784254476792205787963351312739882860749556874297711279018802352149563/8201253070734121500567348219077009079204970919506131305406977576907004306793611112982589290578294321423793176021936181253152924640739485465365603541352965736075385269023000000000000000000" + }, + "outer_controls": [ + "next_grid", + "zero_eta", + "zero_beta", + "unit_beta" + ], + "bootstrap": [ + { + "gap": "19718173301699986490442310099608577089/16000000000000000000000000000000000000000000", + "cutoff_log2": "23703316064509" + }, + { + "gap": "89088697416160189168478072742640881250923123343423452063/64000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "18578781647433489479" + }, + { + "gap": "402511727930897263492893481780029509017558469228965731102330904495255713921/256000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "14562145083988389157871807" + }, + { + "gap": "1818588618094756475300249931559443478956904117509927455038979846382951280845356947587831584607/1024000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "11413884584645035881423129400187" + }, + { + "gap": "8216566952880397264033353325540771278429496754443877107508740488500708481207792267348207305960479962067658955969/4096000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "8946261732747165430949576222298741146" + }, + { + "gap": "37123278909495839246640718806729067679326283799449521771430341633720462386272040419854572728671718333403296175864465736075385269023/16384000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "7012126186950169517647508261689402518966285" + } + ], + "bit_template_sha256": "10dfc644197ef152062bf69960ecdc2405c847ce47147b520c3172c51cd82bd9", + "complex_template_sha256": "942d030fa43316c560c88d7d7d904583446e1a96945b3ebd37a91c88a192ab4f", + "scope": "Finite research composition with explicit changed words, exact local and global replay and incremental phase evidence. All-size correlated dirty-bank, compressed-window, compiler, restored-work, tape/common-grid, precision and analytic interfaces remain inherited assumptions. This certificate makes no unconditional integer-multiplication or Lean-kernel claim." +} diff --git a/research/e8-early-reset-reuse/local-evidence/BIT-AUDIT.json b/research/e8-early-reset-reuse/local-evidence/BIT-AUDIT.json new file mode 100644 index 0000000000..5acb750852 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/BIT-AUDIT.json @@ -0,0 +1,33 @@ +{ + "status": "PASS_INDEPENDENT_COMPRESSED_BIT_TEMPLATE_AUDIT", + "template_sha256": "10dfc644197ef152062bf69960ecdc2405c847ce47147b520c3172c51cd82bd9", + "source_frames": 944, + "exact_nested_frame_pairs": 3341, + "exact_reflected_pairs": 3341, + "orthogonal_lift_argument": "Adding the same orthogonal E_s leaves P_V-P_U unchanged; each audited projector is therefore the literal child projector in every one of the nine windows.", + "exact_bank_families": 6723, + "slots_per_bank": 8, + "mutations_rejected": [ + "omit an idle child", + "omit a bridge", + "omit terminal exchange", + "remove a local invocation", + "re-use a helper bank slot", + "understate live stock", + "omit a local paid move", + "wrong reflected copy charge" + ], + "profile": { + "1": 172656, + "2": 62280, + "3": 34200, + "4": 22320, + "5": 11016, + "7": 6768, + "8": 648, + "14": 3840, + "28": 3840, + "42": 3840 + }, + "seconds": 1.6600992910098284 +} diff --git a/research/e8-early-reset-reuse/local-evidence/BIT-GLOBAL.json b/research/e8-early-reset-reuse/local-evidence/BIT-GLOBAL.json new file mode 100644 index 0000000000..fd3faa8602 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/BIT-GLOBAL.json @@ -0,0 +1,164 @@ +{ + "status": "PASS_SOURCE_BOUND_NINE_STAGE_BIT_TEMPLATE", + "h": 8, + "m": 64, + "v": 120, + "R": 747, + "replicas": 8, + "live": 14403, + "physical": 14412, + "word_sha256": "98ffef9246c8bf6c537ab5e134321abea05cf0b7830c9e3fd92cbe4e88d8c308", + "source_records_sha256": "bd805894638e578daf4f057f61bf6c6810d4460ac98b6238619549a0b5af1b68", + "local_checks": { + "forward": { + "copies": 9, + "adds": 14586, + "records": 18819, + "all_columns": 987, + "cancellation_free_row_l1": 4749825, + "profile": { + "1": 2398, + "2": 865, + "3": 475, + "4": 310, + "5": 153, + "7": 14, + "8": 9 + }, + "sha256": "67a94cf0035c06591019042d3bbc1d62e435cd6e839a0c08afe98609607b0522" + }, + "reverse": { + "copies": 9, + "adds": 14586, + "records": 18819, + "all_columns": 987, + "cancellation_free_row_l1": 18975950, + "profile": { + "1": 2398, + "2": 865, + "3": 475, + "4": 310, + "5": 153, + "7": 14, + "8": 9 + }, + "sha256": "bcd0366700ed4a0f4717c54e5f330015d8f174636c6f0f5a9c42ff553396e931" + } + }, + "scalar_stages": [ + { + "stage": 0, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + }, + { + "stage": 1, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": true + }, + { + "stage": 2, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + }, + { + "stage": 3, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": true + }, + { + "stage": 4, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + }, + { + "stage": 5, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": true + }, + { + "stage": 6, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + }, + { + "stage": 7, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": true + }, + { + "stage": 8, + "all_columns": 7683, + "helper_columns": 6723, + "reverse": false + } + ], + "independent_unbanked_scalar_columns": 7683, + "all_scalar_columns_restored": true, + "geometry_sha256": "ec1742de8de83751f6c633e54d855a920645bcca40ce2a2d2e2a8349576a00db", + "template_sha256": "10dfc644197ef152062bf69960ecdc2405c847ce47147b520c3172c51cd82bd9", + "emitted_program_sha256": "ced149086bd620d31aa8b5f6a68999d3194a7e32fb2c47c0b9f8332dd961abf4", + "emitted_events": 1354968, + "local_invocations": 72, + "bank_assignments": 53784, + "banks_per_stage": 747, + "whole_rank8_slots_per_bank": 8, + "padding_calls": 0, + "profile": { + "1": 172656, + "2": 62280, + "3": 34200, + "4": 22320, + "5": 11016, + "7": 6768, + "8": 648, + "14": 3840, + "28": 3840, + "42": 3840 + }, + "paid_calls": 321408, + "rank_mass": 919296, + "deficit": 2496, + "maxchild": 42, + "halving_depth": 2, + "halving_integer_inequality": [ + 4096, + 3528 + ], + "local_additions": 14586, + "bridge_additions": 17280, + "copy_erase_episodes": 648, + "global_prefix_bound": "82175447241247327050912217435296917941221100975248000000000000000000", + "global_prefix_bits": 226, + "charged_prefix_bits": 256, + "omitted_bridge_shears_rejected": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17 + ], + "scope": "Complete source-bound finite cover template. Local and unbanked global F2 columns are replayed; arbitrary physical bank dirt follows by injective owner routes and the all-column local theorem. Astronomical cover enumeration and all-size compiler interfaces remain explicit inherited assumptions.", + "seconds": 2.408216124982573 +} diff --git a/research/e8-early-reset-reuse/local-evidence/BIT-PRICE.json b/research/e8-early-reset-reuse/local-evidence/BIT-PRICE.json new file mode 100644 index 0000000000..0ee06a110f --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/BIT-PRICE.json @@ -0,0 +1,17 @@ +{ + "lower": "0.001129525236098815991751", + "upper": "0.001129525236098815991752", + "lower_endpoint_residual_upper": "-1.251774999433093430381353664521278818665250762780616345195836520018292E-25", + "upper_endpoint_residual_lower": "2.276366164350301667566734024087898004226996967249013754753469273066967E-24", + "strict_rational_signs": true, + "moment_minus_one_at_current_k_required_rate": [ + "-0.001042177813821591887548119068554528501744007073182525639912744635909457", + "-0.001042177813821591887548119068554528501744007073182525639912744635835273" + ], + "nominal_k_ceiling_interval": [ + "0.001128250848293019129894635265715588124139286669678372820580212187821160", + "0.001128250848293019129895633010486841514774944147064771313407964226126090" + ], + "source_template_sha256": "10dfc644197ef152062bf69960ecdc2405c847ce47147b520c3172c51cd82bd9", + "two_exact_engines": true +} diff --git a/research/e8-early-reset-reuse/local-evidence/FAILED-INLINING.json b/research/e8-early-reset-reuse/local-evidence/FAILED-INLINING.json new file mode 100644 index 0000000000..927c934e27 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/FAILED-INLINING.json @@ -0,0 +1,571 @@ +{ + "source_sha256": "015811014644ed62acba1da590d9cf6ebdfe834d89867f8ce2b68722609072ea", + "tested": 140, + "statuses": { + "frame": 106, + "source_identity": 34 + }, + "positive": [], + "results": [ + { + "helper": 246, + "status": "frame" + }, + { + "helper": 247, + "status": "frame" + }, + { + "helper": 252, + "status": "frame" + }, + { + "helper": 253, + "status": "frame" + }, + { + "helper": 254, + "status": "frame" + }, + { + "helper": 255, + "status": "frame" + }, + { + "helper": 258, + "status": "frame" + }, + { + "helper": 259, + "status": "frame" + }, + { + "helper": 260, + "status": "frame" + }, + { + "helper": 261, + "status": "frame" + }, + { + "helper": 262, + "status": "frame" + }, + { + "helper": 263, + "status": "frame" + }, + { + "helper": 264, + "status": "frame" + }, + { + "helper": 265, + "status": "frame" + }, + { + "helper": 267, + "status": "frame" + }, + { + "helper": 268, + "status": "frame" + }, + { + "helper": 270, + "status": "frame" + }, + { + "helper": 271, + "status": "frame" + }, + { + "helper": 272, + "status": "frame" + }, + { + "helper": 273, + "status": "frame" + }, + { + "helper": 274, + "status": "frame" + }, + { + "helper": 275, + "status": "frame" + }, + { + "helper": 276, + "status": "frame" + }, + { + "helper": 277, + "status": "frame" + }, + { + "helper": 278, + "status": "frame" + }, + { + "helper": 279, + "status": "frame" + }, + { + "helper": 280, + "status": "frame" + }, + { + "helper": 281, + "status": "frame" + }, + { + "helper": 282, + "status": "frame" + }, + { + "helper": 283, + "status": "frame" + }, + { + "helper": 284, + "status": "frame" + }, + { + "helper": 285, + "status": "frame" + }, + { + "helper": 286, + "status": "frame" + }, + { + "helper": 287, + "status": "frame" + }, + { + "helper": 517, + "status": "source_identity" + }, + { + "helper": 533, + "status": "source_identity" + }, + { + "helper": 549, + "status": "source_identity" + }, + { + "helper": 565, + "status": "source_identity" + }, + { + "helper": 581, + "status": "source_identity" + }, + { + "helper": 597, + "status": "source_identity" + }, + { + "helper": 613, + "status": "source_identity" + }, + { + "helper": 629, + "status": "source_identity" + }, + { + "helper": 645, + "status": "source_identity" + }, + { + "helper": 661, + "status": "source_identity" + }, + { + "helper": 677, + "status": "source_identity" + }, + { + "helper": 693, + "status": "source_identity" + }, + { + "helper": 714, + "status": "source_identity" + }, + { + "helper": 725, + "status": "source_identity" + }, + { + "helper": 750, + "status": "source_identity" + }, + { + "helper": 752, + "status": "frame" + }, + { + "helper": 764, + "status": "source_identity" + }, + { + "helper": 765, + "status": "source_identity" + }, + { + "helper": 766, + "status": "frame" + }, + { + "helper": 767, + "status": "frame" + }, + { + "helper": 778, + "status": "source_identity" + }, + { + "helper": 780, + "status": "frame" + }, + { + "helper": 792, + "status": "source_identity" + }, + { + "helper": 793, + "status": "source_identity" + }, + { + "helper": 794, + "status": "frame" + }, + { + "helper": 795, + "status": "frame" + }, + { + "helper": 806, + "status": "source_identity" + }, + { + "helper": 808, + "status": "frame" + }, + { + "helper": 810, + "status": "frame" + }, + { + "helper": 811, + "status": "frame" + }, + { + "helper": 812, + "status": "frame" + }, + { + "helper": 813, + "status": "frame" + }, + { + "helper": 820, + "status": "source_identity" + }, + { + "helper": 821, + "status": "source_identity" + }, + { + "helper": 822, + "status": "frame" + }, + { + "helper": 823, + "status": "frame" + }, + { + "helper": 824, + "status": "frame" + }, + { + "helper": 825, + "status": "frame" + }, + { + "helper": 826, + "status": "frame" + }, + { + "helper": 827, + "status": "frame" + }, + { + "helper": 834, + "status": "source_identity" + }, + { + "helper": 836, + "status": "frame" + }, + { + "helper": 848, + "status": "source_identity" + }, + { + "helper": 849, + "status": "source_identity" + }, + { + "helper": 850, + "status": "frame" + }, + { + "helper": 851, + "status": "frame" + }, + { + "helper": 862, + "status": "source_identity" + }, + { + "helper": 864, + "status": "frame" + }, + { + "helper": 866, + "status": "frame" + }, + { + "helper": 867, + "status": "frame" + }, + { + "helper": 868, + "status": "frame" + }, + { + "helper": 869, + "status": "frame" + }, + { + "helper": 876, + "status": "source_identity" + }, + { + "helper": 877, + "status": "source_identity" + }, + { + "helper": 878, + "status": "frame" + }, + { + "helper": 879, + "status": "frame" + }, + { + "helper": 880, + "status": "frame" + }, + { + "helper": 881, + "status": "frame" + }, + { + "helper": 882, + "status": "frame" + }, + { + "helper": 883, + "status": "frame" + }, + { + "helper": 890, + "status": "source_identity" + }, + { + "helper": 892, + "status": "frame" + }, + { + "helper": 896, + "status": "frame" + }, + { + "helper": 897, + "status": "frame" + }, + { + "helper": 898, + "status": "frame" + }, + { + "helper": 899, + "status": "frame" + }, + { + "helper": 900, + "status": "frame" + }, + { + "helper": 901, + "status": "frame" + }, + { + "helper": 902, + "status": "frame" + }, + { + "helper": 903, + "status": "frame" + }, + { + "helper": 904, + "status": "source_identity" + }, + { + "helper": 905, + "status": "source_identity" + }, + { + "helper": 906, + "status": "frame" + }, + { + "helper": 910, + "status": "frame" + }, + { + "helper": 911, + "status": "frame" + }, + { + "helper": 912, + "status": "frame" + }, + { + "helper": 913, + "status": "frame" + }, + { + "helper": 914, + "status": "frame" + }, + { + "helper": 915, + "status": "frame" + }, + { + "helper": 916, + "status": "frame" + }, + { + "helper": 917, + "status": "frame" + }, + { + "helper": 918, + "status": "source_identity" + }, + { + "helper": 919, + "status": "source_identity" + }, + { + "helper": 920, + "status": "frame" + }, + { + "helper": 921, + "status": "frame" + }, + { + "helper": 922, + "status": "frame" + }, + { + "helper": 923, + "status": "frame" + }, + { + "helper": 924, + "status": "frame" + }, + { + "helper": 925, + "status": "frame" + }, + { + "helper": 926, + "status": "frame" + }, + { + "helper": 927, + "status": "frame" + }, + { + "helper": 928, + "status": "frame" + }, + { + "helper": 929, + "status": "frame" + }, + { + "helper": 930, + "status": "frame" + }, + { + "helper": 931, + "status": "frame" + }, + { + "helper": 932, + "status": "frame" + }, + { + "helper": 933, + "status": "frame" + }, + { + "helper": 934, + "status": "frame" + }, + { + "helper": 935, + "status": "frame" + }, + { + "helper": 936, + "status": "frame" + }, + { + "helper": 937, + "status": "frame" + }, + { + "helper": 942, + "status": "frame" + }, + { + "helper": 943, + "status": "frame" + }, + { + "helper": 944, + "status": "frame" + }, + { + "helper": 950, + "status": "frame" + }, + { + "helper": 951, + "status": "frame" + } + ] +} diff --git a/research/e8-early-reset-reuse/local-evidence/FAILED-LATE-RESET.json b/research/e8-early-reset-reuse/local-evidence/FAILED-LATE-RESET.json new file mode 100644 index 0000000000..f01e4f53a2 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/FAILED-LATE-RESET.json @@ -0,0 +1,8 @@ +{ + "source_sha256": "015811014644ed62acba1da590d9cf6ebdfe834d89867f8ce2b68722609072ea", + "tested_retired_birth_pairs": 484, + "witnesses": 0, + "positive": [], + "rejections": {}, + "results": [] +} diff --git a/research/e8-early-reset-reuse/local-evidence/FULL-PORTABLE-PYTHON311.json b/research/e8-early-reset-reuse/local-evidence/FULL-PORTABLE-PYTHON311.json new file mode 100644 index 0000000000..b91e7cc182 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/FULL-PORTABLE-PYTHON311.json @@ -0,0 +1,44 @@ +{ + "status": "PASS_FULL_PARENT_AND_EARLY_RESET_REUSE", + "kappa": "1128250848293019/1000000000000000000", + "kappa_decimal": "0.001128250848293019", + "source_manifest_sha256": "06c5bd1afe07ebede7aaa13ae694ab7b345beab0a9d149c27fc992c92f3727f6", + "checks": [ + { + "name": "full-parent433", + "seconds": 114.39691066707019, + "log_sha256": "028a6067de8c3a61dfbf81c5d9c8d3629949b70cc118b64264f25df4b84a64ac" + }, + { + "name": "reconstruct", + "seconds": 0.05611987505108118, + "log_sha256": "ceeb567022f0746ceb350487a568b94cdfeacf3fb55cdc4088fecfab389caefa" + }, + { + "name": "export", + "seconds": 0.5730349159566686, + "log_sha256": "4be929eee47c06938fe228adcef2dff245a38d32c9bdcc44808376735c175f1b" + }, + { + "name": "global-program", + "seconds": 2.582935667014681, + "log_sha256": "c9ed76d601e121721dd1e540a5db45701b8a6b3d37920b72d3a300126e1624fd" + }, + { + "name": "independent-audit", + "seconds": 3.009822624968365, + "log_sha256": "e089d3fa06b37a96a4a998d27c28f3b62c5b88a7d4fe5e77e0ff6e2a9ca6ef76" + }, + { + "name": "two-moments", + "seconds": 0.13729891693219543, + "log_sha256": "6d556f02612ff9a8df2239e44b949bc8bf81e03102b54ca762966a7dbd7a598e" + }, + { + "name": "finite-assembly", + "seconds": 0.15405583300162107, + "log_sha256": "cd2459472bd6f540e6610b019907b7fc36b1058cc69b1b608e6254e33a8de603" + } + ], + "parent_phase_mode": "full replay" +} diff --git a/research/e8-early-reset-reuse/local-evidence/FULL-PORTABLE-PYTHON314.json b/research/e8-early-reset-reuse/local-evidence/FULL-PORTABLE-PYTHON314.json new file mode 100644 index 0000000000..773987c837 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/FULL-PORTABLE-PYTHON314.json @@ -0,0 +1,44 @@ +{ + "status": "PASS_FULL_PARENT_AND_EARLY_RESET_REUSE", + "kappa": "1128250848293019/1000000000000000000", + "kappa_decimal": "0.001128250848293019", + "source_manifest_sha256": "06c5bd1afe07ebede7aaa13ae694ab7b345beab0a9d149c27fc992c92f3727f6", + "checks": [ + { + "name": "full-parent433", + "seconds": 106.79119999997783, + "log_sha256": "028a6067de8c3a61dfbf81c5d9c8d3629949b70cc118b64264f25df4b84a64ac" + }, + { + "name": "reconstruct", + "seconds": 0.05519566696602851, + "log_sha256": "ceeb567022f0746ceb350487a568b94cdfeacf3fb55cdc4088fecfab389caefa" + }, + { + "name": "export", + "seconds": 0.3756797920214012, + "log_sha256": "4be929eee47c06938fe228adcef2dff245a38d32c9bdcc44808376735c175f1b" + }, + { + "name": "global-program", + "seconds": 2.8925695409998298, + "log_sha256": "e0c19f3d4a91706a47e43f67bcbed72bdbb4e46534476bfad7c6e069dccabefb" + }, + { + "name": "independent-audit", + "seconds": 1.761562458006665, + "log_sha256": "1c95eb8403c1b9bd0c405247001c8fdfc03ea58c1f991cae2497ee7cb3221538" + }, + { + "name": "two-moments", + "seconds": 0.15180487500037998, + "log_sha256": "6d556f02612ff9a8df2239e44b949bc8bf81e03102b54ca762966a7dbd7a598e" + }, + { + "name": "finite-assembly", + "seconds": 0.17741812497843057, + "log_sha256": "cd2459472bd6f540e6610b019907b7fc36b1058cc69b1b608e6254e33a8de603" + } + ], + "parent_phase_mode": "full replay" +} diff --git a/research/e8-early-reset-reuse/local-evidence/FULL-PYTHON314-INITIAL.json b/research/e8-early-reset-reuse/local-evidence/FULL-PYTHON314-INITIAL.json new file mode 100644 index 0000000000..39fe0d80ac --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/FULL-PYTHON314-INITIAL.json @@ -0,0 +1,44 @@ +{ + "status": "PASS_FULL_PARENT_AND_EARLY_RESET_REUSE", + "kappa": "1128250848293019/1000000000000000000", + "kappa_decimal": "0.001128250848293019", + "source_manifest_sha256": "493f586b3c35dc0c2dacca23e58d81a8deff4f1187df2d2f6b18842ccb9568de", + "checks": [ + { + "name": "full-parent433", + "seconds": 103.98563337500673, + "log_sha256": "028a6067de8c3a61dfbf81c5d9c8d3629949b70cc118b64264f25df4b84a64ac" + }, + { + "name": "reconstruct", + "seconds": 0.050218041986227036, + "log_sha256": "ceeb567022f0746ceb350487a568b94cdfeacf3fb55cdc4088fecfab389caefa" + }, + { + "name": "export", + "seconds": 0.3637806250480935, + "log_sha256": "4be929eee47c06938fe228adcef2dff245a38d32c9bdcc44808376735c175f1b" + }, + { + "name": "global-program", + "seconds": 2.4805483330274, + "log_sha256": "20c0d8b5ce235496b9149639369284883c7ad245addabd6c364a115644b73913" + }, + { + "name": "independent-audit", + "seconds": 1.7047545410459861, + "log_sha256": "9e17c2b34dffc8eb7d63b6ed4d43bce0b872d6d9adfa0b1a64ec46379bbbda49" + }, + { + "name": "two-moments", + "seconds": 0.15184016700368375, + "log_sha256": "6d556f02612ff9a8df2239e44b949bc8bf81e03102b54ca762966a7dbd7a598e" + }, + { + "name": "finite-assembly", + "seconds": 0.15915608289651573, + "log_sha256": "cd2459472bd6f540e6610b019907b7fc36b1058cc69b1b608e6254e33a8de603" + } + ], + "parent_phase_mode": "full replay" +} diff --git a/research/e8-early-reset-reuse/local-evidence/PARENT-FULL-REPLAY.json b/research/e8-early-reset-reuse/local-evidence/PARENT-FULL-REPLAY.json new file mode 100644 index 0000000000..59ced26676 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/PARENT-FULL-REPLAY.json @@ -0,0 +1,120 @@ +{ + "status": "PASS_CONDITIONAL_SPLIT_CENTRE_ASSEMBLY", + "kappa": "560432476129139/500000000000000000", + "kappa_decimal": "0.001120864952258278", + "bit_lower": "561061350132569610283/500000000000000000000000", + "complex_lower": "1183986549206329/1000000000000000000", + "binding_component": "bit", + "gain_over_pr425_percent": 6.9522005058117555, + "bit_invoice": { + "prefix_bits": 223, + "charged_prefix_bits": 256, + "coefficient_bits": 223, + "two_level_coefficient_bits": 483, + "charged_two_level_coefficient_bits": 512, + "row_coefficient": 18355, + "live": 14502, + "physical": 14511 + }, + "strict_outer_constraints": { + "bit_positive": "14363170563393781995540516430294897054798660372747977408982986647014886397057213204999835240182750048003850764774138423033492369699369310106183121233447528983183/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_above_bit": "791857266447229204459483569705102945201339627252022591017013352985113602942786795000164759817249951996149235225861576966507630300630689893816878766552471016817/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_below_one_over32": "30066013450793671/1000000000000000000", + "beta_positive": "1/1000000000000000000", + "beta_below_one": "999999999999999999/1000000000000000000", + "leaf_saving_above_bit": "791857266447229189304455739864091745201339627252022591017013352985113602942786795000164759817249951996149235225861576966507630300630689893816878766552471016817/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_positive": "7181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_internal": "14363170563393781995540516430294897054798660372747977408982986647014886397057213204999835240182750048003850764774138423033492369699369310106183121233447528983183/6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_leaf": "395928633223614609015398433325827868141186243920908350307167049240534210454380044514968776965838180997909857795680836487104579924453767980400809082645545614591621233447528983183/6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_positive": "7181585281696892583407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_below_one": "6392818414718303107416592912348246333468141186243920908350307167049240534210454380044514968776965838180997909857795680836487104579924453767980400809082645545614591621233447528983183/6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_reservations": "1/4000000000000000000", + "lambda_above_tau": "14363170563393781995540516430294897054798660372747977408982986647014886397057213204999835240182750048003850764774138423033492369699369310106183121233447528983183/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_sigma": "791857266447229218822654133098884940741856057546919645815673725733091011925773442015051156874463156995984475408611624970358395074769112927309248465921781123000121233447528983183/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_internal": "14363170563393781995540516430294897054798660372747977408982986647014886397057213204999835240182750048003850764774138423033492369699369310106183121233447528983183/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_prime_above_lambda": "14363170563393781995540516430294897054798660372747977408982986647014886397057213204999835240182750048003850764774138423033492369699369310106183121233447528983183/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_leaf": "395928633223614609015398433325827868141186243920908350307167049240534210454380044514968776965838180997909857795680836487104579924453767980400809082645545614591621233447528983183/6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_reservations": "1/4000000000000000000", + "lambda_prime_below_one": "7181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/6400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "epsilon_positive": "6399999999999999993600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/6407181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817", + "epsilon_below_one": "7181585281696897383407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/6407181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817", + "guard_width": "7181585281696897383407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/6407181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817", + "K_geometry": "4807181585281696892583407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/6407181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817000000000000000000", + "K_dominates_log": "231664041345061050845983947421186256401668584010497584446258683699366907737186677571792433338340060113453513521617978855187267028104098984087218414251878140832554446748323117142213588175726741393/206683276944570867451077647988766247307479316572776744891925575256476111799662761934047904233001101994161357746522719973016545013550824072000632231965075950141464786411824273258607000000000000000000", + "record_suffix": "7181585281696897383407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/6407181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817", + "phase_local": "57452682253575172660075115932332441271463422396879066665683849849996634666672126693120783994727674596531689914600391489101073218400050692643898107263289403063667839215065313749127621233447528983183/51257452682253575127867256701214029332254870510048632733197542663606075726316364959643880249784273294552016721137634553308103163360604369856156793527338835635083267030132419768134536000000000000000000", + "phase_boundary": "11490536450715029406269754961108975467567014357972880107649718965136053613580158978016584167309038954918313004492748842618542529916554807718463285392220894997054215109129499241498821233447528983183/10251490536450715025573451340242805866450974102009726546639508532721215145263272991928776049956854658910403344227526910661620632672120873971231358705467767127016653406026483953626907200000000000000000", + "gamma_sublinear": "1/2000000000000000000", + "cell_above_band": "12799999999999999980792818414718303109016592912348246333468141186243920908350307167049240534210454380044514968776965838180997909857795680836487104579924453767980400809082645545614591621233447528983183/25628726341126787563933628350607014666127435255024316366598771331803037863158182479821940124892136647276008360568817276654051581680302184928078396763669417817541633515066209884067268000000000000000000", + "prime_interval_packing": "7181585281696897383407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/6407181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817", + "alpha_positive": "14363170563393788359632590021810442080310539860404516767526852145439839929398406960210596656522703682519149061374476508023700697946773300526302961759162676751217566615750487648225621233447528983183/12814363170563393781966814175303507333063717627512158183299385665901518931579091239910970062446068323638004180284408638327025790840151092464039198381834708908770816757533104942033634000000000000000000", + "alpha_below_one": "12799999999999999993607181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817/12814363170563393781966814175303507333063717627512158183299385665901518931579091239910970062446068323638004180284408638327025790840151092464039198381834708908770816757533104942033634000000000000000000", + "alpha_below_one_fourth": "3189227622077454657132070953804066391185618867017635029057319564329939892965374403017531918954994377226981896009727683073732747012090999815483496633699514550441486622767525747860182878766552471016817/12814363170563393781966814175303507333063717627512158183299385665901518931579091239910970062446068323638004180284408638327025790840151092464039198381834708908770816757533104942033634000000000000000000", + "delta_positive": "1/8000000000000000000", + "delta_below_one_eighth": "999999999999999999/8000000000000000000", + "short_record_fallback": "81827972558059963142482295831039750365059753405165839859500887157900070163784215146039541956047009515286378723945407637791323146319740145866082020356197908534083134290654194352838948148633280800174595114507063924980758679362172726895650066012032777455278212210736064133662717611940569491044304210260992667579958374711353997952140066809896811489/82011924291605720204587610721942446931607792816077812373116068261769721162106183935430208399654837271283226753820215285292965061376966991769850869643742137016133227248211871629015257600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "small_field_exposure": "1/1000000000000000000", + "artificial_boundary": "358859621458028601093359598365557325330989185343344322865175917750116843085479998176003320395642823216282588862770178911921831577311447916339793034478937323776724933813811421508232513136299657413050451/51257452682253575127867256701214029332254870510048632733197542663606075726316364959643880249784273294552016721137634553308103163360604369856156793527338835635083267030132419768134536000000000000000000", + "literal_scalar_guard": "1", + "row_product_gap": "23971789/25", + "balanced_prefix_above_kappa": "5122866517862023505724960619093421545844111701898553134698525509504383311993872387184513125657251444712150871805627114225726283245038727038504547469670408073428467093191496467269437/3203590792640848445491703543825876833265929406878039545824846416475379732894772809977742515611517080909501045071102159581756447710037773116009799595458677227192704189383276235508408500000000000000000", + "coordinate_movement_above_kappa": "16099174487823595540516430294897054798660372747977408982986647014886397057213204999835240182750048003850764774138423033492369699369310106183121233447528983183/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_phase_layer_above_kappa": "3838551450442350120466514150535089425156364590041027177747358186058007158198199154413541220091468727605299653469049909287939671070001907844989495748423461692471525807616440463522057/6407181585281696890983407087651753666531858813756079091649692832950759465789545619955485031223034161819002090142204319163512895420075546232019599190917354454385408378766552471016817000000000000000000", + "bulk_exposure_above_kappa": "16099174487823595540516430294897054798660372747977408982986647014886397057213204999835240182750048003850764774138423033492369699369310106183121233447528983183/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gaussian_arithmetic_above_kappa": "49929956359383891636682334467235976400846493161596454696927943987316335662954230095174784854400852306299403498179012231794056054820241901455974763560139756902928431597231181121226907/51257452682253575127867256701214029332254870510048632733197542663606075726316364959643880249784273294552016721137634553308103163360604369856156793527338835635083267030132419768134536000000000000000000", + "scalar_work_above_kappa": "3022347308020427168024638512713719642678957136664830842541068612764774941044496502999868999171719558143016474349913180337924305460021763455362126412952366988818802604491895640211767/2050298107290143005114690268048561173290194820401945309327901706544243029052654598385755209991370931782080668845505382132324126534424174794246271741093553425403330681205296790725381440000000000000000", + "dimension_above_kappa": "3196409207359151553231162974036146672459031212215382000019265285423173401803752699526640796382355306275012080586149285130394424095589341109716483649580049811311843280287131837920058593191496467269437/3203590792640848445491703543825876833265929406878039545824846416475379732894772809977742515611517080909501045071102159581756447710037773116009799595458677227192704189383276235508408500000000000000000" + }, + "outer_controls": [ + "next_grid", + "zero_eta", + "zero_beta", + "unit_beta" + ], + "bootstrap": [ + { + "gap": "48640105104416009930955104551272628756769/40000000000000000000000000000000000000000000000", + "cutoff_log2": "24346328299693" + }, + { + "gap": "10916033216189494908506938862091413300675156484737667525550897/8000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "19335382939135799529" + }, + { + "gap": "2449825733746901655394438404809502019511708753179325050819248403056515410563319361/1600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "15355787073969246541017124" + }, + { + "gap": "549801013506219857550281901936704203615404924098069138182437287931091972275689180385852832590942771793/320000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "12195269025875323655994833423982" + }, + { + "gap": "123388839576821941106964776874551364767558290306753584545234931806617408234472738882773008179061080923160999418343337504609/64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "9685246734476302780854842486398253310" + }, + { + "gap": "27691483569705102945201339627252022591017013352985113602942786795000164759817249951996149235225861576966507630300630689893816878766552471016817/12800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "7691835588756193183914168151850588989363719" + } + ], + "bit_template_sha256": "c40f89a2ae3c2c5635ddf8f18d74f24567ddf67fc8c8e93a1fc7a1a8098e857e", + "complex_template_sha256": "942d030fa43316c560c88d7d7d904583446e1a96945b3ebd37a91c88a192ab4f", + "scope": "Finite research composition with explicit changed words, exact local and global replay and incremental phase evidence. All-size correlated dirty-bank, compressed-window, compiler, restored-work, tape/common-grid, precision and analytic interfaces remain inherited assumptions. This certificate makes no unconditional integer-multiplication or Lean-kernel claim.", + "verification_steps": [ + "hamming_packets", + "complex_construct", + "complex_audit", + "complex_emit", + "complex_phases", + "bit_construct", + "bit_export", + "bit_global", + "bit_audit", + "bit_price", + "complex_integrate", + "complex_replay", + "combined" + ], + "phase_mode": "full replay", + "manifest_sha256": "c903e548e42d04a243a034d320b15e6cb26b878c30f935181336ea6ea679a004" +} diff --git a/research/e8-early-reset-reuse/local-evidence/PYTHON311-GZIP-FAILURE.log b/research/e8-early-reset-reuse/local-evidence/PYTHON311-GZIP-FAILURE.log new file mode 100644 index 0000000000..20a1987364 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/PYTHON311-GZIP-FAILURE.log @@ -0,0 +1,5 @@ +Traceback (most recent call last): + File "/Volumes/SP AI 01_16/CodexWorkspaces/imb-retime2/frontier390/source433-review/research/split-centres-global/code/complex_phases.py", line 9, in + assert sha(O/'CANONICAL-WORD.json.gz')==r['canonical_word_sha256'] + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +AssertionError diff --git a/research/e8-early-reset-reuse/local-evidence/PYTHON311-INITIAL-FAILURE.json b/research/e8-early-reset-reuse/local-evidence/PYTHON311-INITIAL-FAILURE.json new file mode 100644 index 0000000000..d82c79a260 --- /dev/null +++ b/research/e8-early-reset-reuse/local-evidence/PYTHON311-INITIAL-FAILURE.json @@ -0,0 +1,4 @@ +{ + "error": "RuntimeError(('full-parent433', 1, 'PASS hamming_packets\\nPASS complex_construct\\nPASS complex_audit\\nPASS complex_emit\\nTraceback (most recent call last):\\n File \"/Volumes/SP AI 01_16/CodexWorkspaces/imb-retime2/frontier390/early-reuse-publication/research/split-centres-global/verify.py\", line 39, in \\n for name in (\\'complex_construct\\',\\'complex_audit\\',\\'complex_emit\\',\\'complex_phases\\',\\'bit_construct\\'):run(name,\\'code/\\'+name+\\'.py\\')\\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\\n File \"/Volumes/SP AI 01_16/CodexWorkspaces/imb-retime2/frontier390/early-reuse-publication/research/split-centres-global/verify.py\", line 36, in run\\n assert r.returncode==0,(name,str(out/(name+\\'.log\\')))\\n ^^^^^^^^^^^^^^^\\nAssertionError: (\\'complex_phases\\', \\'/Volumes/SP AI 01_16/CodexWorkspaces/imb-retime2/frontier390/early-reuse-full311/baseline/complex_phases.log\\')\\n'))", + "completed": [] +} diff --git a/research/e8-early-reset-reuse/replay.py b/research/e8-early-reset-reuse/replay.py new file mode 100644 index 0000000000..84d4875764 --- /dev/null +++ b/research/e8-early-reset-reuse/replay.py @@ -0,0 +1,71 @@ +"""Reconstruct eleven chronological clean resets; regenerate arbitrary-dirt compensation. +Rohan Arun with OpenAI Codex assistance, using icekylinx's PR433 and ai-nanachi's PR426. +""" +import copy,hashlib,json,sys +from pathlib import Path +from collections import defaultdict +ROOT=Path(__file__).resolve().parent + +def reconstruct(raw,selection): + assert hashlib.sha256(raw).hexdigest()==selection['source_sha256'] + w=json.loads(raw);v=w['v'];n=2*v+w['R'];entries=selection['entries'];cut=len(w['A'])-w['source_basis_gates'];assert all(d>=2*v for f,d,ss in w['A'][:cut]) + removed={z['new_helper'] for z in entries};retired={z['retired_helper'] for z in entries} + assert len(removed)==len(retired)==len(entries) and not removed&retired + assert all(2*v<=x>i&1] + if ss:D.append([0,v+t,ss]) + c['D']=D;raw=json.dumps(c,sort_keys=True,separators=(',',':')).encode();assert hashlib.sha256(raw).hexdigest()==selection['word_sha256'];return raw + +def controls(raw,sel): + rejected=[] + cases=[] + for label in ('missing reset parent','wrong insertion time','duplicate physical reuse'): + s=copy.deepcopy(sel) + if label=='missing reset parent':s['entries'][0]['parents'].pop() + elif label=='wrong insertion time':s['entries'][0]['position']=0 + else:s['entries'][1]['new_helper']=s['entries'][0]['new_helper'] + cases.append((label,s)) + for label,s in cases: + try:reconstruct(raw,s) + except AssertionError:rejected.append(label) + else:raise AssertionError(label) + return rejected +if __name__=='__main__': + raw=Path(sys.argv[1]).read_bytes();s=json.loads((ROOT/'SELECTION.json').read_text());out=Path(sys.argv[2]);data=reconstruct(raw,s);out.write_bytes(data);print(json.dumps(dict(status='PASS_EXACT_CHRONOLOGICAL_RECONSTRUCTION',helpers_removed=len(s['entries']),R=s['R'],sha256=hashlib.sha256(data).hexdigest(),controls=controls(raw,s)))) diff --git a/research/e8-early-reset-reuse/verify.py b/research/e8-early-reset-reuse/verify.py new file mode 100644 index 0000000000..6fae5fc80e --- /dev/null +++ b/research/e8-early-reset-reuse/verify.py @@ -0,0 +1,31 @@ +"""Fresh parent replay, chronological reset reconstruction, banks and exact assembly.""" +from pathlib import Path +import hashlib,json,os,subprocess,sys,time +assert __debug__ +ROOT=Path(__file__).resolve().parent;PARENT=ROOT.parent/'split-centres-global';out=Path(sys.argv[1]).resolve();assert not out.exists() and not out.is_relative_to(ROOT.parent) +read=lambda p:json.loads(p.read_text());sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() +def integrity(): + assert {p.relative_to(ROOT).as_posix():sha(p) for p in ROOT.rglob('*') if p.is_file() and p.name!='MANIFEST.json'}==read(ROOT/'MANIFEST.json')['files'] + assert sha(PARENT/'MANIFEST.json')==read(ROOT/'SOURCE.json')['parent_manifest_sha256'] +integrity();out.mkdir(parents=True);env=dict(os.environ,PYTHONDONTWRITEBYTECODE='1',PYTHONINTMAXSTRDIGITS='0');env.pop('PYTHONOPTIMIZE',None);steps=[] +def run(name,file,*args,cwd=None): + t=time.monotonic();log=out/(name+'.log');print('RUN',name,flush=True) + with log.open('w') as f:q=subprocess.run([sys.executable,'-B',str(file),*map(str,args)],cwd=cwd,env=env,stdout=f,stderr=subprocess.STDOUT) + if q.returncode:raise RuntimeError((name,q.returncode,log.read_text()[-2000:])) + steps.append(dict(name=name,seconds=time.monotonic()-t,log_sha256=sha(log)));print('PASS',name,flush=True) +try: + base=out/'baseline';run('full-parent433',PARENT/'verify.py',base,'--replay-phases') + changed=out/'changed';changed.mkdir() + for name in ('work','inherited','split-centres'):(changed/name).symlink_to(base/name,target_is_directory=True) + bit=changed/'bit426-source-centres';bit.mkdir() + run('reconstruct',ROOT/'replay.py',base/'bit426-source-centres/bit-source-centres.json',bit/'bit-source-centres.json') + run('export',PARENT/'vendor/export_records.py',bit/'bit-source-centres.json',bit/'records') + run('global-program',ROOT/'bit_global.py','--source',bit,'--local-check',bit,'--out',bit/'global',cwd=changed) + run('independent-audit',ROOT/'bit_audit.py','--local-check',bit,'--out',bit/'global',cwd=changed) + run('two-moments',ROOT/'bit_price.py',cwd=changed) + env['E8_OUTPUT']=str(changed);run('finite-assembly',ROOT/'combined.py',cwd=changed) + actual=read(changed/'RESULT.json');expected=read(ROOT/'EXPECTED.json') + for k,v in expected.items():assert actual[k]==v,(k,actual[k],v) + integrity();result=dict(status='PASS_FULL_PARENT_AND_EARLY_RESET_REUSE',kappa=actual['kappa'],kappa_decimal=actual['kappa_decimal'],source_manifest_sha256=sha(ROOT/'MANIFEST.json'),checks=steps,parent_phase_mode=read(base/'RESULT.json')['phase_mode']);(out/'RESULT.json').write_text(json.dumps(result,indent=2)+'\n') +except BaseException as e: + (out/'FAILURE.json').write_text(json.dumps(dict(error=repr(e),completed=steps),indent=2)+'\n');raise diff --git a/research/e8-r715-whole-hosted-validation/CROSS-PLATFORM.json b/research/e8-r715-whole-hosted-validation/CROSS-PLATFORM.json new file mode 100644 index 0000000000..06e01a2b40 --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/CROSS-PLATFORM.json @@ -0,0 +1,14 @@ +{ + "status": "PASS", + "entire_result_byte_identical": true, + "global_audit_byte_identical": true, + "target_labels_byte_identical": true, + "linux_python": "3.12.3", + "macos_python": "3.11.15", + "package_files": 32, + "pinned_upstream_files": 327, + "package_manifest_sha256": "60d469ea1165f5861a4912c735d43b3eec67579645da2f3081b5393c4aa786f2", + "source_sha256": "2cf824cc4b13f3d4e0fc957f5a3bd337be82ad15cd6da6a7156944468dfd3498", + "result_sha256": "9e91920c50fa72d81916faa17feb19d57568a7bb107a55e0ba3af1025e42e062", + "emitted_program_sha256": "8a63de3a69f66a1d833addf92d8fa7ccfdc4c6692d096658786e234d1addc413" +} diff --git a/research/e8-r715-whole-hosted-validation/GLOBAL-AUDIT.json b/research/e8-r715-whole-hosted-validation/GLOBAL-AUDIT.json new file mode 100644 index 0000000000..31d4374d6d --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/GLOBAL-AUDIT.json @@ -0,0 +1,60 @@ +{ + "status": "PASS_INDEPENDENT_ELEVEN_STAGE_HOSTING_AUDIT", + "template_sha256": "1fdf20d8296adbe299217a06f1eba496aece0472399d7f77bb9295a59b2820cf", + "emitted_program_sha256": "8a63de3a69f66a1d833addf92d8fa7ccfdc4c6692d096658786e234d1addc413", + "emitted_events": 1726296, + "profile": { + "1": 211200, + "2": 98367, + "3": 20416, + "4": 30728, + "5": 6336, + "6": 8256, + "7": 4192, + "8": 792, + "34": 1, + "56": 652 + }, + "live": 9600, + "physical": 9609, + "hosted_residuals": 62920, + "bank_assignments": 0, + "rank_mass": 745536, + "deficit": 3264, + "maxchild": 56, + "geometry_routes": 1320, + "halving_depth": 3, + "physical_prefix_bits": 804, + "charged_prefix_bits": 832, + "local_audit": { + "status": "PASS_EXACT_R715_RANK120_LOCAL_PROJECTORS", + "source_frames": 958, + "nested_and_reflected_pairs": 3396, + "residual_isometries": 11, + "entrance_rank": 120 + }, + "mutations_rejected": [ + "slot outside window", + "copy outside family", + "negative slot offset", + "wrong residual width", + "duplicate helper", + "missing helper", + "owner replica does not match assignment", + "cross-replica data", + "wrong hosted coordinate", + "helper changed to bank", + "wrong call orientation", + "duplicate call", + "dropped final stage", + "wrong idle rank", + "omitted bridge", + "wrong bridge sign", + "omitted terminal exchange", + "understated live stock", + "missing remainder summary", + "wrong residual isometry", + "omitted local instruction", + "wrong reflected copy rank" + ] +} diff --git a/research/e8-r715-whole-hosted-validation/JOINT-VERIFY.txt b/research/e8-r715-whole-hosted-validation/JOINT-VERIFY.txt new file mode 100644 index 0000000000..fe836e4f96 --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/JOINT-VERIFY.txt @@ -0,0 +1,60 @@ +python3 scripts/experiments/verify_skip_frame.py +PASS h=23: full dirty basis, exact frame path, every fixed-basis profile +PASS h=25: full dirty basis, exact frame path, every fixed-basis profile +PASS conditional kappa=4669442391/100000000000000; bit saving=116741511/2500000000000 +PASS exact recurrence, 47 strict inequalities, seven margins, eventual cutoffs +python3 scripts/experiments/verify_joint_dual.py +built 23 36626 regions +augment 100 11854 +augment 200 11954 +matched 11974 seconds 0.8333158493041992 +compile 23 0 6 reclaimed 0 seconds 0.8350780010223389 +compile 23 5000 16729 reclaimed 19 seconds 1.007098913192749 +compile 23 10000 20965 reclaimed 172 seconds 3.617837905883789 +compile 23 15000 22929 reclaimed 607 seconds 6.266779899597168 +compile 23 20000 25536 reclaimed 1200 seconds 11.15270209312439 +compile 23 25000 28333 reclaimed 1562 seconds 19.80107808113098 +compile 23 30000 30127 reclaimed 1786 seconds 28.399923086166382 +compile 23 35000 30688 reclaimed 1853 seconds 31.841824054718018 +PASS h=23: full dirty basis, exact frame path, every fixed-basis profile +built 25 48675 regions +augment 100 16090 +augment 200 16190 +matched 16276 seconds 1.478111982345581 +compile 25 0 6 reclaimed 0 seconds 1.4808738231658936 +compile 25 5000 19564 reclaimed 0 seconds 1.5656399726867676 +compile 25 10000 25624 reclaimed 50 seconds 4.370934963226318 +compile 25 15000 28089 reclaimed 718 seconds 7.830729961395264 +compile 25 20000 29883 reclaimed 986 seconds 10.852092981338501 +compile 25 25000 32329 reclaimed 1785 seconds 16.76895308494568 +compile 25 30000 35471 reclaimed 2135 seconds 29.156476974487305 +compile 25 35000 37806 reclaimed 2408 seconds 43.045527935028076 +compile 25 40000 39609 reclaimed 2613 seconds 56.69250702857971 +compile 25 45000 40338 reclaimed 2711 seconds 63.33881211280823 +PASS h=25: full dirty basis, exact frame path, every fixed-basis profile +PASS conditional kappa=4764513337/100000000000000; bit saving=2382370177/50000000000000 +PASS exact recurrence, 47 strict inequalities, seven margins, eventual cutoffs +python3 -m unittest discover -s tests -p 'test_joint_reclaim.py' -v +test_aliased_terminal_role_is_rejected (test_joint_reclaim.JointReclamationControls.test_aliased_terminal_role_is_rejected) ... ok +test_cancelled_repetitions_of_paid_scatter_are_rejected (test_joint_reclaim.JointReclamationControls.test_cancelled_repetitions_of_paid_scatter_are_rejected) ... ok +test_complete_pr58_profile_fails_new_bit_saving (test_joint_reclaim.JointReclamationControls.test_complete_pr58_profile_fails_new_bit_saving) ... ok +test_missing_copied_center_is_rejected (test_joint_reclaim.JointReclamationControls.test_missing_copied_center_is_rejected) ... ok +test_missing_scatter_is_rejected_by_each_helper (test_joint_reclaim.JointReclamationControls.test_missing_scatter_is_rejected_by_each_helper) ... ok +test_negative_operation_frame_index_is_rejected (test_joint_reclaim.JointReclamationControls.test_negative_operation_frame_index_is_rejected) ... ok +test_non_nested_operation_frame_is_rejected (test_joint_reclaim.JointReclamationControls.test_non_nested_operation_frame_is_rejected) ... ok +test_omitted_literal_xor_is_rejected (test_joint_reclaim.JointReclamationControls.test_omitted_literal_xor_is_rejected) ... ok +test_omitted_transition_cannot_reduce_paid_profile (test_joint_reclaim.JointReclamationControls.test_omitted_transition_cannot_reduce_paid_profile) ... ok +test_optimized_helpers_reject_unchecked_word (test_joint_reclaim.JointReclamationControls.test_optimized_helpers_reject_unchecked_word) ... ok +test_optimized_python_is_rejected_by_every_new_entry (test_joint_reclaim.JointReclamationControls.test_optimized_python_is_rejected_by_every_new_entry) ... ok +test_scatter_order_preserves_the_complete_basis_receipt (test_joint_reclaim.JointReclamationControls.test_scatter_order_preserves_the_complete_basis_receipt) ... ok +test_selected_words_pass_independent_replay (test_joint_reclaim.JointReclamationControls.test_selected_words_pass_independent_replay) ... ok +test_self_cancelling_uncharged_scatter_is_rejected (test_joint_reclaim.JointReclamationControls.test_self_cancelling_uncharged_scatter_is_rejected) ... ok +test_self_xor_is_rejected (test_joint_reclaim.JointReclamationControls.test_self_xor_is_rejected) ... ok +test_understated_physical_width_is_rejected (test_joint_reclaim.JointReclamationControls.test_understated_physical_width_is_rejected) ... ok + +---------------------------------------------------------------------- +Ran 16 tests in 19.916s + +OK +python3 scripts/audit_joint_candidate.py --check docs/research/community-round2-arithmetic.json +PASS independent PR60/61 moments, complete child ledger, assembly and Lean source binding diff --git a/research/e8-r715-whole-hosted-validation/LINUX-FULL.json b/research/e8-r715-whole-hosted-validation/LINUX-FULL.json new file mode 100644 index 0000000000..8513ef67db --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/LINUX-FULL.json @@ -0,0 +1,104 @@ +{ + "status": "PASS_R715_WHOLE_HOSTED_FULL_COMPOSITION", + "mode": "full", + "kappa": "646049779721139/500000000000000000", + "python": "3.12.3", + "manifest_sha256": "60d469ea1165f5861a4912c735d43b3eec67579645da2f3081b5393c4aa786f2", + "source_sha256": "2cf824cc4b13f3d4e0fc957f5a3bd337be82ad15cd6da6a7156944468dfd3498", + "parent_receipt_sha256": "01731b9925f44df521c045b2d6becf04d2ca7f84fd45bb8995e88f335508cd2e", + "parent_manifest_sha256": "8378e54cba9d89d355c2d5d0a11349369e050324eff11964fb2856c6daf6921b", + "parent_mode": "full", + "emitted_program_sha256": "8a63de3a69f66a1d833addf92d8fa7ccfdc4c6692d096658786e234d1addc413", + "checks": [ + { + "name": "parent458", + "seconds": 736.81, + "log_sha256": "3a5226256db755cf431c90d6bbce22cf14150b4228c7fe1bb8caec17e8b778b6" + }, + { + "name": "export-records", + "seconds": 0.37, + "log_sha256": "c25bfd8e36443717c564e776a2b80f41874b3bf17f2e0f06b9f4126b07216391" + }, + { + "name": "exact-reconstruction", + "seconds": 80.0, + "log_sha256": "a0a3838bd338eb870725aa83dacf8b1f7694660a1a88378d9ac58f15818ef32e" + }, + { + "name": "mixing-controls", + "seconds": 0.26, + "log_sha256": "623e854f0b499fb66fe49b92aac5bb154b53feb4048655973d141954729c2081" + }, + { + "name": "physical-target-labels", + "seconds": 0.21, + "log_sha256": "26a7469f119d10f82cea9a913a78e24916df430b3ac89eb8f2bc20530250f501" + }, + { + "name": "stage-cohort", + "seconds": 0.04, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build-legality", + "seconds": 2.98, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build-legality_ncopy_h", + "seconds": 2.97, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build-columns_h", + "seconds": 2.38, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build-columns_k5", + "seconds": 2.49, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "official-legality", + "seconds": 0.01, + "log_sha256": "b15320ab3898d72de3007a9b712c7e83e833263dc1764052ca204cf35a55bd53" + }, + { + "name": "official-columns", + "seconds": 0.0, + "log_sha256": "a4833ed9edaed2334289f652d6a535f9524fbe08bf7bb9882f4b3dfc1fbe42ad" + }, + { + "name": "official-eleven-stage-columns", + "seconds": 0.0, + "log_sha256": "e0360917fc2f351e64a5868c6e81de5e1b790da16eac7439ab43c424dbb0c29e" + }, + { + "name": "record-mutations", + "seconds": 4.33, + "log_sha256": "138d52db778c8f351309a4719615cb78706921075eef5292a6abec6aad1e931c" + }, + { + "name": "positive-gram", + "seconds": 0.08, + "log_sha256": "a4a6be89e8804a8825223c6f25893524d9a2bedf280c454362810f0f61991b8a" + }, + { + "name": "global-emission", + "seconds": 4.27, + "log_sha256": "0cbcc5e747ec92aec43d823c6106667699dad18904efd2000296e711ffff1ae5" + }, + { + "name": "independent-global-audit", + "seconds": 11.85, + "log_sha256": "64e59bcbcefde627f9535a416a4a7e6f476e3733c329f415d8933606a8bf4155" + }, + { + "name": "finite-invoices-and-outer-assembly", + "seconds": 0.3, + "log_sha256": "68c3235d9523385549a694762deea9411c2f52fb4215c104b9b18a5e5dfdecd4" + } + ] +} diff --git a/research/e8-r715-whole-hosted-validation/LINUX-PARENT-FULL.json b/research/e8-r715-whole-hosted-validation/LINUX-PARENT-FULL.json new file mode 100644 index 0000000000..b3c2301895 --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/LINUX-PARENT-FULL.json @@ -0,0 +1,76 @@ +{ + "status": "PASS_COMPLEX_ADAPTED_KERNEL_FULL_COMPOSITION", + "mode": "full", + "kappa": "1274032589159993/1000000000000000000", + "manifest_sha256": "8378e54cba9d89d355c2d5d0a11349369e050324eff11964fb2856c6daf6921b", + "source_sha256": "db4995de0050e5d8222d3d2c7bc2c4c59c7c9e69fe2495d80c711bbd15347ce4", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "checks": [ + { + "name": "parent454", + "seconds": 582.68, + "log_sha256": "b32a9614e2178192786f3d9cf043c1aa11e47edf80abdd80a0570bae4b237165" + }, + { + "name": "baseline-scalar", + "seconds": 0.69, + "log_sha256": "a910de77b7abb198cd43e7ca6c2ee46008e880f2d0f95761a286c1df25e9b04a" + }, + { + "name": "baseline-programs", + "seconds": 0.53, + "log_sha256": "5bc5e23a3a722fe5484b8603dfe38870c66841c1469ba6685eee6a1b7251d566" + }, + { + "name": "kernel-rebuild", + "seconds": 0.33, + "log_sha256": "77f36bd16cd226c95cec1f9b87e049c09d68a0e51445562681ed51563fd96b94" + }, + { + "name": "discovery-metadata-controls", + "seconds": 2.8, + "log_sha256": "92913db89b60451c9a5a2a80c871b8bb6d7f939fad4aeb71fe2afbe12af446f6" + }, + { + "name": "kernel-scalar", + "seconds": 0.71, + "log_sha256": "8057eccb40b3ccae6f32c9b4c603064c7f52892c8ee88a4f20b5abd37b1cd1a8" + }, + { + "name": "kernel-programs", + "seconds": 0.53, + "log_sha256": "2f9364d416bbb5dc0ef7a9cc18b1ff0a37874626e92ab3e03f535979cd5ee679" + }, + { + "name": "kernel-exact-phases", + "seconds": 94.12, + "log_sha256": "70ed8519fcb3c853feed5fd682c1fe73be36c44a2f6b4d013839ef49f0a2d45b" + }, + { + "name": "residual-adapters", + "seconds": 0.92, + "log_sha256": "1f86fc2f0dd4683467fe0813febbeb731b530bcc200ec6ff91cd8e9a6579f07d" + }, + { + "name": "independent-local-audit", + "seconds": 1.67, + "log_sha256": "287170c58787fea9e2996b468064d65d94445273fcb389fde0c4807d83f28519" + }, + { + "name": "global-emit", + "seconds": 12.17, + "log_sha256": "d429520e1698e975fe445957e6ee8f9844809e20dc966f485b620d6995792f94" + }, + { + "name": "independent-global-audit", + "seconds": 39.14, + "log_sha256": "c55d0f076e5f123efe2ca28a1d15dc908562e47a09bbe6b63a75452847b44f1a" + }, + { + "name": "exact-assembly", + "seconds": 0.28, + "log_sha256": "2df6cadf71463154c352b303bf74407b6a65e220ce6713cad12734ee48865858" + } + ], + "python": "3.12.3" +} diff --git a/research/e8-r715-whole-hosted-validation/MACOS-PARENT-FULL.json b/research/e8-r715-whole-hosted-validation/MACOS-PARENT-FULL.json new file mode 100644 index 0000000000..02d3088203 --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/MACOS-PARENT-FULL.json @@ -0,0 +1,76 @@ +{ + "status": "PASS_COMPLEX_ADAPTED_KERNEL_FULL_COMPOSITION", + "mode": "full", + "kappa": "1274032589159993/1000000000000000000", + "manifest_sha256": "8378e54cba9d89d355c2d5d0a11349369e050324eff11964fb2856c6daf6921b", + "source_sha256": "db4995de0050e5d8222d3d2c7bc2c4c59c7c9e69fe2495d80c711bbd15347ce4", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "checks": [ + { + "name": "parent454", + "seconds": 552.92, + "log_sha256": "5b1559e54a317504f9b12cda250ce0019ad3794606012a272a94dded646e1f4d" + }, + { + "name": "baseline-scalar", + "seconds": 0.67, + "log_sha256": "c65b502e1852b05e7dffe1a1c882781e0dff55013ff763dc117f8b63e546f50b" + }, + { + "name": "baseline-programs", + "seconds": 0.49, + "log_sha256": "5bc5e23a3a722fe5484b8603dfe38870c66841c1469ba6685eee6a1b7251d566" + }, + { + "name": "kernel-rebuild", + "seconds": 0.29, + "log_sha256": "77f36bd16cd226c95cec1f9b87e049c09d68a0e51445562681ed51563fd96b94" + }, + { + "name": "discovery-metadata-controls", + "seconds": 2.41, + "log_sha256": "92913db89b60451c9a5a2a80c871b8bb6d7f939fad4aeb71fe2afbe12af446f6" + }, + { + "name": "kernel-scalar", + "seconds": 0.68, + "log_sha256": "4e744f4488e278ea57c4434c4ec49972e79d55197aef85744f86648a8d20dde3" + }, + { + "name": "kernel-programs", + "seconds": 0.49, + "log_sha256": "2f9364d416bbb5dc0ef7a9cc18b1ff0a37874626e92ab3e03f535979cd5ee679" + }, + { + "name": "kernel-exact-phases", + "seconds": 81.31, + "log_sha256": "01d8ce35ec9217497de4590860fee7da0996312d569e5909ccb95fc29887111a" + }, + { + "name": "residual-adapters", + "seconds": 0.76, + "log_sha256": "1f86fc2f0dd4683467fe0813febbeb731b530bcc200ec6ff91cd8e9a6579f07d" + }, + { + "name": "independent-local-audit", + "seconds": 1.45, + "log_sha256": "287170c58787fea9e2996b468064d65d94445273fcb389fde0c4807d83f28519" + }, + { + "name": "global-emit", + "seconds": 9.02, + "log_sha256": "d429520e1698e975fe445957e6ee8f9844809e20dc966f485b620d6995792f94" + }, + { + "name": "independent-global-audit", + "seconds": 28.6, + "log_sha256": "c55d0f076e5f123efe2ca28a1d15dc908562e47a09bbe6b63a75452847b44f1a" + }, + { + "name": "exact-assembly", + "seconds": 0.26, + "log_sha256": "2df6cadf71463154c352b303bf74407b6a65e220ce6713cad12734ee48865858" + } + ], + "python": "3.11.15" +} diff --git a/research/e8-r715-whole-hosted-validation/MACOS-PARENT-REUSE.json b/research/e8-r715-whole-hosted-validation/MACOS-PARENT-REUSE.json new file mode 100644 index 0000000000..4263db4687 --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/MACOS-PARENT-REUSE.json @@ -0,0 +1,99 @@ +{ + "status": "PASS_R715_COMPONENTS_WITH_VERIFIED_PARENT_REUSE", + "mode": "parent-reuse", + "kappa": "646049779721139/500000000000000000", + "python": "3.11.15", + "manifest_sha256": "60d469ea1165f5861a4912c735d43b3eec67579645da2f3081b5393c4aa786f2", + "source_sha256": "2cf824cc4b13f3d4e0fc957f5a3bd337be82ad15cd6da6a7156944468dfd3498", + "parent_receipt_sha256": "a4acfe83907949e61ad37849ffce0025a21a53903e3870a5549b33e3b9a3f4b9", + "parent_manifest_sha256": "8378e54cba9d89d355c2d5d0a11349369e050324eff11964fb2856c6daf6921b", + "parent_mode": "full", + "emitted_program_sha256": "8a63de3a69f66a1d833addf92d8fa7ccfdc4c6692d096658786e234d1addc413", + "checks": [ + { + "name": "export-records", + "seconds": 0.43, + "log_sha256": "c25bfd8e36443717c564e776a2b80f41874b3bf17f2e0f06b9f4126b07216391" + }, + { + "name": "exact-reconstruction", + "seconds": 100.52, + "log_sha256": "a0a3838bd338eb870725aa83dacf8b1f7694660a1a88378d9ac58f15818ef32e" + }, + { + "name": "mixing-controls", + "seconds": 0.2, + "log_sha256": "623e854f0b499fb66fe49b92aac5bb154b53feb4048655973d141954729c2081" + }, + { + "name": "physical-target-labels", + "seconds": 0.69, + "log_sha256": "26a7469f119d10f82cea9a913a78e24916df430b3ac89eb8f2bc20530250f501" + }, + { + "name": "stage-cohort", + "seconds": 0.03, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build-legality", + "seconds": 1.86, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build-legality_ncopy_h", + "seconds": 1.47, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build-columns_h", + "seconds": 1.18, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "build-columns_k5", + "seconds": 1.23, + "log_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" + }, + { + "name": "official-legality", + "seconds": 0.9, + "log_sha256": "b15320ab3898d72de3007a9b712c7e83e833263dc1764052ca204cf35a55bd53" + }, + { + "name": "official-columns", + "seconds": 0.29, + "log_sha256": "f97059922c5c83f75d44bfc62b847c7a4790c6bbb8151c78081ae32399423a30" + }, + { + "name": "official-eleven-stage-columns", + "seconds": 0.3, + "log_sha256": "f1e2add734c23690889be48d4d47b1d3fafe2bf28c49c9861ad4d19cf6ca6771" + }, + { + "name": "record-mutations", + "seconds": 0.38, + "log_sha256": "41fb31a983687eb1355cb763d05c8575b45eb4313c7008f3fe2ac8b4eddb9f54" + }, + { + "name": "positive-gram", + "seconds": 0.05, + "log_sha256": "a4a6be89e8804a8825223c6f25893524d9a2bedf280c454362810f0f61991b8a" + }, + { + "name": "global-emission", + "seconds": 2.96, + "log_sha256": "f246ced257775bfeffcc94876a08b6bbd1aa89987260654cbae86918cb1e5a1f" + }, + { + "name": "independent-global-audit", + "seconds": 9.03, + "log_sha256": "64e59bcbcefde627f9535a416a4a7e6f476e3733c329f415d8933606a8bf4155" + }, + { + "name": "finite-invoices-and-outer-assembly", + "seconds": 0.26, + "log_sha256": "68c3235d9523385549a694762deea9411c2f52fb4215c104b9b18a5e5dfdecd4" + } + ] +} diff --git a/research/e8-r715-whole-hosted-validation/MACOS-REBUILD.json b/research/e8-r715-whole-hosted-validation/MACOS-REBUILD.json new file mode 100644 index 0000000000..cddfff4889 --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/MACOS-REBUILD.json @@ -0,0 +1 @@ +{"base_and_kernel_integer_source_spans": true, "canonical_word_sha256": "f3195c4c5cfe6faa44fbf885c20cfa310af544392c65ff13a4c6e12b8ff36dfc", "disjoint_mixing": true, "donor_slots": 103, "donors": 56, "entrance_rank": 120, "final_integer_source_spans": true, "kernel_entries": 109, "local_columns": 955, "local_profile": {"1": 2396, "2": 1076, "3": 232, "4": 311, "5": 72, "6": 72, "8": 9}, "mutations_rejected": ["retained row pivot", "duplicate pivot", "omitted response correction"], "paired_retimings": 14, "receivers": 56, "single_retimings": 60, "status": "PASS_EXACT_R715_KERNEL_AND_MIXING_REBUILD"} diff --git a/research/e8-r715-whole-hosted-validation/MANIFEST.json b/research/e8-r715-whole-hosted-validation/MANIFEST.json new file mode 100644 index 0000000000..3447b21862 --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/MANIFEST.json @@ -0,0 +1,14 @@ +{ + "CROSS-PLATFORM.json": "3d9bd6db5ef446051afdcd6a2fb4d60ef85f2fa02f57b56e4d9031ca2308a8a8", + "GLOBAL-AUDIT.json": "09f463d509e95df2a4b6d3c616c95f2e2a5ea7700024a7344ff56e2ae3d066eb", + "JOINT-VERIFY.txt": "6856f29c678075742ffc63ecca3dcd4d130cac218b2c6cc088cabd168f89f577", + "LINUX-FULL.json": "e3209df438c8ead2913d3ac6a656ba47a06e83d0aef79344dabe790d8493d220", + "LINUX-PARENT-FULL.json": "01731b9925f44df521c045b2d6becf04d2ca7f84fd45bb8995e88f335508cd2e", + "MACOS-PARENT-FULL.json": "a4acfe83907949e61ad37849ffce0025a21a53903e3870a5549b33e3b9a3f4b9", + "MACOS-PARENT-REUSE.json": "935f641cd4d0ea96c552d1ea36352e65cc9929a82234e64680c560f5d50e98e3", + "MACOS-REBUILD.json": "a0a3838bd338eb870725aa83dacf8b1f7694660a1a88378d9ac58f15818ef32e", + "README.md": "31eca02f54a3352129f584af9bda2202fe3213aaccc815efd1b985550eebc595", + "REBUILD.json": "a0a3838bd338eb870725aa83dacf8b1f7694660a1a88378d9ac58f15818ef32e", + "RESULT.json": "9e91920c50fa72d81916faa17feb19d57568a7bb107a55e0ba3af1025e42e062", + "TARGET-LABELS.json": "e5838f8704ef091c8d36329112ebb7c751c6e3a6230b3a965db51a2729551214" +} diff --git a/research/e8-r715-whole-hosted-validation/README.md b/research/e8-r715-whole-hosted-validation/README.md new file mode 100644 index 0000000000..9ddee383ae --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/README.md @@ -0,0 +1,7 @@ +# Validation receipts + +Linux Python 3.12.3 completed the default full verifier, including a fresh complete replay of the corrected #458 chain. macOS Python 3.11.15 completed every new R715 component with an explicitly reused, freshly completed full #458 parent whose manifest and source hashes match. The parent receipt is retained. The macOS receipt deliberately reports parent reuse, not a fresh complete parent run. + +The entire final RESULT.json, independent global audit and target-label audit are byte-identical across platforms. Both release receipts bind the unchanged 32-file package manifest and source inventory. The complete 327-file upstream package inventory was rechecked after both runs. Exact reconstruction receipts from both systems and the 16 passing repository joint tests are included. + +Early component-wrapper attempts stopped on a filename mismatch, the Spark 2 Boost include path and macOS Bash 3 empty-array behavior. Those wrapper issues were fixed before the frozen release runs. No failed operator witness is treated as a passing receipt. GitHub CI is separate and is not claimed here. diff --git a/research/e8-r715-whole-hosted-validation/REBUILD.json b/research/e8-r715-whole-hosted-validation/REBUILD.json new file mode 100644 index 0000000000..cddfff4889 --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/REBUILD.json @@ -0,0 +1 @@ +{"base_and_kernel_integer_source_spans": true, "canonical_word_sha256": "f3195c4c5cfe6faa44fbf885c20cfa310af544392c65ff13a4c6e12b8ff36dfc", "disjoint_mixing": true, "donor_slots": 103, "donors": 56, "entrance_rank": 120, "final_integer_source_spans": true, "kernel_entries": 109, "local_columns": 955, "local_profile": {"1": 2396, "2": 1076, "3": 232, "4": 311, "5": 72, "6": 72, "8": 9}, "mutations_rejected": ["retained row pivot", "duplicate pivot", "omitted response correction"], "paired_retimings": 14, "receivers": 56, "single_retimings": 60, "status": "PASS_EXACT_R715_KERNEL_AND_MIXING_REBUILD"} diff --git a/research/e8-r715-whole-hosted-validation/RESULT.json b/research/e8-r715-whole-hosted-validation/RESULT.json new file mode 100644 index 0000000000..9486dcc21a --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/RESULT.json @@ -0,0 +1,186 @@ +{ + "status": "PASS_CONDITIONAL_R715_WHOLE_HOSTED", + "kappa": "646049779721139/500000000000000000", + "kappa_decimal": "0.001292099559442278", + "bit_lower": "323442810173099014031/250000000000000000000000", + "complex_lower": "1297203880559577927527/1000000000000000000000000", + "binding_component": "bit", + "gain_over_pr458_percent": 1.4180932604084393, + "bit": { + "live": 9600, + "physical": 9609, + "maxchild": 56, + "rank_mass": 745536, + "hosted_residuals": 62920, + "prefix_bits": 804, + "charged_prefix_bits": 832, + "coefficient_bits": 804, + "three_level_coefficient_bits": 2468, + "charged_three_level_coefficient_bits": 2496, + "row_coefficient": 19431 + }, + "complex": { + "live": 9600, + "physical": 10178, + "maxchild": 64, + "rank_mass": 851136, + "hosted_residuals": 49280, + "wrapper_events": 13904, + "charged_wrapper_groups": 788480, + "max_helpers_per_physical_family_per_call": 1, + "physical_stock_bits": 3929, + "router_bits": 11850, + "literal_bits": 37859, + "row_coefficient": 20161, + "row_bound": { + "status": "PASS_FRACTIONAL_DEPTH_ROW_RESERVE", + "block_steps": 9, + "block_halvings": 4, + "exact_shrink_inequality": [ + 350356403707485209, + 288230376151711744 + ], + "stock_bits": 3929, + "row_slope": "76005/4", + "additive_stock_charge": 35361, + "minimum_log2_width": 32, + "retained_row_coefficient": 20161, + "threshold_margin": "1751", + "coarse_three_level_row": 21948, + "finite_three_level_halving": [ + 704969, + 524288 + ] + }, + "row_controls": [ + "coarse three-level row exceeds reserve", + "nine steps do not guarantee five halvings", + "insufficient row cutoff" + ], + "local_bound": 18687781085682, + "pervertex": 1772686901993840, + "halving_depth": 3 + }, + "strict_outer_constraints": { + "bit_positive": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_above_bit": "3432639867181877291032183983476499868894301663202372625399579181465681344346601148823664680022001736302513815714953752156583582047581942126295501055756062855065747/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_below_one_over32": "29952796119440422072473/1000000000000000000000000", + "beta_positive": "1/1000000000000000000", + "beta_below_one": "999999999999999999/1000000000000000000", + "leaf_saving_above_bit": "3432639867181875993828303423898572341894301663202372625399579181465681344346601148823664680022001736302513815714953752156583582047581942126295501055756062855065747/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_positive": "646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_internal": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_leaf": "1716319933590939290685392404345336406914966848124686443805487927530468046773721392946150995664399719327592227835475139775777975308837218906564168480296089301237372444243937144934253/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_positive": "646885620346198148824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_below_one": "499353114379653801851175787332684134300170414966848124686443805487927530468046773721392946150995664399719327592227835475139775777975308837218906564168480296089301237372444243937144934253/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_reservations": "1/4000000000000000000", + "lambda_above_tau": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_sigma": "3432639867181878584803424675872550104862117679725872756505277518263308718947021967357983335675400587478849135692952015854069766332628189969711919008174120728770245944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_internal": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_prime_above_lambda": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_leaf": "1716319933590939290685392404345336406914966848124686443805487927530468046773721392946150995664399719327592227835475139775777975308837218906564168480296089301237372444243937144934253/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_reservations": "1/4000000000000000000", + "lambda_prime_below_one": "646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "epsilon_positive": "499999999999999999500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "epsilon_below_one": "646885620346198523824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "guard_width": "646885620346198523824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "K_geometry": "375646885620346198148824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747000000000000000000", + "K_dominates_log": "646885620346198148177327046969667551005372365836009613726609478920594218397031766534584317051109321673618558767828924579551814252526637920869213806828541129605326796036052152156303119444243937144934253/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747000000000000000000", + "record_suffix": "646885620346198523824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "phase_local": "5175084962769587689946815718180727574812467597899136808619971063427880942069615716783961260081458523638325413172980598601121368425364777388523264627466468504496665188926344592141763348444243937144934253/4005175084962769584190593701338526925598636680265215002508449556096579756255625810228856430792034684802245379262177316198881793776197529302248747486652157631285590101020446048502840525976000000000000000000", + "phase_boundary": "1035016992553917137471854647359187095903123385727134801860326186164075937568967533698816626453710681842022003431127639495686347467341335589525275305740363476024584372569505789869342567644243937144934253/801035016992553916838118740267705385119727336053043000501689911219315951251125162045771286158406936960449075852435463239776358755239505860449749497330431526257118020204089209700568105195200000000000000000", + "gamma_sublinear": "1/2000000000000000000", + "cell_above_band": "999999999999999998499353114379653801976175787332684134300170414966848124686443805487927530468046773721392946150995664399719327592227835475139775777975308837218906564168480296089301237372444243937144934253/2002587542481384792095296850669263462799318340132607501254224778048289878127812905114428215396017342401122689631088658099440896888098764651124373743326078815642795050510223024251420262988000000000000000000", + "prime_interval_packing": "646885620346198523824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "alpha_positive": "1293771240692396547001539714285533375834957398987884927282803990993063750350258045141638166055444921954290966539993449439776036277217800701962649638348245040304089423591808215011368866444243937144934253/1001293771240692396047648425334631731399659170066303750627112389024144939063906452557214107698008671200561344815544329049720448444049382325562186871663039407821397525255111512125710131494000000000000000000", + "alpha_below_one": "999999999999999999500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/1001293771240692396047648425334631731399659170066303750627112389024144939063906452557214107698008671200561344815544329049720448444049382325562186871663039407821397525255111512125710131494000000000000000000", + "alpha_below_one_fourth": "249029671569480702464910566619372399474079835117588052729495293265043171015626355094161888758446722878186045237346088812990336074735127780688584068277411606915045291890186069816416164007055756062855065747/1001293771240692396047648425334631731399659170066303750627112389024144939063906452557214107698008671200561344815544329049720448444049382325562186871663039407821397525255111512125710131494000000000000000000", + "delta_positive": "1/8000000000000000000", + "delta_below_one_eighth": "999999999999999999/8000000000000000000", + "short_record_fallback": "499352277457642180103986965339495862017824877775076610113504839792961070439444254169543946856169472562172608325627646129151483691006353976723361460133919431910717176643830591577575590301312274984420319548948006690496650740382558309310576298769697126975570145920887217849175975845086501771410126497965383371509928438906177749094509372531838754059692668009/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "small_field_exposure": "1/1000000000000000000", + "artificial_boundary": "28041400679702156679026690267569253998860566080123667617167085203872093675985675065367068854932137157253784195644431536391896367432896727992570652559291334538628001115658127499754820495690667268188565197241/4005175084962769584190593701338526925598636680265215002508449556096579756255625810228856430792034684802245379262177316198881793776197529302248747486652157631285590101020446048502840525976000000000000000000", + "literal_scalar_guard": "1", + "row_product_gap": "23971789/25", + "balanced_prefix_above_kappa": "328325953627432661865457528436752698772937116610655886733649269095422092627289849037550115905568618853837006112194522905497042075715725753030181622654688314780930474517793708940829274167/250323442810173099011912106333657932849914792516575937656778097256036234765976613139303526924502167800140336203886082262430112111012345581390546717915759851955349381313777878031427532873500000000000000000", + "coordinate_movement_above_kappa": "1671681250118050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_phase_layer_above_kappa": "156005021634519125707090844206189531846044648188159898153742343678771715722626471796493177962132902107393339816616881286133859929406760343279269809477856925651162186408031661818803482587/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747000000000000000000", + "bulk_exposure_above_kappa": "1671681250118050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gaussian_arithmetic_above_kappa": "2749980829937191599728199391651463851867845940604734811170607332966391134376871453207766585244076223659988735756251543863651552101328156234577438783317414516941393779146920562738993057937/4005175084962769584190593701338526925598636680265215002508449556096579756255625810228856430792034684802245379262177316198881793776197529302248747486652157631285590101020446048502840525976000000000000000000", + "scalar_work_above_kappa": "190102734896743055672939849692829092586686571229493692496993284440587240500187374332887792025603742642444457015493608078523697959577076835428072501065739733303367553186285743479616532837/160207003398510783367623748053541077023945467210608600100337982243863190250225032409154257231681387392089815170487092647955271751047901172089949899466086305251423604040817841940113621039040000000000000000", + "dimension_above_kappa": "249676557189826900816413847293774729015542735920176761116159019354619651967672655956118565702787681237409779701682536591406894001182177324106495357799965901074832241340910436749502941644293708940829274167/250323442810173099011912106333657932849914792516575937656778097256036234765976613139303526924502167800140336203886082262430112111012345581390546717915759851955349381313777878031427532873500000000000000000" + }, + "outer_controls": [ + "next_grid", + "zero_eta", + "zero_beta", + "unit_beta" + ], + "bootstrap": [ + { + "gap": "1624085710702836325603253935874684565791129/1000000000000000000000000000000000000000000000000", + "cutoff_log2": "13648490135237" + }, + { + "gap": "2101195384926800365389128994929144849307759285040396440979532867/1000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "8153979669381318223" + }, + { + "gap": "2718466160093883215629111956330221710135559631317918829161881740429979176073655094641/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "4871409495840953557301281" + }, + { + "gap": "3517073336724957052252504221757919104264874068636180662248130814141381010402035862874419716530794712536843/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "2910312686365818562284442554617" + }, + { + "gap": "4550288334460792931883187420255167536040046006059552198545729690980228135680376164970562431040750219572348800434771597533239689/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "1738700049678262863725514682107213916" + }, + { + "gap": "5887032183983476499868894301663202372625399579181465681344346601148823664680022001736302513815714953752156583582047581942126295501055756062855065747/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "1038746756289678251186163980016676335732915" + } + ], + "bit_template_sha256": "1fdf20d8296adbe299217a06f1eba496aece0472399d7f77bb9295a59b2820cf", + "complex_template_sha256": "23142d89d88dcc871c52034b4014fc98ddc76d9cce15621f88b9ec4fd0f198d6", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "emitted_program_sha256": "8a63de3a69f66a1d833addf92d8fa7ccfdc4c6692d096658786e234d1addc413", + "bank_assignments": 0, + "bit_profile": { + "1": 211200, + "2": 98367, + "3": 20416, + "4": 30728, + "5": 6336, + "6": 8256, + "7": 4192, + "8": 792, + "34": 1, + "56": 652 + }, + "parent_kappa": "1274032589159993/1000000000000000000", + "additional_interface": "Explicit paid two-sided residual adapters; distinct borrowed host families within every invocation; inherited Gaussian compiler and idle-data hosting", + "row_bound": { + "method": "successive nonzero-norm vectors in nondegenerate complements", + "minimum_q": 3, + "column_exponent": 3003, + "factor_two_power": 78, + "cover_exponent": 3081, + "physical_families": 9609, + "physical_exponent": 9, + "stock_exponent": 3090, + "halving_depth": 3, + "complete_row_coefficient": 19431, + "retained_row_coefficient": 20161 + }, + "row_controls": [ + "false two-level halving", + "understated row reserve" + ], + "halving_depth": 3, + "finite_controls": [ + "physical family prefix independently recomputed", + "three-level coefficient charged to next 64-bit block" + ] +} diff --git a/research/e8-r715-whole-hosted-validation/TARGET-LABELS.json b/research/e8-r715-whole-hosted-validation/TARGET-LABELS.json new file mode 100644 index 0000000000..432142312a --- /dev/null +++ b/research/e8-r715-whole-hosted-validation/TARGET-LABELS.json @@ -0,0 +1,26 @@ +{ + "status": "PASS_TARGET_COMMON_LABEL_LIFT_CONTROLS", + "target_additions": 112, + "preconditioners": 56, + "mix_additions": 56, + "actual_mixing_labels": 57, + "actual_address_matrix_dimension": 16, + "role_dependent_label_parameters": false, + "finite_control": { + "address_field": 3, + "bit_value_field": 2, + "address_dimension": 4, + "addresses_per_family": 81, + "scalar_columns": 162, + "frames": [ + "zero", + "coordinate", + "diagonal", + "full" + ], + "exact_shared_label_commutations": 648, + "unequal_label_columns_rejected": 54, + "first_bad_column": 82 + }, + "scope": "Exact current-frame binding on every new target operand; exact address involutions for its frame. The finite F3/F2 controls illustrate the general pullback-linearity proof and reject mismatched labels. All-size compilation remains inherited." +} diff --git a/research/e8-r715-whole-hosted/EXPECTED.json b/research/e8-r715-whole-hosted/EXPECTED.json new file mode 100644 index 0000000000..9486dcc21a --- /dev/null +++ b/research/e8-r715-whole-hosted/EXPECTED.json @@ -0,0 +1,186 @@ +{ + "status": "PASS_CONDITIONAL_R715_WHOLE_HOSTED", + "kappa": "646049779721139/500000000000000000", + "kappa_decimal": "0.001292099559442278", + "bit_lower": "323442810173099014031/250000000000000000000000", + "complex_lower": "1297203880559577927527/1000000000000000000000000", + "binding_component": "bit", + "gain_over_pr458_percent": 1.4180932604084393, + "bit": { + "live": 9600, + "physical": 9609, + "maxchild": 56, + "rank_mass": 745536, + "hosted_residuals": 62920, + "prefix_bits": 804, + "charged_prefix_bits": 832, + "coefficient_bits": 804, + "three_level_coefficient_bits": 2468, + "charged_three_level_coefficient_bits": 2496, + "row_coefficient": 19431 + }, + "complex": { + "live": 9600, + "physical": 10178, + "maxchild": 64, + "rank_mass": 851136, + "hosted_residuals": 49280, + "wrapper_events": 13904, + "charged_wrapper_groups": 788480, + "max_helpers_per_physical_family_per_call": 1, + "physical_stock_bits": 3929, + "router_bits": 11850, + "literal_bits": 37859, + "row_coefficient": 20161, + "row_bound": { + "status": "PASS_FRACTIONAL_DEPTH_ROW_RESERVE", + "block_steps": 9, + "block_halvings": 4, + "exact_shrink_inequality": [ + 350356403707485209, + 288230376151711744 + ], + "stock_bits": 3929, + "row_slope": "76005/4", + "additive_stock_charge": 35361, + "minimum_log2_width": 32, + "retained_row_coefficient": 20161, + "threshold_margin": "1751", + "coarse_three_level_row": 21948, + "finite_three_level_halving": [ + 704969, + 524288 + ] + }, + "row_controls": [ + "coarse three-level row exceeds reserve", + "nine steps do not guarantee five halvings", + "insufficient row cutoff" + ], + "local_bound": 18687781085682, + "pervertex": 1772686901993840, + "halving_depth": 3 + }, + "strict_outer_constraints": { + "bit_positive": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_above_bit": "3432639867181877291032183983476499868894301663202372625399579181465681344346601148823664680022001736302513815714953752156583582047581942126295501055756062855065747/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "complex_below_one_over32": "29952796119440422072473/1000000000000000000000000", + "beta_positive": "1/1000000000000000000", + "beta_below_one": "999999999999999999/1000000000000000000", + "leaf_saving_above_bit": "3432639867181875993828303423898572341894301663202372625399579181465681344346601148823664680022001736302513815714953752156583582047581942126295501055756062855065747/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_positive": "646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_internal": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_leaf": "1716319933590939290685392404345336406914966848124686443805487927530468046773721392946150995664399719327592227835475139775777975308837218906564168480296089301237372444243937144934253/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_positive": "646885620346198148824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "c_below_one": "499353114379653801851175787332684134300170414966848124686443805487927530468046773721392946150995664399719327592227835475139775777975308837218906564168480296089301237372444243937144934253/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "q_below_reservations": "1/4000000000000000000", + "lambda_above_tau": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_sigma": "3432639867181878584803424675872550104862117679725872756505277518263308718947021967357983335675400587478849135692952015854069766332628189969711919008174120728770245944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_above_internal": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "lambda_prime_above_lambda": "1293771240692396050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_leaf": "1716319933590939290685392404345336406914966848124686443805487927530468046773721392946150995664399719327592227835475139775777975308837218906564168480296089301237372444243937144934253/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_reservations": "1/4000000000000000000", + "lambda_prime_below_one": "646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "epsilon_positive": "499999999999999999500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "epsilon_below_one": "646885620346198523824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "guard_width": "646885620346198523824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "K_geometry": "375646885620346198148824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747000000000000000000", + "K_dominates_log": "646885620346198148177327046969667551005372365836009613726609478920594218397031766534584317051109321673618558767828924579551814252526637920869213806828541129605326796036052152156303119444243937144934253/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747000000000000000000", + "record_suffix": "646885620346198523824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "phase_local": "5175084962769587689946815718180727574812467597899136808619971063427880942069615716783961260081458523638325413172980598601121368425364777388523264627466468504496665188926344592141763348444243937144934253/4005175084962769584190593701338526925598636680265215002508449556096579756255625810228856430792034684802245379262177316198881793776197529302248747486652157631285590101020446048502840525976000000000000000000", + "phase_boundary": "1035016992553917137471854647359187095903123385727134801860326186164075937568967533698816626453710681842022003431127639495686347467341335589525275305740363476024584372569505789869342567644243937144934253/801035016992553916838118740267705385119727336053043000501689911219315951251125162045771286158406936960449075852435463239776358755239505860449749497330431526257118020204089209700568105195200000000000000000", + "gamma_sublinear": "1/2000000000000000000", + "cell_above_band": "999999999999999998499353114379653801976175787332684134300170414966848124686443805487927530468046773721392946150995664399719327592227835475139775777975308837218906564168480296089301237372444243937144934253/2002587542481384792095296850669263462799318340132607501254224778048289878127812905114428215396017342401122689631088658099440896888098764651124373743326078815642795050510223024251420262988000000000000000000", + "prime_interval_packing": "646885620346198523824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747", + "alpha_positive": "1293771240692396547001539714285533375834957398987884927282803990993063750350258045141638166055444921954290966539993449439776036277217800701962649638348245040304089423591808215011368866444243937144934253/1001293771240692396047648425334631731399659170066303750627112389024144939063906452557214107698008671200561344815544329049720448444049382325562186871663039407821397525255111512125710131494000000000000000000", + "alpha_below_one": "999999999999999999500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747/1001293771240692396047648425334631731399659170066303750627112389024144939063906452557214107698008671200561344815544329049720448444049382325562186871663039407821397525255111512125710131494000000000000000000", + "alpha_below_one_fourth": "249029671569480702464910566619372399474079835117588052729495293265043171015626355094161888758446722878186045237346088812990336074735127780688584068277411606915045291890186069816416164007055756062855065747/1001293771240692396047648425334631731399659170066303750627112389024144939063906452557214107698008671200561344815544329049720448444049382325562186871663039407821397525255111512125710131494000000000000000000", + "delta_positive": "1/8000000000000000000", + "delta_below_one_eighth": "999999999999999999/8000000000000000000", + "short_record_fallback": "499352277457642180103986965339495862017824877775076610113504839792961070439444254169543946856169472562172608325627646129151483691006353976723361460133919431910717176643830591577575590301312274984420319548948006690496650740382558309310576298769697126975570145920887217849175975845086501771410126497965383371509928438906177749094509372531838754059692668009/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "small_field_exposure": "1/1000000000000000000", + "artificial_boundary": "28041400679702156679026690267569253998860566080123667617167085203872093675985675065367068854932137157253784195644431536391896367432896727992570652559291334538628001115658127499754820495690667268188565197241/4005175084962769584190593701338526925598636680265215002508449556096579756255625810228856430792034684802245379262177316198881793776197529302248747486652157631285590101020446048502840525976000000000000000000", + "literal_scalar_guard": "1", + "row_product_gap": "23971789/25", + "balanced_prefix_above_kappa": "328325953627432661865457528436752698772937116610655886733649269095422092627289849037550115905568618853837006112194522905497042075715725753030181622654688314780930474517793708940829274167/250323442810173099011912106333657932849914792516575937656778097256036234765976613139303526924502167800140336203886082262430112111012345581390546717915759851955349381313777878031427532873500000000000000000", + "coordinate_movement_above_kappa": "1671681250118050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "compact_phase_layer_above_kappa": "156005021634519125707090844206189531846044648188159898153742343678771715722626471796493177962132902107393339816616881286133859929406760343279269809477856925651162186408031661818803482587/500646885620346198023824212667315865699829585033151875313556194512072469531953226278607053849004335600280672407772164524860224222024691162781093435831519703910698762627555756062855065747000000000000000000", + "bulk_exposure_above_kappa": "1671681250118050235967816016523500131105698336797627374600420818534318655653398851176335319977998263697486184285046247843416417952418057873704498944243937144934253/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "Gaussian_arithmetic_above_kappa": "2749980829937191599728199391651463851867845940604734811170607332966391134376871453207766585244076223659988735756251543863651552101328156234577438783317414516941393779146920562738993057937/4005175084962769584190593701338526925598636680265215002508449556096579756255625810228856430792034684802245379262177316198881793776197529302248747486652157631285590101020446048502840525976000000000000000000", + "scalar_work_above_kappa": "190102734896743055672939849692829092586686571229493692496993284440587240500187374332887792025603742642444457015493608078523697959577076835428072501065739733303367553186285743479616532837/160207003398510783367623748053541077023945467210608600100337982243863190250225032409154257231681387392089815170487092647955271751047901172089949899466086305251423604040817841940113621039040000000000000000", + "dimension_above_kappa": "249676557189826900816413847293774729015542735920176761116159019354619651967672655956118565702787681237409779701682536591406894001182177324106495357799965901074832241340910436749502941644293708940829274167/250323442810173099011912106333657932849914792516575937656778097256036234765976613139303526924502167800140336203886082262430112111012345581390546717915759851955349381313777878031427532873500000000000000000" + }, + "outer_controls": [ + "next_grid", + "zero_eta", + "zero_beta", + "unit_beta" + ], + "bootstrap": [ + { + "gap": "1624085710702836325603253935874684565791129/1000000000000000000000000000000000000000000000000", + "cutoff_log2": "13648490135237" + }, + { + "gap": "2101195384926800365389128994929144849307759285040396440979532867/1000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "8153979669381318223" + }, + { + "gap": "2718466160093883215629111956330221710135559631317918829161881740429979176073655094641/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "4871409495840953557301281" + }, + { + "gap": "3517073336724957052252504221757919104264874068636180662248130814141381010402035862874419716530794712536843/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "2910312686365818562284442554617" + }, + { + "gap": "4550288334460792931883187420255167536040046006059552198545729690980228135680376164970562431040750219572348800434771597533239689/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "1738700049678262863725514682107213916" + }, + { + "gap": "5887032183983476499868894301663202372625399579181465681344346601148823664680022001736302513815714953752156583582047581942126295501055756062855065747/1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "cutoff_log2": "1038746756289678251186163980016676335732915" + } + ], + "bit_template_sha256": "1fdf20d8296adbe299217a06f1eba496aece0472399d7f77bb9295a59b2820cf", + "complex_template_sha256": "23142d89d88dcc871c52034b4014fc98ddc76d9cce15621f88b9ec4fd0f198d6", + "complex_emitted_program_sha256": "b0b931df0bdb7070be6cd047b0175ee5c9ba410cb17d7256818439285d68fb1d", + "emitted_program_sha256": "8a63de3a69f66a1d833addf92d8fa7ccfdc4c6692d096658786e234d1addc413", + "bank_assignments": 0, + "bit_profile": { + "1": 211200, + "2": 98367, + "3": 20416, + "4": 30728, + "5": 6336, + "6": 8256, + "7": 4192, + "8": 792, + "34": 1, + "56": 652 + }, + "parent_kappa": "1274032589159993/1000000000000000000", + "additional_interface": "Explicit paid two-sided residual adapters; distinct borrowed host families within every invocation; inherited Gaussian compiler and idle-data hosting", + "row_bound": { + "method": "successive nonzero-norm vectors in nondegenerate complements", + "minimum_q": 3, + "column_exponent": 3003, + "factor_two_power": 78, + "cover_exponent": 3081, + "physical_families": 9609, + "physical_exponent": 9, + "stock_exponent": 3090, + "halving_depth": 3, + "complete_row_coefficient": 19431, + "retained_row_coefficient": 20161 + }, + "row_controls": [ + "false two-level halving", + "understated row reserve" + ], + "halving_depth": 3, + "finite_controls": [ + "physical family prefix independently recomputed", + "three-level coefficient charged to next 64-bit block" + ] +} diff --git a/research/e8-r715-whole-hosted/LICENSE b/research/e8-r715-whole-hosted/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/e8-r715-whole-hosted/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/e8-r715-whole-hosted/MANIFEST.json b/research/e8-r715-whole-hosted/MANIFEST.json new file mode 100644 index 0000000000..8b7cdc2d87 --- /dev/null +++ b/research/e8-r715-whole-hosted/MANIFEST.json @@ -0,0 +1,34 @@ +{ + "EXPECTED.json": "9e91920c50fa72d81916faa17feb19d57568a7bb107a55e0ba3af1025e42e062", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "NOTICE.md": "4c7933eb65436f2548b76146fc69922ab0712c9440e8a1a73eba72059a0f8a52", + "PROOF.md": "ada0204ab874c6368987324f19a689a4369302094cb071a48ef5e60578c24289", + "README.md": "40155c778daae3b84a500e53e38b56e8ad6d285dc19f2ae2333388215efbf82d", + "SOURCE.json": "2cf824cc4b13f3d4e0fc957f5a3bd337be82ad15cd6da6a7156944468dfd3498", + "code/assemble.py": "abb60c35e448e0f94073f38a0352d11249aaf7bb8dbd7352414ae60a1d2b79c3", + "code/audit.py": "d28062127a9b0d3866a3b79aad98a307233b20ebdb94cfb9f197d726b82ffea5", + "code/emit.py": "98d77cefbc3a76f9f10bd7df3a2590ab88b411f6afe77b5f8d73f1602eb2bef3", + "code/labels.py": "b1b570bc19bfd41a871e855baa8c692faa30be2e298915e976fc93b08e24fa2b", + "code/local_audit.py": "23eda3fe3d774e7f2dbf4dbdd4ff90d69ae7d1762ff95c8629cdc7667aa3fe71", + "code/rebuild.py": "4eb0917615776879ca4d9350e3346a221427d0c11c3ef7b837c6e8b0cc6b7a73", + "data/hosting.json": "765382d4fefd594e94c8c5826ec6300422ce9f79c816d7f7323ef85e99320f28", + "data/kernel-word.json.gz": "5bf551a95106ef187b6a7692a04a01cb87b0c5503782468ef12c89d911765b18", + "data/kernel.json": "8c1c9eaf14e2c33a1daaff26981c6fc470dad403f8e07725d795ae39474ae05d", + "data/mixed-word.json.gz": "fafcbe1f5379a208b1e20ef684f2320e2c7999294f52d980047803ff789b6146", + "data/mixing.json": "ccdaf957c605b54ad82cfe2e22912fa4b8cc7639405c4b9fa9aac240b87b78a6", + "data/pair-retiming.json": "614602393964b5d449ba0c7ca79fd65a43536a7af5cbcd1de4fe6daba87b1eeb", + "data/residual-isometries.json": "750221cc66badd0ed0a74e7aad2d59f91f89c107370af21c6d929fbdd4a08a9f", + "data/single-retiming.json": "09c5a175241e49d00795ba581c408da13e51d104bee18646c652d979a3adef94", + "data/word.json.gz": "b2af02f593cd161bea64e6cd793508386914136be519f80726c071697379d5a9", + "upstream462/NOTICE.md": "08f91d9e9f5b6d8f4c09464874955dee7097be8fd04e8f5107ca4bc5cb0c4dc9", + "upstream462/PROOF.md": "4fabe396c6a55af6d92a96db589c9f2d04fbc48664f23113b761ac49e1690519", + "upstream462/audit.py": "1ab56e7580c5a2e4eefbef5d2de952239ae4811f6273de6914184cd43727effa", + "upstream462/emit.py": "fb0694eb47596319fcb5ebfe6e6dc3311fd14fdad398c6f5f2d82dcbde6e7b0f", + "upstream463/R715_FP_final.json.gz": "29dd444ad58ed8659ba88e30689f3516466d62488f99819eedf0b81a6ee56931", + "upstream463/README.md": "0a2eae2ee4039fe01f74cdc32806d8ac765bdeef5bbe4f5596c53ba7a17de0a3", + "upstream463/mix_target_nochain.py": "21b164acf9538273656529e4bcf9319d9eb8fdbc411b6a5586f649830eb2ed9b", + "upstream467/NOTICE.md": "d19e6290faa39d02d522be9a92ab35eb5af1f55e169df2d66bf20068872e31d3", + "upstream467/retiming.json": "67f5fc943ba23dc372688731fac54efcdec493b62b852d577f9256677bec4875", + "upstream467/word.json": "87b7beb1d5a129d9b216b68e9f169c81dab6512f93deb85e8c5830a9dea5ba4b", + "verify.py": "a5967f73685de68047906373f3d0d08426715d64a699e75548d0ceeba8a66f14" +} diff --git a/research/e8-r715-whole-hosted/NOTICE.md b/research/e8-r715-whole-hosted/NOTICE.md new file mode 100644 index 0000000000..0e14a440c4 --- /dev/null +++ b/research/e8-r715-whole-hosted/NOTICE.md @@ -0,0 +1,28 @@ +# Attribution and assistance + +The source R715 carrier/XOR word is byte-identical to DreamingOfClouds PR463 +at 1b1de4833686bfa335509b21266afc44baef0fd2, prepared with Claude Opus 5.5 +through Claude Code. Its README and nonchained target-mixing generator are +retained under upstream463. This release validates the supplied word directly; +it does not claim an independent carrier construction or lower-bound proof. + +Whole-replica pooling and physical-family prefix accounting follow Rohan Arun +with OpenAI Codex in PR462 at 4fc07b29dfd8d9f924b60208b43f9a63c1c5b292. +The original emitter, independent audit, proof and notice are retained under +upstream462. PR467 at f92d6a7ffcf74553522e967c2600e30c05ffe938 supplies the +14 paired retimings; its actual word, complete retiming ledger and notice +are retained under upstream467. Every transferred gate is checked against +those original operands and old/new frames. + +The 109-pivot selection, its hosting-aware search, selected single-gate +retimings, eight-replica packing, exact reconstruction, changed global +emission/audit, finite composition and release verification were prepared +by chafreaky with OpenAI Codex. The construction uses the existing PR417/443 +shared-donor mechanism, PR440/441 retiming, PR450/454 target-label argument, +DaysSky's PR442 whole hosting and the PR458 paid complex supplier. No new +claim is made for those inherited mechanisms. + +The E8 unit and earlier exact geometry, compiler, bridge and assembly work +include Jacob Sussman, Dylan Crow, Zhihao Chen, eumemic, icekylinx, +DreamingOfClouds, DaysSky, Rohan Arun and other source-pinned contributors. +All parent notices and Apache-2.0 licenses remain in their original packages. diff --git a/research/e8-r715-whole-hosted/PROOF.md b/research/e8-r715-whole-hosted/PROOF.md new file mode 100644 index 0000000000..a593a5208f --- /dev/null +++ b/research/e8-r715-whole-hosted/PROOF.md @@ -0,0 +1,180 @@ +# Conditional R715 composition + +## Local word and exact reconstruction + +The starting artifact is the byte-pinned R715 word published in PR463. +Its discovery history is not used as a correctness oracle. A separate exact +replay verifies the 955 formal columns, restored helpers, source/target +boundaries, nested frames and integer source support. The final word is +also exported into the inherited records and checked by independently +compiled C++ legality and defining-decoder column programs. + +For each selected entrance E, the dirty target response of a pivot p is +the F2 sum of its selected donor responses. The entrance is nonzero, +root-spanned, and contained in the first frame of every participant. +Pivots and donors are disjoint; a donor serves one entrance; retained +centres are excluded. The unchanged shared-donor construction starts p at +E, removes its frame-zero completion reads, adds p into its donors at E, +and undoes those additions after cleanup at the full frame. The exact +response equalities and frame conditions are checked for all 109 pivots, +103 donor slots and total entrance rank 120. This is the inherited kernel +construction, with a new frozen selection rather than a new compiler rule. + +Next apply 56 receiver/donor target mixes. Receivers and donors are distinct +and disjoint. At the selected frame G, the two targets' helper-delivery +prefixes agree as F2 multisets. Add the donor target to the receiver at +frame zero, XOR their centre-scatter rows, omit the receiver's shared +prefix, and add the donor target at G. The two copies of the donor's +initial value, compensation and scatter cancel; precisely its shared +prefix remains. All dirty helper and target columns therefore retain their +required final values. The reconstruction checks these exact set identities, +frame inclusions and the complete intermediate word. + +Expand grouped additions into their primitive sequence without changing +order. Apply 60 frozen single-gate changes in A and 14 connected pairs +(28 gates) in B. The latter are bound to PR467's actual operands and old/new +root frames. Each moved gate remains between its participants' preceding +and following frames and contains its integer source-support lower bound. +Gate operands, coefficients and order do not change. Thus scalar semantics +are unchanged, and the exact nested frame realization remains legal. +The final word must equal the supplied frozen word in every field. + +The local paid histogram is + +``` +rank 1 2 3 4 5 6 8 +count 2396 1076 232 311 72 72 9 +``` + +All 955 local columns pass exact F2 replay, including arbitrary helper dirt. +The stronger integer source-support check also passes. Independent records +check 1,195 five-stage and 1,915 eleven-stage columns; omitted deliveries, +wrong frames, mispriced moves/copies, missing compensation and an eight-copy +build are rejected. Gram matrices are positive and nondegenerate on all +958 frames. The separate four mixing controls reject missing zero-frame, +scatter or mixed additions and an incorrect mixing frame. + +## Shared physical labels and residual routes + +For a frame F with orthogonal projector P, the inherited bit address map is + +``` +D_F = [[I-P, P], [P, I-P]]. +``` + +It is an involution over every admitted odd address field. Its pullback Λ_F +on F2-valued streams is independent of whether a register is called a source, +helper or target. For a common address bijection D, +Λ(f XOR g) = Λf XOR Λg. Consequently an addition commutes with a common +block-diagonal label. Induction through additions and frame changes gives +the common-frame realization, with the inherited COPY/ERASE semantics. +This is the same realization required by PR454; finite checks do not prove +the all-size compiler contract. + +The new label audit reads every record, verifies both operands' actual +current frames on all 112 target additions and reconstructs the 57 exact +16-by-16 address involutions involved. Its F3-address/F2-value controls +check 648 shared-label commutations and reject unequal labels on 54 columns. +The two fields have different roles and are not identified. + +All 11 helper entrance frames are coordinate subspaces. Stored root rows +divided by two form an exact orthonormal completion: the first rows span +the entrance, and the remaining rows its residual. A checked sequence of +at most seven swaps reduces each matrix to the identity. Extend by identity +in dimension 78 and move the residual coordinates to their assigned idle +slot. The full inherited 144-factor route overcharge is retained. Exact +projectors verify all 3,396 nested and reflected frame pairs. + +## Eleven stages and eight pooled replicas + +The unchanged geometry has K=5, L=11, m=78 and 120 ports. Each of eight +replicas has five source/target pairs. The integer ten-wire bridge/exchange +schedule is the identity; every local endpoint and bridge sees the same +complete level. Every one of the 24 omitted bridge shears is rejected. +The emitted unbanked scalar program separately checks all 9,065 columns, +including a distinct set of helpers for each of the eleven stages. +All 1,320 data routes are inherited from a freshly verified parent and +bound to the new word's identical ordered source labels. + +Pool the eight replicas when choosing idle host families. Every helper +occurrence has one physical family, one contiguous residual slot and its +original full residual width. A host can lie in a different replica, but +its pair is untouched by every local call or bridge throughout the required +window. All 62,920 occurrences are expanded and independently checked for +coverage, capacity, owner identity, slot disjointness and idle timing. +The four-replica whole-hosting construction of PR462 extends by changing +the finite replica index range; no new residual decomposition is used. + +The retained whole-call correlated-helper interface treats a complete local +call with its arbitrary dirty input and its full residual operator on each +owner. Idle coordinate factors have disjoint pending subspaces and commute; +the remaining idle child uses exactly the unused coordinates. Each residual +stays entirely on its owner. There is no conjugacy between one residual +and a direct sum on different physical families. The all-size hosting and +compiler realization remain explicit conditional interfaces. + +The resulting paid histogram is + +``` +rank 1 2 3 4 5 6 7 8 34 56 +count 211200 98367 20416 30728 6336 8256 4192 792 1 652 +``` + +Its rank mass is 745,536 and +78*9,600 - 745,536 = 3,264 = 8*(1,200 - 11*72). +There are 9,600 live and 9,609 physical families, no banks and no omitted +remainder children. The independent audit reconstructs the local streams, +owner map, schedule and all 1,726,296 renamed instructions. Twenty-two +mutations reject changes to ownership, windows, widths, replicas, stages, +operators, routes, counts and residual coverage. + +## Physical growth and finite accounting + +As in PR462, maintain a nonnegative cancellation-free row-L1 bound for every +physical family in chronological order. Initialize live bounds to one and +private work to zero. ADD updates B_dst by |c| B_src, including when the +logical owners alias. COPY copies the bound; erase resets private work. +Every bridge is included. Bit climbs and residual routes are address +permutations and do not increase this envelope. Updating a whole-family +bound overcharges a restricted-coordinate operation. This gives an +inductive bound within the retained cover/compiler interpretation, without +assuming independent borrowed contents. A separate traversal recomputes it. + +The maximum needs 804 bits, charged at 832. The complete finite coefficient +needs 804 bits and includes all 15,440 local additions per call, all 23,040 +bridge additions, 792 copy/erase episodes, 62,920 helper selectors, private +work, local compilers and paid children. Every helper route retains its +residual isometry charge plus the two hosting factors. The three-level +coefficient (C+1)^3(E+1)^3 needs 2,468 bits, charged at 2,496 in every bootstrap +cutoff. The old 192/1,024-bit allowances are not reused. + +Halving holds because 78^3 > 2*56^3. The uniform orthogonal-cover count from +PR445 gives stock exponent 3,090 and complete row coefficient 19,431, below +20,161. The complex supplier retains PR458's paid two-sided wrappers, +one-helper-per-family-per-invocation condition and 788,480 charged wrapper +groups. Its full phases, operator audit, moments and finite invoice are +freshly rebuilt in default mode. The complex row contract remains 20,161. +The common outer degree gap is therefore unchanged. + +## Rational assembly and scope + +Two independent rational moment engines certify the bit interval +[0.001293771240692396056124, 0.001293771240692396056125] +with the inherited bad-branch allowance and opposite strict endpoint signs. +The recomputed paid complex lower endpoint is +0.001297203880559577927527. The bit side binds. + +Using η=β=10^-18, six strict bootstrap steps with the enlarged finite cutoff, +and all 47 outer inequalities gives + +``` +κ = 646049779721139 / 500000000000000000 + = 0.001292099559442278. +``` + +The next 10^-18 grid point and zero-eta, zero-beta and unit-beta controls +are rejected. This is a conditional finite composition. No finite test here +discharges the inherited all-size realization, hosting, compiler, analytic, +common-grid/tape, restored-work, precision or row-divisor assumptions. +The kernel, retiming and packing are not claimed globally optimal. The +scoped architecture ceiling from PR458 still applies; κ=1 is not established. diff --git a/research/e8-r715-whole-hosted/README.md b/research/e8-r715-whole-hosted/README.md new file mode 100644 index 0000000000..a382bb42ed --- /dev/null +++ b/research/e8-r715-whole-hosted/README.md @@ -0,0 +1,60 @@ +# R715 kernel, target mixing and eight-replica whole hosting + +Conditional κ = **0.001292099559442278**, or +`646049779721139 / 500000000000000000`. +This is 1.4180932604% above PR458. The bit supplier binds: + +- bit c = `0.001293771240692396056124`; +- unchanged paid-adapter complex b = `0.001297203880559577927527`. + +Starting from PR463's published R715 word, this package reconstructs 109 +shared-donor pivots of total entrance rank 120, 56 disjoint target mixes, +60 single-gate frame changes and the 14 paired retimings from PR467. +A frozen selection pools eight replicas. All 62,920 helper occurrences stay +whole on one idle physical family; there are no helper banks or residual +splits across physical families. The live stock is 9,600, with 9,609 physical +families including the private-centre reserve. + +The larger physical-family growth bound is charged explicitly: 804 prefix +bits are charged at 832, and the 2,468-bit three-level coefficient at 2,496. +The complete bit row coefficient remains 19,431, below the retained 20,161 +contract. Both rational moment engines, six bootstrap steps, all 47 strict +outer inequalities and next-grid/invalid-parameter controls are mandatory. + +## Reproduce + +Install the unchanged `research/e8-r740-replica32/parent436/requirements.txt` +and a C++17 compiler with Boost headers, then run: + +```sh +E8_REPLAY_PHASES=1 python -B research/e8-r715-whole-hosted/verify.py /absolute/new/output +``` + +Set `BOOST_INCLUDE` if Boost is outside the compiler's include paths. +The default rebuilds the full corrected PR458 composition before all new +checks. `--quick` only skips the inherited PR443 exhaustive controls. +`--parent-output /absolute/completed/pr458-output` explicitly reuses a +completed, manifest-matching parent and emits a different receipt status; +it does not claim a fresh full parent replay. + +New checks include the exact frozen reconstruction; all 955 local columns; +independent C++ legality and 1,915 eleven-stage formal columns; record and +mixing mutants; 958 positive Gram frames; exact shared target labels; 11 +residual isometries; 3,396 nested/reflected projector pairs; all 9,065 unbanked +global columns; 1,320 data routes; every whole owner/window/slot/remainder; +1,726,296 renamed instructions; a separate physical-prefix traversal; +22 global mutations and 24 omitted-bridge controls. Source inventories, +package hashes and exact expected results are enforced. + +## Scope + +This remains conditional on the inherited bit/Gaussian compiler, +common-frame mutable-basis and target-label realization, whole-call +correlated-helper hosting, compressed-window, restored-work, common-grid +and tape, precision, row and analytic contracts. The paid two-sided complex +adapters from PR458 are retained and fully charged. No cross-family residual +factorization, unconditional multiplication theorem, new Lean theorem or +κ = 1 result is claimed. The selected kernel and pooling are not claimed +optimal. The two/four/eight-replica screen selected eight for its exact rate. + +See PROOF.md, SOURCE.json and NOTICE.md for the argument and attribution. diff --git a/research/e8-r715-whole-hosted/SOURCE.json b/research/e8-r715-whole-hosted/SOURCE.json new file mode 100644 index 0000000000..ad1ab9a9b1 --- /dev/null +++ b/research/e8-r715-whole-hosted/SOURCE.json @@ -0,0 +1,494 @@ +{ + "upstream443": "5a514e94f156edcc5fd827b87494d962f79d0f6c", + "upstream442": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "packages": { + "e8-r740-replica32": { + "commit": "5a514e94f156edcc5fd827b87494d962f79d0f6c", + "files": { + "PROOF.md": "380a5269e012cb7d54cdf13289b7187aa82c16d23ed1689c5986485398f5cdca", + "EXPECTED.json": "02f3fd3ac40f17f25822fa49d01ae6e84c2e02e2fafbf24f02845f24e02ec931", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "20b4bc7418b62a7126fc476b0e8757f713f09dbe03b430048e9f66326688ea88", + "verify.sh": "3720f542e9cf1ec35b052dec130b9cb6eefa37798f73ba5a4026b400c78d0697", + "README.md": "86030e96e06e0df02cc775ed1e41122854bc8dba2d1f90eb30b646436028ae5f", + "MANIFEST.json": "11f8fc7eb52127b078c1d29029ba71a2e1bd3340e9f4d76c92fae1e22511d550", + "NOTICE.md": "cb5bb6520addd9517672136c5519df4a2c06ed17b8afa1ce24e63855689c114d", + "parent436/MANIFEST.sha256": "7c6d4bd2ac74710d8a8a68fd637b31df9028a2376b569732374a739092c34310", + "parent436/EXPECTED.json": "a9655e303cb2c40ce024443b27c0a810ffc24f1ee1e5b07eb19241fad399b5e2", + "parent436/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/requirements.txt": "b9f87c1ec529679c19b8421a7a69b377b54b89949cfc5e1b1ed8c134bfab8917", + "parent436/SOURCE-pr381.json": "c457c422d54645ad841c8528bf2efa6c253d1c134ee86c875b9b7d76d4f9520c", + "parent436/SOURCE-pr417.json": "d9b7e606f09b840ed9fe10dc8c8250b4cab9bbe5d0cacb62864ca8366a28b2b1", + "parent436/SOURCE-pr426.json": "f884cc42793a3afd249ebee20985f61422e7b5baf7c1fcab5b990e1959f31697", + "parent436/SOURCE-pr386.json": "bba849ed0a1af4d45a76ec734d5f0d07806da2b161f1b5ad8ea63cf2d64b5aa4", + "parent436/verify.sh": "19bf483b109163b0ccc941f459e70c2e37d20c9c04e69e7c8eb98f329577b26c", + "parent436/SOURCE-pr431.json": "71cd86e64217fc4db0199ae8e5ef65cb0cc2ed593e15f03bc1501d4b32fdeb66", + "parent436/README.md": "d737a3b77de97bdf67d2a140465be5b8886af6aa57516f78ad8f2839f3dae8cc", + "parent436/SOURCE-pr370.json": "352a68f0898535311c63cac879a52b686246ba80844f1a3cc2f3c3f6b1046b4d", + "parent436/SOURCE-pr425.json": "a2c5e2f0e03b0dbcba4ca18282a4ff390a6a395f14411410cfff42d5281d0289", + "parent436/SOURCE-pr433.json": "f1181aa9f30dcc2e5df7e94738fa0c0cabe5f56b31c8eb843fa0a257da79ed91", + "parent436/SOURCE-pr376.json": "1608c15638f874243c3ad00bd6a08b30f0e9608de83002273819365ab300b0e7", + "parent436/NOTICE.md": "eb9cb7eab03977930484fee70d0aea066803917a6304b1ad2644cfcc6bf2acd4", + "code/iface386.py": "1b7c998513759195dee3e82a34c1a46dc3310236530a7f1dfbeefe00f108fc4f", + "code/config.py": "283d7fad45155ee91e704d63ec947cf4a60aeff5cc43510bc0e835f7da7d8767", + "code/global_kernel.py": "01cf4be0ab9affe48598062c4ae3610882aa77a9e18e75c4e596e2f08d8b2173", + "code/e8core.py": "1cb286196c1530d06f50f0997febc5993b388f33464e295611b920ba30a24eeb", + "code/replica_kernel.py": "780e08ad63983d0256271e8c7803c74bb1623d15cc202d98177c440ff3726aad", + "code/stages.py": "e73ab7836519510ed30dd7e3022dae557fa50fc513d723197929bff741859668", + "code/bank_routes.py": "7c6997c455bd55acca3a1603797c34e7733d557c27a7694a1429ff15773a505d", + "code/audit_kernel.py": "e49f9b499f98dc2938b10e32db28da3e4f38291dc345c0b5e7b906ca2b0cfb9c", + "code/export249.py": "6d9817f7c431573aff695e1eacfa7c2ca6d3a2a10baa3a2ea814ab9b9f7b13ab", + "code/compose_kernel.py": "010e081821f20bcf6e097306289031804b2609e5160dba1c743272126ef7472a", + "code/tile_m.py": "d6ae4a556472d403773cd2117c992bfc10e1187112da1b3893f3fae628a131dd", + "code/rebuild.py": "3efb6c81a247ac6d5cab87c47030a332292c2c46d482ff996588858f41cdad4d", + "data/word.json.gz": "d8d6d3d3f336720302bc40b3c1504fe3c3583a7a8d707bb9bd7b21f85e5e69c6", + "data/residual-isometries.json": "e12ed7ddd13cee101ba74a083b54665fd64d0b122b0bad5b83d817dcc8bae9d8", + "data/post-retiming.json": "d25a636bcebf97b46b01cd39259e8c4f59ab92a188f4cb4bd0b0b34936cf3b56", + "data/selection.json": "1a96e47f1889bc690316f95a3858b0062ce212ea876dd15e5123ed89d09a9c39", + "data/retiming.json": "f2b041a33577eebbf47f740ae1d7b94a68f2424de39df0c4ef075fad055c0793", + "data/upstream441/window-retime-selection.json": "170a2190b6bae36de3a18a8b4c1a152cebd95b839ae889da3049f9d9b0109e30", + "data/upstream441/pair-retime-selection.json": "201d8cbc8ac1df10ee74246815f3ce8507b94395af69835e8098a8274bca5651", + "code/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "code/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "code/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "parent436/discovery/README.md": "d840952ed60b4b460da83b04c4c8be3622b9bef04b62961c0d496c445f8b84d1", + "parent436/discovery/search_params.py": "57de04a8ea7e2df8b783e02c454bb102edab48206db0a41a1f28d50e7f164441", + "parent436/code/provenance.py": "e28fd87d0e34a6f6f6f1fddb6c4891deac220662c954de855d7aa5a7f9cceca4", + "parent436/data/complex-b-433.json": "161663bf22c8e6a62e2dce194b326016c11e551f31691140ef34355e9b2e4e92", + "parent436/data/complex-b-b4.json": "1bdd6a649615ddb6bf7cdf24abd7bb1bbd6cc9284e2aa44f796786310d3e1a3b", + "parent436/data/complex-b-nine.json": "2815ca568c88edde758c31e756d0d07aa08233243f365bc111383d7f0c1c757a", + "parent436/data/bit/bitE8-r740.json.gz": "f8daa4982d865748fa9a3095b2cf4290f34e2c085d6d35673fd7171cab95623c", + "parent436/data/bit/reuse-ledger.json": "e7bb324150a5342076c9a268f69b83c65f817a7cfc1d14fda9558a9f7e486f0b", + "parent436/data/bit/bitE8-r865.json.gz": "1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55", + "parent436/data/controls/pr426-bit-candidate.json.gz": "bd3b84244528767b85d8d7fe423b155630b5c659e21e51563674b1dcb6305ad7", + "parent436/data/controls/pr417-bitE8-nine-kernel.json.gz": "acc2b138ce16be1ff12570d3ec1634fe28cccaf259de797be0f62628fb37cccb", + "parent436/data/controls/LICENSE-pr426": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/data/params/params-r740.json": "871fc75ce6fea2638f68553bcfe771d09297e987d59c123338227e29415851d1", + "parent436/data/controls/pr386/COMBINED.json": "6043a7486790ac8ca04dc67ddf5b57076e7c880b66eb456127c6cd933c77764a", + "parent436/data/controls/pr386/AUDIT.json": "59625785de14c3df03abe009cdc67c7918b8fcfa8dc5f468c3d363af0494cbb7", + "parent436/data/controls/pr386/GLOBAL.json": "55af2a11552c04f5a87268bc2d1798246297874e9e87b50e49773e91cc495c2d", + "parent436/data/controls/pr433/CERTIFICATE.json": "f71580f22193726fb582eae604807ff70a7302265e001d9484a718e63bbe14c4", + "parent436/data/controls/pr376/LICENSE-pr376": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/data/controls/pr376/reuse-selection.json": "0b300bab47cf0d69cbc7965bf01c2a27c96b97677ee651334470d8c968b603f1", + "parent436/data/controls/pr376/frame-selection.json": "a83d4880579fb1f8cffb701d1d685c157b7fa14ef9d6642e42ff1e4f5a1b8c5c", + "parent436/data/controls/pr431/VALIDATION-LOCAL.json": "2b77c882ac524adbbacc9775ee172c854ecd4027e36db59ed15a7d1b6b9e1ce5", + "parent436/data/controls/pr425/FINAL.json": "46ea33ad1979cd14a2b686e8742792739312a07ab72945517c3809b647b31c42", + "parent436/code/reuse/controls.py": "89df84f78064de12cd11f0f5f63aa9cad2385f5d18d2e4ade7409a5ae0435721", + "parent436/code/reuse/ecost.py": "901c61f0a8082fc87012f91372aafbb2a1b464be685426e32e77cc9f0e393958", + "parent436/code/reuse/reuse.py": "b802483c024d23c92df30f1a2d93838280e39dfa0bd7129b879d6cc0b84c80a4", + "parent436/code/reuse/regen.py": "972740a54e487b12aebc09f2fab5f2878835727cb4ad82fb1aa26a0f2d34f517", + "parent436/code/reuse/retime.py": "d8530464a6e00e0a509cf8b392cae70579c8d0f636a0dc86677f5dee0863d34d", + "parent436/code/bit/mutate_records.py": "b0e75d6550412a7be4017695e6b237392b611bb852ad8ff309d6682c9f166a4e", + "parent436/code/bit/receipts_k.py": "67f714e10a846e9cc62996342f825cd715055031e0b12591abdafd225717e195", + "parent436/code/bit/export_records.py": "8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3", + "parent436/code/b4/kappa_b4.py": "cc47efc71334d7d41d6475c5dfc8080a278d3b694b335c6a9873dad4632d1f7e", + "parent436/code/nine/compose433.py": "27dd61574f1f6921238ff9f57c6fd536e6f0a0983138bc5c99aeb141d3ccc195", + "parent436/code/nine/certify_g.py": "97a5f7e9bf2202d170da17d5d17d876903641d7d24433115c27ea95b9fe65ccd", + "parent436/code/nine/audit_g.py": "48ac1d66a406ed72dd9192a19118776ba253f5c90e96185f5c1b98bb670a6361", + "parent436/code/nine/regress386.py": "bf97418a9aec7c3f55d04d4754e626f17f44aa2059ffd8acd7b315dcf9e89110", + "parent436/code/nine/global_word_g.py": "ff8d6be2432b79584dc2f2d2bdcd3cefede0d0730d1eecb0a6859dd527f5fce4", + "parent436/code/nine/geometry.py": "36eeda3184bd009e89462b65c8725d10860c444f8da8f1f87e5f6e50120011ca", + "parent436/code/nine/cited.py": "b6722d990fba39ef41b3d658326bdde97c25b749a454bda2509fdffeabd31a86", + "parent436/code/tail/bootstrap.py": "6811203fb7df1ac8a9eee3fbeca722de98dbc99077921fe77e0d452c760f0ffc", + "parent436/code/tail/e8core.py": "1cb286196c1530d06f50f0997febc5993b388f33464e295611b920ba30a24eeb", + "parent436/code/tail/apply376.py": "ac49a9a7da44a1e8fbf468c6d8901b5712705d3caa9dd3e0cb89f056f0e67b2a", + "parent436/code/pricing/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "parent436/code/pricing/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "parent436/code/pricing/prime_witnesses.py": "98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab", + "parent436/code/pricing/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "parent436/code/tail/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "parent436/code/tail/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "parent436/code/tail/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "parent436/code/complex/code/bridged.py": "5fe7174cd3a6580a74e4c1bf8fa7b426e8673f1c285603bf3076d4e758d70731", + "parent436/code/bit/producer/e8lib.py": "4f8a6843e83bc4f7055d7337f33dbe12ce499051f46bee1b81bbf6b34c652574", + "parent436/code/bit/producer/ham1.py": "359040fb432fd392472af6b8f5dca0234dd6c2be744a791df27ba62bc5da5175", + "parent436/code/bit/producer/params-r865.json": "1256c54debe0a551da8e24896ab73ef0bd4a5233ff8e6fedf21a9e6301d6e6f3", + "parent436/code/bit/producer/compile2.py": "0e23d4282ceb75768e82631da016aaff9818aec53c7d75a6b2a28ee1b1160dc3", + "parent436/code/bit/producer/frames.py": "ba71f77dd3e3c1c54f361c066cebe9faadbc78db46376046e7af625bf1de8c24", + "parent436/code/bit/producer/compile.py": "60fea6a9d6617a3f87376d3fda040642e9cb70e7c179015e03ede8d289f30357", + "parent436/code/bit/producer/fullword.py": "0daf87599e9e48646b985ad87351c56c1b73cfc99cdf9eca081483846ddbfa90", + "parent436/code/bit/producer/price.py": "46c858e60ba0a117bf8227b864abf55e85ebee2d56a0dce64472b706499ac405", + "parent436/code/bit/producer/ham2.py": "fdf0af785ce697bd7f80b4e75f7163735f3b599d9dc42f652f0ffdbdf18ea8bf", + "parent436/code/bit/checkers/gram_frames.py": "223a5a07731fc315a90a3e48177796babc155c1d9985c7ae5017eff6af2a0608", + "parent436/code/bit/checkers/tile_k.py": "64255088821f601ede2c3006f08cb97c39a4fa10dbbeb93a8a71fcfa0e1d8d77", + "parent436/code/bit/checkers/json.hpp": "aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63", + "parent436/code/bit/checkers/legality_h.cpp": "6c1ef2b24e57781d6951c172a1024fc4300e6fd392c9d6672079a7806ab663b3", + "parent436/code/bit/checkers/finite_k.py": "7e67dc75e63a11e38ac6d6615656c7cf6982e5a33dd404d04b967bf474cad02e", + "parent436/code/bit/checkers/certify_bit_k.py": "e68a81ef7981a90d613752003cd5cab5351e260f909b094f1668d8a4dfe480df", + "parent436/code/bit/checkers/columns_k.cpp": "1c344d18fcd494eeca93e259f10cafae7705780e6592f6dcb35b34752dab9bc2", + "parent436/code/bit/checkers/columns_h.cpp": "d1297f9052be4f2496e1ff2a77e4db2c0cdbd7d460d489b4c03e50bf317238ce", + "parent436/code/bit/checkers/cost.py": "d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f", + "parent436/code/bit/checkers/geometry_k.py": "646b7e8773d9c99376cb00627f109a97319e6d72b439ff513c39035c28c3f70f", + "parent436/code/bit/independent/mutate.py": "0ff65aace5da4b57d96235bf830f8f11969322e75134d498aeb70e9753ec6b0d", + "parent436/code/bit/independent/checkword.py": "11bf9620ca9db16d52d9fe806b814fc9ec9a89c4d7645354d1861d96f6e805ad", + "parent436/code/bit/regression/stage_cohort.py": "6c288f6f234b528c1a7c0a4adfb724e91e0fe6b18c8dffad96af3f973de1829a", + "parent436/portable-include/bits/stdc++.h": "420094be2af295eed03a983dd66debbbe9cfb78d8252859f4498a615a0074b99" + } + }, + "idle-axis-hosting": { + "commit": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "files": { + "PROOF.md": "cfe34bf0b64259661312dae22c3a23adc5bf6f6326951eee5c1488ccfc347542", + "audit.py": "38594423a401110bd430b734037c6ecba422ee6a94d71709984e0afa9cd1edf8", + "EXPECTED.json": "ed83c1bf1ca2d01eaab5149a34520806a07ef375dfa9e3ed69d123f4be4c9960", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "complex_hosted.py": "829c5c4f4bdfccedadd31505f1f0a394f7a208d1446b7bbf9cc92d3aa1530c0c", + "bit_hosted.py": "6dfbf26213e8adf87563b3575cfb722bd07ecd65627f056b3293411dd3d89a61", + "assemble.py": "f9a2e6a42aadcf971702a5a867760a092566ed03356f4f34387d38f4093ad1a6", + "README.md": "1151f74cad54ac4937282b7a8b5d1108ed4ce35944ef9b7bb7d17abfce1fe4a0", + "hosting_core.py": "d8b90cd5d152df3c7c351230863d9e61816ad5e1f21d69bea1a86a5daad559a3", + "MANIFEST.json": "f68b82604363329618529313ac9c3796dc1e88b176eaee4a7b0dec9be428e987", + "SELECTION.json": "315d54be472842707cce879618be477d8b897050e873bc136d114eec6a232f97", + "verify.py": "737a974d79fdd232b6c4b9e059c56835079971447342ed7ca3b82a614e30cb53", + "NOTICE.md": "027a868628d0408602dbeae688b031ed9b4abfd6e5401f6e8106a3eb25ebc4ca" + } + }, + "e8-early-reset-kernel": { + "commit": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "files": { + "PROOF.md": "fb4e1c3a23e3a0be48b5254133e584dad6fb523042ca8ef70358684fb9185962", + "EXPECTED.json": "6710a99055d7ee1d83d9f811822bb72db84f6ce95bd4e1e17f1df1659c7e958b", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "a5e84250b687624b2158597831fb36a5f2b068983862c491f8e1020c9806cc65", + "bit_global.py": "79c7dc84e65dca10c35c842cf170e4719d45c38a25d03bf762332b24c700b6c9", + "bit_audit.py": "203bb609952ad7b7ca761e9f9883ee9fa35a0a0474503b396d47a31169102e7d", + "README.md": "4d7d736eda667533ab55bf3949e30832d4676d7ebeee00d9608307ecc5aacd4b", + "VALIDATION.json": "77ad775cf69f5d913568b6276b0dfeb2eaef0306f57b71c0a467bff793807267", + "MANIFEST.json": "95a9570287b64d22de30e6ae3acf931d5f6daef1a163f0c99532e1a24639fbc2", + "SELECTION.json": "b5f5d8c78d912820c8ed1a67c21062bec799714b9caa6724dfd515306ad42a2b", + "bit_price.py": "36bf15803567a95b139a908461541bf19efe1f5b85fb31c270021833ab1393ee", + "verify.py": "16c07414bc956744dc93b8e35b642267ea9819be922b0d3e081c543fdbf92a70", + "NOTICE.md": "ff88b6031fe2fb5cbc483e8fcc08d228eaf2c982221adb3659da234dfa24cfeb", + "combined.py": "4d514b6c70e969ec306d8c2bb38edec95b0cb7fa09f48dadbec8aa1eead69ce1", + "source_span.py": "4772d177f37254c6f854af5ee3871aca193cfb24307a53c143c3bf517e56631e", + "apply.py": "0d530e9703e1d1734c7af205bd393cba89ac41f75ed9781ea3dc5e46650f44f5", + "local-evidence/ASSEMBLY.json": "7c3cc4b503e4cf0fd3e050be46ad0da183c5b1c490f4901245df944fd9d6194e", + "local-evidence/SOURCE-SPANS.log": "bdf95dbce8337be57aab8a3d3b42a711ee276496c40cbb4c5356fc9cc9b2e811", + "local-evidence/AUDIT.json": "76a146a9123d8b653e6e46ff93f153653f9cefd0f5c3fdd264a59f1322110262", + "local-evidence/FULL-PYTHON314.json": "85797531db037d06fb597a4c9b6ef6bd71e6a0ab4f220ae70b1b6bf3aeda205f", + "local-evidence/GLOBAL.json": "16c4e829eea1b2d12b70cec7e6a9c0e33ea0eae98a40894a3b779790fd2efbb3", + "local-evidence/BIT-PRICE.json": "9a4a320cab1ce62b0c2329ac1bf3b81f73580fd603a406e4bfaae2962dfdad35", + "local-evidence/FULL-PYTHON311.json": "62b37525bf7b60c0d9101ed571681f3bf46ea75df065939864307e4986018332", + "vendor/kernel417/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "vendor/kernel417/e8core.py": "3f4e25f700b7eb5821ab9cdfc65541f3f921baffeb8704beb21c6d7072052d29", + "vendor/kernel417/stages.py": "e73ab7836519510ed30dd7e3022dae557fa50fc513d723197929bff741859668", + "vendor/kernel417/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "vendor/kernel417/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "vendor/kernel417/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c" + } + }, + "e8-early-reset-reuse": { + "commit": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "files": { + "PROOF.md": "09388e2f9e6b8fcc626a5172d55c45a957835075c51c68d1e86fd42ff4655ae8", + "EXPECTED.json": "5521c7e995fec77941243b28e090f95f2188f193d5f61275275cfa11215eecc0", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "c52287239c43aece2b3533ef48ee204d845d652066bca716c288b0c47e779521", + "bit_global.py": "9c2178df133dc663416aac13d8c8da80a9e4f5f7174bb36413180fcbad994ffb", + "bit_audit.py": "219eb4dd8e5380fb0432daa6a30c265755a78834616b2c5fc7aa161feb0231ee", + "README.md": "442bf686c0b24b9d7781b7b138f32fddea5d4efffeddc6e41d04719d2545e0cd", + "replay.py": "e0782ba05dda36323500390349d1180f6117a9c6112b09b9e21e29f67c4e5f5f", + "VALIDATION.json": "bcb864a6b73d4ff4a24ab70ad51287653723c2115ce1c81db7817b81df2d9e92", + "MANIFEST.json": "4d23bafa43634a59e25f875333408b67cbecb1c912929824b5d45dea4de51da7", + "SELECTION.json": "9d47ade3fb69b3ef62a1a3ae75cebdddd57d144923977c5f2a07848ab596ea32", + "bit_price.py": "36bf15803567a95b139a908461541bf19efe1f5b85fb31c270021833ab1393ee", + "verify.py": "4e2082878acc1298f4354325b28f3cf047006170a9883148e7cf23002f6f02f1", + "NOTICE.md": "c4085541471fe63d8f735beacd397d356446376ad3e56b2673940a2df3b8437e", + "combined.py": "dc621dce9ac1634a2701318311b30dffee7cce7e0c6be7ae808f44b27eb17f0f", + "local-evidence/PYTHON311-GZIP-FAILURE.log": "ec1937c575536aeebe8f9c22d673fd66d1355ff870e2fdc80346205b29e42784", + "local-evidence/ASSEMBLY.json": "c9ce28f59a5e460d39a888bbbc464e3fd6dd1c0b2c54ae86baeeea99febc8176", + "local-evidence/FULL-PORTABLE-PYTHON311.json": "1dcca855b20cbac311a435f23f60001c342083edbef3194ba42a30e1f24c1982", + "local-evidence/PYTHON311-INITIAL-FAILURE.json": "7902e8ca1e167b98d1c29170f8d57c9896b38ccab89065e4ed4e2c3feea79076", + "local-evidence/BIT-AUDIT.json": "2e458c3936e42539095610a50c730266dddd96e94d1ead171a99dd5f1fe9ef47", + "local-evidence/BIT-GLOBAL.json": "39f89d1e5bf51e9b1f1155e123dc3226627e465a246d37bb00f55d44d20bcaa0", + "local-evidence/FULL-PYTHON314-INITIAL.json": "0966528d4b30459d8b35296f31dbadfa34cdc7792419b34ab2505b7098923325", + "local-evidence/FULL-PORTABLE-PYTHON314.json": "5687ed9209e11e64304d008a4a10678dc07cdc3522f5112c9a80557d45125c4a", + "local-evidence/BIT-PRICE.json": "96ec606146b5157871048e28f6649c31c1b6117d43be732e6a96bcc269c0e1b6", + "local-evidence/PARENT-FULL-REPLAY.json": "0ba447d6de6edd9fbe2371c36e3605dffa0c6526a874cfcb9bd19285c056bf1e", + "local-evidence/FAILED-LATE-RESET.json": "f6ed36b59de745d50f37fcb4c80d129d9a2de0dfe1fe3de2d18e678135f7d9b6", + "local-evidence/FAILED-INLINING.json": "95cbb0e6df953d25a888198c1072edf03db85b7c967a234680db3e095abd2dc7" + } + }, + "split-centres-global": { + "commit": "4e16d001d505d4f21dd2bcfc44591f9be4c279bd", + "files": { + "SOURCES.json": "11aa666d678fed084b01d1e8e47239e1674eaedbc6fe0cee7edb2753477af9be", + "PROOF.md": "6983e75f29af6eeaab20a30b08307ec6fab75ccb8b10291df8f9eb04d497f894", + "EXPECTED.json": "9b8e56eee3d5bdabd2e3e6e4ba0d9eba537525fba25a54126f9f0e41d2491a06", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "README.md": "b432292594adf2fcba2a8ddd87eda6167c76ff055e85aa5e3e2af7dd7e0f976e", + "CERTIFICATE.json": "f71580f22193726fb582eae604807ff70a7302265e001d9484a718e63bbe14c4", + "VALIDATION.json": "656d9bd7bd66058fdeb60cc90bd887e7ce75c0e0f9a100514e2bd84b95de89b6", + ".gitattributes": "2f9541c7c27f084baad73b4cd50ddaeb264cc3aa8dbf13ec21df5ab3f673ca7e", + "MANIFEST.json": "3129eb4321f706542470f8443f66a6b4351a12a9ceec85e7f76aa19db1e1e32f", + "verify.py": "12fcdb20a87f75812b09c4916fbfc86305982cb410247186a123b5c58d517b4c", + "NOTICE.md": "66101a9e74d0ba9c2da4c8802bcb1968534adfa7130b954628eb8bf515fc0389", + "proofs/PR386-BIT-GEOMETRY.txt": "c5f077b849e9add9957ab4ee36095dd47bc678dee7e09baa146dac4c0a0d66b2", + "proofs/INHERITED-COMPLEX-GEOMETRY.txt": "c1ff55536594222a8d2a30bc0e0956959774e1be2d5420b7838ad553ee556df2", + "proofs/PR426.md": "5787738ceb6faf14d3d96e8452592860a6c6a469733a9bcf196e8d1562ba1ffb", + "proofs/PR425-COMPLEX.txt": "2cda27b9b9a1eb24127c38c2c7a6e085155a2472183e220189a3ea2c2b7720dc", + "code/complex_emit.py": "f56d5f01f7c121741f175814138dca7190d769920f0a27e2d5b99c21aebed0f1", + "code/complex_phases_full.py": "0f2795aaffafe0c64d77f3748ef2109a3c42c58da867e4cf269a0a8cb6109466", + "code/bit_global.py": "3b2cb3ba21e5cf9b4deddb9e606322f33e9d8082020c0ee9092c21f4ebd9ad48", + "code/bit_audit.py": "7fdbc077b7501a53662769ff2bf2ab44cc2e32dafc34478d7ef2c10e3144503a", + "code/complex_construct.py": "0f7f45b2333ec7daf4291e2bf675b49bc330b97fb5965dd27220ba353c291d6f", + "code/bit_construct.py": "a461e6c983531beb5c8ac82ff593f39ce4e056387d1d6061f6e6b294dde4395f", + "code/complex_audit.py": "adeba5ea113652b60105db2e8719b18ffa292d3cc23730cca614b40272348330", + "code/bit_price.py": "36bf15803567a95b139a908461541bf19efe1f5b85fb31c270021833ab1393ee", + "code/complex_integrate.py": "3792f41e409383e6989bda22801a4836a646a530f99e99bbd7244a8f3a1a8b4f", + "code/complex_phases.py": "13a959c52092776ae217df554b51c0298fa9eb3a350279acff6dece651c3f9cc", + "code/combined.py": "9c5bc70f2331b7342ceb252adcddb993581c45f80c37bcc58642dbad3b9775c2", + "code/complex_replay.py": "be2dccce2d1ad2c4f5c01a851c9c3896cc88236b5aeae706aad2ab16d6bfdad9", + "notices/PR426.md": "6a5593d0f284a2f0865037f5c5fa9e5f76f9e12cf50ec5284486d3b8137c89da", + "notices/PR426-SOURCE-PINS.json": "18ace817f2f9af22511bb303e99656ed114e534b87f3dd95a65ca4ca670baf2f", + "notices/NOTICE-PR352.md": "967e6d7e76e216e4898cf543c75b527e8d397ec1ddba3800cb20701f24c89524", + "notices/PR386.txt": "ae2241615a23063b18a04f1b7a88a52e62b3d7d42e333fbd21e3668567ab83d1", + "notices/SUSSMAN-NOTICE": "9419dd03a2f52cf8bdfc4d18216ce29f263ab583b27f01ced8e420985bcb7c81", + "notices/NOTICE.md": "025773f32fb43667395e64c627a1752877bdc93afbfe01b106703eee438d21d3", + "vendor/clifford_exact.py": "2982ead07721e83358dc67c6f49c2b4c16a236a6bebdfd72f58221be1f5d0962", + "vendor/export_records.py": "8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3", + "vendor/hamming_packets.py": "daa9301e2767a711cfe66c6bebaad68e1a3bdb97ec9e848c927527ab43b37ae5", + "inputs/bit-geometry.json.gz": "5c980202227859e8bb9b863f94503930c2a59d460c0421356688e2b0d828b4a1", + "inputs/complex-template.json.gz": "1b84904a31a733aab9bfdda3f528c06719f590d2133a43687a8bded955dc991e", + "inputs/e8-r865.json.gz": "1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55", + "inputs/complex-phase-receipt.json": "01763fee5017745de982f2ff5ee68004e815d6684097cc88011dfbfb1e789581", + "inputs/bit-r767.json.gz": "bd3b84244528767b85d8d7fe423b155630b5c659e21e51563674b1dcb6305ad7", + "inputs/complex-ports.json.gz": "77b0c0fa19ef3da1c7316010e13493aa5eea1a50c3506eddc08f7480e659878b", + "inputs/complex-phase-recipes.json.gz": "b5472bb1d3f9ff41b0819780a42886a7686b4caf3c0617bb1dc86158b3fb8671", + "inputs/complex-data-phases.json.gz": "c972b5b60649c2a52354f5160f69adc0f4a270fa09d32012beff9888774ab84f", + "vendor/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "vendor/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "vendor/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c" + } + }, + "r740-idle-hosted-replicas": { + "commit": "8c4242ea61c67827fe62b07b2edc093d7ddfa631", + "files": { + "PROOF.md": "8757a118f5521c46b9d271a91acdee6cd517dc0082cfeba8d638161df5b7ff9b", + "EXPECTED.json": "b1bfb2e2be69bd56efcc8436cca367dd9647b3144547a1b4eee4066ce46d0763", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "a7b3296796d1803eca966f3adf3bc99da5a53b60c321c077663f72687bb3afeb", + "README.md": "76b018c2aaf43934f84a0db641a13552023ede87cb3cbfe2388078e9d3fa6e27", + "MANIFEST.json": "bf48d4222cef9988f1051562df890c48d5c6f5c694efe9eb15c36b3197130515", + "verify.py": "357aaa68588b79f0fed00efb221fef2ce48ea2399752d1101c74ca6e9de85fa2", + "NOTICE.md": "15f8199a97de6c409e08aac13471307f10575c8590cd881f6423d4013788d6be", + "code/audit.py": "e770305d5b23967bf0fcd3757c9b04587b28931ae1ed30e9bc9e6f53d5e86218", + "code/assemble.py": "47df60e607f72c7b247f9ed7b6be30ca457a92003ac36ead76d6802561f3527d", + "code/emit.py": "29d8a75b4bb934485090688287ef7f26e5e29796bdc3fe162ed9c0b9badfa3fe", + "data/selection.json": "8510b140456e244be5d5f197372d97fd03c634967db487745b7f4be0a5bf83d1" + } + }, + "r740-hosted-eleven": { + "commit": "40ab91daf2b5e87fc4071dedae1699d5d7e7cecc", + "files": { + "PROOF.md": "4aede2a05d9570cc5d8a19032513c973137ee9083f079ae845b04f3f362e2ca0", + "EXPECTED.json": "1a2e35da8c586be03201a8d102c72f681b0b6698bbcb3a2ea286d8b0d9c0c1e4", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "976eebfec20d467f3384194fc03bd6f5b289a615e3b2deb70a7be910aaee8579", + "README.md": "15e76f8a2200af0f871b04d410ebd7fac059b800b5ec4a1f376a333c9f5638bf", + "MANIFEST.json": "4d53297535ffb17603f916fa59cdc4b7f941c3166fe9f8e576f9588fd2fb79a6", + "verify.py": "4a161d35c65fa1d35e655c3957c05a8164a003ca05c3effe9fee7dc8d0f38090", + "NOTICE.md": "b80411c1db53d12bf43d6cbb8bf2804102f2e57be2a2f55dd7820c6c2f2b9570", + "proof/UPSTREAM-PR234-NOTICE.md": "ce978c8dfc8a2b36eed7a53014b1a792248b22ef4cee3edd8adab825a571c429", + "proof/INHERITED-ROW-DIVISOR.tex": "6ad97a5cd7d6aecf978a81226e1c2763d37840caca130c61f3bf5c4ac111c5c8", + "code/audit.py": "9900a1b2f1f314f2b93ca8f99b5516ed2e1a7295d668ea51df2df89cef84e381", + "code/assemble.py": "42dbfaddd284088474a80f0b6e894332b6737b8e9f9b5c45260e21c5df139792", + "code/geometry.py": "9554182d67e434ea84b4430f909a2c400abc755d8487b51454a8e6968e62859d", + "code/emit.py": "ac63ee481f3d75cb9f0658faaa2412db81d55bc44d9f1ff1c0329ce1e75aa0d4", + "code/row_bound.py": "de4a9b9cd797e1a05da56f62cfe725c8728cea3a4aa031b7d1b0a68f869760d6", + "data/selection.json": "52dbbb68e8c147690d15eaa1d952df05d074b0c121885a4159d9f6732f391872" + } + }, + "r740-hosted-rank149": { + "commit": "f3a38153678b55063fc005901cc968266166507d", + "files": { + "PROOF.md": "78c291727cfcf5ee598a5119f1fc3a27f9e07c4bf9d7fc66c9d5fbca2e966aeb", + "EXPECTED.json": "ce9aada22438fa609a5b66dc9a8674dca4fecedfe9768708679d3945f433528e", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "e9aa01762c3ef08b97df664a1f8d1d47c0075b661df0f1f136612776bee98628", + "README.md": "99d3ac21b980c5e56a341c3040f7892ec26772cf2ea88c725c296875db93613a", + "MANIFEST.json": "79e7f24adc51d8b48cb9defe4d7a55035c00d29c81f9188853fce108361062f8", + "verify.py": "d8b76f61ee9002ff55890a3f05d6098bce6ff3cc9d1bd58e82ad243048f4e201", + "NOTICE.md": "2a8fab92450dda396139d23c3d641e378b17c4a472b7c8c684caf58ccc2759b2", + "code/audit.py": "837e91985e8a15c7d9cad5f3d6cbdebafc5cb899562bff1d11b61fcdaf77f99f", + "code/complex_emit.py": "1b635008cd5ea3ef9f08a878857a4560e9123fd0bca1e4607048fcda0e278e84", + "code/complex_rows.py": "382578f17ddd1b82edaf98f7276c905af15bf7b28f5a00eb1644f7bcdbba70cc", + "code/local_audit.py": "fe52247472e710bc58880df92c85e188a10bb15d912ecc720597feccbe818f6c", + "code/assemble.py": "83f9c1bf9c707e404d3705ead330fabadf0af0c589b63f4c8a8868c200c51349", + "code/geometry.py": "eee458c6892d952d221dd9a60cd8bed1a646eca361c7d43f9c1ea19172bdf738", + "code/complex_audit.py": "403f95ed28025e552f33d54a5e61da24714bcb757f12a75f66012999c7f37896", + "code/hosted_kernel.py": "6f932cdb1260239d8f550cf7f9fc1a6a5872a44eca5e5b0c6de81de3c563bebf", + "code/emit.py": "ac63ee481f3d75cb9f0658faaa2412db81d55bc44d9f1ff1c0329ce1e75aa0d4", + "code/row_bound.py": "de4a9b9cd797e1a05da56f62cfe725c8728cea3a4aa031b7d1b0a68f869760d6", + "code/complex_phases.py": "4339fde687c041c381d01bc81e90a2abec0092c51920eb02166aaf628a7f25a2", + "code/rebuild.py": "4899984fc63971aaabb742d60457d7057325e67a54a909c54ce10aba96a47a5b", + "upstream377/data_phases.py": "671d6f8144c6d31e1766c6a0e144172da661a63f86b3d4d17fe2710f3ef752c4", + "data/word.json.gz": "41626789888ee070e1b435fa380b10ab9b88e3cf7d8d8e166ecef17269bbcf47", + "data/kernel.json": "afe2b65a3f9bbe04595b4cc50b902b9b556b0cd03e59c1cd949b4fbd7679c0a7", + "data/residual-isometries.json": "b23fda74a7979179e8fd83ee9870c1e232442cc90c05077adaabfe31d050d1e4", + "data/complex-selection.json": "ebd16be92d59c7199dfe090d720ed7ce3d4d83262fcefa28709235d45fb56536", + "data/selection.json": "4d9c2cf6a3d31a6faa287731e0721cb16601b0bc5c1a186b9645bfb5760ce8db" + } + }, + "e8-target-mixing-whole": { + "commit": "d14eb0dd425bd681e3b43f208d089e679d600176", + "files": { + "PROOF.md": "5147c687fec7bfc6ebc730fda1a30c7c843dc4326bd131f799cd88d5a8353124", + "EXPECTED.json": "ad2dea247e4e1fd3b91f2dabec9b8a6b813e85b4b2f1a122404f5acb0b2f89ef", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "d98ac9478b88b51fe025d16d2a5a33c84b8cadab4e11546fbffef05b5aaa0f6b", + "README.md": "3bdad32529feb14dc29735a478199ae06d3936def7ea78b4506391db94740ee9", + "MANIFEST.json": "57a986e2df51ef6cb1ae6486d599bde7f8e822df6b22c3463e1b37aa5ef74ae4", + "verify.py": "c99894e87e8531e3927012f93409a1901b59362f140b64354f338e182c5275fd", + "NOTICE.md": "18686ca9f8fa4a5d302eb5d346012200c7d473828d3fc68068de87ae972ce332", + "upstream450/mix_check.py": "8ca68056025e61aa1229cd169b5d30c02094d67c9deb0b7f1a3084ad314497e1", + "upstream450/mix_target.py": "6e9f0b1aa73c4f7a937ae3a0732556e1b3275f10c863f79ce3db9c7749df986c", + "upstream450/BIT-LABEL-LEMMA.md": "c84d1aef0b8769b7a4222ec93f40d6c1f88856497e36c487170ea63ef5cc3c98", + "code/labels.py": "bc9628ddf7a8aa913d15372755b7cde69709fc178e3ab48038cc518f9df64753", + "code/assemble.py": "ef710106296ccf0afe58cf4cc99da498d2c82022845315780a8a50961e61b09e", + "code/rebuild.py": "631d0a96aff0768f75b5d73a335a2654410cc74c91f3c5aaf4c94c1ae3f99f5d", + "data/word.json.gz": "409271ca43be8494ea29d969e0aa5ac8336fb2e074c42a30bdcdb3f9755e91a0", + "data/selection.json": "d4cef560b4019df1e98e3fe643154521585f0f0378959930732e66aaa84d5efa" + } + }, + "e8-complex-adapted-kernel": { + "commit": "44e9eae8287951c1e6dbbd3c553f5743fe2240b0", + "files": { + "PROOF.md": "8aed82d7ac3f917976b8f3e72ce1bd124e2f95322f4b666c37025c88b95de4be", + "EXPECTED.json": "a4312cb0c53c2066a28b683a971a41e7d76c5f6d828a96481c3ae7b3c01bb2f3", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "SOURCE.json": "db4995de0050e5d8222d3d2c7bc2c4c59c7c9e69fe2495d80c711bbd15347ce4", + "README.md": "d0cea560d1c2055caf47c2cbe7f840b757cfece384691dc52d22dec3c6f77d25", + "MANIFEST.json": "8378e54cba9d89d355c2d5d0a11349369e050324eff11964fb2856c6daf6921b", + "verify.py": "e469d30bd603654302579b0b9fbfa528f694252479f860d8f45d9cec5a44055f", + "NOTICE.md": "099bb7b9802689dc9e54ad5033a8af33133708c111b666a1ac17fa4c2fabbfdc", + "code/audit.py": "2dd35e3d583ae27004d1ff53fd0f96e0f2f10dae3b5376dc8bb6aebeafe9f349", + "code/local_audit.py": "ae5baeaaeea26cf0a1faa59fbc18a8ad4805f5a8f2eba9644abf44f82c74845d", + "code/assemble.py": "eb72118930262057fccd85216f683112dfd4f84be192cc82b34e5708cd1feb05", + "code/check_metadata.py": "f36600aa4d44a0694a567f450c5b7a944c940496ca9a4958083aa9d5f5d7392d", + "code/emit.py": "b5170f68223c910ae806255ee1975b33801df3a729da0d6c2ba50ae96ec0c911", + "code/rebuild.py": "da5b22a63074f8da43b2aefd489049a3a4622518f19d72654ea82d091243a0f7", + "code/adapters.py": "001b80a9366e29f28f3785e146062e12b1913e5da79b5e6d6b7090c6425d7015", + "data/hosting.json": "dc5fe719e71c26e856f0da96518af635ed2026b1c323052d97ee4e6b9839f2f1", + "data/word.json.gz": "2e13b2dd1e1b0dfa341dbd57b91ee1758ad041cd5ce2e734bf2f9fd0bac155cb", + "data/kernel.json": "91aa509f2542c89928c7f31209bd010ea322f643bd7ca65ac0e449850eb5ada6", + "upstream449/audit_cxg.py": "12e8fe32136a0f32e5363f97113cf0c32efda6a331dc391758cd58ed8f5f9d1b", + "upstream449/PROOF.md": "070d44b14efd5b62f44cb8eb6be35fb19090e6dce88f1a1768789d31b53241a5", + "upstream449/emit_cxg.py": "26c646d5a777c1306224abb08d4031b3b1ffcbed8a212a0e58579de13b0ee658", + "upstream449/phases_cxg.py": "0f2795aaffafe0c64d77f3748ef2109a3c42c58da867e4cf269a0a8cb6109466", + "upstream449/NOTICE.md": "4c111ede74aa51bb9c50b6093817aa3a9eecc5eeb3444867926e2998e322b1bb" + } + } + }, + "parent444": "8c4242ea61c67827fe62b07b2edc093d7ddfa631", + "inherited_row_proof": { + "INHERITED-ROW-DIVISOR.tex": { + "repository_path": "research/five-stage-source527-banks/proof/three-stage-cover-rows.tex", + "snapshot_commit": "8c4242ea61c67827fe62b07b2edc093d7ddfa631", + "sha256": "6ad97a5cd7d6aecf978a81226e1c2763d37840caca130c61f3bf5c4ac111c5c8", + "git_blob": "590da4b892a08b9d5182fb3d8a983c6239dd27db" + }, + "UPSTREAM-PR234-NOTICE.md": { + "repository_path": "research/five-stage-source527-banks/UPSTREAM-PR234-NOTICE.md", + "snapshot_commit": "8c4242ea61c67827fe62b07b2edc093d7ddfa631", + "sha256": "ce978c8dfc8a2b36eed7a53014b1a792248b22ef4cee3edd8adab825a571c429", + "git_blob": "5f8fbb25c12781420284bc220a041592619e27c0" + } + }, + "upstream445": "40ab91daf2b5e87fc4071dedae1699d5d7e7cecc", + "upstream377": { + "commit": "d0a620fcc99ba012468d61d01f5bb14007076d50", + "path": "research/nine-stage-complex-e8/work/odd-stages/data_phases.py", + "vendored": "upstream377/data_phases.py", + "sha256": "671d6f8144c6d31e1766c6a0e144172da661a63f86b3d4d17fe2710f3ef752c4" + }, + "comparison447": { + "commit": "d3cf3079091bb7e93a23e9cd98e82ccb89697328", + "kappa": "1265848755025709/1000000000000000000", + "dependency": false + }, + "upstream451": "f3a38153678b55063fc005901cc968266166507d", + "target_mixing": { + "upstream_pr": 450, + "commit": "6faca41020a620689de013cdab9f61a22deca314", + "files": { + "mix_check.py": "8ca68056025e61aa1229cd169b5d30c02094d67c9deb0b7f1a3084ad314497e1", + "mix_target.py": "6e9f0b1aa73c4f7a937ae3a0732556e1b3275f10c863f79ce3db9c7749df986c", + "BIT-LABEL-LEMMA.md": "c84d1aef0b8769b7a4222ec93f40d6c1f88856497e36c487170ea63ef5cc3c98" + }, + "scope": "Only target mixing; the cross-copy hosting construction is not used." + }, + "upstream454": "d14eb0dd425bd681e3b43f208d089e679d600176", + "complex_kernel": { + "upstream_pr": 449, + "commit": "7fac5292693bf738ff5eed6ec754f8ec22ebcf8e", + "files": { + "audit_cxg.py": "12e8fe32136a0f32e5363f97113cf0c32efda6a331dc391758cd58ed8f5f9d1b", + "PROOF.md": "070d44b14efd5b62f44cb8eb6be35fb19090e6dce88f1a1768789d31b53241a5", + "emit_cxg.py": "26c646d5a777c1306224abb08d4031b3b1ffcbed8a212a0e58579de13b0ee658", + "phases_cxg.py": "0f2795aaffafe0c64d77f3748ef2109a3c42c58da867e4cf269a0a8cb6109466", + "NOTICE.md": "4c111ede74aa51bb9c50b6093817aa3a9eecc5eeb3444867926e2998e322b1bb" + }, + "selection_sha256": "91aa509f2542c89928c7f31209bd010ea322f643bd7ca65ac0e449850eb5ada6", + "frozen_word_sha256": "2e13b2dd1e1b0dfa341dbd57b91ee1758ad041cd5ce2e734bf2f9fd0bac155cb", + "scope": "Kernel only. New paid two-sided residual adapters and distinct-host construction; original gauge construction not used." + }, + "parent_pr458": "44e9eae8287951c1e6dbbd3c553f5743fe2240b0", + "direct_upstreams": { + "upstream463": { + "commit": "1b1de4833686bfa335509b21266afc44baef0fd2", + "files": { + "R715_FP_final.json.gz": { + "source_path": "research/e8-carrier-rekid-r715/data/R715_FP_final.json.gz", + "sha256": "29dd444ad58ed8659ba88e30689f3516466d62488f99819eedf0b81a6ee56931" + }, + "README.md": { + "source_path": "research/e8-carrier-rekid-r715/README.md", + "sha256": "0a2eae2ee4039fe01f74cdc32806d8ac765bdeef5bbe4f5596c53ba7a17de0a3" + }, + "mix_target_nochain.py": { + "source_path": "research/e8-carrier-rekid-r715/code/rekid/mix_target_nochain.py", + "sha256": "21b164acf9538273656529e4bcf9319d9eb8fdbc411b6a5586f649830eb2ed9b" + } + } + }, + "upstream462": { + "commit": "4fc07b29dfd8d9f924b60208b43f9a63c1c5b292", + "files": { + "emit.py": { + "source_path": "research/bit-whole-pool4/code/emit.py", + "sha256": "fb0694eb47596319fcb5ebfe6e6dc3311fd14fdad398c6f5f2d82dcbde6e7b0f" + }, + "audit.py": { + "source_path": "research/bit-whole-pool4/code/audit.py", + "sha256": "1ab56e7580c5a2e4eefbef5d2de952239ae4811f6273de6914184cd43727effa" + }, + "PROOF.md": { + "source_path": "research/bit-whole-pool4/PROOF.md", + "sha256": "4fabe396c6a55af6d92a96db589c9f2d04fbc48664f23113b761ac49e1690519" + }, + "NOTICE.md": { + "source_path": "research/bit-whole-pool4/NOTICE.md", + "sha256": "08f91d9e9f5b6d8f4c09464874955dee7097be8fd04e8f5107ca4bc5cb0c4dc9" + } + } + }, + "upstream467": { + "commit": "f92d6a7ffcf74553522e967c2600e30c05ffe938", + "files": { + "retiming.json": { + "source_path": "research/r715-kernel-pool/data/retiming.json", + "sha256": "67f5fc943ba23dc372688731fac54efcdec493b62b852d577f9256677bec4875" + }, + "word.json": { + "source_path": "research/r715-kernel-pool/data/word.json", + "sha256": "87b7beb1d5a129d9b216b68e9f169c81dab6512f93deb85e8c5830a9dea5ba4b" + }, + "NOTICE.md": { + "source_path": "research/r715-kernel-pool/NOTICE.md", + "sha256": "d19e6290faa39d02d522be9a92ab35eb5af1f55e169df2d66bf20068872e31d3" + } + } + } + } +} diff --git a/research/e8-r715-whole-hosted/code/assemble.py b/research/e8-r715-whole-hosted/code/assemble.py new file mode 100644 index 0000000000..cd60b4bcfa --- /dev/null +++ b/research/e8-r715-whole-hosted/code/assemble.py @@ -0,0 +1,121 @@ +# Adapted from DaysSky PR442 with Claude assistance; Eleven-stage R740 integration by chafreaky with OpenAI Codex. Apache-2.0. +"""Two exact moments for both hosted suppliers, fresh finite invoices with the hosted stock, and the strict outer +assembly of #434 (six bootstrap levels, 47 inequalities, next-grid and parameter controls). +usage: assemble.py VERIFIED458_DIR BIT_DIR""" +import gzip, hashlib, importlib.util, json, math, sys +from fractions import Fraction as Q +from pathlib import Path +parent458, bd = map(Path, sys.argv[1:3]) +parent454=parent458/"parent454" +cd=parent458/"complex" +parent451=parent454/"parent451" +parent445=parent451/"parent445" +sys.path.insert(0,str(Path(__file__).resolve().parents[2]/"r740-hosted-rank149/code")) +parent444=parent445/"parent444" +upstream=parent444/"upstream442" +ap=bd/"AUDIT.json";outp=bd/"RESULT.json" +from row_bound import bound as row_bound, controls as row_controls +par=upstream / "parent/changed" + +def load(name): + sp = importlib.util.spec_from_file_location('hosted_' + name, par / 'work/pr361/code/engines' / (name + '.py')) + mod = importlib.util.module_from_spec(sp); sp.loader.exec_module(mod); return mod +M, Other, Outer = load('moment'), load('base_two_moment'), load('outer') +audit = json.loads(ap.read_text()); ua=json.loads((upstream/'AUDIT.json').read_text()); ur=json.loads((upstream/'RESULT.json').read_text()); bg = json.loads((bd / 'GLOBAL.json').read_text()); ch = json.loads((cd / 'GLOBAL.json').read_text()); ca=json.loads((cd/'AUDIT.json').read_text()) +assert audit['template_sha256'] == bg['template_sha256'] and ca['template_sha256'] == ch['template_sha256'] +assert json.loads((upstream/'RECEIPT.json').read_text())['status']=='PASS_FULL_IDLE_AXIS_HOSTING_COMPOSITION' +# ---------------- bit: two moments and the parent's invoice formulas with the hosted stock +P = {int(r): n for r, n in audit['profile'].items()}; m, W = 78, audit['live']; E = sum(P.values()) +geo = json.loads((bd / 'GEOMETRY.json').read_text());pg=bg +T, L, R, V, K = 8, 11, 715, 120, 5 +assert pg["replicas"]==T and pg["R"]==R +mass = sum(r * z for r, z in P.items()); assert m * W - mass == (2*K*V-L*72)*T +physical = W + 9; d = m * m; N = 2 * m +unit = L * T * pg['local_additions'] + pg['bridge_additions'] +J = 8 * T * L * (2 * V + R) + 8 * (2 * K * V * T) + 2 * L * T * R + 2 * pg['copy_erase_episodes'] # every helper route charged (bank or hosted) +high = 16 * (d + 1) ** 2; good = 8 * m * m + 8; compiler = 128 * N ** 3 +selectors = 2 * L * T * ((W - 1) + R * m * (geo['max_route_factors'] + 144 + 2 + (m - 1) + m)) # 144: residual isometry; +2: hosted slot permutation and idle basis U_q +prefix = int(pg['global_prefix_bound']); charged_prefix = 64 * ((prefix.bit_length() + 63) // 64) +assert prefix < 1< 1 +# ---------------- complex: two moments and the parent's invoice with the hosted stock +PC = {int(r): n for r, n in ca['profile'].items()}; mc, WC = 89, ca['live']; EC = sum(PC.values()) +massc = sum(r * z for r, z in PC.items()); assert mc * WC - massc == 3264 +rc = M.certify(PC, mc, WC, True); b = Q(rc['lower']) +assert b>Q(ur['complex_lower']) +fbc = 32 * mc * mc * EC +l3, h3 = Other.moment(mc, WC, list(PC.items()), b); b3, bh3 = Other.moment(mc, WC, [(1, fbc)], b); assert h3 + bh3 / 10 ** 16 < 1 +bn=Q(rc['upper']) +l4,h4=Other.moment(mc,WC,list(PC.items()),bn);b4,bh4=Other.moment(mc,WC,[(1,fbc)],bn);assert l4+b4/10**16>1 +physc=ch['physical'];Rc=560;v=120;hc=9;lc=11;tc=8;kc=5 +checks=ch['source_local_checks'];private_centers=ch['private_centers'] +compilerc=64*(mc+1)**3 +macros=max(z['scalar_macros'] for z in checks.values());children=sum(checks['forward']['paid_profile'].values()) +adapters=16*(macros+children+2*v+Rc+private_centers)+64*mc +# Eight restored rank-zero compiler groups for EACH pre/post wrapper, +# conservatively charged for all R helpers rather than only the 79 pivots. +wrapper_groups=2*Rc*8 +assert ch['charged_wrapper_groups']==lc*tc*wrapper_groups and ch['wrapper_events']==lc*tc*158 +adapters+=wrapper_groups +local_bound=max(z['real_component_primitive_bound'] for z in checks.values())+adapters*compilerc +scalar_primitives=tc*((kc+1)*checks['forward']['real_component_primitive_bound']+kc*checks['backward']['real_component_primitive_bound']) +bridge_adds=6*(kc-1)*v*tc;terminal_shifts=kc*v*tc;terminal_moves=2*kc*v*tc +# Retain the full unhosted idle count as an overcharge, and charge all helper +# selectors plus two additional hosting factors per helper occurrence. +nonlocal_items=4*v*tc*lc+2*v*tc*lc+4*lc*tc*Rc+(6*kc-4)*v*tc+bridge_adds+terminal_shifts+terminal_moves+WC+physc +outside=8*nonlocal_items+64*mc +pervertex=scalar_primitives+bridge_adds+terminal_shifts+terminal_moves+WC+(lc*tc*adapters+outside)*compilerc+64*physc +r_ = mc // 2; group = 2 ** (r_ * r_) * math.prod(2 ** (2 * i) - 1 for i in range(1, r_ + 1)); stock = group * physc +smass=group*massc;logical=group*pervertex+64;router=compilerc*(logical+1)*(stock+1)**2 +GG, EE, C0 = 1 << 30000, 1 << 100000, 1 << 210000; BB = smass + EE +literal = 2 * GG * stock ** 2 + 8 * smass + 4 * stock + 4 + 32 * mc +assert local_bound<1<<48 and logical<1<<6050 and router2*max(PC)**3 +assert (pervertex+1)**3*(EC+1)**3<1<<1024 +from complex_rows import bound as complex_row_bound, controls as complex_row_controls +complex_rows=complex_row_bound(stock.bit_length());complex_row_rejected=complex_row_controls() +rowc=complex_rows['retained_row_coefficient'] +# ---------------- outer assembly exactly as #434's combined.py +eta = beta = Q(1, 10 ** 18); grid = Q(1, 10 ** 18); s = min(c, (1 - beta) * b) - Q(1, 10 ** 24) +assert 0 < s < c and s < (1 - beta) * b +chain = [Q(384599, 10 ** 10)]; cutoffs = [] +def ceil(x): return -((-x.numerator) // x.denominator) +for j in range(6): + old = chain[-1]; a = (1 - s) * s + s * old + gap = min(s - a, 1 - a - s, 1 - a - s * (1 - old), 1 - s); assert old < a < s < 1 - a and gap > 0 + cutoff = max(ceil(36 / gap ** 2), ceil(2 * (4 + charged_two) / gap)); assert cutoff * gap ** 2 >= 36 and cutoff * gap >= 2 * (4 + charged_two) + cutoffs.append(dict(gap=str(gap), cutoff_log2=str(cutoff))); chain.append(a) +q = chain[-1] * (1 - 2 * eta); margin = (1 - eta) * q / (1 + q); ticks = margin / grid; k = grid * ((ticks.numerator - 1) // ticks.denominator) +bridge = {'semantic': {'C0': {'base': 2, 'exponent': 210000}, 'strict_literal_gap': 1}, 'rows': {'degree_gap': Q(10 ** 6) - Q(51 * 20161, 25)}} +a = Outer.assembly(chain[-1], b, bridge, k, eta=eta, beta=beta) +assert len(a['strict_constraints']) == 47 and all(x > 0 for x in a['strict_constraints'].values()) +controls = [] +for name, kk, ee, bb in [('next_grid', k + grid, eta, beta), ('zero_eta', k, Q(0), beta), ('zero_beta', k, eta, Q(0)), ('unit_beta', k, eta, Q(1))]: + try: Outer.assembly(chain[-1], b, bridge, kk, eta=ee, beta=bb) + except AssertionError: controls.append(name) + else: raise AssertionError(name) +parent_k = Q(json.loads((parent458/'RESULT.json').read_text())['kappa']) +assert json.loads((parent444/'RECEIPT.json').read_text())['status']=='PASS_R740_REPLICATED_HOSTING' +res = dict(status='PASS_CONDITIONAL_R715_WHOLE_HOSTED', kappa=str(k), kappa_decimal=format(float(k), '.18f'), + bit_lower=str(c), complex_lower=str(b), binding_component='bit' if c < (1 - beta) * b else 'complex', + gain_over_pr458_percent=float(100 * (k / parent_k - 1)), + bit=dict(live=W, physical=physical, maxchild=max(P), rank_mass=mass, hosted_residuals=audit['hosted_residuals'], + prefix_bits=prefix.bit_length(), charged_prefix_bits=charged_prefix, coefficient_bits=coefficient.bit_length(), + three_level_coefficient_bits=two.bit_length(), charged_three_level_coefficient_bits=charged_two, row_coefficient=row), + complex=dict(live=WC, physical=physc, maxchild=max(PC), rank_mass=massc, hosted_residuals=ca['hosted_residuals'], + wrapper_events=ch['wrapper_events'], charged_wrapper_groups=ch['charged_wrapper_groups'], max_helpers_per_physical_family_per_call=1, physical_stock_bits=stock.bit_length(), router_bits=router.bit_length(), literal_bits=literal.bit_length(), row_coefficient=rowc, row_bound=complex_rows, row_controls=complex_row_rejected, local_bound=local_bound, pervertex=pervertex, halving_depth=3), + strict_outer_constraints={n: str(x) for n, x in a['strict_constraints'].items()}, outer_controls=controls, bootstrap=cutoffs, + bit_template_sha256=bg['template_sha256'], complex_template_sha256=ch['template_sha256'], complex_emitted_program_sha256=ch['emitted_program_sha256'], emitted_program_sha256=bg['emitted_program_sha256'], bank_assignments=audit['bank_assignments'], bit_profile=audit['profile'], parent_kappa=str(parent_k), additional_interface='Explicit paid two-sided residual adapters; distinct borrowed host families within every invocation; inherited Gaussian compiler and idle-data hosting',row_bound=rows,row_controls=row_rejected, halving_depth=3, finite_controls=['physical family prefix independently recomputed','three-level coefficient charged to next 64-bit block']) +outp.write_text(json.dumps(res, indent=2) + '\n') +print(res['status'], res['kappa_decimal'], 'binding', res['binding_component'], 'gain over #458 %.4f%%' % res['gain_over_pr458_percent']) diff --git a/research/e8-r715-whole-hosted/code/audit.py b/research/e8-r715-whole-hosted/code/audit.py new file mode 100644 index 0000000000..155b61f294 --- /dev/null +++ b/research/e8-r715-whole-hosted/code/audit.py @@ -0,0 +1,213 @@ +"""Independent eleven-stage schedule, geometry embedding and hosted ownership audit. +Derived from PR386/436/443/444 and DaysSky PR442; all source notices retained. +Eleven-stage integration by chafreaky with OpenAI Codex assistance, Apache-2.0. +No emitter, schedule constructor, hosting solver or expander is imported. +Usage: audit.py PARENT443_CANDIDATE OUT +""" +import copy,gzip,hashlib,json,sys +from local_audit import local_audit +from collections import Counter,defaultdict +from pathlib import Path +K,L,M,T,V,R=5,11,78,8,120,715 +DATA=2*K*V*T +read=lambda p:json.loads(p.read_text()) +sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() +load_template=lambda p:json.loads(gzip.decompress(p.read_bytes())) + +def windows(schedule): + last={};seen=[];win={};ranks={};pairs={} + for position,event in enumerate(schedule): + kind=event['kind'] + if kind=='local_cover_sweep': + seen.append((position,event['stage'],event['pair']));last[event['pair']]=position + elif kind=='bridge': + last[event['dst']]=position;last[event['src']]=position + elif kind=='idle': + i=event['idx'];assert i not in win + win[i]={s for pos,s,p in seen if last.get(event['pair'],-1)0 and 0<=off and off+w<=rank[i] + cells=set(range(off,off+w));assert not cells&used[i,cp];used[i,cp]|=cells + assert (s,h) not in hosted;hosted[s,h]=(i,cp,off,w) + assert set(hosted)=={(s,h) for s in range(L) for h in range(R*T)} + rem={};summaries={} + for i in rank: + if not rank[i]:continue + for cp in range(2*V*T):rem[i,cp]=rank[i]-len(used[i,cp]) + if str(i) in hs['windows']: + summaries[str(i)]={str(r):n for r,n in sorted(Counter(rem[i,cp] for cp in range(2*V*T)).items())} + assert hs['remainders']==summaries + assert len(t['calls'])==L*T;seen=set();paid=Counter() + localhash={ori:hashlib.sha256(json.dumps(es,separators=(',',':')).encode()).hexdigest() for ori,es in t['local_programs'].items()} + for index,c in enumerate(t['calls']): + s,rep=c['stage'],c['replica'];p=max(0,(s-1)//2);rev=bool(s%2) + assert (s,rep)==divmod(index,T) and c['pair']==p and c['orientation']==('reverse' if rev else 'forward') + assert c['local_hash']==localhash[c['orientation']] + own=c['owners'];assert len(own)==2*V+R + assert len({(f,tuple(route)) for f,route in own})==2*V+R + for j,(f,route) in enumerate(own): + assert 0<=f2*max(paid)**3 + return paid + +def expanded_digest(t): + h=hashlib.sha256();count=0 + for call in t['calls']: + for op in t['local_programs'][call['orientation']]: + row=[op[0],call['owners'][op[1]]] + if op[0]==0:row.extend(op[2:]) + else: + row.append(call['owners'][op[2]] if op[2]<2*V+R else [t['live'],['private',0]]) + row.extend(op[3:]) + h.update(json.dumps(row,separators=(',',':')).encode());h.update(b'\n');count+=1 + return h.hexdigest(),count + + +def physical_prefix(t): + bounds={i:1 for i in range(t['live'])};scratch=t['live'];bounds[scratch]=0;maximum=1 + stages=defaultdict(list) + for c in t['calls']:stages[c['stage']].append(c) + for e in t['schedule']: + if e['kind']=='local_cover_sweep': + for c in stages[e['stage']]: + for z in t['local_programs'][c['orientation']]: + tag=z[0] + if tag==0:continue + dst=c['owners'][z[1]][0] + if tag==1: + sr=scratch if z[2]==2*V+R else c['owners'][z[2]][0] + bounds[dst]=bounds[dst]+abs(z[3])*bounds[sr] + elif tag==2:bounds[scratch]=bounds[dst] + else:assert tag==3;bounds[scratch]=0 + maximum=max(maximum,bounds[dst],bounds[scratch]) + elif e['kind']=='bridge': + for replica in range(T): + for port in range(V): + for side in (0,1): + dp,sp=(e['dst'],e['src']) if side==0 else (e['src'],e['dst']) + dst=replica*2*K*V+(2*dp+side)*V+port;sr=replica*2*K*V+(2*sp+side)*V+port + bounds[dst]+=bounds[sr];maximum=max(maximum,bounds[dst]) + assert bounds[scratch]==0 + return maximum + +def main(): + par,geometry_parent,out=map(Path,sys.argv[1:]);t=load_template(out/'GLOBAL-TEMPLATE.json.gz');pt,local_result=local_audit(par) + g=read(out/'GLOBAL.json');geo=read(out/'GEOMETRY.json');pg=read(geometry_parent/'GEOMETRY.json') + state=read(par/'records/249-states.json');fs=read(par/'records/frames.json')['frames'] + widths=[8-fs[str(state['initial'][str(h)])]['dim'] for h in range(240,955)] + P=audit(t,pt,widths) + assert geo['m']==78 and geo['stages']==11 and len(geo['ports'])==120 and not geo['bank_slots'] and not geo['bank_permutations'] + for p,old in zip(geo['ports'],pg['ports']): + assert {k:v for k,v in p.items() if k!='routes'}=={k:v for k,v in old.items() if k!='routes'} + assert p['routes'][:9]==old['routes'] and len(p['routes'])==11 + for s,route in enumerate(p['routes']): + if s==0:assert route==dict(stage=0,axes=list(range(8)),identity=True) + else: + assert route==dict(stage=s,axes=list(range(8))+list(range(8+7*(s-1),8+7*s)),elementary_inverse_replay=old['routes'][1]['elementary_inverse_replay']) + assert len(set(route['axes']))==15 and max(route['axes'])1<<192 # Old independent-replica charge is not reused. + controls=[] + def reject(name,fn): + q=copy.deepcopy(t);fn(q) + try:audit(q,pt,widths) + except (AssertionError,KeyError,IndexError,TypeError):controls.append(name) + else:raise AssertionError('accepted '+name) + slot=lambda q:q['hosting']['slots'][0] + reject('slot outside window',lambda q:slot(q).__setitem__(4,10)) + reject('copy outside family',lambda q:slot(q).__setitem__(1,2*V*T)) + reject('negative slot offset',lambda q:slot(q).__setitem__(2,-1)) + reject('wrong residual width',lambda q:slot(q).__setitem__(3,slot(q)[3]+1)) + reject('duplicate helper',lambda q:q['hosting']['slots'].append(slot(q))) + reject('missing helper',lambda q:q['hosting']['slots'].pop()) + reject('owner replica does not match assignment',lambda q:q['calls'][0]['owners'][240].__setitem__(0,q['calls'][0]['owners'][240][0]+1200)) + reject('cross-replica data',lambda q:q['calls'][0]['owners'][0].__setitem__(0,1200)) + reject('wrong hosted coordinate',lambda q:q['calls'][0]['owners'][240][1].__setitem__(2,99)) + reject('helper changed to bank',lambda q:q['calls'][0]['owners'][240][1].__setitem__(0,'bank')) + reject('wrong call orientation',lambda q:q['calls'][0].__setitem__('orientation','reverse')) + reject('duplicate call',lambda q:q['calls'].__setitem__(1,q['calls'][0])) + reject('dropped final stage',lambda q:q.__setitem__('calls',[c for c in q['calls'] if c['stage']<10])) + reject('wrong idle rank',lambda q:next(e for e in q['schedule'] if e['kind']=='idle').__setitem__('rank',1)) + reject('omitted bridge',lambda q:q['schedule'].pop(next(i for i,e in enumerate(q['schedule']) if e['kind']=='bridge'))) + reject('wrong bridge sign',lambda q:next(e for e in q['schedule'] if e['kind']=='bridge').__setitem__('coefficient',-1)) + reject('omitted terminal exchange',lambda q:q['schedule'].pop()) + reject('understated live stock',lambda q:q.__setitem__('live',q['live']-1)) + reject('missing remainder summary',lambda q:q['hosting']['remainders'].pop(next(iter(q['hosting']['remainders'])))) + reject('wrong residual isometry',lambda q:q['residual_isometries'][0]['orthogonal_rows_numerator'][0].__setitem__(0,99)) + reject('omitted local instruction',lambda q:q['local_programs']['forward'].pop()) + reject('wrong reflected copy rank',lambda q:next(z for z in q['local_programs']['reverse'] if z[0]==2).__setitem__(5,0)) + res=dict(status='PASS_INDEPENDENT_ELEVEN_STAGE_HOSTING_AUDIT',template_sha256=th,emitted_program_sha256=digest, + emitted_events=count,profile={str(r):n for r,n in sorted(P.items())},live=9600,physical=9609,hosted_residuals=62920, + bank_assignments=0,rank_mass=sum(r*n for r,n in P.items()),deficit=3264,maxchild=max(P),geometry_routes=1320, + halving_depth=3,physical_prefix_bits=prefix.bit_length(),charged_prefix_bits=g['charged_prefix_bits'],local_audit=local_result,mutations_rejected=controls) + (out/'AUDIT.json').write_text(json.dumps(res,indent=2)+'\n');print(json.dumps(res)) +if __name__=='__main__':main() diff --git a/research/e8-r715-whole-hosted/code/emit.py b/research/e8-r715-whole-hosted/code/emit.py new file mode 100644 index 0000000000..df74ad698a --- /dev/null +++ b/research/e8-r715-whole-hosted/code/emit.py @@ -0,0 +1,286 @@ +# Eight-replica R715 adaptation by chafreaky with OpenAI Codex. +# Four-replica whole-family pooling by Rohan Arun with OpenAI Codex. Upstream notices retained. +# Kernel integration of PR436/PR386 by chafreaky, with OpenAI Codex assistance. +# Original copyright and attribution retained below. This variant uses explicit +# residual isometries and mixed-width banks; the original all-zero-start +# requirement is replaced by the verified kernel entrance contract. +"""Source-bound eleven-stage bit template with 8 independent replicas and no helper banks. +PR386 global identity and PR436 generalization by Zhihao Chen and eumemic, +with their disclosed OpenAI Codex and Anthropic Claude assistance, Apache-2.0. +PR439 explicit residual routes and this replication extension by chafreaky, +with OpenAI Codex assistance. All owner assignments and emitted calls are checked. +Historical PR386 regression is performed by the unchanged parent wrapper. +""" +import argparse, gzip, hashlib, json, struct, time, sys +from collections import Counter +from pathlib import Path +HERE=Path(__file__).resolve().parent +sys.path.insert(0,str(HERE.parents[1]/"e8-r740-replica32/code")) +sys.path.insert(0,str(HERE.parents[1]/"idle-axis-hosting")) +from bank_routes import validate_isometries +import hosting_core as HC + +H,L,K,T,M=8,11,5,8,78 +def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() +def write(p,x): p.write_text(json.dumps(x,indent=2)+'\n') + +def recipe(): + out=[dict(kind='local',stage=0,pair=0,reverse=False)]; stage=1 + for j in range(K): + out.append(dict(kind='local',stage=stage,pair=j,reverse=True)); stage+=1 + if j/2') + geo=json.loads((out/'GEOMETRY.json').read_text()) + assert geo['status']=='PASS_COMPRESSED_ELEVEN_BIT_GEOMETRY' + # the port routes depend only on the labels: same 120 label vectors, in the same order + assert len(geo['ports'])==V and all(p['port']==t and p['q']==w['lines'][t] for t,p in enumerate(geo['ports'])) + rp=a.local_check/'records/249-records.bin'; raw=rp.read_bytes(); rec=list(struct.iter_unpack('<6i',raw)) + state=json.loads((a.local_check/'records/249-states.json').read_text()) + fs=json.loads((a.local_check/'records/frames.json').read_text())['frames'] + dims={int(f):z['dim'] for f,z in fs.items()} + lg=json.loads((a.local_check/'cout/legality.json').read_text()) + cc=json.loads((a.local_check/'cout/columns.json').read_text()) + assert lg['status'].startswith('PASS') and cc['status'].startswith('PASS') + assert (state['v'],state['n'])==(V,LOCAL) and lg['copies']==lg['erasures']==9 + ADDS=lg['common_frame_ADDs'] + assert cc['formal_columns_checked']==4*V+R and cc['local_scalar_additions']==ADDS + initial=[state['initial'][str(i)] for i in range(LOCAL)] + final=[state['final'][str(i)] for i in range(LOCAL)] + assert all(dims[final[i]]==H for i in range(2*V,LOCAL)) + widths=[H-dims[initial[i]] for i in range(2*V,LOCAL)] + ENT=sum(H-z for z in widths) + NB=0;LIVE=DATA + assert T==8 and M==8+7*(L-1) + isometries=json.loads(a.isometries.read_text()) + assert validate_isometries(isometries,w['frames'],w['lines'],dims)==set(initial[2*V:]) + streams={}; checks={}; localH=None + for reverse in (False,True): + cur=(final if reverse else initial)[:]+[-1]; val=[1<=0 + cur[x]=newf + if f: hist[f]+=1 + events.append([0,x,oldf,newf,f,int(reverse)]) + elif op==1: + assert cur[x]==cur[y]==f and x!=y and x>N + return (left^right)|(right<=2*v for s in ss) for f,d,ss in c['B']) +assert not any(v<=s<2*v for ph in ('D','A','C') for f,d,ss in c[ph] for s in ss) +seq=defaultdict(list) +for i,(f,d,ss) in enumerate(c['B']):seq[d].append((i,f,ss)) +def prefix(t,G): + parity=set() + for i,f,ss in seq[t]: + if F[f]<=F[G]: + for s in ss:parity.symmetric_difference_update([s]) + return parity +for u,donor,G in mix: + assert v<=u<2*v and v<=donor<2*v and u!=donor and G in [f for i,f,ss in seq[donor]] + assert prefix(u,G) and prefix(u,G)==prefix(donor,G) + assert F[G]<=F[c['final'][u]] + assert all(F[G]<=F[f] for i,f,ss in seq[u] if not F[f]<=F[G]) +w=copy.deepcopy(c);w['D']+=[[zero,u,[donor]] for u,donor,G in mix] +for u,donor,G in mix:w['scatter'][u-v]=sorted(set(c['scatter'][u-v])^set(c['scatter'][donor-v])) +drop={i for u,donor,G in mix for i,f,ss in seq[u] if F[f]<=F[G]} +keep=[g for i,g in enumerate(c['B']) if i not in drop];w['B']=[] +for k in range(h+1): + w['B']+=[g for g in keep if dim[g[0]]==k] + w['B']+=[[G,u,[donor]] for u,donor,G in mix if dim[G]==k] +w['target_mix']=dict(rule='y_u += y_w at frame G (after w reaches G); frame-0 preconditioner y_u += y_w; scatter_u ^= scatter_w',receivers=mix) +assert w==ld(ROOT/'data/mixed-word.json.gz') and Counter(dim[G] for u,donor,G in mix)==Counter({6:56}) +for ph in ('D','A','B','C'):w[ph]=[[f,d,[s]] for f,d,ss in w[ph] for s in ss] +single=ld(ROOT/'data/single-retiming.json');paired=ld(ROOT/'data/pair-retiming.json') +assert len(single)==60 and all(x[0]=='A' for x in single) +assert len(paired)==28 and all(x[0]=='B' for x in paired) +w=retime(w,single) +# Bind the transferred pair moves to PR467's actual operands and frames. +up=ld(ROOT/'upstream467/word.json');up_moves=ld(ROOT/'upstream467/retiming.json')['changes'];bound=[] +for batch in up_moves: + if len(batch['changes'])!=2:continue + for ph,i,old,new in batch['changes']: + assert w[ph][i][1:]==up[ph][i][1:] and w['frames'][w[ph][i][0]]==up['frames'][old] + bound.append([ph,i,up['frames'][old],up['frames'][new]]) +assert paired==bound +w=retime(w,paired);assert w==expected +after=replay(w,span_mode='z');assert not after['viol'] and after['n']==955 +rejected=[] +for name,mutate in [('retained row pivot',lambda s:s[0].__setitem__(1,base['ret'][0])),('duplicate pivot',lambda s:s.append(copy.deepcopy(s[0])))]: + bad=copy.deepcopy(selected);mutate(bad) + try:kernel(base,bad) + except AssertionError:rejected.append(name) + else:raise AssertionError('accepted '+name) +bad=copy.deepcopy(w);bad['A'][0][2].pop() +try:r=replay(bad,span_mode='z') +except AssertionError:pass +else:assert r['viol'] +rejected.append('omitted response correction') +print(json.dumps(dict(status='PASS_EXACT_R715_KERNEL_AND_MIXING_REBUILD',kernel_entries=entries,entrance_rank=rank,donor_slots=donors, + receivers=56,donors=56,disjoint_mixing=True,single_retimings=60,paired_retimings=14,local_columns=955,local_profile=dict(sorted(after['H'].items())), + base_and_kernel_integer_source_spans=True,final_integer_source_spans=True,mutations_rejected=rejected, + canonical_word_sha256=hashlib.sha256(json.dumps(w,sort_keys=True,separators=(',',':')).encode()).hexdigest()),sort_keys=True)) diff --git a/research/e8-r715-whole-hosted/data/hosting.json b/research/e8-r715-whole-hosted/data/hosting.json new file mode 100644 index 0000000000..381fb06ccb --- /dev/null +++ b/research/e8-r715-whole-hosted/data/hosting.json @@ -0,0 +1,519 @@ +{ + "bit": { + "patterns": [ + [ + 0, + [ + 7, + 7 + ], + 784 + ], + [ + 0, + [ + 8 + ], + 960 + ], + [ + 0, + [ + 8, + 6 + ], + 176 + ], + [ + 1, + [], + 1048 + ], + [ + 1, + [ + 6 + ], + 88 + ], + [ + 1, + [ + 7 + ], + 784 + ], + [ + 2, + [ + 7, + 7, + 7, + 7 + ], + 196 + ], + [ + 2, + [ + 8, + 8, + 6, + 6 + ], + 44 + ], + [ + 2, + [ + 8, + 8, + 8 + ], + 1680 + ], + [ + 3, + [], + 1048 + ], + [ + 3, + [ + 6 + ], + 88 + ], + [ + 3, + [ + 7 + ], + 784 + ], + [ + 4, + [ + 7, + 7, + 7, + 7, + 7, + 7 + ], + 116 + ], + [ + 4, + [ + 8, + 8, + 8, + 8, + 8 + ], + 1804 + ], + [ + 5, + [], + 1048 + ], + [ + 5, + [ + 6 + ], + 88 + ], + [ + 5, + [ + 7 + ], + 784 + ], + [ + 6, + [], + 652 + ], + [ + 6, + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + 1268 + ], + [ + 7, + [], + 1048 + ], + [ + 7, + [ + 6 + ], + 88 + ], + [ + 7, + [ + 7 + ], + 784 + ], + [ + 8, + [ + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + 1920 + ], + [ + 9, + [ + 8 + ], + 1 + ], + [ + 9, + [ + 8, + 8, + 7, + 7, + 6, + 6 + ], + 44 + ], + [ + 9, + [ + 8, + 8, + 8, + 8, + 8 + ], + 1875 + ], + [ + 10, + [ + 7, + 7, + 7, + 7 + ], + 196 + ], + [ + 10, + [ + 8, + 8, + 6, + 6 + ], + 44 + ], + [ + 10, + [ + 8, + 8, + 8 + ], + 1680 + ], + [ + 11, + [ + 7, + 7 + ], + 784 + ], + [ + 11, + [ + 8 + ], + 960 + ], + [ + 11, + [ + 8, + 6 + ], + 176 + ] + ], + "proxy_saving": 322490.0653780723, + "stages": [ + [ + 0, + 6, + 0, + 88 + ], + [ + 0, + 6, + 1, + 88 + ], + [ + 0, + 7, + 0, + 784 + ], + [ + 0, + 7, + 1, + 784 + ], + [ + 0, + 8, + 0, + 1136 + ], + [ + 1, + 6, + 2, + 88 + ], + [ + 1, + 7, + 2, + 784 + ], + [ + 2, + 6, + 3, + 88 + ], + [ + 2, + 7, + 3, + 784 + ], + [ + 2, + 8, + 2, + 4848 + ], + [ + 2, + 8, + 3, + 280 + ], + [ + 3, + 6, + 4, + 88 + ], + [ + 3, + 7, + 4, + 784 + ], + [ + 4, + 7, + 5, + 696 + ], + [ + 4, + 8, + 0, + 3712 + ], + [ + 4, + 8, + 1, + 740 + ], + [ + 4, + 8, + 3, + 4568 + ], + [ + 5, + 6, + 6, + 88 + ], + [ + 5, + 7, + 6, + 784 + ], + [ + 6, + 8, + 1, + 4108 + ], + [ + 6, + 8, + 5, + 4768 + ], + [ + 7, + 6, + 8, + 88 + ], + [ + 7, + 7, + 8, + 784 + ], + [ + 8, + 8, + 4, + 4848 + ], + [ + 8, + 8, + 5, + 80 + ], + [ + 8, + 8, + 8, + 4848 + ], + [ + 8, + 8, + 9, + 3664 + ], + [ + 9, + 6, + 5, + 88 + ], + [ + 9, + 7, + 5, + 88 + ], + [ + 9, + 8, + 6, + 4848 + ], + [ + 9, + 8, + 7, + 4568 + ], + [ + 9, + 8, + 9, + 48 + ], + [ + 10, + 6, + 7, + 88 + ], + [ + 10, + 7, + 7, + 784 + ], + [ + 10, + 8, + 7, + 280 + ], + [ + 10, + 8, + 10, + 4848 + ], + [ + 11, + 6, + 9, + 88 + ], + [ + 11, + 6, + 10, + 88 + ], + [ + 11, + 7, + 9, + 784 + ], + [ + 11, + 7, + 10, + 784 + ], + [ + 11, + 8, + 9, + 1136 + ] + ] + } +} diff --git a/research/e8-r715-whole-hosted/data/kernel-word.json.gz b/research/e8-r715-whole-hosted/data/kernel-word.json.gz new file mode 100644 index 0000000000..1d84b2ebcf Binary files /dev/null and b/research/e8-r715-whole-hosted/data/kernel-word.json.gz differ diff --git a/research/e8-r715-whole-hosted/data/kernel.json b/research/e8-r715-whole-hosted/data/kernel.json new file mode 100644 index 0000000000..f2e2f5828e --- /dev/null +++ b/research/e8-r715-whole-hosted/data/kernel.json @@ -0,0 +1,1216 @@ +[ + [ + [ + 0 + ], + 747, + [ + 814, + 776 + ] + ], + [ + [ + 0 + ], + 762, + [ + 799, + 776 + ] + ], + [ + [ + 0 + ], + 748, + [ + 814, + 761, + 799 + ] + ], + [ + [ + 0 + ], + 790, + [ + 814, + 761 + ] + ], + [ + [ + 0 + ], + 732, + [ + 745, + 746, + 731 + ] + ], + [ + [ + 0 + ], + 734, + [ + 785, + 774, + 803, + 773 + ] + ], + [ + [ + 0 + ], + 786, + [ + 785, + 774, + 773 + ] + ], + [ + [ + 0 + ], + 804, + [ + 774, + 803, + 773 + ] + ], + [ + [ + 0 + ], + 800, + [ + 761, + 776 + ] + ], + [ + [ + 0 + ], + 789, + [ + 814, + 799, + 776 + ] + ], + [ + [ + 0 + ], + 775, + [ + 761, + 799 + ] + ], + [ + [ + 0 + ], + 931, + [ + 745, + 731, + 757, + 929 + ] + ], + [ + [ + 0 + ], + 758, + [ + 745, + 746, + 757 + ] + ], + [ + [ + 0 + ], + 733, + [ + 785, + 803 + ] + ], + [ + [ + 0 + ], + 815, + [ + 785, + 803, + 773 + ] + ], + [ + [ + 0 + ], + 816, + [ + 785, + 774, + 803 + ] + ], + [ + [ + 0 + ], + 813, + [ + 814, + 761, + 799, + 776 + ] + ], + [ + [ + 0 + ], + 926, + [ + 803, + 773, + 928 + ] + ], + [ + [ + 0 + ], + 923, + [ + 814, + 761, + 776, + 924 + ] + ], + [ + [ + 3 + ], + 797, + [ + 798, + 854, + 853 + ] + ], + [ + [ + 3 + ], + 811, + [ + 798, + 868, + 853 + ] + ], + [ + [ + 3 + ], + 867, + [ + 868, + 854, + 853 + ] + ], + [ + [ + 3 + ], + 812, + [ + 798, + 868, + 854 + ] + ], + [ + [ + 0, + 6 + ], + 772, + [ + 817, + 771, + 818 + ] + ], + [ + [ + 4, + 5 + ], + 878, + [ + 710, + 876 + ] + ], + [ + [ + 4, + 5 + ], + 907, + [ + 709, + 908 + ] + ], + [ + [ + 4, + 5 + ], + 735, + [ + 709, + 737 + ] + ], + [ + [ + 4, + 5 + ], + 738, + [ + 710, + 736 + ] + ], + [ + [ + 4, + 5 + ], + 940, + [ + 908, + 737, + 941 + ] + ], + [ + [ + 4, + 5 + ], + 946, + [ + 736, + 876, + 947 + ] + ], + [ + [ + 4, + 5 + ], + 935, + [ + 908, + 737, + 936 + ] + ], + [ + [ + 2 + ], + 770, + [ + 826, + 840, + 784 + ] + ], + [ + [ + 2 + ], + 825, + [ + 826, + 840, + 839 + ] + ], + [ + [ + 2 + ], + 783, + [ + 840, + 839, + 784 + ] + ], + [ + [ + 2 + ], + 769, + [ + 826, + 839, + 784 + ] + ], + [ + [ + 7 + ], + 895, + [ + 827, + 909 + ] + ], + [ + [ + 7 + ], + 862, + [ + 712, + 861 + ] + ], + [ + [ + 7 + ], + 915, + [ + 873, + 793, + 754 + ] + ], + [ + [ + 7 + ], + 953, + [ + 793, + 954, + 916 + ] + ], + [ + [ + 7 + ], + 949, + [ + 793, + 950, + 916 + ] + ], + [ + [ + 7 + ], + 717, + [ + 827, + 909, + 896 + ] + ], + [ + [ + 7 + ], + 794, + [ + 712, + 861, + 750 + ] + ], + [ + [ + 7 + ], + 781, + [ + 711, + 782 + ] + ], + [ + [ + 7 + ], + 891, + [ + 905, + 930, + 932 + ] + ], + [ + [ + 7 + ], + 796, + [ + 711, + 795 + ] + ], + [ + [ + 7 + ], + 890, + [ + 861, + 750, + 778 + ] + ], + [ + [ + 7 + ], + 823, + [ + 711, + 782, + 795, + 864 + ] + ], + [ + [ + 7 + ], + 752, + [ + 712, + 750 + ] + ], + [ + [ + 7 + ], + 903, + [ + 905, + 801, + 930, + 932, + 788 + ] + ], + [ + [ + 7 + ], + 780, + [ + 712, + 778 + ] + ], + [ + [ + 7 + ], + 792, + [ + 861, + 750 + ] + ], + [ + [ + 7 + ], + 906, + [ + 711, + 904 + ] + ], + [ + [ + 7 + ], + 901, + [ + 793, + 754 + ] + ], + [ + [ + 7 + ], + 828, + [ + 909, + 896 + ] + ], + [ + [ + 7 + ], + 910, + [ + 827, + 896 + ] + ], + [ + [ + 7 + ], + 820, + [ + 750, + 778 + ] + ], + [ + [ + 7 + ], + 874, + [ + 793, + 754, + 916 + ] + ], + [ + [ + 7 + ], + 824, + [ + 782, + 795, + 864 + ] + ], + [ + [ + 7 + ], + 822, + [ + 712, + 750, + 778 + ] + ], + [ + [ + 7 + ], + 802, + [ + 930, + 932, + 788 + ] + ], + [ + [ + 7 + ], + 902, + [ + 873, + 916 + ] + ], + [ + [ + 7 + ], + 753, + [ + 873, + 793, + 916 + ] + ], + [ + [ + 7 + ], + 821, + [ + 255, + 827, + 819, + 909, + 896 + ] + ], + [ + [ + 7 + ], + 865, + [ + 255, + 827, + 909, + 896, + 863 + ] + ], + [ + [ + 7 + ], + 787, + [ + 801, + 930, + 932 + ] + ], + [ + [ + 7 + ], + 749, + [ + 711, + 782, + 864 + ] + ], + [ + [ + 7 + ], + 777, + [ + 827, + 909, + 896, + 779 + ] + ], + [ + [ + 7 + ], + 892, + [ + 712, + 861, + 750, + 778 + ] + ], + [ + [ + 7 + ], + 791, + [ + 873, + 754, + 916 + ] + ], + [ + [ + 7 + ], + 889, + [ + 905, + 801, + 788 + ] + ], + [ + [ + 7 + ], + 938, + [ + 795, + 939, + 864 + ] + ], + [ + [ + 7 + ], + 943, + [ + 827, + 942, + 896, + 779 + ] + ], + [ + [ + 3 + ], + 707, + [ + 853, + 854 + ] + ], + [ + [ + 3 + ], + 722, + [ + 798, + 868 + ] + ], + [ + [ + 3 + ], + 726, + [ + 897, + 898, + 725 + ] + ], + [ + [ + 3 + ], + 883, + [ + 897, + 898, + 884 + ] + ], + [ + [ + 3 + ], + 894, + [ + 853, + 868 + ] + ], + [ + [ + 3 + ], + 869, + [ + 898, + 884 + ] + ], + [ + [ + 3 + ], + 851, + [ + 708, + 852 + ] + ], + [ + [ + 3 + ], + 810, + [ + 708, + 809 + ] + ], + [ + [ + 3 + ], + 945, + [ + 898, + 725, + 884, + 944 + ] + ], + [ + [ + 3 + ], + 879, + [ + 852, + 809, + 723 + ] + ], + [ + [ + 3 + ], + 724, + [ + 798, + 853, + 854, + 868 + ] + ], + [ + [ + 3 + ], + 721, + [ + 708, + 723 + ] + ], + [ + [ + 3 + ], + 880, + [ + 708, + 852, + 809, + 723 + ] + ], + [ + [ + 3 + ], + 893, + [ + 854, + 868 + ] + ], + [ + [ + 3 + ], + 870, + [ + 897, + 884 + ] + ], + [ + [ + 1 + ], + 831, + [ + 756, + 740 + ] + ], + [ + [ + 1 + ], + 741, + [ + 242, + 243, + 742, + 755, + 841, + 756, + 842, + 719 + ] + ], + [ + [ + 1 + ], + 859, + [ + 742, + 846, + 727 + ] + ], + [ + [ + 1 + ], + 832, + [ + 755, + 740 + ] + ], + [ + [ + 1 + ], + 739, + [ + 755, + 756, + 740 + ] + ], + [ + [ + 1 + ], + 860, + [ + 242, + 243, + 742, + 755, + 846, + 841, + 727, + 756, + 842, + 719 + ] + ], + [ + [ + 1 + ], + 871, + [ + 755, + 756, + 872 + ] + ], + [ + [ + 1 + ], + 728, + [ + 242, + 243, + 755, + 841, + 727, + 756, + 842, + 719 + ] + ], + [ + [ + 1 + ], + 858, + [ + 756, + 740, + 872 + ] + ], + [ + [ + 1 + ], + 855, + [ + 841, + 842, + 856 + ] + ], + [ + [ + 1 + ], + 845, + [ + 242, + 243, + 755, + 846, + 841, + 756, + 842, + 719 + ] + ], + [ + [ + 1 + ], + 857, + [ + 755, + 740, + 872 + ] + ], + [ + [ + 1 + ], + 952, + [ + 740, + 951, + 872 + ] + ], + [ + [ + 2, + 6 + ], + 900, + [ + 714, + 899 + ] + ], + [ + [ + 2, + 6 + ], + 767, + [ + 768, + 837, + 838 + ] + ], + [ + [ + 6 + ], + 912, + [ + 844, + 843, + 911 + ] + ], + [ + [ + 6 + ], + 834, + [ + 766, + 848, + 808 + ] + ], + [ + [ + 6 + ], + 763, + [ + 844, + 765, + 843 + ] + ], + [ + [ + 6 + ], + 836, + [ + 764, + 848, + 808 + ] + ], + [ + [ + 6 + ], + 850, + [ + 766, + 764, + 848 + ] + ], + [ + [ + 6 + ], + 806, + [ + 766, + 764, + 808 + ] + ], + [ + [ + 5, + 6 + ], + 913, + [ + 914, + 807, + 805 + ] + ] +] diff --git a/research/e8-r715-whole-hosted/data/mixed-word.json.gz b/research/e8-r715-whole-hosted/data/mixed-word.json.gz new file mode 100644 index 0000000000..d5b73bd534 Binary files /dev/null and b/research/e8-r715-whole-hosted/data/mixed-word.json.gz differ diff --git a/research/e8-r715-whole-hosted/data/mixing.json b/research/e8-r715-whole-hosted/data/mixing.json new file mode 100644 index 0000000000..2e98e93885 --- /dev/null +++ b/research/e8-r715-whole-hosted/data/mixing.json @@ -0,0 +1,282 @@ +[ + [ + 128, + 131, + 736 + ], + [ + 129, + 130, + 742 + ], + [ + 132, + 135, + 747 + ], + [ + 133, + 134, + 741 + ], + [ + 136, + 139, + 688 + ], + [ + 137, + 138, + 694 + ], + [ + 140, + 143, + 699 + ], + [ + 141, + 142, + 693 + ], + [ + 144, + 147, + 676 + ], + [ + 145, + 146, + 682 + ], + [ + 148, + 151, + 687 + ], + [ + 149, + 150, + 681 + ], + [ + 152, + 155, + 664 + ], + [ + 153, + 154, + 670 + ], + [ + 156, + 159, + 675 + ], + [ + 157, + 158, + 669 + ], + [ + 160, + 163, + 700 + ], + [ + 161, + 162, + 706 + ], + [ + 164, + 167, + 711 + ], + [ + 165, + 166, + 705 + ], + [ + 168, + 171, + 748 + ], + [ + 169, + 170, + 754 + ], + [ + 172, + 175, + 759 + ], + [ + 173, + 174, + 753 + ], + [ + 176, + 179, + 808 + ], + [ + 177, + 178, + 814 + ], + [ + 180, + 183, + 819 + ], + [ + 181, + 182, + 813 + ], + [ + 184, + 187, + 652 + ], + [ + 185, + 186, + 658 + ], + [ + 188, + 191, + 663 + ], + [ + 189, + 190, + 657 + ], + [ + 192, + 195, + 712 + ], + [ + 193, + 194, + 718 + ], + [ + 196, + 199, + 723 + ], + [ + 197, + 198, + 717 + ], + [ + 200, + 203, + 760 + ], + [ + 201, + 202, + 766 + ], + [ + 204, + 207, + 771 + ], + [ + 205, + 206, + 765 + ], + [ + 208, + 211, + 796 + ], + [ + 209, + 210, + 802 + ], + [ + 212, + 215, + 807 + ], + [ + 213, + 214, + 801 + ], + [ + 216, + 219, + 784 + ], + [ + 217, + 218, + 790 + ], + [ + 220, + 223, + 795 + ], + [ + 221, + 222, + 789 + ], + [ + 224, + 227, + 772 + ], + [ + 225, + 226, + 778 + ], + [ + 228, + 231, + 783 + ], + [ + 229, + 230, + 777 + ], + [ + 232, + 235, + 724 + ], + [ + 233, + 234, + 730 + ], + [ + 236, + 239, + 735 + ], + [ + 237, + 238, + 729 + ] +] diff --git a/research/e8-r715-whole-hosted/data/pair-retiming.json b/research/e8-r715-whole-hosted/data/pair-retiming.json new file mode 100644 index 0000000000..13a7582143 --- /dev/null +++ b/research/e8-r715-whole-hosted/data/pair-retiming.json @@ -0,0 +1,1626 @@ +[ + [ + "B", + 51, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62 + ], + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 73, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62 + ], + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 53, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ] + ], + [ + "B", + 83, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ] + ], + [ + "B", + 50, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94 + ], + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 75, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94 + ], + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 52, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ] + ], + [ + "B", + 67, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ] + ], + [ + "B", + 54, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63 + ], + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 79, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63 + ], + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 55, + [ + 0, + 3, + 4, + 7, + 58, + 59, + 60, + 61, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 91, + [ + 0, + 3, + 4, + 7, + 58, + 59, + 60, + 61, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 56, + [ + 0, + 3, + 5, + 6, + 57, + 59, + 61, + 63, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 87, + [ + 0, + 3, + 5, + 6, + 57, + 59, + 61, + 63, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 57, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ] + ], + [ + "B", + 99, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ] + ], + [ + "B", + 58, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 95, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 59, + [ + 1, + 3, + 4, + 6, + 57, + 59, + 60, + 62, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ] + ], + [ + "B", + 107, + [ + 1, + 3, + 4, + 6, + 57, + 59, + 60, + 62, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ] + ], + [ + "B", + 60, + [ + 1, + 3, + 5, + 7, + 58, + 59, + 62, + 63, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 103, + [ + 1, + 3, + 5, + 7, + 58, + 59, + 62, + 63, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 61, + [ + 2, + 3, + 4, + 5, + 57, + 58, + 61, + 62, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 119, + [ + 2, + 3, + 4, + 5, + 57, + 58, + 61, + 62, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 62, + [ + 2, + 3, + 6, + 7, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ] + ], + [ + "B", + 115, + [ + 2, + 3, + 6, + 7, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ] + ], + [ + "B", + 63, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 111, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ] + ] +] diff --git a/research/e8-r715-whole-hosted/data/residual-isometries.json b/research/e8-r715-whole-hosted/data/residual-isometries.json new file mode 100644 index 0000000000..5864e4d680 --- /dev/null +++ b/research/e8-r715-whole-hosted/data/residual-isometries.json @@ -0,0 +1,1344 @@ +[ + { + "frame": 0, + "entrance_rank": 0, + "entrance_basis": [], + "residual_basis": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [] + }, + { + "frame": 2, + "entrance_rank": 1, + "entrance_basis": [ + 0 + ], + "residual_basis": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [] + }, + { + "frame": 3, + "entrance_rank": 1, + "entrance_basis": [ + 1 + ], + "residual_basis": [ + 0, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ] + ] + }, + { + "frame": 4, + "entrance_rank": 1, + "entrance_basis": [ + 2 + ], + "residual_basis": [ + 0, + 1, + 3, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ] + ] + }, + { + "frame": 5, + "entrance_rank": 1, + "entrance_basis": [ + 3 + ], + "residual_basis": [ + 0, + 1, + 2, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ] + ] + }, + { + "frame": 8, + "entrance_rank": 1, + "entrance_basis": [ + 6 + ], + "residual_basis": [ + 0, + 1, + 2, + 3, + 4, + 5, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ] + ] + }, + { + "frame": 9, + "entrance_rank": 1, + "entrance_basis": [ + 7 + ], + "residual_basis": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ], + [ + "swap", + 6, + 7, + null + ] + ] + }, + { + "frame": 292, + "entrance_rank": 2, + "entrance_basis": [ + 4, + 5 + ], + "residual_basis": [ + 0, + 1, + 2, + 3, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 0, + 2, + null + ], + [ + "swap", + 1, + 3, + null + ], + [ + "swap", + 2, + 4, + null + ], + [ + "swap", + 3, + 5, + null + ] + ] + }, + { + "frame": 295, + "entrance_rank": 2, + "entrance_basis": [ + 2, + 6 + ], + "residual_basis": [ + 0, + 1, + 3, + 4, + 5, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 0, + 2, + null + ], + [ + "swap", + 1, + 3, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ] + ] + }, + { + "frame": 956, + "entrance_rank": 2, + "entrance_basis": [ + 0, + 6 + ], + "residual_basis": [ + 1, + 2, + 3, + 4, + 5, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ] + ] + }, + { + "frame": 957, + "entrance_rank": 2, + "entrance_basis": [ + 5, + 6 + ], + "residual_basis": [ + 0, + 1, + 2, + 3, + 4, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "denominator": 2, + "gaussian_reduction": [ + [ + "swap", + 0, + 2, + null + ], + [ + "swap", + 1, + 3, + null + ], + [ + "swap", + 2, + 4, + null + ], + [ + "swap", + 3, + 5, + null + ], + [ + "swap", + 4, + 6, + null + ], + [ + "swap", + 5, + 6, + null + ] + ] + } +] diff --git a/research/e8-r715-whole-hosted/data/single-retiming.json b/research/e8-r715-whole-hosted/data/single-retiming.json new file mode 100644 index 0000000000..23446e6065 --- /dev/null +++ b/research/e8-r715-whole-hosted/data/single-retiming.json @@ -0,0 +1 @@ +[["A", 571, [64, 67], [64]], ["A", 574, [65, 66], [65]], ["A", 577, [68, 71], [68]], ["A", 580, [69, 70], [69]], ["A", 599, [32, 35], [32]], ["A", 602, [33, 34], [33]], ["A", 605, [36, 39], [36]], ["A", 608, [37, 38], [37]], ["A", 627, [24, 27], [24]], ["A", 630, [25, 26], [25]], ["A", 633, [28, 31], [28]], ["A", 636, [29, 30], [29]], ["A", 655, [16, 19], [16]], ["A", 658, [17, 18], [17]], ["A", 661, [20, 23], [20]], ["A", 664, [21, 22], [21]], ["A", 683, [40, 43], [40]], ["A", 686, [41, 42], [41]], ["A", 689, [44, 47], [44]], ["A", 692, [45, 46], [45]], ["A", 711, [72, 75], [72]], ["A", 714, [73, 74], [73]], ["A", 717, [76, 79], [76]], ["A", 720, [77, 78], [77]], ["A", 739, [112, 115], [112]], ["A", 742, [113, 114], [113]], ["A", 745, [116, 119], [116]], ["A", 748, [117, 118], [117]], ["A", 767, [8, 11], [8]], ["A", 770, [9, 10], [9]], ["A", 773, [12, 15], [12]], ["A", 776, [13, 14], [13]], ["A", 795, [48, 51], [48]], ["A", 798, [49, 50], [49]], ["A", 801, [52, 55], [52]], ["A", 804, [53, 54], [53]], ["A", 823, [80, 83], [80]], ["A", 826, [81, 82], [81]], ["A", 829, [84, 87], [84]], ["A", 832, [85, 86], [85]], ["A", 851, [104, 107], [104]], ["A", 854, [105, 106], [105]], ["A", 857, [108, 111], [108]], ["A", 860, [109, 110], [109]], ["A", 879, [96, 99], [96]], ["A", 882, [97, 98], [97]], ["A", 885, [100, 103], [100]], ["A", 888, [101, 102], [101]], ["A", 907, [88, 91], [88]], ["A", 910, [89, 90], [89]], ["A", 913, [92, 95], [92]], ["A", 916, [93, 94], [93]], ["A", 935, [56, 59], [56]], ["A", 938, [57, 58], [57]], ["A", 941, [60, 63], [60]], ["A", 944, [61, 62], [61]], ["A", 963, [0, 1], [0]], ["A", 1426, [2, 3, 4, 5, 96, 97, 98, 99, 100, 101, 102, 103], [0, 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111]], ["A", 2310, [1, 2, 3, 5, 6, 7, 48, 49, 50, 51, 52, 53, 54, 55, 88, 89, 90, 91, 92, 93, 94, 95, 104, 105, 106, 107, 108, 109, 110, 111], [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 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]], ["A", 2328, [0, 1, 2, 3, 6, 7, 24, 25, 26, 27, 28, 29, 30, 31, 64, 65, 66, 67, 68, 69, 70, 71, 88, 89, 90, 91, 92, 93, 94, 95], [0, 1, 2, 3, 5, 6, 7, 24, 25, 26, 27, 28, 29, 30, 31, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 64, 65, 66, 67, 68, 69, 70, 71, 88, 89, 90, 91, 92, 93, 94, 95, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119]]] \ No newline at end of file diff --git a/research/e8-r715-whole-hosted/data/word.json.gz b/research/e8-r715-whole-hosted/data/word.json.gz new file mode 100644 index 0000000000..f7d55b8bd4 Binary files /dev/null and b/research/e8-r715-whole-hosted/data/word.json.gz differ diff --git a/research/e8-r715-whole-hosted/upstream462/NOTICE.md b/research/e8-r715-whole-hosted/upstream462/NOTICE.md new file mode 100644 index 0000000000..82c7be925e --- /dev/null +++ b/research/e8-r715-whole-hosted/upstream462/NOTICE.md @@ -0,0 +1,13 @@ +Apache-2.0. Original upstream notices and licenses are retained. +Four-replica selection, changed owner mapping, physical-family prefix audit, +finite repricing and composition by Rohan Arun with OpenAI Codex assistance. + +Unchanged bit word: Rohan Arun with Claude Opus5.5, PR459, including DreamingOfClouds' +target-prefix mixing from PR450. Unchanged complex supplier: chafreaky with +OpenAI Codex, PR458, building on DreamingOfClouds' PR449 kernel. +Parent composition: Rohan Arun with OpenAI Codex, PR460. +Hosting and solver lineage: DaysSky PR442; chafreaky PR443/445/451/454; +DreamingOfClouds' whole-hosting solver; Rohan Arun PR456 whole-replica pooling. +Retained geometry and local tools: icekylinx, eumemic, Zhihao Chen, Dylan Crow, +Jacob Sussman, Henry Grant and all authors in the upstream source-pinned notices. +No independent discovery of either unchanged local supplier is claimed. diff --git a/research/e8-r715-whole-hosted/upstream462/PROOF.md b/research/e8-r715-whole-hosted/upstream462/PROOF.md new file mode 100644 index 0000000000..ae6d5c9d74 --- /dev/null +++ b/research/e8-r715-whole-hosted/upstream462/PROOF.md @@ -0,0 +1,66 @@ +# Four-replica whole bit hosting + +The local mixed rank151 word is exactly PR459's word, and the complex supplier +is exactly PR458. PR460's complete composition is the verification parent. +Only the bit helper ownership and remainder-child packing change. + +Pool four replicas when assigning each whole residual to a pending idle block. +Each occurrence has exactly one physical owner and one contiguous rank4/7/8 +slot on that family. No residual crosses a physical-family boundary. The +assignment is expanded for all32560 occurrences. A host may lie in another +replica, but its pair is untouched by every local call or bridge throughout +the inherited window. Calls remain sequential, and all private work is erased +before reuse. At each call, the whole-family permutation selecting an idle +owner is followed by the unchanged residual isometry and slot-coordinate map. +The existing complete-call correlated-dirty-helper interface applies to the +borrowed family irrespective of its replica number. Residual coordinate +factors on disjoint pending subspaces commute; each later idle child retains +exactly its unused coordinates. Both the family permutation and the existing +isometry are charged. This uses the same whole-residual interface as PR456, +not the challenged factor-splitting argument of PR448. + +The four-replica paid histogram is +{1:109052,2:47050,3:11678,4:15550,5:4312,6:2816,7:2554,8:396,56:230}. +Live stock is4800, physical stock4809, and78*4800-rank_mass=1632. +Eight and sixteen replica screens attain the same normalized endpoint. +This is not claimed to be a universal packing optimum. + +## A fresh bound on intermediate integer growth + +The old independent-replica prefix charge is not reused. Track a nonnegative +row-L1 envelope for each physical family in the actual schedule, initialized +to1 for every borrowed/data family and0 for cleared private work. For each +literal ADD on physical owners, update B_dst += |coefficient| B_src, even if +both logical roles name the same physical family. COPY copies the bound to +the private stream; erase resets that stream to0. Include every bridge shear +in chronological order. Climb/route operations in the bit supplier are address +permutations and do not increase this envelope. Updating an entire-family +bound overcharges restricted-coordinate operations. Thus induction bounds +intermediate values independently of cancellations or correlations among +borrowed inputs, within the retained cover/compiler interpretation. + +The maximum takes529 bits; charge576 bits. An independent traversal recomputes +the same bound. The finite coefficient takes529 bits, and its three-level +composition takes1640 bits, charged at1664. The larger charge is passed to all +bootstrap cutoff inequalities. The complete orthogonal-cover row coefficient +is19428, below the unchanged20161 allowance. The maximum child remains56, so +78^3 > 2*56^3. Two extra routing factors per helper selector are charged for +owner-family reassignment. No stronger outside precision or row contract is +silently introduced. + +Both rational moment engines, with the inherited fallback, give bit lower +1276121381468881130487/10^24. Retaining PR458's larger complex lower endpoint, +six completed bootstrap levels and all47 strict outer inequalities give +kappa=1274494971185576/10^18, about0.00623541067% above PR460. The bit side binds. + +The component screen replays the unchanged word's exported official records, +all9340 unbanked scalar columns, exact residual/projector routes, geometry, +changed ownership and emitted instructions, independent prefix bound,22 +mutations, both moments and outer controls. It does not replace a full parent +replay. The default verifier performs that replay before the changed checks; +explicit parent reuse emits a distinct receipt status. + +All retained whole-call correlated hosting, local/all-size compiler, +mutable-basis/target-label, restored-work, compressed-window, common-grid/tape, +precision, row-divisor and analytic assumptions remain. No unconditional +multiplication theorem, new Lean proof or global optimum is claimed. diff --git a/research/e8-r715-whole-hosted/upstream462/audit.py b/research/e8-r715-whole-hosted/upstream462/audit.py new file mode 100644 index 0000000000..6871a76b98 --- /dev/null +++ b/research/e8-r715-whole-hosted/upstream462/audit.py @@ -0,0 +1,213 @@ +"""Independent eleven-stage schedule, geometry embedding and hosted ownership audit. +Derived from PR386/436/443/444 and DaysSky PR442; all source notices retained. +Eleven-stage integration by chafreaky with OpenAI Codex assistance, Apache-2.0. +No emitter, schedule constructor, hosting solver or expander is imported. +Usage: audit.py PARENT443_CANDIDATE OUT +""" +import copy,gzip,hashlib,json,sys +from local_audit import local_audit +from collections import Counter,defaultdict +from pathlib import Path +K,L,M,T,V,R=5,11,78,4,120,740 +DATA=2*K*V*T +read=lambda p:json.loads(p.read_text()) +sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() +load_template=lambda p:json.loads(gzip.decompress(p.read_bytes())) + +def windows(schedule): + last={};seen=[];win={};ranks={};pairs={} + for position,event in enumerate(schedule): + kind=event['kind'] + if kind=='local_cover_sweep': + seen.append((position,event['stage'],event['pair']));last[event['pair']]=position + elif kind=='bridge': + last[event['dst']]=position;last[event['src']]=position + elif kind=='idle': + i=event['idx'];assert i not in win + win[i]={s for pos,s,p in seen if last.get(event['pair'],-1)0 and 0<=off and off+w<=rank[i] + cells=set(range(off,off+w));assert not cells&used[i,cp];used[i,cp]|=cells + assert (s,h) not in hosted;hosted[s,h]=(i,cp,off,w) + assert set(hosted)=={(s,h) for s in range(L) for h in range(R*T)} + rem={};summaries={} + for i in rank: + if not rank[i]:continue + for cp in range(2*V*T):rem[i,cp]=rank[i]-len(used[i,cp]) + if str(i) in hs['windows']: + summaries[str(i)]={str(r):n for r,n in sorted(Counter(rem[i,cp] for cp in range(2*V*T)).items())} + assert hs['remainders']==summaries + assert len(t['calls'])==L*T;seen=set();paid=Counter() + localhash={ori:hashlib.sha256(json.dumps(es,separators=(',',':')).encode()).hexdigest() for ori,es in t['local_programs'].items()} + for index,c in enumerate(t['calls']): + s,rep=c['stage'],c['replica'];p=max(0,(s-1)//2);rev=bool(s%2) + assert (s,rep)==divmod(index,T) and c['pair']==p and c['orientation']==('reverse' if rev else 'forward') + assert c['local_hash']==localhash[c['orientation']] + own=c['owners'];assert len(own)==2*V+R + assert len({(f,tuple(route)) for f,route in own})==2*V+R + for j,(f,route) in enumerate(own): + assert 0<=f2*max(paid)**3 + return paid + +def expanded_digest(t): + h=hashlib.sha256();count=0 + for call in t['calls']: + for op in t['local_programs'][call['orientation']]: + row=[op[0],call['owners'][op[1]]] + if op[0]==0:row.extend(op[2:]) + else: + row.append(call['owners'][op[2]] if op[2]<2*V+R else [t['live'],['private',0]]) + row.extend(op[3:]) + h.update(json.dumps(row,separators=(',',':')).encode());h.update(b'\n');count+=1 + return h.hexdigest(),count + + +def physical_prefix(t): + bounds={i:1 for i in range(t['live'])};scratch=t['live'];bounds[scratch]=0;maximum=1 + stages=defaultdict(list) + for c in t['calls']:stages[c['stage']].append(c) + for e in t['schedule']: + if e['kind']=='local_cover_sweep': + for c in stages[e['stage']]: + for z in t['local_programs'][c['orientation']]: + tag=z[0] + if tag==0:continue + dst=c['owners'][z[1]][0] + if tag==1: + sr=scratch if z[2]==2*V+R else c['owners'][z[2]][0] + bounds[dst]=bounds[dst]+abs(z[3])*bounds[sr] + elif tag==2:bounds[scratch]=bounds[dst] + else:assert tag==3;bounds[scratch]=0 + maximum=max(maximum,bounds[dst],bounds[scratch]) + elif e['kind']=='bridge': + for replica in range(T): + for port in range(V): + for side in (0,1): + dp,sp=(e['dst'],e['src']) if side==0 else (e['src'],e['dst']) + dst=replica*2*K*V+(2*dp+side)*V+port;sr=replica*2*K*V+(2*sp+side)*V+port + bounds[dst]+=bounds[sr];maximum=max(maximum,bounds[dst]) + assert bounds[scratch]==0 + return maximum + +def main(): + par,geometry_parent,out=map(Path,sys.argv[1:]);t=load_template(out/'GLOBAL-TEMPLATE.json.gz');pt,local_result=local_audit(par) + g=read(out/'GLOBAL.json');geo=read(out/'GEOMETRY.json');pg=read(geometry_parent/'GEOMETRY.json') + state=read(par/'records/249-states.json');fs=read(par/'records/frames.json')['frames'] + widths=[8-fs[str(state['initial'][str(h)])]['dim'] for h in range(240,980)] + P=audit(t,pt,widths) + assert geo['m']==78 and geo['stages']==11 and len(geo['ports'])==120 and not geo['bank_slots'] and not geo['bank_permutations'] + for p,old in zip(geo['ports'],pg['ports']): + assert {k:v for k,v in p.items() if k!='routes'}=={k:v for k,v in old.items() if k!='routes'} + assert p['routes'][:9]==old['routes'] and len(p['routes'])==11 + for s,route in enumerate(p['routes']): + if s==0:assert route==dict(stage=0,axes=list(range(8)),identity=True) + else: + assert route==dict(stage=s,axes=list(range(8))+list(range(8+7*(s-1),8+7*s)),elementary_inverse_replay=old['routes'][1]['elementary_inverse_replay']) + assert len(set(route['axes']))==15 and max(route['axes'])1<<192 # Old independent-replica charge is not reused. + controls=[] + def reject(name,fn): + q=copy.deepcopy(t);fn(q) + try:audit(q,pt,widths) + except (AssertionError,KeyError,IndexError,TypeError):controls.append(name) + else:raise AssertionError('accepted '+name) + slot=lambda q:q['hosting']['slots'][0] + reject('slot outside window',lambda q:slot(q).__setitem__(4,10)) + reject('copy outside family',lambda q:slot(q).__setitem__(1,2*V*T)) + reject('negative slot offset',lambda q:slot(q).__setitem__(2,-1)) + reject('wrong residual width',lambda q:slot(q).__setitem__(3,slot(q)[3]+1)) + reject('duplicate helper',lambda q:q['hosting']['slots'].append(slot(q))) + reject('missing helper',lambda q:q['hosting']['slots'].pop()) + reject('owner replica does not match assignment',lambda q:q['calls'][0]['owners'][240].__setitem__(0,q['calls'][0]['owners'][240][0]+1200)) + reject('cross-replica data',lambda q:q['calls'][0]['owners'][0].__setitem__(0,1200)) + reject('wrong hosted coordinate',lambda q:q['calls'][0]['owners'][240][1].__setitem__(2,99)) + reject('helper changed to bank',lambda q:q['calls'][0]['owners'][240][1].__setitem__(0,'bank')) + reject('wrong call orientation',lambda q:q['calls'][0].__setitem__('orientation','reverse')) + reject('duplicate call',lambda q:q['calls'].__setitem__(1,q['calls'][0])) + reject('dropped final stage',lambda q:q.__setitem__('calls',[c for c in q['calls'] if c['stage']<10])) + reject('wrong idle rank',lambda q:next(e for e in q['schedule'] if e['kind']=='idle').__setitem__('rank',1)) + reject('omitted bridge',lambda q:q['schedule'].pop(next(i for i,e in enumerate(q['schedule']) if e['kind']=='bridge'))) + reject('wrong bridge sign',lambda q:next(e for e in q['schedule'] if e['kind']=='bridge').__setitem__('coefficient',-1)) + reject('omitted terminal exchange',lambda q:q['schedule'].pop()) + reject('understated live stock',lambda q:q.__setitem__('live',q['live']-1)) + reject('missing remainder summary',lambda q:q['hosting']['remainders'].pop(next(iter(q['hosting']['remainders'])))) + reject('wrong residual isometry',lambda q:q['residual_isometries'][0]['orthogonal_rows_numerator'][0].__setitem__(0,99)) + reject('omitted local instruction',lambda q:q['local_programs']['forward'].pop()) + reject('wrong reflected copy rank',lambda q:next(z for z in q['local_programs']['reverse'] if z[0]==2).__setitem__(5,0)) + res=dict(status='PASS_INDEPENDENT_ELEVEN_STAGE_HOSTING_AUDIT',template_sha256=th,emitted_program_sha256=digest, + emitted_events=count,profile={str(r):n for r,n in sorted(P.items())},live=4800,physical=4809,hosted_residuals=32560, + bank_assignments=0,rank_mass=sum(r*n for r,n in P.items()),deficit=1632,maxchild=max(P),geometry_routes=1320, + halving_depth=3,physical_prefix_bits=prefix.bit_length(),charged_prefix_bits=g['charged_prefix_bits'],local_audit=local_result,mutations_rejected=controls) + (out/'AUDIT.json').write_text(json.dumps(res,indent=2)+'\n');print(json.dumps(res)) +if __name__=='__main__':main() diff --git a/research/e8-r715-whole-hosted/upstream462/emit.py b/research/e8-r715-whole-hosted/upstream462/emit.py new file mode 100644 index 0000000000..71d945bf21 --- /dev/null +++ b/research/e8-r715-whole-hosted/upstream462/emit.py @@ -0,0 +1,285 @@ +# Four-replica whole-family pooling by Rohan Arun with OpenAI Codex. Upstream notices retained. +# Kernel integration of PR436/PR386 by chafreaky, with OpenAI Codex assistance. +# Original copyright and attribution retained below. This variant uses explicit +# residual isometries and mixed-width banks; the original all-zero-start +# requirement is replaced by the verified kernel entrance contract. +"""Source-bound eleven-stage bit template with 8 independent replicas and no helper banks. +PR386 global identity and PR436 generalization by Zhihao Chen and eumemic, +with their disclosed OpenAI Codex and Anthropic Claude assistance, Apache-2.0. +PR439 explicit residual routes and this replication extension by chafreaky, +with OpenAI Codex assistance. All owner assignments and emitted calls are checked. +Historical PR386 regression is performed by the unchanged parent wrapper. +""" +import argparse, gzip, hashlib, json, struct, time, sys +from collections import Counter +from pathlib import Path +HERE=Path(__file__).resolve().parent +sys.path.insert(0,str(HERE.parents[1]/"e8-r740-replica32/code")) +sys.path.insert(0,str(HERE.parents[1]/"idle-axis-hosting")) +from bank_routes import validate_isometries +import hosting_core as HC + +H,L,K,T,M=8,11,5,4,78 +def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() +def write(p,x): p.write_text(json.dumps(x,indent=2)+'\n') + +def recipe(): + out=[dict(kind='local',stage=0,pair=0,reverse=False)]; stage=1 + for j in range(K): + out.append(dict(kind='local',stage=stage,pair=j,reverse=True)); stage+=1 + if j/2') + geo=json.loads((out/'GEOMETRY.json').read_text()) + assert geo['status']=='PASS_COMPRESSED_ELEVEN_BIT_GEOMETRY' + # the port routes depend only on the labels: same 120 label vectors, in the same order + assert len(geo['ports'])==V and all(p['port']==t and p['q']==w['lines'][t] for t,p in enumerate(geo['ports'])) + rp=a.local_check/'records/249-records.bin'; raw=rp.read_bytes(); rec=list(struct.iter_unpack('<6i',raw)) + state=json.loads((a.local_check/'records/249-states.json').read_text()) + fs=json.loads((a.local_check/'records/frames.json').read_text())['frames'] + dims={int(f):z['dim'] for f,z in fs.items()} + lg=json.loads((a.local_check/'cout/legality.json').read_text()) + cc=json.loads((a.local_check/'cout/columns.json').read_text()) + assert lg['status'].startswith('PASS') and cc['status'].startswith('PASS') + assert (state['v'],state['n'])==(V,LOCAL) and lg['copies']==lg['erasures']==9 + ADDS=lg['common_frame_ADDs'] + assert cc['formal_columns_checked']==4*V+R and cc['local_scalar_additions']==ADDS + initial=[state['initial'][str(i)] for i in range(LOCAL)] + final=[state['final'][str(i)] for i in range(LOCAL)] + assert all(dims[final[i]]==H for i in range(2*V,LOCAL)) + widths=[H-dims[initial[i]] for i in range(2*V,LOCAL)] + ENT=sum(H-z for z in widths) + NB=0;LIVE=DATA + assert T==4 and M==8+7*(L-1) + isometries=json.loads(a.isometries.read_text()) + assert validate_isometries(isometries,w['frames'],w['lines'],dims)==set(initial[2*V:]) + streams={}; checks={}; localH=None + for reverse in (False,True): + cur=(final if reverse else initial)[:]+[-1]; val=[1<=0 + cur[x]=newf + if f: hist[f]+=1 + events.append([0,x,oldf,newf,f,int(reverse)]) + elif op==1: + assert cur[x]==cur[y]==f and x!=y and x 0 else 0 +Bb, Bd = c['B'][:sb], c['B'][sb:] +assert all(v <= d < 2 * v and all(s >= 2 * v for s in ss) for f, d, ss in Bd), 'B must be helper deliveries only' +assert not any(v <= s < 2 * v for ph in 'DAC' for f, d, ss in c[ph] for s in ss), 'no target operands in the input' +seq = defaultdict(list) +for i, (f, d, ss) in enumerate(Bd): seq[d].append((i, f, ss)) +def chain(t): + out = [] + for i, f, ss in seq[t]: + if not out or out[-1] != f: out.append(f) + return out +def chcost(frs, fin): + ds = [0] + [dim[f] for f in frs] + [dim[fin]] + return sum(cost(b - a) for a, b in zip(ds, ds[1:]) if b > a) +def pref(t, G): + m = Counter() + for i, f, ss in seq[t]: + if F[f] <= F[G]: + for s in ss: m[s] ^= 1 + return frozenset(k for k, b in m.items() if b) +T = range(v, 2 * v); orig = {t: chain(t) for t in T}; fin = {t: c['final'][t] for t in T} +for t in T: assert all(F[a] <= F[b] for a, b in zip(orig[t], orig[t][1:])), 'input target chains nested' +cands = [] +for u in T: + base = chcost(orig[u], fin[u]) + for w in T: + if w == u: continue + for G in orig[w]: + if not F[G] <= F[fin[u]]: continue + pu = pref(u, G) + if not pu or pu != pref(w, G): continue + rest = [f for f in orig[u] if not F[f] <= F[G]] + if not all(F[G] <= F[f] for f in rest): continue + sv = base - chcost([G] + rest, fin[u]) + if sv > 1e-9: cands.append((-sv, u, w, G)) +cands.sort() +mixfrom, mixG, donors = {}, {}, defaultdict(set) +def anc(t): + s = set() + while t in mixfrom: t = mixfrom[t]; s.add(t) + return s +for nsv, u, w, G in cands: + if u in mixfrom or u in anc(w): continue + if w in mixfrom or donors[u]: continue # f2cancel: forbid chained mixing (receiver as donor): the preconditioner/scatter fix is not exact for chains + if w in mixG and not F[mixG[w]] <= F[G]: continue + if any(not F[G] <= F[mixG[x]] for x in donors[u]): continue + mixfrom[u] = w; mixG[u] = G; donors[w].add(u) +saving = sum(chcost(orig[u], fin[u]) - chcost([mixG[u]] + [f for f in orig[u] if not F[f] <= F[mixG[u]]], fin[u]) for u in mixfrom) +order, seen = [], set() +def visit(u): + if u in seen: return + if u in mixfrom: visit(mixfrom[u]) + seen.add(u); order.append(u) +for u in sorted(mixfrom): visit(u) +recv = [u for u in order if u in mixfrom] +w2 = json.loads(json.dumps(c)) +w2['D'] = c['D'] + [[0, u, [mixfrom[u]]] for u in recv] +for u in recv: + w2['scatter'][u - v] = sorted(set(w2['scatter'][u - v]) ^ set(w2['scatter'][mixfrom[u] - v])) +drop = {i for u in recv for i, f, ss in seq[u] if F[f] <= F[mixG[u]]} +keep = [g for i, g in enumerate(Bd) if i not in drop] +newB = list(Bb) +for k in range(h + 1): + newB += [g for g in keep if dim[g[0]] == k] + newB += [[mixG[u], u, [mixfrom[u]]] for u in recv if dim[mixG[u]] == k] +w2['B'] = newB +w2['target_mix'] = dict(rule='y_u += y_w at frame G (after w reaches G); frame-0 preconditioner y_u += y_w; scatter_u ^= scatter_w', + receivers=[[u, mixfrom[u], mixG[u]] for u in recv]) +raw = json.dumps(w2, sort_keys=True, separators=(',', ':')).encode() +(gzip.open if sys.argv[2].endswith('.gz') else open)(sys.argv[2], 'wb').write(raw if not sys.argv[2].endswith('.gz') else raw) +print(json.dumps(dict(receivers=len(recv), mix_dims=dict(Counter(dim[mixG[u]] for u in recv)), target_climb_saving_per_call=round(saving, 3), + B_gates=[len(c['B']), len(newB)], D_gates=[len(c['D']), len(w2['D'])]))) diff --git a/research/e8-r715-whole-hosted/upstream467/NOTICE.md b/research/e8-r715-whole-hosted/upstream467/NOTICE.md new file mode 100644 index 0000000000..ce9994d677 --- /dev/null +++ b/research/e8-r715-whole-hosted/upstream467/NOTICE.md @@ -0,0 +1 @@ +R715 producer and carrier/XOR construction: DreamingOfClouds, with Claude Opus 5.5, PR463. Shared-donor kernel mechanism and exact engines: chafreaky and the PR417/443 lineage. Whole hosting: DaysSky PR442. Target mixing: DreamingOfClouds PR450/463; no cross-family split used. New selection, 74 retiming moves and four-replica pooling: Rohan Arun with OpenAI Codex. Complex supplier: chafreaky PR458, unchanged and cited only at this stage. The inherited repository package notices and Apache-2.0 licenses remain applicable. See the retained PR463 README and source pins. diff --git a/research/e8-r715-whole-hosted/upstream467/retiming.json b/research/e8-r715-whole-hosted/upstream467/retiming.json new file mode 100644 index 0000000000..735e13caaf --- /dev/null +++ b/research/e8-r715-whole-hosted/upstream467/retiming.json @@ -0,0 +1,1379 @@ +{ + "status": "PASS_EXACT_RETIMER_REPLAY_GLOBAL_PENDING", + "source_sha256": "3742d7c9b631c106fc3ec9287a8dd099074355b6740163d2b3dde782cc2ce817", + "word_sha256": "87b7beb1d5a129d9b216b68e9f169c81dab6512f93deb85e8c5830a9dea5ba4b", + "changes": [ + { + "changes": [ + [ + "A", + 509, + 122, + 66 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "2": -1, + "1": 1 + } + }, + { + "changes": [ + [ + "A", + 512, + 123, + 67 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 515, + 124, + 70 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 518, + 125, + 71 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 537, + 134, + 34 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 540, + 135, + 35 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "2": -1, + "1": 1 + } + }, + { + "changes": [ + [ + "A", + 543, + 136, + 38 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 546, + 137, + 39 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "1": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 565, + 146, + 26 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 568, + 147, + 27 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 571, + 148, + 30 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "1": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 574, + 149, + 31 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "2": -1, + "1": 1 + } + }, + { + "changes": [ + [ + "A", + 593, + 158, + 18 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 596, + 159, + 19 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "1": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 599, + 160, + 22 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 602, + 161, + 23 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 621, + 170, + 42 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 624, + 171, + 43 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 627, + 172, + 46 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 630, + 173, + 47 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 649, + 182, + 74 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 652, + 183, + 75 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "1": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 655, + 184, + 78 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 658, + 185, + 79 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 677, + 194, + 114 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 680, + 195, + 115 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 683, + 196, + 118 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "2": -1, + "1": 1 + } + }, + { + "changes": [ + [ + "A", + 686, + 197, + 119 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 705, + 206, + 10 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 708, + 207, + 11 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 711, + 208, + 14 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 714, + 209, + 15 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 733, + 218, + 50 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 736, + 219, + 51 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 739, + 220, + 54 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 742, + 221, + 55 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 761, + 230, + 82 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 764, + 231, + 83 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 767, + 232, + 86 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "2": -1, + "1": 1 + } + }, + { + "changes": [ + [ + "A", + 770, + 233, + 87 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 789, + 242, + 106 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "1": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 792, + 243, + 107 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 795, + 244, + 110 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "1": 1, + "4": -1, + "5": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 798, + 245, + 111 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "1": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 817, + 254, + 98 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 820, + 255, + 99 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 823, + 256, + 102 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 826, + 257, + 103 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "1": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 845, + 266, + 90 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 848, + 267, + 91 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "1": 1, + "2": -1 + } + }, + { + "changes": [ + [ + "A", + 851, + 268, + 94 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 854, + 269, + 95 + ] + ], + "score": -0.001438322727710703, + "delta": { + "1": 1, + "2": -1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 873, + 278, + 58 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 876, + 279, + 59 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 879, + 280, + 62 + ] + ], + "score": -0.0014383227277107048, + "delta": { + "4": -1, + "5": 1, + "2": -1, + "1": 1 + } + }, + { + "changes": [ + [ + "A", + 882, + 281, + 63 + ] + ], + "score": -0.001438322727710703, + "delta": { + "2": -1, + "1": 1, + "4": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 901, + 290, + 2 + ] + ], + "score": -0.0016976751338016183, + "delta": { + "2": -1, + "1": 1, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "A", + 1364, + 481, + 842 + ] + ], + "score": -0.004341873568939308, + "delta": { + "3": -1, + "2": -1, + "5": 1 + } + }, + { + "changes": [ + [ + "A", + 2248, + 821, + 836 + ] + ], + "score": -0.000674807441560692, + "delta": { + "1": 1, + "2": -2, + "3": 1 + } + }, + { + "changes": [ + [ + "A", + 2266, + 830, + 840 + ] + ], + "score": -0.000674807441560692, + "delta": { + "1": 1, + "2": -2, + "3": 1 + } + }, + { + "changes": [ + [ + "B", + 51, + 548, + 807 + ], + [ + "B", + 73, + 548, + 807 + ] + ], + "score": -0.0003480602506802325, + "delta": { + "5": -1, + "6": 1, + "3": -2, + "2": 3, + "1": -1 + } + }, + { + "changes": [ + [ + "B", + 53, + 582, + 783 + ], + [ + "B", + 83, + 582, + 783 + ] + ], + "score": -0.0003480602506802325, + "delta": { + "3": -2, + "2": 3, + "5": -1, + "6": 1, + "1": -1 + } + }, + { + "changes": [ + [ + "B", + 50, + 549, + 819 + ], + [ + "B", + 75, + 549, + 819 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "3": -2, + "2": 3, + "1": -1, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 52, + 528, + 795 + ], + [ + "B", + 67, + 528, + 795 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "3": -2, + "2": 3, + "1": -1, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 54, + 566, + 771 + ], + [ + "B", + 79, + 566, + 771 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "3": -2, + "2": 3, + "1": -1, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 55, + 600, + 759 + ], + [ + "B", + 91, + 600, + 759 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "1": -1, + "2": 3, + "3": -2, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 56, + 588, + 747 + ], + [ + "B", + 87, + 588, + 747 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "1": -1, + "5": -1, + "6": 1, + "3": -2, + "2": 3 + } + }, + { + "changes": [ + [ + "B", + 57, + 631, + 735 + ], + [ + "B", + 99, + 631, + 735 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "1": -1, + "2": 3, + "3": -2, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 58, + 621, + 723 + ], + [ + "B", + 95, + 621, + 723 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "1": -1, + "3": -2, + "2": 3, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 59, + 641, + 711 + ], + [ + "B", + 107, + 641, + 711 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "3": -2, + "2": 3, + "1": -1, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 60, + 635, + 699 + ], + [ + "B", + 103, + 635, + 699 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "1": -1, + "2": 3, + "5": -1, + "6": 1, + "3": -2 + } + }, + { + "changes": [ + [ + "B", + 61, + 651, + 687 + ], + [ + "B", + 119, + 651, + 687 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "1": -1, + "3": -2, + "2": 3, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 62, + 649, + 675 + ], + [ + "B", + 115, + 649, + 675 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "1": -1, + "2": 3, + "3": -2, + "5": -1, + "6": 1 + } + }, + { + "changes": [ + [ + "B", + 63, + 647, + 663 + ], + [ + "B", + 111, + 647, + 663 + ] + ], + "score": -0.0003480602506802308, + "delta": { + "1": -1, + "3": -2, + "2": 3, + "5": -1, + "6": 1 + } + } + ], + "group_counts": [ + { + "size": 2, + "tested": 11452, + "positive": 14, + "accepted": 14 + } + ], + "local_profile": { + "1": 2386, + "2": 1069, + "4": 294, + "3": 250, + "5": 80, + "6": 72, + "8": 9 + }, + "columns": 955, + "scope": "Existing-frame singles and connected pairs only; global hosting and physical prefix pending." +} diff --git a/research/e8-r715-whole-hosted/upstream467/word.json b/research/e8-r715-whole-hosted/upstream467/word.json new file mode 100644 index 0000000000..d9196c3e94 --- /dev/null +++ b/research/e8-r715-whole-hosted/upstream467/word.json @@ -0,0 +1 @@ +{"A":[[3,242,[842]],[3,242,[856]],[3,243,[842]],[3,243,[856]],[9,255,[821]],[9,255,[865]],[5,707,[724]],[5,707,[798]],[5,707,[812]],[5,707,[854]],[5,707,[868]],[5,707,[894]],[5,708,[723]],[5,708,[810]],[5,708,[852]],[5,708,[880]],[292,709,[737]],[292,709,[908]],[292,710,[738]],[292,710,[878]],[9,711,[782]],[9,711,[796]],[9,711,[824]],[9,711,[906]],[9,712,[752]],[9,712,[780]],[9,712,[794]],[9,712,[822]],[9,712,[862]],[9,712,[892]],[295,714,[900]],[9,717,[779]],[9,717,[821]],[9,717,[828]],[9,717,[865]],[9,717,[896]],[9,717,[910]],[3,719,[842]],[3,719,[856]],[5,721,[723]],[5,721,[879]],[5,721,[880]],[5,722,[724]],[5,722,[853]],[5,722,[854]],[5,722,[867]],[5,722,[868]],[5,725,[870]],[5,725,[884]],[5,725,[898]],[5,726,[870]],[5,726,[884]],[5,726,[898]],[3,727,[742]],[3,727,[842]],[3,727,[846]],[3,727,[856]],[3,727,[859]],[3,728,[742]],[3,728,[842]],[3,728,[846]],[3,728,[856]],[3,728,[860]],[2,731,[746]],[2,731,[758]],[2,732,[746]],[2,732,[758]],[2,733,[774]],[2,733,[786]],[2,733,[803]],[2,733,[815]],[2,734,[774]],[2,734,[786]],[2,734,[804]],[2,734,[816]],[292,735,[737]],[292,735,[936]],[292,735,[941]],[292,736,[738]],[292,736,[947]],[3,739,[756]],[3,739,[831]],[3,739,[842]],[3,739,[856]],[3,739,[858]],[3,739,[871]],[3,740,[756]],[3,740,[832]],[3,740,[842]],[3,740,[856]],[3,740,[858]],[3,740,[872]],[3,741,[742]],[3,741,[859]],[3,741,[860]],[2,745,[746]],[2,747,[762]],[2,747,[776]],[2,747,[789]],[2,747,[800]],[2,747,[813]],[2,748,[762]],[2,748,[776]],[2,748,[790]],[2,748,[800]],[2,748,[814]],[9,749,[823]],[9,749,[824]],[9,749,[864]],[9,750,[752]],[9,750,[820]],[9,750,[822]],[9,750,[861]],[9,750,[862]],[9,753,[793]],[9,753,[874]],[9,753,[901]],[9,753,[915]],[9,754,[793]],[9,754,[874]],[9,754,[902]],[9,754,[916]],[3,755,[756]],[3,755,[831]],[3,755,[832]],[3,755,[871]],[3,755,[872]],[2,757,[758]],[2,761,[762]],[2,761,[789]],[2,761,[790]],[2,761,[799]],[2,761,[800]],[956,763,[912]],[956,763,[945]],[956,765,[912]],[295,767,[838]],[295,767,[939]],[295,768,[838]],[4,769,[784]],[4,769,[826]],[4,769,[839]],[4,770,[784]],[4,770,[826]],[4,770,[840]],[957,771,[818]],[957,771,[932]],[957,772,[818]],[2,773,[774]],[2,773,[815]],[2,773,[816]],[2,775,[776]],[2,775,[789]],[2,775,[790]],[2,775,[799]],[2,775,[800]],[2,775,[813]],[2,775,[814]],[9,777,[779]],[9,778,[780]],[9,778,[820]],[9,778,[822]],[9,778,[890]],[9,778,[892]],[9,781,[782]],[9,781,[864]],[4,783,[784]],[4,783,[839]],[4,783,[840]],[2,785,[786]],[2,785,[803]],[2,785,[804]],[9,787,[802]],[9,787,[891]],[9,787,[903]],[9,788,[802]],[9,788,[891]],[9,788,[905]],[9,791,[793]],[9,791,[901]],[9,791,[902]],[9,791,[915]],[9,791,[916]],[9,792,[794]],[9,792,[861]],[9,792,[862]],[9,792,[890]],[9,792,[892]],[9,795,[796]],[9,795,[823]],[9,795,[824]],[5,797,[798]],[5,797,[867]],[5,797,[868]],[5,797,[893]],[5,797,[894]],[9,801,[802]],[9,801,[903]],[9,801,[905]],[958,805,[914]],[958,805,[952]],[958,807,[914]],[5,809,[810]],[5,809,[879]],[5,809,[880]],[5,811,[812]],[5,811,[853]],[5,811,[854]],[5,811,[893]],[5,811,[894]],[957,817,[818]],[957,817,[932]],[9,819,[821]],[4,825,[826]],[4,825,[839]],[4,825,[840]],[9,827,[828]],[9,827,[909]],[9,827,[910]],[295,837,[838]],[295,837,[939]],[3,841,[842]],[3,845,[846]],[3,845,[859]],[3,845,[860]],[5,851,[852]],[5,851,[879]],[5,851,[880]],[3,855,[856]],[3,857,[858]],[3,857,[871]],[3,857,[872]],[9,863,[865]],[5,869,[870]],[5,869,[897]],[5,869,[898]],[9,873,[874]],[9,873,[915]],[9,873,[916]],[292,876,[878]],[292,876,[947]],[5,883,[884]],[5,883,[897]],[5,883,[898]],[9,889,[891]],[9,889,[903]],[9,889,[905]],[9,895,[896]],[9,895,[909]],[9,895,[910]],[295,899,[900]],[9,904,[906]],[292,907,[908]],[292,907,[936]],[292,907,[941]],[956,911,[912]],[956,911,[945]],[958,913,[914]],[958,913,[952]],[957,930,[932]],[292,935,[936]],[295,938,[939]],[292,940,[941]],[956,944,[945]],[292,946,[947]],[477,949,[954]],[477,950,[954]],[958,951,[952]],[477,953,[954]],[2,240,[0]],[2,241,[0]],[3,242,[1]],[3,243,[1]],[4,244,[2]],[4,245,[2]],[5,246,[3]],[5,247,[3]],[6,248,[4]],[6,249,[4]],[7,250,[5]],[7,251,[5]],[8,252,[6]],[8,253,[6]],[9,254,[7]],[9,255,[7]],[10,256,[8]],[10,257,[8]],[11,258,[9]],[11,259,[9]],[12,260,[10]],[12,261,[10]],[13,262,[11]],[13,263,[11]],[14,264,[12]],[14,265,[12]],[15,266,[13]],[15,267,[13]],[16,268,[14]],[16,269,[14]],[17,270,[15]],[17,271,[15]],[18,272,[16]],[18,273,[16]],[19,274,[17]],[19,275,[17]],[20,276,[18]],[20,277,[18]],[21,278,[19]],[21,279,[19]],[22,280,[20]],[22,281,[20]],[23,282,[21]],[23,283,[21]],[24,284,[22]],[24,285,[22]],[25,286,[23]],[25,287,[23]],[26,288,[24]],[26,289,[24]],[27,290,[25]],[27,291,[25]],[28,292,[26]],[28,293,[26]],[29,294,[27]],[29,295,[27]],[30,296,[28]],[30,297,[28]],[31,298,[29]],[31,299,[29]],[32,300,[30]],[32,301,[30]],[33,302,[31]],[33,303,[31]],[34,304,[32]],[34,305,[32]],[35,306,[33]],[35,307,[33]],[36,308,[34]],[36,309,[34]],[37,310,[35]],[37,311,[35]],[38,312,[36]],[38,313,[36]],[39,314,[37]],[39,315,[37]],[40,316,[38]],[40,317,[38]],[41,318,[39]],[41,319,[39]],[42,320,[40]],[42,321,[40]],[43,322,[41]],[43,323,[41]],[44,324,[42]],[44,325,[42]],[45,326,[43]],[45,327,[43]],[46,328,[44]],[46,329,[44]],[47,330,[45]],[47,331,[45]],[48,332,[46]],[48,333,[46]],[49,334,[47]],[49,335,[47]],[50,336,[48]],[50,337,[48]],[51,338,[49]],[51,339,[49]],[52,340,[50]],[52,341,[50]],[53,342,[51]],[53,343,[51]],[54,344,[52]],[54,345,[52]],[55,346,[53]],[55,347,[53]],[56,348,[54]],[56,349,[54]],[57,350,[55]],[57,351,[55]],[58,352,[56]],[58,353,[56]],[59,354,[57]],[59,355,[57]],[60,356,[58]],[60,357,[58]],[61,358,[59]],[61,359,[59]],[62,360,[60]],[62,361,[60]],[63,362,[61]],[63,363,[61]],[64,364,[62]],[64,365,[62]],[65,366,[63]],[65,367,[63]],[66,368,[64]],[66,369,[64]],[67,370,[65]],[67,371,[65]],[68,372,[66]],[68,373,[66]],[69,374,[67]],[69,375,[67]],[70,376,[68]],[70,377,[68]],[71,378,[69]],[71,379,[69]],[72,380,[70]],[72,381,[70]],[73,382,[71]],[73,383,[71]],[74,384,[72]],[74,385,[72]],[75,386,[73]],[75,387,[73]],[76,388,[74]],[76,389,[74]],[77,390,[75]],[77,391,[75]],[78,392,[76]],[78,393,[76]],[79,394,[77]],[79,395,[77]],[80,396,[78]],[80,397,[78]],[81,398,[79]],[81,399,[79]],[82,400,[80]],[82,401,[80]],[83,402,[81]],[83,403,[81]],[84,404,[82]],[84,405,[82]],[85,406,[83]],[85,407,[83]],[86,408,[84]],[86,409,[84]],[87,410,[85]],[87,411,[85]],[88,412,[86]],[88,413,[86]],[89,414,[87]],[89,415,[87]],[90,416,[88]],[90,417,[88]],[91,418,[89]],[91,419,[89]],[92,420,[90]],[92,421,[90]],[93,422,[91]],[93,423,[91]],[94,424,[92]],[94,425,[92]],[95,426,[93]],[95,427,[93]],[96,428,[94]],[96,429,[94]],[97,430,[95]],[97,431,[95]],[98,432,[96]],[98,433,[96]],[99,434,[97]],[99,435,[97]],[100,436,[98]],[100,437,[98]],[101,438,[99]],[101,439,[99]],[102,440,[100]],[102,441,[100]],[103,442,[101]],[103,443,[101]],[104,444,[102]],[104,445,[102]],[105,446,[103]],[105,447,[103]],[106,448,[104]],[106,449,[104]],[107,450,[105]],[107,451,[105]],[108,452,[106]],[108,453,[106]],[109,454,[107]],[109,455,[107]],[110,456,[108]],[110,457,[108]],[111,458,[109]],[111,459,[109]],[112,460,[110]],[112,461,[110]],[113,462,[111]],[113,463,[111]],[114,464,[112]],[114,465,[112]],[115,466,[113]],[115,467,[113]],[116,468,[114]],[116,469,[114]],[117,470,[115]],[117,471,[115]],[118,472,[116]],[118,473,[116]],[119,474,[117]],[119,475,[117]],[120,476,[118]],[120,477,[118]],[121,478,[119]],[121,479,[119]],[66,480,[64]],[122,480,[67]],[122,481,[480]],[67,482,[65]],[123,482,[66]],[123,483,[482]],[70,484,[68]],[124,484,[71]],[124,485,[484]],[71,486,[69]],[125,486,[70]],[125,487,[486]],[126,368,[378]],[126,488,[368]],[127,370,[376]],[127,489,[370]],[128,372,[382]],[128,490,[372]],[129,374,[380]],[129,491,[374]],[130,381,[369]],[130,492,[381]],[131,377,[373]],[131,493,[377]],[132,383,[371]],[132,494,[383]],[133,379,[375]],[133,495,[379]],[34,496,[32]],[134,496,[35]],[134,497,[496]],[35,498,[33]],[135,498,[34]],[135,499,[498]],[38,500,[36]],[136,500,[39]],[136,501,[500]],[39,502,[37]],[137,502,[38]],[137,503,[502]],[138,314,[304]],[138,504,[314]],[139,312,[306]],[139,505,[312]],[140,318,[308]],[140,506,[318]],[141,316,[310]],[141,507,[316]],[142,305,[317]],[142,508,[305]],[143,309,[313]],[143,509,[309]],[144,307,[319]],[144,510,[307]],[145,311,[315]],[145,511,[311]],[26,512,[24]],[146,512,[27]],[146,513,[512]],[27,514,[25]],[147,514,[26]],[147,515,[514]],[30,516,[28]],[148,516,[31]],[148,517,[516]],[31,518,[29]],[149,518,[30]],[149,519,[518]],[150,288,[298]],[150,520,[288]],[151,296,[290]],[151,521,[296]],[152,302,[292]],[152,522,[302]],[153,294,[300]],[153,523,[294]],[154,301,[289]],[154,524,[301]],[155,293,[297]],[155,525,[293]],[156,291,[303]],[156,526,[291]],[157,299,[295]],[157,527,[299]],[18,528,[16]],[158,528,[19]],[158,529,[528]],[19,530,[17]],[159,530,[18]],[159,531,[530]],[22,532,[20]],[160,532,[23]],[160,533,[532]],[23,534,[21]],[161,534,[22]],[161,535,[534]],[162,272,[282]],[162,536,[272]],[163,280,[274]],[163,537,[280]],[164,286,[276]],[164,538,[286]],[165,278,[284]],[165,539,[278]],[166,285,[273]],[166,540,[285]],[167,277,[281]],[167,541,[277]],[168,275,[287]],[168,542,[275]],[169,283,[279]],[169,543,[283]],[42,544,[40]],[170,544,[43]],[170,545,[544]],[43,546,[41]],[171,546,[42]],[171,547,[546]],[46,548,[44]],[172,548,[47]],[172,549,[548]],[47,550,[45]],[173,550,[46]],[173,551,[550]],[174,320,[330]],[174,552,[320]],[175,322,[328]],[175,553,[322]],[176,324,[334]],[176,554,[324]],[177,326,[332]],[177,555,[326]],[178,333,[321]],[178,556,[333]],[179,329,[325]],[179,557,[329]],[180,335,[323]],[180,558,[335]],[181,331,[327]],[181,559,[331]],[74,560,[72]],[182,560,[75]],[182,561,[560]],[75,562,[73]],[183,562,[74]],[183,563,[562]],[78,564,[76]],[184,564,[79]],[184,565,[564]],[79,566,[77]],[185,566,[78]],[185,567,[566]],[186,384,[394]],[186,568,[384]],[187,392,[386]],[187,569,[392]],[188,398,[388]],[188,570,[398]],[189,390,[396]],[189,571,[390]],[190,397,[385]],[190,572,[397]],[191,389,[393]],[191,573,[389]],[192,387,[399]],[192,574,[387]],[193,395,[391]],[193,575,[395]],[114,576,[112]],[194,576,[115]],[194,577,[576]],[115,578,[113]],[195,578,[114]],[195,579,[578]],[118,580,[116]],[196,580,[119]],[196,581,[580]],[119,582,[117]],[197,582,[118]],[197,583,[582]],[198,474,[464]],[198,584,[474]],[199,472,[466]],[199,585,[472]],[200,478,[468]],[200,586,[478]],[201,476,[470]],[201,587,[476]],[202,465,[477]],[202,588,[465]],[203,469,[473]],[203,589,[469]],[204,467,[479]],[204,590,[467]],[205,471,[475]],[205,591,[471]],[10,592,[8]],[206,592,[11]],[206,593,[592]],[11,594,[9]],[207,594,[10]],[207,595,[594]],[14,596,[12]],[208,596,[15]],[208,597,[596]],[15,598,[13]],[209,598,[14]],[209,599,[598]],[210,256,[266]],[210,600,[256]],[211,258,[264]],[211,601,[258]],[212,260,[270]],[212,602,[260]],[213,262,[268]],[213,603,[262]],[214,269,[257]],[214,604,[269]],[215,265,[261]],[215,605,[265]],[216,271,[259]],[216,606,[271]],[217,267,[263]],[217,607,[267]],[50,608,[48]],[218,608,[51]],[218,609,[608]],[51,610,[49]],[219,610,[50]],[219,611,[610]],[54,612,[52]],[220,612,[55]],[220,613,[612]],[55,614,[53]],[221,614,[54]],[221,615,[614]],[222,336,[346]],[222,616,[336]],[223,344,[338]],[223,617,[344]],[224,350,[340]],[224,618,[350]],[225,342,[348]],[225,619,[342]],[226,349,[337]],[226,620,[349]],[227,341,[345]],[227,621,[341]],[228,339,[351]],[228,622,[339]],[229,347,[343]],[229,623,[347]],[82,624,[80]],[230,624,[83]],[230,625,[624]],[83,626,[81]],[231,626,[82]],[231,627,[626]],[86,628,[84]],[232,628,[87]],[232,629,[628]],[87,630,[85]],[233,630,[86]],[233,631,[630]],[234,410,[400]],[234,632,[410]],[235,402,[408]],[235,633,[402]],[236,404,[414]],[236,634,[404]],[237,412,[406]],[237,635,[412]],[238,401,[413]],[238,636,[401]],[239,409,[405]],[239,637,[409]],[240,415,[403]],[240,638,[415]],[241,407,[411]],[241,639,[407]],[106,640,[104]],[242,640,[107]],[242,641,[640]],[107,642,[105]],[243,642,[106]],[243,643,[642]],[110,644,[108]],[244,644,[111]],[244,645,[644]],[111,646,[109]],[245,646,[110]],[245,647,[646]],[246,458,[448]],[246,648,[458]],[247,450,[456]],[247,649,[450]],[248,452,[462]],[248,650,[452]],[249,460,[454]],[249,651,[460]],[250,449,[461]],[250,652,[449]],[251,457,[453]],[251,653,[457]],[252,463,[451]],[252,654,[463]],[253,455,[459]],[253,655,[455]],[98,656,[96]],[254,656,[99]],[254,657,[656]],[99,658,[97]],[255,658,[98]],[255,659,[658]],[102,660,[100]],[256,660,[103]],[256,661,[660]],[103,662,[101]],[257,662,[102]],[257,663,[662]],[258,442,[432]],[258,664,[442]],[259,434,[440]],[259,665,[434]],[260,436,[446]],[260,666,[436]],[261,444,[438]],[261,667,[444]],[262,433,[445]],[262,668,[433]],[263,441,[437]],[263,669,[441]],[264,447,[435]],[264,670,[447]],[265,439,[443]],[265,671,[439]],[90,672,[88]],[266,672,[91]],[266,673,[672]],[91,674,[89]],[267,674,[90]],[267,675,[674]],[94,676,[92]],[268,676,[95]],[268,677,[676]],[95,678,[93]],[269,678,[94]],[269,679,[678]],[270,426,[416]],[270,680,[426]],[271,418,[424]],[271,681,[418]],[272,420,[430]],[272,682,[420]],[273,428,[422]],[273,683,[428]],[274,417,[429]],[274,684,[417]],[275,425,[421]],[275,685,[425]],[276,431,[419]],[276,686,[431]],[277,423,[427]],[277,687,[423]],[58,688,[56]],[278,688,[59]],[278,689,[688]],[59,690,[57]],[279,690,[58]],[279,691,[690]],[62,692,[60]],[280,692,[63]],[280,693,[692]],[63,694,[61]],[281,694,[62]],[281,695,[694]],[282,352,[362]],[282,696,[352]],[283,354,[360]],[283,697,[354]],[284,356,[366]],[284,698,[356]],[285,358,[364]],[285,699,[358]],[286,365,[353]],[286,700,[365]],[287,361,[357]],[287,701,[361]],[288,367,[355]],[288,702,[367]],[289,363,[359]],[289,703,[363]],[2,704,[0]],[290,704,[1]],[290,705,[704]],[290,706,[704]],[291,244,[3]],[291,707,[244]],[291,708,[244]],[292,250,[4]],[292,709,[250]],[292,710,[250]],[293,252,[7]],[293,711,[252]],[293,712,[252]],[294,248,[240]],[294,713,[248]],[295,245,[6]],[295,714,[245]],[296,251,[241]],[296,715,[251]],[297,254,[2]],[297,716,[254]],[298,255,[246]],[298,717,[255]],[299,253,[247]],[299,718,[253]],[300,249,[242]],[300,719,[249]],[301,243,[5]],[301,720,[243]],[302,480,[482]],[302,721,[480]],[302,722,[480]],[303,484,[486]],[303,723,[484]],[303,724,[484]],[304,368,[370]],[304,725,[368]],[305,372,[374]],[305,726,[372]],[306,381,[377]],[306,727,[381]],[307,383,[379]],[307,728,[383]],[308,492,[494]],[308,729,[492]],[309,493,[495]],[309,730,[493]],[310,488,[490]],[310,731,[488]],[311,489,[491]],[311,732,[489]],[312,481,[485]],[312,733,[481]],[313,483,[487]],[313,734,[483]],[314,496,[498]],[314,735,[496]],[314,736,[496]],[315,500,[502]],[315,737,[500]],[315,738,[500]],[316,314,[312]],[316,739,[314]],[317,318,[316]],[317,740,[318]],[318,305,[309]],[318,741,[305]],[319,307,[311]],[319,742,[307]],[320,508,[510]],[320,743,[508]],[321,509,[511]],[321,744,[509]],[322,504,[506]],[322,745,[504]],[323,505,[507]],[323,746,[505]],[324,497,[501]],[324,747,[497]],[325,499,[503]],[325,748,[499]],[326,512,[514]],[326,749,[512]],[326,750,[512]],[327,516,[518]],[327,751,[516]],[327,752,[516]],[328,288,[296]],[328,753,[288]],[329,302,[294]],[329,754,[302]],[330,301,[293]],[330,755,[301]],[331,291,[299]],[331,756,[291]],[332,520,[522]],[332,757,[520]],[333,521,[523]],[333,758,[521]],[334,524,[526]],[334,759,[524]],[335,525,[527]],[335,760,[525]],[336,513,[517]],[336,761,[513]],[337,515,[519]],[337,762,[515]],[338,528,[530]],[338,763,[528]],[338,764,[528]],[339,532,[534]],[339,765,[532]],[339,766,[532]],[340,272,[280]],[340,767,[272]],[341,286,[278]],[341,768,[286]],[342,285,[277]],[342,769,[285]],[343,275,[283]],[343,770,[275]],[344,540,[542]],[344,771,[540]],[345,541,[543]],[345,772,[541]],[346,536,[538]],[346,773,[536]],[347,537,[539]],[347,774,[537]],[348,529,[533]],[348,775,[529]],[349,531,[535]],[349,776,[531]],[350,544,[546]],[350,777,[544]],[350,778,[544]],[351,548,[550]],[351,779,[548]],[351,780,[548]],[352,320,[322]],[352,781,[320]],[353,324,[326]],[353,782,[324]],[354,333,[329]],[354,783,[333]],[355,335,[331]],[355,784,[335]],[356,552,[554]],[356,785,[552]],[357,553,[555]],[357,786,[553]],[358,556,[558]],[358,787,[556]],[359,557,[559]],[359,788,[557]],[360,545,[549]],[360,789,[545]],[361,547,[551]],[361,790,[547]],[362,560,[562]],[362,791,[560]],[362,792,[560]],[363,564,[566]],[363,793,[564]],[363,794,[564]],[364,384,[392]],[364,795,[384]],[365,398,[390]],[365,796,[398]],[366,397,[389]],[366,797,[397]],[367,387,[395]],[367,798,[387]],[368,561,[565]],[368,799,[561]],[369,563,[567]],[369,800,[563]],[370,572,[574]],[370,801,[572]],[371,573,[575]],[371,802,[573]],[372,568,[570]],[372,803,[568]],[373,569,[571]],[373,804,[569]],[374,576,[578]],[374,805,[576]],[374,806,[576]],[375,580,[582]],[375,807,[580]],[375,808,[580]],[376,474,[472]],[376,809,[474]],[377,478,[476]],[377,810,[478]],[378,465,[469]],[378,811,[465]],[379,467,[471]],[379,812,[467]],[380,577,[581]],[380,813,[577]],[381,579,[583]],[381,814,[579]],[382,584,[586]],[382,815,[584]],[383,585,[587]],[383,816,[585]],[384,588,[590]],[384,817,[588]],[385,589,[591]],[385,818,[589]],[386,592,[594]],[386,819,[592]],[386,820,[592]],[387,596,[598]],[387,821,[596]],[387,822,[596]],[388,256,[258]],[388,823,[256]],[389,260,[262]],[389,824,[260]],[390,269,[265]],[390,825,[269]],[391,271,[267]],[391,826,[271]],[392,604,[606]],[392,827,[604]],[393,605,[607]],[393,828,[605]],[394,600,[602]],[394,829,[600]],[395,601,[603]],[395,830,[601]],[396,593,[597]],[396,831,[593]],[397,595,[599]],[397,832,[595]],[398,608,[610]],[398,833,[608]],[398,834,[608]],[399,612,[614]],[399,835,[612]],[399,836,[612]],[400,336,[344]],[400,837,[336]],[401,350,[342]],[401,838,[350]],[402,349,[341]],[402,839,[349]],[403,339,[347]],[403,840,[339]],[404,616,[618]],[404,841,[616]],[405,617,[619]],[405,842,[617]],[406,620,[622]],[406,843,[620]],[407,621,[623]],[407,844,[621]],[408,609,[613]],[408,845,[609]],[409,611,[615]],[409,846,[611]],[410,624,[626]],[410,847,[624]],[410,848,[624]],[411,628,[630]],[411,849,[628]],[411,850,[628]],[412,410,[402]],[412,851,[410]],[413,404,[412]],[413,852,[404]],[414,401,[409]],[414,853,[401]],[415,415,[407]],[415,854,[415]],[416,625,[629]],[416,855,[625]],[417,627,[631]],[417,856,[627]],[418,636,[638]],[418,857,[636]],[419,637,[639]],[419,858,[637]],[420,632,[634]],[420,859,[632]],[421,633,[635]],[421,860,[633]],[422,640,[642]],[422,861,[640]],[423,644,[646]],[423,862,[644]],[424,458,[450]],[424,863,[458]],[424,864,[458]],[425,452,[460]],[425,865,[452]],[425,866,[452]],[426,449,[457]],[426,867,[449]],[427,463,[455]],[427,868,[463]],[428,641,[645]],[428,869,[641]],[429,643,[647]],[429,870,[643]],[430,648,[650]],[430,871,[648]],[431,649,[651]],[431,872,[649]],[432,652,[654]],[432,873,[652]],[433,653,[655]],[433,874,[653]],[434,656,[658]],[434,875,[656]],[434,876,[656]],[435,660,[662]],[435,877,[660]],[435,878,[660]],[436,657,[661]],[436,879,[657]],[437,659,[663]],[437,880,[659]],[438,442,[434]],[438,881,[442]],[439,436,[444]],[439,882,[436]],[440,433,[441]],[440,883,[433]],[441,447,[439]],[441,884,[447]],[442,668,[670]],[442,885,[668]],[443,669,[671]],[443,886,[669]],[444,664,[666]],[444,887,[664]],[445,665,[667]],[445,888,[665]],[446,672,[674]],[446,889,[672]],[446,890,[672]],[447,676,[678]],[447,891,[676]],[447,892,[676]],[448,673,[677]],[448,893,[673]],[449,675,[679]],[449,894,[675]],[450,426,[418]],[450,895,[426]],[451,420,[428]],[451,896,[420]],[452,417,[425]],[452,897,[417]],[453,431,[423]],[453,898,[431]],[454,680,[682]],[454,899,[680]],[455,681,[683]],[455,900,[681]],[456,684,[686]],[456,901,[684]],[457,685,[687]],[457,902,[685]],[458,688,[690]],[458,903,[688]],[458,904,[688]],[459,692,[694]],[459,905,[692]],[459,906,[692]],[460,689,[693]],[460,907,[689]],[461,691,[695]],[461,908,[691]],[462,352,[354]],[462,909,[352]],[463,356,[358]],[463,910,[356]],[464,696,[698]],[464,911,[696]],[465,697,[699]],[465,912,[697]],[466,365,[361]],[466,913,[365]],[467,367,[363]],[467,914,[367]],[468,700,[702]],[468,915,[700]],[469,701,[703]],[469,916,[701]],[470,480,[484]],[470,704,[480]],[470,244,[704]],[471,496,[500]],[471,705,[496]],[471,705,[250]],[472,512,[516]],[472,706,[512]],[472,294,[523]],[472,294,[706]],[472,294,[252]],[473,528,[532]],[473,248,[528]],[473,245,[248]],[474,544,[548]],[474,251,[544]],[474,251,[254]],[475,560,[564]],[475,713,[560]],[475,255,[713]],[476,576,[580]],[476,715,[576]],[476,715,[253]],[477,592,[596]],[477,262,[603]],[477,262,[592]],[477,267,[607]],[477,267,[592]],[477,249,[592]],[477,249,[716]],[478,608,[612]],[478,342,[619]],[478,342,[608]],[478,243,[608]],[478,714,[243]],[479,624,[628]],[479,719,[624]],[479,719,[718]],[480,458,[452]],[480,720,[458]],[480,717,[720]],[481,656,[660]],[481,439,[671]],[481,439,[656]],[481,707,[656]],[481,707,[709]],[482,672,[676]],[482,423,[687]],[482,423,[672]],[482,708,[672]],[482,708,[711]],[483,688,[692]],[483,358,[699]],[483,358,[688]],[483,710,[688]],[483,710,[712]],[470,480,[1]],[473,240,[528]],[473,278,[539]],[473,278,[240]],[474,241,[544]],[839,241,[2]],[475,246,[560]],[476,247,[576]],[479,242,[624]],[480,455,[655]],[480,455,[5]],[480,455,[720]],[481,444,[667]],[481,444,[656]],[842,444,[3]],[484,721,[749]],[482,428,[683]],[484,428,[721]],[485,722,[735]],[481,661,[660]],[481,661,[667]],[481,661,[671]],[485,661,[722]],[486,723,[751]],[482,677,[676]],[482,677,[683]],[482,677,[687]],[486,677,[723]],[487,724,[737]],[481,662,[667]],[481,662,[671]],[487,662,[724]],[488,368,[777]],[480,460,[651]],[488,460,[368]],[489,725,[763]],[479,407,[639]],[489,407,[725]],[490,372,[779]],[480,646,[651]],[480,646,[655]],[490,646,[372]],[491,726,[765]],[479,412,[635]],[491,412,[726]],[492,381,[805]],[478,347,[623]],[492,347,[381]],[493,727,[791]],[477,597,[596]],[477,597,[603]],[477,597,[607]],[493,597,[727]],[494,383,[807]],[478,613,[612]],[478,613,[619]],[478,613,[623]],[494,613,[383]],[495,728,[793]],[477,598,[603]],[477,598,[607]],[495,598,[728]],[496,492,[833]],[476,471,[591]],[496,471,[492]],[497,729,[819]],[475,390,[571]],[497,390,[729]],[498,493,[835]],[476,476,[587]],[498,476,[493]],[499,730,[821]],[475,395,[575]],[499,395,[730]],[500,488,[640]],[474,326,[555]],[500,326,[488]],[501,731,[847]],[473,283,[543]],[501,283,[731]],[502,489,[644]],[474,331,[559]],[502,331,[489]],[503,732,[849]],[473,533,[532]],[473,533,[539]],[473,533,[543]],[503,533,[732]],[504,481,[889]],[472,299,[527]],[504,299,[481]],[505,733,[875]],[471,311,[511]],[505,311,[733]],[506,483,[891]],[472,517,[516]],[472,517,[523]],[472,517,[527]],[506,517,[483]],[507,734,[877]],[471,316,[507]],[507,316,[734]],[508,736,[750]],[483,363,[703]],[508,363,[736]],[509,738,[752]],[483,693,[692]],[483,693,[699]],[483,693,[703]],[509,693,[738]],[510,314,[384]],[480,647,[651]],[480,647,[655]],[510,647,[314]],[511,739,[272]],[478,614,[619]],[478,614,[623]],[511,614,[739]],[512,318,[398]],[480,650,[452]],[480,650,[651]],[512,650,[318]],[513,740,[286]],[478,615,[619]],[478,615,[623]],[513,615,[740]],[514,305,[474]],[479,629,[628]],[479,629,[635]],[479,629,[639]],[514,629,[305]],[515,741,[320]],[477,599,[603]],[477,599,[607]],[515,599,[741]],[516,307,[478]],[479,630,[635]],[479,630,[639]],[516,630,[307]],[517,742,[324]],[477,258,[265]],[477,258,[594]],[517,258,[742]],[518,508,[410]],[476,581,[580]],[476,581,[587]],[476,581,[591]],[518,581,[508]],[519,743,[256]],[474,549,[548]],[474,549,[555]],[474,549,[559]],[519,549,[743]],[520,509,[404]],[476,582,[587]],[476,582,[591]],[520,582,[509]],[521,744,[260]],[474,550,[555]],[474,550,[559]],[521,550,[744]],[522,504,[863]],[475,565,[564]],[475,565,[571]],[475,565,[575]],[522,565,[504]],[523,745,[336]],[473,534,[539]],[473,534,[543]],[523,534,[745]],[524,505,[865]],[475,566,[571]],[475,566,[575]],[524,566,[505]],[525,746,[350]],[473,535,[539]],[473,535,[543]],[525,535,[746]],[526,497,[903]],[527,747,[657]],[470,374,[491]],[527,374,[747]],[528,499,[905]],[529,748,[659]],[470,379,[495]],[529,379,[748]],[530,288,[465]],[480,457,[452]],[480,457,[645]],[480,457,[651]],[530,457,[288]],[531,753,[285]],[477,602,[606]],[477,602,[594]],[531,602,[753]],[532,302,[467]],[480,450,[654]],[480,450,[645]],[532,450,[302]],[533,754,[275]],[477,607,[265]],[477,607,[594]],[477,607,[596]],[477,607,[603]],[477,607,[606]],[533,607,[754]],[534,301,[397]],[479,631,[635]],[479,631,[639]],[534,631,[301]],[535,755,[333]],[478,341,[344]],[478,341,[610]],[535,341,[755]],[536,291,[387]],[479,402,[409]],[479,402,[626]],[536,402,[291]],[537,756,[335]],[478,618,[622]],[478,618,[610]],[537,618,[756]],[538,520,[449]],[476,583,[587]],[476,583,[591]],[538,583,[520]],[539,757,[269]],[473,277,[280]],[473,277,[530]],[539,277,[757]],[540,521,[463]],[476,469,[472]],[476,469,[578]],[540,469,[521]],[541,758,[271]],[473,538,[542]],[473,538,[530]],[541,538,[758]],[542,524,[401]],[475,567,[571]],[475,567,[575]],[542,567,[524]],[543,759,[349]],[474,551,[555]],[474,551,[559]],[543,551,[759]],[544,525,[415]],[475,389,[392]],[475,389,[562]],[544,389,[525]],[545,760,[339]],[474,322,[329]],[474,322,[546]],[545,322,[760]],[546,513,[689]],[547,761,[673]],[548,515,[691]],[549,762,[675]],[550,764,[778]],[483,694,[699]],[483,694,[703]],[550,694,[764]],[551,766,[780]],[483,695,[699]],[483,695,[703]],[551,695,[766]],[552,767,[795]],[482,678,[683]],[482,678,[687]],[552,678,[767]],[553,768,[796]],[482,679,[683]],[482,679,[687]],[553,679,[768]],[554,769,[811]],[481,663,[667]],[481,663,[671]],[554,663,[769]],[555,770,[812]],[481,434,[441]],[481,434,[658]],[555,434,[770]],[556,540,[442]],[476,586,[590]],[476,586,[578]],[556,586,[540]],[557,771,[604]],[472,518,[523]],[472,518,[527]],[557,518,[771]],[558,541,[436]],[476,591,[472]],[476,591,[580]],[476,591,[587]],[476,591,[590]],[558,591,[541]],[559,772,[605]],[472,519,[523]],[472,519,[527]],[559,519,[772]],[560,536,[426]],[475,570,[574]],[475,570,[562]],[560,570,[536]],[561,773,[616]],[471,501,[500]],[471,501,[507]],[471,501,[511]],[561,501,[773]],[562,537,[420]],[475,575,[392]],[475,575,[564]],[475,575,[571]],[475,575,[574]],[562,575,[537]],[563,774,[617]],[471,502,[507]],[471,502,[511]],[563,502,[774]],[564,529,[352]],[565,775,[625]],[470,485,[484]],[470,485,[491]],[470,485,[495]],[565,485,[775]],[566,531,[356]],[567,776,[627]],[470,486,[491]],[470,486,[495]],[567,486,[776]],[568,781,[809]],[482,418,[425]],[482,418,[674]],[568,418,[781]],[569,782,[810]],[482,682,[686]],[482,682,[674]],[569,682,[782]],[570,783,[797]],[481,666,[670]],[481,666,[658]],[570,666,[783]],[571,784,[798]],[481,671,[441]],[481,671,[658]],[481,671,[660]],[481,671,[667]],[481,671,[670]],[571,671,[784]],[572,552,[417]],[572,917,[552]],[573,785,[600]],[471,503,[507]],[471,503,[511]],[573,503,[785]],[574,553,[431]],[574,918,[553]],[575,786,[601]],[471,309,[312]],[471,309,[498]],[575,309,[786]],[576,556,[433]],[576,919,[556]],[577,787,[620]],[472,293,[296]],[472,293,[514]],[577,293,[787]],[578,557,[447]],[578,920,[557]],[579,788,[621]],[472,522,[526]],[472,522,[514]],[579,522,[788]],[580,545,[696]],[581,789,[641]],[470,487,[491]],[470,487,[495]],[581,487,[789]],[582,547,[697]],[583,790,[643]],[470,370,[377]],[470,370,[482]],[583,370,[790]],[584,792,[806]],[483,354,[361]],[483,354,[690]],[584,354,[792]],[585,794,[808]],[483,698,[702]],[483,698,[690]],[585,698,[794]],[586,561,[365]],[587,799,[593]],[470,490,[494]],[470,490,[482]],[587,490,[799]],[588,563,[367]],[589,800,[595]],[470,495,[377]],[470,495,[482]],[470,495,[484]],[470,495,[491]],[470,495,[494]],[589,495,[800]],[590,572,[668]],[474,554,[558]],[474,554,[546]],[590,554,[572]],[591,801,[636]],[472,527,[296]],[472,527,[516]],[472,527,[523]],[472,527,[526]],[591,527,[801]],[592,573,[669]],[474,559,[329]],[474,559,[546]],[474,559,[548]],[474,559,[555]],[474,559,[558]],[592,559,[573]],[593,802,[637]],[593,921,[802]],[594,568,[680]],[473,543,[280]],[473,543,[532]],[473,543,[539]],[473,543,[542]],[594,543,[568]],[595,803,[648]],[471,506,[510]],[471,506,[498]],[595,506,[803]],[596,569,[681]],[596,922,[569]],[597,804,[649]],[471,511,[312]],[471,511,[500]],[471,511,[507]],[471,511,[510]],[597,511,[804]],[598,577,[700]],[599,813,[609]],[599,923,[813]],[600,579,[701]],[601,814,[611]],[601,924,[814]],[602,584,[684]],[602,925,[584]],[603,815,[632]],[603,926,[815]],[604,585,[685]],[604,927,[585]],[605,816,[633]],[605,928,[816]],[606,588,[664]],[606,929,[588]],[607,817,[652]],[607,930,[817]],[608,589,[665]],[608,931,[589]],[609,818,[653]],[609,932,[818]],[610,820,[834]],[483,703,[361]],[483,703,[690]],[483,703,[692]],[483,703,[699]],[483,703,[702]],[610,703,[820]],[611,822,[836]],[611,933,[822]],[612,823,[851]],[482,687,[425]],[482,687,[674]],[482,687,[676]],[482,687,[683]],[482,687,[686]],[612,687,[823]],[613,824,[852]],[613,934,[824]],[614,825,[867]],[614,935,[825]],[615,826,[868]],[615,936,[826]],[616,827,[881]],[480,642,[452]],[480,642,[651]],[480,642,[654]],[616,642,[827]],[617,828,[882]],[617,937,[828]],[618,829,[897]],[479,634,[638]],[479,634,[626]],[618,634,[829]],[619,830,[898]],[479,639,[409]],[479,639,[626]],[479,639,[628]],[479,639,[635]],[479,639,[638]],[619,639,[830]],[620,831,[913]],[621,832,[914]],[622,837,[864]],[622,938,[837]],[623,838,[866]],[623,939,[838]],[624,839,[853]],[624,940,[839]],[625,840,[854]],[625,941,[840]],[626,841,[895]],[626,942,[841]],[627,842,[896]],[627,943,[842]],[628,843,[883]],[628,944,[843]],[629,844,[884]],[629,945,[844]],[630,845,[915]],[631,846,[916]],[632,848,[861]],[632,946,[848]],[633,850,[862]],[633,947,[850]],[634,855,[909]],[635,856,[910]],[636,857,[885]],[478,623,[344]],[478,623,[612]],[478,623,[619]],[478,623,[622]],[636,623,[857]],[637,858,[886]],[637,948,[858]],[638,859,[901]],[638,949,[859]],[639,860,[902]],[639,950,[860]],[640,869,[911]],[641,870,[912]],[642,871,[899]],[642,951,[871]],[643,872,[900]],[643,952,[872]],[644,873,[887]],[644,953,[873]],[645,874,[888]],[645,954,[874]],[646,876,[890]],[647,878,[892]],[648,879,[904]],[649,880,[906]],[650,893,[907]],[651,894,[908]],[652,738,[69]],[652,738,[70]],[653,822,[794]],[653,375,[822]],[654,850,[766]],[655,848,[764]],[656,820,[792]],[656,369,[820]],[657,736,[64]],[657,736,[67]],[654,380,[850]],[655,378,[848]],[658,693,[68]],[658,693,[71]],[659,933,[354]],[659,373,[933]],[660,946,[695]],[661,947,[694]],[662,703,[698]],[662,371,[703]],[663,363,[65]],[663,363,[66]],[660,382,[946]],[661,376,[947]],[664,723,[37]],[664,723,[38]],[665,824,[782]],[666,838,[768]],[666,310,[838]],[667,837,[767]],[667,304,[837]],[668,823,[781]],[669,721,[32]],[669,721,[35]],[668,317,[823]],[665,315,[824]],[670,677,[36]],[670,677,[39]],[671,934,[418]],[672,938,[679]],[672,308,[938]],[673,939,[678]],[673,306,[939]],[674,687,[682]],[675,428,[33]],[675,428,[34]],[674,319,[687]],[671,313,[934]],[676,724,[29]],[676,724,[30]],[677,840,[784]],[677,295,[840]],[678,826,[770]],[679,825,[769]],[680,839,[783]],[680,289,[839]],[681,722,[24]],[681,722,[27]],[678,300,[826]],[679,298,[825]],[682,662,[28]],[682,662,[31]],[683,941,[666]],[684,935,[434]],[684,292,[935]],[685,936,[663]],[685,290,[936]],[686,940,[671]],[687,661,[25]],[687,661,[26]],[686,303,[940]],[683,297,[941]],[688,372,[21]],[688,372,[22]],[689,828,[302]],[689,279,[828]],[690,842,[318]],[691,841,[314]],[692,827,[288]],[692,273,[827]],[693,368,[16]],[693,368,[19]],[690,284,[842]],[691,282,[841]],[694,646,[20]],[694,646,[23]],[695,937,[457]],[696,942,[650]],[696,276,[942]],[697,943,[647]],[697,274,[943]],[698,642,[450]],[699,460,[17]],[699,460,[18]],[698,287,[642]],[695,281,[937]],[700,726,[45]],[700,726,[46]],[701,844,[291]],[701,327,[844]],[702,830,[307]],[703,829,[305]],[704,843,[301]],[704,321,[843]],[705,725,[40]],[705,725,[43]],[702,332,[830]],[703,330,[829]],[706,412,[44]],[706,412,[47]],[707,945,[631]],[707,325,[945]],[708,634,[630]],[709,639,[629]],[710,944,[402]],[710,323,[944]],[711,407,[41]],[711,407,[42]],[708,334,[634]],[709,328,[639]],[712,383,[77]],[712,383,[78]],[713,858,[756]],[713,391,[858]],[714,872,[740]],[715,871,[739]],[716,857,[755]],[716,385,[857]],[717,381,[72]],[717,381,[75]],[714,396,[872]],[715,394,[871]],[718,613,[76]],[718,613,[79]],[719,948,[341]],[720,951,[615]],[720,388,[951]],[721,952,[614]],[721,386,[952]],[722,623,[618]],[723,347,[73]],[723,347,[74]],[722,399,[623]],[719,393,[948]],[724,728,[117]],[724,728,[118]],[725,874,[754]],[726,860,[742]],[726,470,[860]],[727,859,[741]],[727,464,[859]],[728,873,[753]],[729,727,[112]],[729,727,[115]],[728,477,[873]],[725,475,[874]],[730,598,[116]],[730,598,[119]],[731,954,[602]],[732,949,[258]],[732,468,[949]],[733,950,[599]],[733,466,[950]],[734,953,[607]],[735,597,[113]],[735,597,[114]],[734,479,[953]],[731,473,[954]],[736,493,[13]],[736,493,[14]],[737,541,[521]],[737,263,[541]],[738,553,[509]],[739,552,[508]],[740,540,[520]],[740,257,[540]],[741,492,[8]],[741,492,[11]],[738,268,[553]],[739,266,[552]],[742,476,[12]],[742,476,[15]],[743,591,[583]],[743,261,[591]],[744,917,[582]],[745,918,[581]],[746,586,[469]],[746,259,[586]],[747,471,[9]],[747,471,[10]],[744,270,[917]],[745,264,[918]],[748,730,[53]],[748,730,[54]],[749,557,[525]],[749,343,[557]],[750,537,[505]],[751,536,[504]],[752,556,[524]],[752,337,[556]],[753,729,[48]],[753,729,[51]],[750,348,[537]],[751,346,[536]],[754,395,[52]],[754,395,[55]],[755,920,[567]],[756,570,[566]],[756,340,[570]],[757,575,[565]],[757,338,[575]],[758,919,[389]],[759,390,[49]],[759,390,[50]],[758,351,[919]],[755,345,[920]],[760,489,[85]],[760,489,[86]],[761,573,[760]],[762,585,[744]],[762,406,[585]],[763,584,[743]],[763,400,[584]],[764,572,[759]],[765,488,[80]],[765,488,[83]],[764,413,[572]],[761,411,[573]],[766,331,[84]],[766,331,[87]],[767,559,[551]],[767,405,[559]],[768,925,[550]],[769,927,[549]],[770,554,[322]],[770,403,[554]],[771,326,[81]],[771,326,[82]],[768,414,[925]],[769,408,[927]],[772,732,[109]],[772,732,[110]],[773,589,[758]],[774,569,[746]],[774,454,[569]],[775,568,[745]],[775,448,[568]],[776,588,[757]],[777,731,[104]],[777,731,[107]],[776,461,[588]],[773,459,[589]],[778,533,[108]],[778,533,[111]],[779,931,[277]],[779,453,[931]],[780,543,[535]],[781,922,[534]],[782,929,[538]],[782,451,[929]],[783,283,[105]],[783,283,[106]],[780,462,[543]],[781,456,[922]],[784,483,[101]],[784,483,[102]],[785,802,[788]],[786,818,[772]],[786,438,[818]],[787,817,[771]],[787,432,[817]],[788,801,[787]],[789,481,[96]],[789,481,[99]],[788,445,[801]],[785,443,[802]],[790,517,[100]],[790,517,[103]],[791,921,[293]],[791,437,[921]],[792,930,[519]],[793,932,[518]],[794,527,[522]],[794,435,[527]],[795,299,[97]],[795,299,[98]],[792,446,[930]],[793,440,[932]],[796,734,[93]],[796,734,[94]],[797,816,[786]],[798,804,[774]],[798,422,[804]],[799,803,[773]],[799,416,[803]],[800,815,[785]],[801,733,[88]],[801,733,[91]],[800,429,[815]],[797,427,[816]],[802,316,[92]],[802,316,[95]],[803,928,[503]],[803,421,[928]],[804,506,[502]],[805,511,[501]],[806,926,[309]],[806,419,[926]],[807,311,[89]],[807,311,[90]],[804,430,[506]],[805,424,[511]],[808,748,[61]],[808,748,[62]],[809,814,[800]],[809,359,[814]],[810,790,[776]],[811,789,[775]],[812,813,[799]],[812,353,[813]],[813,747,[56]],[813,747,[59]],[810,364,[790]],[811,362,[789]],[814,379,[60]],[814,379,[63]],[815,924,[490]],[815,357,[924]],[816,487,[486]],[817,370,[485]],[818,923,[495]],[818,355,[923]],[819,374,[57]],[819,374,[58]],[816,366,[487]],[817,360,[370]],[820,592,[672]],[820,592,[716]],[821,243,[720]],[821,452,[866]],[821,452,[243]],[836,452,[5]],[822,656,[688]],[822,904,[906]],[822,904,[688]],[822,904,[656]],[823,544,[423]],[823,544,[254]],[824,248,[713]],[837,713,[240]],[825,512,[358]],[825,512,[252]],[838,560,[247]],[838,242,[455]],[839,278,[241]],[839,262,[608]],[830,704,[706]],[830,516,[751]],[830,516,[704]],[840,516,[1]],[841,704,[0]],[842,246,[444]],[842,246,[3]],[842,246,[4]],[832,480,[496]],[842,267,[458]],[843,496,[439]],[843,496,[250]],[843,528,[576]],[843,528,[6]],[843,342,[624]],[1,250,[4]],[1,250,[5]],[1,250,[0]],[1,250,[1]],[1,250,[2]],[1,250,[3]],[1,250,[4]],[1,250,[5]],[1,250,[6]],[1,250,[7]],[1,250,[8]],[1,250,[9]],[1,250,[10]],[1,250,[11]],[1,250,[12]],[1,250,[13]],[1,250,[14]],[1,250,[15]],[1,250,[16]],[1,250,[17]],[1,250,[18]],[1,250,[19]],[1,250,[20]],[1,250,[21]],[1,250,[22]],[1,250,[23]],[1,250,[24]],[1,250,[25]],[1,250,[26]],[1,250,[27]],[1,250,[28]],[1,250,[29]],[1,250,[30]],[1,250,[31]],[1,250,[32]],[1,250,[33]],[1,250,[34]],[1,250,[35]],[1,250,[36]],[1,250,[37]],[1,250,[38]],[1,250,[39]],[1,250,[40]],[1,250,[41]],[1,250,[42]],[1,250,[43]],[1,250,[44]],[1,250,[45]],[1,250,[46]],[1,250,[47]],[1,250,[48]],[1,250,[49]],[1,250,[50]],[1,250,[51]],[1,250,[52]],[1,250,[53]],[1,250,[54]],[1,250,[55]],[1,250,[56]],[1,250,[57]],[1,250,[58]],[1,250,[59]],[1,250,[60]],[1,250,[61]],[1,250,[62]],[1,250,[63]],[1,250,[64]],[1,250,[65]],[1,250,[66]],[1,250,[67]],[1,250,[68]],[1,250,[69]],[1,250,[70]],[1,250,[71]],[1,250,[72]],[1,250,[73]],[1,250,[74]],[1,250,[75]],[1,250,[76]],[1,250,[77]],[1,250,[78]],[1,250,[79]],[1,250,[80]],[1,250,[81]],[1,250,[82]],[1,250,[83]],[1,250,[84]],[1,250,[85]],[1,250,[86]],[1,250,[87]],[1,250,[88]],[1,250,[89]],[1,250,[90]],[1,250,[91]],[1,250,[92]],[1,250,[93]],[1,250,[94]],[1,250,[95]],[1,250,[96]],[1,250,[97]],[1,250,[98]],[1,250,[99]],[1,250,[100]],[1,250,[101]],[1,250,[102]],[1,250,[103]],[1,250,[104]],[1,250,[105]],[1,250,[106]],[1,250,[107]],[1,250,[108]],[1,250,[109]],[1,250,[110]],[1,250,[111]],[1,250,[112]],[1,250,[113]],[1,250,[114]],[1,250,[115]],[1,250,[116]],[1,250,[117]],[1,250,[118]],[1,250,[119]],[1,252,[6]],[1,252,[7]],[1,252,[16]],[1,252,[17]],[1,252,[18]],[1,252,[19]],[1,252,[20]],[1,252,[21]],[1,252,[22]],[1,252,[23]],[1,252,[24]],[1,252,[25]],[1,252,[26]],[1,252,[27]],[1,252,[28]],[1,252,[29]],[1,252,[30]],[1,252,[31]],[1,252,[32]],[1,252,[33]],[1,252,[34]],[1,252,[35]],[1,252,[36]],[1,252,[37]],[1,252,[38]],[1,252,[39]],[1,252,[40]],[1,252,[41]],[1,252,[42]],[1,252,[43]],[1,252,[44]],[1,252,[45]],[1,252,[46]],[1,252,[47]],[1,252,[64]],[1,252,[65]],[1,252,[66]],[1,252,[67]],[1,252,[68]],[1,252,[69]],[1,252,[70]],[1,252,[71]],[1,252,[72]],[1,252,[73]],[1,252,[74]],[1,252,[75]],[1,252,[76]],[1,252,[77]],[1,252,[78]],[1,252,[79]],[1,252,[112]],[1,252,[113]],[1,252,[114]],[1,252,[115]],[1,252,[116]],[1,252,[117]],[1,252,[118]],[1,252,[119]],[1,253,[3]],[1,253,[6]],[1,253,[8]],[1,253,[9]],[1,253,[10]],[1,253,[11]],[1,253,[12]],[1,253,[13]],[1,253,[14]],[1,253,[15]],[1,253,[24]],[1,253,[25]],[1,253,[26]],[1,253,[27]],[1,253,[28]],[1,253,[29]],[1,253,[30]],[1,253,[31]],[1,253,[32]],[1,253,[33]],[1,253,[34]],[1,253,[35]],[1,253,[36]],[1,253,[37]],[1,253,[38]],[1,253,[39]],[1,253,[48]],[1,253,[49]],[1,253,[50]],[1,253,[51]],[1,253,[52]],[1,253,[53]],[1,253,[54]],[1,253,[55]],[1,253,[64]],[1,253,[65]],[1,253,[66]],[1,253,[67]],[1,253,[68]],[1,253,[69]],[1,253,[70]],[1,253,[71]],[1,253,[80]],[1,253,[81]],[1,253,[82]],[1,253,[83]],[1,253,[84]],[1,253,[85]],[1,253,[86]],[1,253,[87]],[1,253,[104]],[1,253,[105]],[1,253,[106]],[1,253,[107]],[1,253,[108]],[1,253,[109]],[1,253,[110]],[1,253,[111]],[1,254,[2]],[1,254,[7]],[1,254,[8]],[1,254,[9]],[1,254,[10]],[1,254,[11]],[1,254,[12]],[1,254,[13]],[1,254,[14]],[1,254,[15]],[1,254,[16]],[1,254,[17]],[1,254,[18]],[1,254,[19]],[1,254,[20]],[1,254,[21]],[1,254,[22]],[1,254,[23]],[1,254,[40]],[1,254,[41]],[1,254,[42]],[1,254,[43]],[1,254,[44]],[1,254,[45]],[1,254,[46]],[1,254,[47]],[1,254,[48]],[1,254,[49]],[1,254,[50]],[1,254,[51]],[1,254,[52]],[1,254,[53]],[1,254,[54]],[1,254,[55]],[1,254,[64]],[1,254,[65]],[1,254,[66]],[1,254,[67]],[1,254,[68]],[1,254,[69]],[1,254,[70]],[1,254,[71]],[1,254,[88]],[1,254,[89]],[1,254,[90]],[1,254,[91]],[1,254,[92]],[1,254,[93]],[1,254,[94]],[1,254,[95]],[1,254,[96]],[1,254,[97]],[1,254,[98]],[1,254,[99]],[1,254,[100]],[1,254,[101]],[1,254,[102]],[1,254,[103]],[1,265,[10]],[1,265,[12]],[1,265,[8]],[1,265,[9]],[1,265,[10]],[1,265,[11]],[1,265,[12]],[1,265,[13]],[1,265,[14]],[1,265,[15]],[1,265,[16]],[1,265,[17]],[1,265,[18]],[1,265,[19]],[1,265,[20]],[1,265,[21]],[1,265,[22]],[1,265,[23]],[1,265,[32]],[1,265,[33]],[1,265,[34]],[1,265,[35]],[1,265,[36]],[1,265,[37]],[1,265,[38]],[1,265,[39]],[1,265,[56]],[1,265,[57]],[1,265,[58]],[1,265,[59]],[1,265,[60]],[1,265,[61]],[1,265,[62]],[1,265,[63]],[1,265,[72]],[1,265,[73]],[1,265,[74]],[1,265,[75]],[1,265,[76]],[1,265,[77]],[1,265,[78]],[1,265,[79]],[1,265,[80]],[1,265,[81]],[1,265,[82]],[1,265,[83]],[1,265,[84]],[1,265,[85]],[1,265,[86]],[1,265,[87]],[1,265,[96]],[1,265,[97]],[1,265,[98]],[1,265,[99]],[1,265,[100]],[1,265,[101]],[1,265,[102]],[1,265,[103]],[1,280,[17]],[1,280,[20]],[1,280,[1]],[1,280,[2]],[1,280,[4]],[1,280,[7]],[1,280,[9]],[1,280,[10]],[1,280,[12]],[1,280,[15]],[1,280,[16]],[1,280,[17]],[1,280,[22]],[1,280,[23]],[1,280,[24]],[1,280,[26]],[1,280,[29]],[1,280,[31]],[1,280,[32]],[1,280,[33]],[1,280,[38]],[1,280,[39]],[1,280,[40]],[1,280,[42]],[1,280,[45]],[1,280,[47]],[1,280,[48]],[1,280,[49]],[1,280,[50]],[1,280,[51]],[1,280,[56]],[1,280,[58]],[1,280,[60]],[1,280,[62]],[1,280,[64]],[1,280,[65]],[1,280,[70]],[1,280,[71]],[1,280,[72]],[1,280,[75]],[1,280,[76]],[1,280,[79]],[1,280,[80]],[1,280,[81]],[1,280,[84]],[1,280,[85]],[1,280,[88]],[1,280,[90]],[1,280,[92]],[1,280,[94]],[1,280,[96]],[1,280,[97]],[1,280,[100]],[1,280,[101]],[1,280,[104]],[1,280,[106]],[1,280,[108]],[1,280,[110]],[1,296,[25]],[1,296,[28]],[1,296,[0]],[1,296,[2]],[1,296,[4]],[1,296,[6]],[1,296,[8]],[1,296,[9]],[1,296,[14]],[1,296,[15]],[1,296,[17]],[1,296,[18]],[1,296,[20]],[1,296,[23]],[1,296,[24]],[1,296,[25]],[1,296,[28]],[1,296,[29]],[1,296,[32]],[1,296,[33]],[1,296,[36]],[1,296,[37]],[1,296,[40]],[1,296,[41]],[1,296,[42]],[1,296,[43]],[1,296,[48]],[1,296,[50]],[1,296,[53]],[1,296,[55]],[1,296,[56]],[1,296,[57]],[1,296,[60]],[1,296,[61]],[1,296,[64]],[1,296,[65]],[1,296,[68]],[1,296,[69]],[1,296,[72]],[1,296,[73]],[1,296,[76]],[1,296,[77]],[1,296,[80]],[1,296,[83]],[1,296,[84]],[1,296,[87]],[1,296,[88]],[1,296,[89]],[1,296,[92]],[1,296,[93]],[1,296,[96]],[1,296,[97]],[1,296,[100]],[1,296,[101]],[1,296,[112]],[1,296,[114]],[1,296,[116]],[1,296,[118]],[1,312,[33]],[1,312,[36]],[1,312,[0]],[1,312,[1]],[1,312,[4]],[1,312,[5]],[1,312,[8]],[1,312,[9]],[1,312,[12]],[1,312,[13]],[1,312,[16]],[1,312,[17]],[1,312,[20]],[1,312,[21]],[1,312,[24]],[1,312,[25]],[1,312,[26]],[1,312,[27]],[1,312,[33]],[1,312,[34]],[1,312,[36]],[1,312,[39]],[1,312,[40]],[1,312,[41]],[1,312,[44]],[1,312,[45]],[1,312,[48]],[1,312,[49]],[1,312,[52]],[1,312,[53]],[1,312,[56]],[1,312,[57]],[1,312,[58]],[1,312,[59]],[1,312,[64]],[1,312,[65]],[1,312,[66]],[1,312,[67]],[1,312,[72]],[1,312,[73]],[1,312,[76]],[1,312,[77]],[1,312,[80]],[1,312,[81]],[1,312,[84]],[1,312,[85]],[1,312,[96]],[1,312,[99]],[1,312,[100]],[1,312,[103]],[1,312,[104]],[1,312,[105]],[1,312,[108]],[1,312,[109]],[1,312,[112]],[1,312,[113]],[1,312,[116]],[1,312,[117]],[1,329,[42]],[1,329,[44]],[1,329,[0]],[1,329,[1]],[1,329,[2]],[1,329,[3]],[1,329,[8]],[1,329,[9]],[1,329,[10]],[1,329,[11]],[1,329,[16]],[1,329,[17]],[1,329,[18]],[1,329,[19]],[1,329,[24]],[1,329,[25]],[1,329,[26]],[1,329,[27]],[1,329,[32]],[1,329,[33]],[1,329,[34]],[1,329,[35]],[1,329,[40]],[1,329,[41]],[1,329,[42]],[1,329,[43]],[1,329,[48]],[1,329,[49]],[1,329,[50]],[1,329,[51]],[1,329,[65]],[1,329,[66]],[1,329,[68]],[1,329,[71]],[1,329,[72]],[1,329,[73]],[1,329,[74]],[1,329,[75]],[1,329,[80]],[1,329,[81]],[1,329,[82]],[1,329,[83]],[1,329,[88]],[1,329,[89]],[1,329,[90]],[1,329,[91]],[1,329,[96]],[1,329,[97]],[1,329,[98]],[1,329,[99]],[1,329,[104]],[1,329,[105]],[1,329,[106]],[1,329,[107]],[1,329,[112]],[1,329,[113]],[1,329,[114]],[1,329,[115]]],"B":[[470,127,[244]],[470,178,[244]],[470,179,[244]],[470,182,[244]],[471,122,[705]],[471,123,[705]],[471,210,[705]],[471,211,[705]],[471,214,[705]],[472,218,[294]],[472,219,[294]],[472,222,[294]],[473,226,[245]],[473,227,[245]],[473,230,[245]],[474,126,[251]],[474,202,[251]],[474,203,[251]],[474,206,[251]],[475,170,[255]],[475,171,[255]],[475,174,[255]],[476,121,[715]],[476,124,[715]],[476,130,[715]],[476,131,[715]],[476,134,[715]],[477,234,[249]],[477,235,[249]],[477,238,[249]],[478,194,[714]],[478,195,[714]],[478,198,[714]],[479,120,[719]],[479,125,[719]],[479,162,[719]],[479,163,[719]],[479,166,[719]],[480,138,[717]],[480,139,[717]],[480,142,[717]],[481,146,[707]],[481,147,[707]],[481,150,[707]],[482,154,[708]],[482,155,[708]],[482,158,[708]],[483,186,[710]],[483,187,[710]],[483,190,[710]],[819,183,[244]],[807,215,[705]],[795,223,[294]],[783,231,[245]],[771,207,[251]],[759,175,[255]],[747,135,[715]],[735,239,[249]],[723,199,[714]],[711,167,[719]],[699,143,[717]],[687,151,[707]],[675,159,[708]],[663,191,[710]],[526,218,[497]],[526,222,[497]],[528,219,[499]],[795,223,[499]],[546,210,[513]],[546,214,[513]],[547,178,[761]],[547,182,[761]],[548,211,[515]],[807,215,[515]],[549,179,[762]],[819,183,[762]],[564,202,[529]],[564,206,[529]],[566,203,[531]],[771,207,[531]],[580,226,[545]],[580,230,[545]],[582,227,[547]],[783,231,[547]],[586,130,[561]],[586,134,[561]],[588,131,[563]],[747,135,[563]],[598,170,[577]],[598,174,[577]],[600,171,[579]],[759,175,[579]],[620,194,[831]],[620,198,[831]],[621,195,[832]],[723,199,[832]],[630,234,[845]],[630,238,[845]],[631,235,[846]],[735,239,[846]],[634,138,[855]],[634,142,[855]],[635,139,[856]],[699,143,[856]],[640,162,[869]],[640,166,[869]],[641,163,[870]],[711,167,[870]],[646,186,[876]],[646,190,[876]],[647,187,[878]],[663,191,[878]],[648,154,[879]],[648,158,[879]],[649,155,[880]],[675,159,[880]],[650,146,[893]],[650,150,[893]],[651,147,[894]],[687,151,[894]],[652,187,[738]],[657,190,[736]],[658,186,[693]],[663,191,[363]],[664,155,[723]],[669,158,[721]],[670,154,[677]],[675,159,[428]],[676,147,[724]],[681,150,[722]],[682,146,[662]],[687,151,[661]],[688,139,[372]],[693,142,[368]],[694,138,[646]],[699,143,[460]],[700,163,[726]],[705,166,[725]],[706,162,[412]],[711,167,[407]],[712,195,[383]],[717,198,[381]],[718,194,[613]],[723,199,[347]],[724,235,[728]],[729,238,[727]],[730,234,[598]],[735,239,[597]],[736,131,[493]],[741,134,[492]],[742,130,[476]],[747,135,[471]],[748,171,[730]],[753,174,[729]],[754,170,[395]],[759,175,[390]],[760,203,[489]],[765,206,[488]],[766,202,[331]],[771,207,[326]],[772,227,[732]],[777,230,[731]],[778,226,[533]],[783,231,[283]],[784,219,[483]],[789,222,[481]],[790,218,[517]],[795,223,[299]],[796,211,[734]],[801,214,[733]],[802,210,[316]],[807,215,[311]],[808,179,[748]],[813,182,[747]],[814,178,[379]],[819,183,[374]],[820,120,[592]],[823,121,[544]],[825,122,[512]],[736,128,[131]],[742,129,[130]],[747,132,[135]],[741,133,[134]],[688,136,[139]],[694,137,[138]],[699,140,[143]],[693,141,[142]],[676,144,[147]],[682,145,[146]],[687,148,[151]],[681,149,[150]],[664,152,[155]],[670,153,[154]],[675,156,[159]],[669,157,[158]],[700,160,[163]],[706,161,[162]],[711,164,[167]],[705,165,[166]],[748,168,[171]],[754,169,[170]],[759,172,[175]],[753,173,[174]],[808,176,[179]],[814,177,[178]],[819,180,[183]],[813,181,[182]],[652,184,[187]],[658,185,[186]],[663,188,[191]],[657,189,[190]],[712,192,[195]],[718,193,[194]],[723,196,[199]],[717,197,[198]],[760,200,[203]],[766,201,[202]],[771,204,[207]],[765,205,[206]],[796,208,[211]],[802,209,[210]],[807,212,[215]],[801,213,[214]],[784,216,[219]],[790,217,[218]],[795,220,[223]],[789,221,[222]],[772,224,[227]],[778,225,[226]],[783,228,[231]],[777,229,[230]],[724,232,[235]],[730,233,[234]],[735,236,[239]],[729,237,[238]],[841,125,[592]],[840,124,[544]],[839,123,[512]],[842,126,[246]],[843,127,[496]],[836,120,[656]],[836,120,[452]],[837,121,[713]],[837,121,[904]],[838,122,[242]],[838,122,[560]],[839,123,[278]],[839,123,[262]],[840,124,[516]],[840,124,[243]],[841,125,[704]],[841,125,[248]],[842,126,[480]],[842,126,[267]],[843,127,[528]],[843,127,[342]],[844,128,[263]],[844,128,[553]],[845,129,[261]],[845,129,[917]],[846,130,[918]],[846,130,[259]],[847,131,[552]],[847,131,[257]],[848,132,[586]],[848,132,[270]],[849,133,[540]],[849,133,[268]],[850,134,[541]],[850,134,[266]],[851,135,[591]],[851,135,[264]],[852,136,[279]],[852,136,[842]],[853,137,[937]],[853,137,[276]],[854,138,[274]],[854,138,[642]],[855,139,[841]],[855,139,[273]],[856,140,[942]],[856,140,[287]],[857,141,[827]],[857,141,[284]],[858,142,[828]],[858,142,[282]],[859,143,[943]],[859,143,[281]],[860,144,[295]],[860,144,[826]],[861,145,[941]],[861,145,[292]],[862,146,[290]],[862,146,[940]],[863,147,[825]],[863,147,[289]],[864,148,[303]],[864,148,[935]],[865,149,[839]],[865,149,[300]],[866,150,[840]],[866,150,[298]],[867,151,[297]],[867,151,[936]],[868,152,[824]],[868,152,[310]],[869,153,[934]],[869,153,[308]],[870,154,[306]],[870,154,[687]],[871,155,[304]],[871,155,[823]],[872,156,[938]],[872,156,[319]],[873,157,[317]],[873,157,[838]],[874,158,[315]],[874,158,[837]],[875,159,[939]],[875,159,[313]],[876,160,[327]],[876,160,[830]],[877,161,[325]],[877,161,[634]],[878,162,[639]],[878,162,[323]],[879,163,[829]],[879,163,[321]],[880,164,[944]],[880,164,[334]],[881,165,[843]],[881,165,[332]],[882,166,[844]],[882,166,[330]],[883,167,[945]],[883,167,[328]],[884,168,[343]],[884,168,[537]],[885,169,[920]],[885,169,[340]],[886,170,[338]],[886,170,[919]],[887,171,[536]],[887,171,[337]],[888,172,[570]],[888,172,[351]],[889,173,[556]],[889,173,[348]],[890,174,[557]],[890,174,[346]],[891,175,[575]],[891,175,[345]],[892,176,[359]],[892,176,[790]],[893,177,[357]],[893,177,[487]],[894,178,[370]],[894,178,[355]],[895,179,[789]],[895,179,[353]],[896,180,[923]],[896,180,[366]],[897,181,[364]],[897,181,[813]],[898,182,[362]],[898,182,[814]],[899,183,[924]],[899,183,[360]],[900,184,[375]],[900,184,[850]],[901,185,[373]],[901,185,[946]],[902,186,[947]],[902,186,[371]],[903,187,[848]],[903,187,[369]],[904,188,[703]],[904,188,[382]],[905,189,[820]],[905,189,[380]],[906,190,[822]],[906,190,[378]],[907,191,[933]],[907,191,[376]],[908,192,[391]],[908,192,[872]],[909,193,[948]],[909,193,[388]],[910,194,[386]],[910,194,[623]],[911,195,[871]],[911,195,[385]],[912,196,[951]],[912,196,[399]],[913,197,[396]],[913,197,[857]],[914,198,[394]],[914,198,[858]],[915,199,[952]],[915,199,[393]],[916,200,[573]],[916,200,[406]],[917,201,[405]],[917,201,[925]],[918,202,[927]],[918,202,[403]],[919,203,[400]],[919,203,[572]],[920,204,[554]],[920,204,[414]],[921,205,[413]],[921,205,[585]],[922,206,[411]],[922,206,[584]],[923,207,[559]],[923,207,[408]],[924,208,[816]],[924,208,[422]],[925,209,[421]],[925,209,[506]],[926,210,[511]],[926,210,[419]],[927,211,[416]],[927,211,[815]],[928,212,[926]],[928,212,[430]],[929,213,[804]],[929,213,[429]],[930,214,[803]],[930,214,[427]],[931,215,[928]],[931,215,[424]],[932,216,[802]],[932,216,[438]],[933,217,[437]],[933,217,[930]],[934,218,[932]],[934,218,[435]],[935,219,[432]],[935,219,[801]],[936,220,[527]],[936,220,[446]],[937,221,[818]],[937,221,[445]],[938,222,[817]],[938,222,[443]],[939,223,[921]],[939,223,[440]],[940,224,[589]],[940,224,[454]],[941,225,[453]],[941,225,[543]],[942,226,[451]],[942,226,[922]],[943,227,[448]],[943,227,[588]],[944,228,[929]],[944,228,[462]],[945,229,[569]],[945,229,[461]],[946,230,[568]],[946,230,[459]],[947,231,[456]],[947,231,[931]],[948,232,[874]],[948,232,[470]],[949,233,[954]],[949,233,[468]],[950,234,[466]],[950,234,[953]],[951,235,[464]],[951,235,[873]],[952,236,[479]],[952,236,[949]],[953,237,[860]],[953,237,[477]],[954,238,[859]],[954,238,[475]],[955,239,[473]],[955,239,[950]]],"C":[[1,329,[0]],[1,329,[1]],[1,329,[2]],[1,329,[3]],[1,329,[8]],[1,329,[9]],[1,329,[10]],[1,329,[11]],[1,329,[16]],[1,329,[17]],[1,329,[18]],[1,329,[19]],[1,329,[24]],[1,329,[25]],[1,329,[26]],[1,329,[27]],[1,329,[32]],[1,329,[33]],[1,329,[34]],[1,329,[35]],[1,329,[40]],[1,329,[41]],[1,329,[42]],[1,329,[43]],[1,329,[48]],[1,329,[49]],[1,329,[50]],[1,329,[51]],[1,329,[65]],[1,329,[66]],[1,329,[68]],[1,329,[71]],[1,329,[72]],[1,329,[73]],[1,329,[74]],[1,329,[75]],[1,329,[80]],[1,329,[81]],[1,329,[82]],[1,329,[83]],[1,329,[88]],[1,329,[89]],[1,329,[90]],[1,329,[91]],[1,329,[96]],[1,329,[97]],[1,329,[98]],[1,329,[99]],[1,329,[104]],[1,329,[105]],[1,329,[106]],[1,329,[107]],[1,329,[112]],[1,329,[113]],[1,329,[114]],[1,329,[115]],[1,329,[42]],[1,329,[44]],[1,312,[0]],[1,312,[1]],[1,312,[4]],[1,312,[5]],[1,312,[8]],[1,312,[9]],[1,312,[12]],[1,312,[13]],[1,312,[16]],[1,312,[17]],[1,312,[20]],[1,312,[21]],[1,312,[24]],[1,312,[25]],[1,312,[26]],[1,312,[27]],[1,312,[33]],[1,312,[34]],[1,312,[36]],[1,312,[39]],[1,312,[40]],[1,312,[41]],[1,312,[44]],[1,312,[45]],[1,312,[48]],[1,312,[49]],[1,312,[52]],[1,312,[53]],[1,312,[56]],[1,312,[57]],[1,312,[58]],[1,312,[59]],[1,312,[64]],[1,312,[65]],[1,312,[66]],[1,312,[67]],[1,312,[72]],[1,312,[73]],[1,312,[76]],[1,312,[77]],[1,312,[80]],[1,312,[81]],[1,312,[84]],[1,312,[85]],[1,312,[96]],[1,312,[99]],[1,312,[100]],[1,312,[103]],[1,312,[104]],[1,312,[105]],[1,312,[108]],[1,312,[109]],[1,312,[112]],[1,312,[113]],[1,312,[116]],[1,312,[117]],[1,312,[33]],[1,312,[36]],[1,296,[0]],[1,296,[2]],[1,296,[4]],[1,296,[6]],[1,296,[8]],[1,296,[9]],[1,296,[14]],[1,296,[15]],[1,296,[17]],[1,296,[18]],[1,296,[20]],[1,296,[23]],[1,296,[24]],[1,296,[25]],[1,296,[28]],[1,296,[29]],[1,296,[32]],[1,296,[33]],[1,296,[36]],[1,296,[37]],[1,296,[40]],[1,296,[41]],[1,296,[42]],[1,296,[43]],[1,296,[48]],[1,296,[50]],[1,296,[53]],[1,296,[55]],[1,296,[56]],[1,296,[57]],[1,296,[60]],[1,296,[61]],[1,296,[64]],[1,296,[65]],[1,296,[68]],[1,296,[69]],[1,296,[72]],[1,296,[73]],[1,296,[76]],[1,296,[77]],[1,296,[80]],[1,296,[83]],[1,296,[84]],[1,296,[87]],[1,296,[88]],[1,296,[89]],[1,296,[92]],[1,296,[93]],[1,296,[96]],[1,296,[97]],[1,296,[100]],[1,296,[101]],[1,296,[112]],[1,296,[114]],[1,296,[116]],[1,296,[118]],[1,296,[25]],[1,296,[28]],[1,280,[1]],[1,280,[2]],[1,280,[4]],[1,280,[7]],[1,280,[9]],[1,280,[10]],[1,280,[12]],[1,280,[15]],[1,280,[16]],[1,280,[17]],[1,280,[22]],[1,280,[23]],[1,280,[24]],[1,280,[26]],[1,280,[29]],[1,280,[31]],[1,280,[32]],[1,280,[33]],[1,280,[38]],[1,280,[39]],[1,280,[40]],[1,280,[42]],[1,280,[45]],[1,280,[47]],[1,280,[48]],[1,280,[49]],[1,280,[50]],[1,280,[51]],[1,280,[56]],[1,280,[58]],[1,280,[60]],[1,280,[62]],[1,280,[64]],[1,280,[65]],[1,280,[70]],[1,280,[71]],[1,280,[72]],[1,280,[75]],[1,280,[76]],[1,280,[79]],[1,280,[80]],[1,280,[81]],[1,280,[84]],[1,280,[85]],[1,280,[88]],[1,280,[90]],[1,280,[92]],[1,280,[94]],[1,280,[96]],[1,280,[97]],[1,280,[100]],[1,280,[101]],[1,280,[104]],[1,280,[106]],[1,280,[108]],[1,280,[110]],[1,280,[17]],[1,280,[20]],[1,265,[8]],[1,265,[9]],[1,265,[10]],[1,265,[11]],[1,265,[12]],[1,265,[13]],[1,265,[14]],[1,265,[15]],[1,265,[16]],[1,265,[17]],[1,265,[18]],[1,265,[19]],[1,265,[20]],[1,265,[21]],[1,265,[22]],[1,265,[23]],[1,265,[32]],[1,265,[33]],[1,265,[34]],[1,265,[35]],[1,265,[36]],[1,265,[37]],[1,265,[38]],[1,265,[39]],[1,265,[56]],[1,265,[57]],[1,265,[58]],[1,265,[59]],[1,265,[60]],[1,265,[61]],[1,265,[62]],[1,265,[63]],[1,265,[72]],[1,265,[73]],[1,265,[74]],[1,265,[75]],[1,265,[76]],[1,265,[77]],[1,265,[78]],[1,265,[79]],[1,265,[80]],[1,265,[81]],[1,265,[82]],[1,265,[83]],[1,265,[84]],[1,265,[85]],[1,265,[86]],[1,265,[87]],[1,265,[96]],[1,265,[97]],[1,265,[98]],[1,265,[99]],[1,265,[100]],[1,265,[101]],[1,265,[102]],[1,265,[103]],[1,265,[10]],[1,265,[12]],[1,254,[8]],[1,254,[9]],[1,254,[10]],[1,254,[11]],[1,254,[12]],[1,254,[13]],[1,254,[14]],[1,254,[15]],[1,254,[16]],[1,254,[17]],[1,254,[18]],[1,254,[19]],[1,254,[20]],[1,254,[21]],[1,254,[22]],[1,254,[23]],[1,254,[40]],[1,254,[41]],[1,254,[42]],[1,254,[43]],[1,254,[44]],[1,254,[45]],[1,254,[46]],[1,254,[47]],[1,254,[48]],[1,254,[49]],[1,254,[50]],[1,254,[51]],[1,254,[52]],[1,254,[53]],[1,254,[54]],[1,254,[55]],[1,254,[64]],[1,254,[65]],[1,254,[66]],[1,254,[67]],[1,254,[68]],[1,254,[69]],[1,254,[70]],[1,254,[71]],[1,254,[88]],[1,254,[89]],[1,254,[90]],[1,254,[91]],[1,254,[92]],[1,254,[93]],[1,254,[94]],[1,254,[95]],[1,254,[96]],[1,254,[97]],[1,254,[98]],[1,254,[99]],[1,254,[100]],[1,254,[101]],[1,254,[102]],[1,254,[103]],[1,254,[2]],[1,254,[7]],[1,253,[8]],[1,253,[9]],[1,253,[10]],[1,253,[11]],[1,253,[12]],[1,253,[13]],[1,253,[14]],[1,253,[15]],[1,253,[24]],[1,253,[25]],[1,253,[26]],[1,253,[27]],[1,253,[28]],[1,253,[29]],[1,253,[30]],[1,253,[31]],[1,253,[32]],[1,253,[33]],[1,253,[34]],[1,253,[35]],[1,253,[36]],[1,253,[37]],[1,253,[38]],[1,253,[39]],[1,253,[48]],[1,253,[49]],[1,253,[50]],[1,253,[51]],[1,253,[52]],[1,253,[53]],[1,253,[54]],[1,253,[55]],[1,253,[64]],[1,253,[65]],[1,253,[66]],[1,253,[67]],[1,253,[68]],[1,253,[69]],[1,253,[70]],[1,253,[71]],[1,253,[80]],[1,253,[81]],[1,253,[82]],[1,253,[83]],[1,253,[84]],[1,253,[85]],[1,253,[86]],[1,253,[87]],[1,253,[104]],[1,253,[105]],[1,253,[106]],[1,253,[107]],[1,253,[108]],[1,253,[109]],[1,253,[110]],[1,253,[111]],[1,253,[3]],[1,253,[6]],[1,252,[16]],[1,252,[17]],[1,252,[18]],[1,252,[19]],[1,252,[20]],[1,252,[21]],[1,252,[22]],[1,252,[23]],[1,252,[24]],[1,252,[25]],[1,252,[26]],[1,252,[27]],[1,252,[28]],[1,252,[29]],[1,252,[30]],[1,252,[31]],[1,252,[32]],[1,252,[33]],[1,252,[34]],[1,252,[35]],[1,252,[36]],[1,252,[37]],[1,252,[38]],[1,252,[39]],[1,252,[40]],[1,252,[41]],[1,252,[42]],[1,252,[43]],[1,252,[44]],[1,252,[45]],[1,252,[46]],[1,252,[47]],[1,252,[64]],[1,252,[65]],[1,252,[66]],[1,252,[67]],[1,252,[68]],[1,252,[69]],[1,252,[70]],[1,252,[71]],[1,252,[72]],[1,252,[73]],[1,252,[74]],[1,252,[75]],[1,252,[76]],[1,252,[77]],[1,252,[78]],[1,252,[79]],[1,252,[112]],[1,252,[113]],[1,252,[114]],[1,252,[115]],[1,252,[116]],[1,252,[117]],[1,252,[118]],[1,252,[119]],[1,252,[6]],[1,252,[7]],[1,250,[0]],[1,250,[1]],[1,250,[2]],[1,250,[3]],[1,250,[4]],[1,250,[5]],[1,250,[6]],[1,250,[7]],[1,250,[8]],[1,250,[9]],[1,250,[10]],[1,250,[11]],[1,250,[12]],[1,250,[13]],[1,250,[14]],[1,250,[15]],[1,250,[16]],[1,250,[17]],[1,250,[18]],[1,250,[19]],[1,250,[20]],[1,250,[21]],[1,250,[22]],[1,250,[23]],[1,250,[24]],[1,250,[25]],[1,250,[26]],[1,250,[27]],[1,250,[28]],[1,250,[29]],[1,250,[30]],[1,250,[31]],[1,250,[32]],[1,250,[33]],[1,250,[34]],[1,250,[35]],[1,250,[36]],[1,250,[37]],[1,250,[38]],[1,250,[39]],[1,250,[40]],[1,250,[41]],[1,250,[42]],[1,250,[43]],[1,250,[44]],[1,250,[45]],[1,250,[46]],[1,250,[47]],[1,250,[48]],[1,250,[49]],[1,250,[50]],[1,250,[51]],[1,250,[52]],[1,250,[53]],[1,250,[54]],[1,250,[55]],[1,250,[56]],[1,250,[57]],[1,250,[58]],[1,250,[59]],[1,250,[60]],[1,250,[61]],[1,250,[62]],[1,250,[63]],[1,250,[64]],[1,250,[65]],[1,250,[66]],[1,250,[67]],[1,250,[68]],[1,250,[69]],[1,250,[70]],[1,250,[71]],[1,250,[72]],[1,250,[73]],[1,250,[74]],[1,250,[75]],[1,250,[76]],[1,250,[77]],[1,250,[78]],[1,250,[79]],[1,250,[80]],[1,250,[81]],[1,250,[82]],[1,250,[83]],[1,250,[84]],[1,250,[85]],[1,250,[86]],[1,250,[87]],[1,250,[88]],[1,250,[89]],[1,250,[90]],[1,250,[91]],[1,250,[92]],[1,250,[93]],[1,250,[94]],[1,250,[95]],[1,250,[96]],[1,250,[97]],[1,250,[98]],[1,250,[99]],[1,250,[100]],[1,250,[101]],[1,250,[102]],[1,250,[103]],[1,250,[104]],[1,250,[105]],[1,250,[106]],[1,250,[107]],[1,250,[108]],[1,250,[109]],[1,250,[110]],[1,250,[111]],[1,250,[112]],[1,250,[113]],[1,250,[114]],[1,250,[115]],[1,250,[116]],[1,250,[117]],[1,250,[118]],[1,250,[119]],[1,250,[4]],[1,250,[5]],[1,342,[624]],[1,528,[6]],[1,528,[576]],[1,496,[250]],[1,496,[439]],[1,267,[458]],[1,480,[496]],[1,246,[4]],[1,246,[3]],[1,246,[444]],[1,704,[0]],[1,516,[704]],[1,516,[1]],[1,516,[751]],[1,704,[706]],[1,262,[608]],[1,278,[241]],[1,242,[455]],[1,560,[247]],[1,512,[252]],[1,512,[358]],[1,713,[240]],[1,248,[713]],[1,544,[254]],[1,544,[423]],[1,904,[656]],[1,904,[906]],[1,904,[688]],[1,656,[688]],[1,452,[243]],[1,452,[5]],[1,452,[866]],[1,243,[720]],[1,592,[716]],[1,592,[672]],[1,360,[370]],[1,366,[487]],[1,374,[58]],[1,374,[57]],[1,355,[923]],[1,923,[495]],[1,370,[485]],[1,487,[486]],[1,357,[924]],[1,924,[490]],[1,379,[63]],[1,379,[60]],[1,362,[789]],[1,364,[790]],[1,747,[59]],[1,747,[56]],[1,353,[813]],[1,813,[799]],[1,789,[775]],[1,790,[776]],[1,359,[814]],[1,814,[800]],[1,748,[62]],[1,748,[61]],[1,424,[511]],[1,430,[506]],[1,311,[90]],[1,311,[89]],[1,419,[926]],[1,926,[309]],[1,511,[501]],[1,506,[502]],[1,421,[928]],[1,928,[503]],[1,316,[95]],[1,316,[92]],[1,427,[816]],[1,429,[815]],[1,733,[91]],[1,733,[88]],[1,815,[785]],[1,416,[803]],[1,803,[773]],[1,422,[804]],[1,804,[774]],[1,816,[786]],[1,734,[94]],[1,734,[93]],[1,440,[932]],[1,446,[930]],[1,299,[98]],[1,299,[97]],[1,435,[527]],[1,527,[522]],[1,932,[518]],[1,930,[519]],[1,437,[921]],[1,921,[293]],[1,517,[103]],[1,517,[100]],[1,443,[802]],[1,445,[801]],[1,481,[99]],[1,481,[96]],[1,801,[787]],[1,432,[817]],[1,817,[771]],[1,438,[818]],[1,818,[772]],[1,802,[788]],[1,483,[102]],[1,483,[101]],[1,456,[922]],[1,462,[543]],[1,283,[106]],[1,283,[105]],[1,451,[929]],[1,929,[538]],[1,922,[534]],[1,543,[535]],[1,453,[931]],[1,931,[277]],[1,533,[111]],[1,533,[108]],[1,459,[589]],[1,461,[588]],[1,731,[107]],[1,731,[104]],[1,588,[757]],[1,448,[568]],[1,568,[745]],[1,454,[569]],[1,569,[746]],[1,589,[758]],[1,732,[110]],[1,732,[109]],[1,408,[927]],[1,414,[925]],[1,326,[82]],[1,326,[81]],[1,403,[554]],[1,554,[322]],[1,927,[549]],[1,925,[550]],[1,405,[559]],[1,559,[551]],[1,331,[87]],[1,331,[84]],[1,411,[573]],[1,413,[572]],[1,488,[83]],[1,488,[80]],[1,572,[759]],[1,400,[584]],[1,584,[743]],[1,406,[585]],[1,585,[744]],[1,573,[760]],[1,489,[86]],[1,489,[85]],[1,345,[920]],[1,351,[919]],[1,390,[50]],[1,390,[49]],[1,919,[389]],[1,338,[575]],[1,575,[565]],[1,340,[570]],[1,570,[566]],[1,920,[567]],[1,395,[55]],[1,395,[52]],[1,346,[536]],[1,348,[537]],[1,729,[51]],[1,729,[48]],[1,337,[556]],[1,556,[524]],[1,536,[504]],[1,537,[505]],[1,343,[557]],[1,557,[525]],[1,730,[54]],[1,730,[53]],[1,264,[918]],[1,270,[917]],[1,471,[10]],[1,471,[9]],[1,259,[586]],[1,586,[469]],[1,918,[581]],[1,917,[582]],[1,261,[591]],[1,591,[583]],[1,476,[15]],[1,476,[12]],[1,266,[552]],[1,268,[553]],[1,492,[11]],[1,492,[8]],[1,257,[540]],[1,540,[520]],[1,552,[508]],[1,553,[509]],[1,263,[541]],[1,541,[521]],[1,493,[14]],[1,493,[13]],[1,473,[954]],[1,479,[953]],[1,597,[114]],[1,597,[113]],[1,953,[607]],[1,466,[950]],[1,950,[599]],[1,468,[949]],[1,949,[258]],[1,954,[602]],[1,598,[119]],[1,598,[116]],[1,475,[874]],[1,477,[873]],[1,727,[115]],[1,727,[112]],[1,873,[753]],[1,464,[859]],[1,859,[741]],[1,470,[860]],[1,860,[742]],[1,874,[754]],[1,728,[118]],[1,728,[117]],[1,393,[948]],[1,399,[623]],[1,347,[74]],[1,347,[73]],[1,623,[618]],[1,386,[952]],[1,952,[614]],[1,388,[951]],[1,951,[615]],[1,948,[341]],[1,613,[79]],[1,613,[76]],[1,394,[871]],[1,396,[872]],[1,381,[75]],[1,381,[72]],[1,385,[857]],[1,857,[755]],[1,871,[739]],[1,872,[740]],[1,391,[858]],[1,858,[756]],[1,383,[78]],[1,383,[77]],[1,328,[639]],[1,334,[634]],[1,407,[42]],[1,407,[41]],[1,323,[944]],[1,944,[402]],[1,639,[629]],[1,634,[630]],[1,325,[945]],[1,945,[631]],[1,412,[47]],[1,412,[44]],[1,330,[829]],[1,332,[830]],[1,725,[43]],[1,725,[40]],[1,321,[843]],[1,843,[301]],[1,829,[305]],[1,830,[307]],[1,327,[844]],[1,844,[291]],[1,726,[46]],[1,726,[45]],[1,281,[937]],[1,287,[642]],[1,460,[18]],[1,460,[17]],[1,642,[450]],[1,274,[943]],[1,943,[647]],[1,276,[942]],[1,942,[650]],[1,937,[457]],[1,646,[23]],[1,646,[20]],[1,282,[841]],[1,284,[842]],[1,368,[19]],[1,368,[16]],[1,273,[827]],[1,827,[288]],[1,841,[314]],[1,842,[318]],[1,279,[828]],[1,828,[302]],[1,372,[22]],[1,372,[21]],[1,297,[941]],[1,303,[940]],[1,661,[26]],[1,661,[25]],[1,940,[671]],[1,290,[936]],[1,936,[663]],[1,292,[935]],[1,935,[434]],[1,941,[666]],[1,662,[31]],[1,662,[28]],[1,298,[825]],[1,300,[826]],[1,722,[27]],[1,722,[24]],[1,289,[839]],[1,839,[783]],[1,825,[769]],[1,826,[770]],[1,295,[840]],[1,840,[784]],[1,724,[30]],[1,724,[29]],[1,313,[934]],[1,319,[687]],[1,428,[34]],[1,428,[33]],[1,687,[682]],[1,306,[939]],[1,939,[678]],[1,308,[938]],[1,938,[679]],[1,934,[418]],[1,677,[39]],[1,677,[36]],[1,315,[824]],[1,317,[823]],[1,721,[35]],[1,721,[32]],[1,823,[781]],[1,304,[837]],[1,837,[767]],[1,310,[838]],[1,838,[768]],[1,824,[782]],[1,723,[38]],[1,723,[37]],[1,376,[947]],[1,382,[946]],[1,363,[66]],[1,363,[65]],[1,371,[703]],[1,703,[698]],[1,947,[694]],[1,946,[695]],[1,373,[933]],[1,933,[354]],[1,693,[71]],[1,693,[68]],[1,378,[848]],[1,380,[850]],[1,736,[67]],[1,736,[64]],[1,369,[820]],[1,820,[792]],[1,848,[764]],[1,850,[766]],[1,375,[822]],[1,822,[794]],[1,738,[70]],[1,738,[69]],[1,894,[908]],[1,893,[907]],[1,880,[906]],[1,879,[904]],[1,878,[892]],[1,876,[890]],[1,954,[874]],[1,874,[888]],[1,953,[873]],[1,873,[887]],[1,952,[872]],[1,872,[900]],[1,951,[871]],[1,871,[899]],[1,870,[912]],[1,869,[911]],[1,950,[860]],[1,860,[902]],[1,949,[859]],[1,859,[901]],[1,948,[858]],[1,858,[886]],[1,623,[857]],[1,623,[344]],[1,623,[612]],[1,623,[619]],[1,623,[622]],[1,857,[885]],[1,856,[910]],[1,855,[909]],[1,947,[850]],[1,850,[862]],[1,946,[848]],[1,848,[861]],[1,846,[916]],[1,845,[915]],[1,945,[844]],[1,844,[884]],[1,944,[843]],[1,843,[883]],[1,943,[842]],[1,842,[896]],[1,942,[841]],[1,841,[895]],[1,941,[840]],[1,840,[854]],[1,940,[839]],[1,839,[853]],[1,939,[838]],[1,838,[866]],[1,938,[837]],[1,837,[864]],[1,832,[914]],[1,831,[913]],[1,639,[830]],[1,639,[409]],[1,639,[626]],[1,639,[628]],[1,639,[635]],[1,639,[638]],[1,830,[898]],[1,634,[829]],[1,634,[638]],[1,634,[626]],[1,829,[897]],[1,937,[828]],[1,828,[882]],[1,642,[827]],[1,642,[452]],[1,642,[651]],[1,642,[654]],[1,827,[881]],[1,936,[826]],[1,826,[868]],[1,935,[825]],[1,825,[867]],[1,934,[824]],[1,824,[852]],[1,687,[823]],[1,687,[425]],[1,687,[674]],[1,687,[676]],[1,687,[683]],[1,687,[686]],[1,823,[851]],[1,933,[822]],[1,822,[836]],[1,703,[820]],[1,703,[361]],[1,703,[690]],[1,703,[692]],[1,703,[699]],[1,703,[702]],[1,820,[834]],[1,932,[818]],[1,818,[653]],[1,931,[589]],[1,589,[665]],[1,930,[817]],[1,817,[652]],[1,929,[588]],[1,588,[664]],[1,928,[816]],[1,816,[633]],[1,927,[585]],[1,585,[685]],[1,926,[815]],[1,815,[632]],[1,925,[584]],[1,584,[684]],[1,924,[814]],[1,814,[611]],[1,579,[701]],[1,923,[813]],[1,813,[609]],[1,577,[700]],[1,511,[804]],[1,511,[312]],[1,511,[500]],[1,511,[507]],[1,511,[510]],[1,804,[649]],[1,922,[569]],[1,569,[681]],[1,506,[803]],[1,506,[510]],[1,506,[498]],[1,803,[648]],[1,543,[568]],[1,543,[280]],[1,543,[532]],[1,543,[539]],[1,543,[542]],[1,568,[680]],[1,921,[802]],[1,802,[637]],[1,559,[573]],[1,559,[329]],[1,559,[546]],[1,559,[548]],[1,559,[555]],[1,559,[558]],[1,573,[669]],[1,527,[801]],[1,527,[296]],[1,527,[516]],[1,527,[523]],[1,527,[526]],[1,801,[636]],[1,554,[572]],[1,554,[558]],[1,554,[546]],[1,572,[668]],[1,495,[800]],[1,495,[377]],[1,495,[482]],[1,495,[484]],[1,495,[491]],[1,495,[494]],[1,800,[595]],[1,563,[367]],[1,490,[799]],[1,490,[494]],[1,490,[482]],[1,799,[593]],[1,561,[365]],[1,698,[794]],[1,698,[702]],[1,698,[690]],[1,794,[808]],[1,354,[792]],[1,354,[361]],[1,354,[690]],[1,792,[806]],[1,370,[790]],[1,370,[377]],[1,370,[482]],[1,790,[643]],[1,547,[697]],[1,487,[789]],[1,487,[491]],[1,487,[495]],[1,789,[641]],[1,545,[696]],[1,522,[788]],[1,522,[526]],[1,522,[514]],[1,788,[621]],[1,920,[557]],[1,557,[447]],[1,293,[787]],[1,293,[296]],[1,293,[514]],[1,787,[620]],[1,919,[556]],[1,556,[433]],[1,309,[786]],[1,309,[312]],[1,309,[498]],[1,786,[601]],[1,918,[553]],[1,553,[431]],[1,503,[785]],[1,503,[507]],[1,503,[511]],[1,785,[600]],[1,917,[552]],[1,552,[417]],[1,671,[784]],[1,671,[441]],[1,671,[658]],[1,671,[660]],[1,671,[667]],[1,671,[670]],[1,784,[798]],[1,666,[783]],[1,666,[670]],[1,666,[658]],[1,783,[797]],[1,682,[782]],[1,682,[686]],[1,682,[674]],[1,782,[810]],[1,418,[781]],[1,418,[425]],[1,418,[674]],[1,781,[809]],[1,486,[776]],[1,486,[491]],[1,486,[495]],[1,776,[627]],[1,531,[356]],[1,485,[775]],[1,485,[484]],[1,485,[491]],[1,485,[495]],[1,775,[625]],[1,529,[352]],[1,502,[774]],[1,502,[507]],[1,502,[511]],[1,774,[617]],[1,575,[537]],[1,575,[392]],[1,575,[564]],[1,575,[571]],[1,575,[574]],[1,537,[420]],[1,501,[773]],[1,501,[500]],[1,501,[507]],[1,501,[511]],[1,773,[616]],[1,570,[536]],[1,570,[574]],[1,570,[562]],[1,536,[426]],[1,519,[772]],[1,519,[523]],[1,519,[527]],[1,772,[605]],[1,591,[541]],[1,591,[472]],[1,591,[580]],[1,591,[587]],[1,591,[590]],[1,541,[436]],[1,518,[771]],[1,518,[523]],[1,518,[527]],[1,771,[604]],[1,586,[540]],[1,586,[590]],[1,586,[578]],[1,540,[442]],[1,434,[770]],[1,434,[441]],[1,434,[658]],[1,770,[812]],[1,663,[769]],[1,663,[667]],[1,663,[671]],[1,769,[811]],[1,679,[768]],[1,679,[683]],[1,679,[687]],[1,768,[796]],[1,678,[767]],[1,678,[683]],[1,678,[687]],[1,767,[795]],[1,695,[766]],[1,695,[699]],[1,695,[703]],[1,766,[780]],[1,694,[764]],[1,694,[699]],[1,694,[703]],[1,764,[778]],[1,762,[675]],[1,515,[691]],[1,761,[673]],[1,513,[689]],[1,322,[760]],[1,322,[329]],[1,322,[546]],[1,760,[339]],[1,389,[525]],[1,389,[392]],[1,389,[562]],[1,525,[415]],[1,551,[759]],[1,551,[555]],[1,551,[559]],[1,759,[349]],[1,567,[524]],[1,567,[571]],[1,567,[575]],[1,524,[401]],[1,538,[758]],[1,538,[542]],[1,538,[530]],[1,758,[271]],[1,469,[521]],[1,469,[472]],[1,469,[578]],[1,521,[463]],[1,277,[757]],[1,277,[280]],[1,277,[530]],[1,757,[269]],[1,583,[520]],[1,583,[587]],[1,583,[591]],[1,520,[449]],[1,618,[756]],[1,618,[622]],[1,618,[610]],[1,756,[335]],[1,402,[291]],[1,402,[409]],[1,402,[626]],[1,291,[387]],[1,341,[755]],[1,341,[344]],[1,341,[610]],[1,755,[333]],[1,631,[301]],[1,631,[635]],[1,631,[639]],[1,301,[397]],[1,607,[754]],[1,607,[265]],[1,607,[594]],[1,607,[596]],[1,607,[603]],[1,607,[606]],[1,754,[275]],[1,450,[302]],[1,450,[654]],[1,450,[645]],[1,302,[467]],[1,602,[753]],[1,602,[606]],[1,602,[594]],[1,753,[285]],[1,457,[288]],[1,457,[452]],[1,457,[645]],[1,457,[651]],[1,288,[465]],[1,379,[748]],[1,379,[495]],[1,748,[659]],[1,499,[905]],[1,374,[747]],[1,374,[491]],[1,747,[657]],[1,497,[903]],[1,535,[746]],[1,535,[539]],[1,535,[543]],[1,746,[350]],[1,566,[505]],[1,566,[571]],[1,566,[575]],[1,505,[865]],[1,534,[745]],[1,534,[539]],[1,534,[543]],[1,745,[336]],[1,565,[504]],[1,565,[564]],[1,565,[571]],[1,565,[575]],[1,504,[863]],[1,550,[744]],[1,550,[555]],[1,550,[559]],[1,744,[260]],[1,582,[509]],[1,582,[587]],[1,582,[591]],[1,509,[404]],[1,549,[743]],[1,549,[548]],[1,549,[555]],[1,549,[559]],[1,743,[256]],[1,581,[508]],[1,581,[580]],[1,581,[587]],[1,581,[591]],[1,508,[410]],[1,258,[742]],[1,258,[265]],[1,258,[594]],[1,742,[324]],[1,630,[307]],[1,630,[635]],[1,630,[639]],[1,307,[478]],[1,599,[741]],[1,599,[603]],[1,599,[607]],[1,741,[320]],[1,629,[305]],[1,629,[628]],[1,629,[635]],[1,629,[639]],[1,305,[474]],[1,615,[740]],[1,615,[619]],[1,615,[623]],[1,740,[286]],[1,650,[318]],[1,650,[452]],[1,650,[651]],[1,318,[398]],[1,614,[739]],[1,614,[619]],[1,614,[623]],[1,739,[272]],[1,647,[314]],[1,647,[651]],[1,647,[655]],[1,314,[384]],[1,693,[738]],[1,693,[692]],[1,693,[699]],[1,693,[703]],[1,738,[752]],[1,363,[736]],[1,363,[703]],[1,736,[750]],[1,316,[734]],[1,316,[507]],[1,734,[877]],[1,517,[483]],[1,517,[516]],[1,517,[523]],[1,517,[527]],[1,483,[891]],[1,311,[733]],[1,311,[511]],[1,733,[875]],[1,299,[481]],[1,299,[527]],[1,481,[889]],[1,533,[732]],[1,533,[532]],[1,533,[539]],[1,533,[543]],[1,732,[849]],[1,331,[489]],[1,331,[559]],[1,489,[644]],[1,283,[731]],[1,283,[543]],[1,731,[847]],[1,326,[488]],[1,326,[555]],[1,488,[640]],[1,395,[730]],[1,395,[575]],[1,730,[821]],[1,476,[493]],[1,476,[587]],[1,493,[835]],[1,390,[729]],[1,390,[571]],[1,729,[819]],[1,471,[492]],[1,471,[591]],[1,492,[833]],[1,598,[728]],[1,598,[603]],[1,598,[607]],[1,728,[793]],[1,613,[383]],[1,613,[612]],[1,613,[619]],[1,613,[623]],[1,383,[807]],[1,597,[727]],[1,597,[596]],[1,597,[603]],[1,597,[607]],[1,727,[791]],[1,347,[381]],[1,347,[623]],[1,381,[805]],[1,412,[726]],[1,412,[635]],[1,726,[765]],[1,646,[372]],[1,646,[651]],[1,646,[655]],[1,372,[779]],[1,407,[725]],[1,407,[639]],[1,725,[763]],[1,460,[368]],[1,460,[651]],[1,368,[777]],[1,662,[724]],[1,662,[667]],[1,662,[671]],[1,724,[737]],[1,677,[723]],[1,677,[676]],[1,677,[683]],[1,677,[687]],[1,723,[751]],[1,661,[722]],[1,661,[660]],[1,661,[667]],[1,661,[671]],[1,722,[735]],[1,428,[721]],[1,428,[683]],[1,721,[749]],[1,444,[656]],[1,444,[3]],[1,444,[667]],[1,455,[5]],[1,455,[720]],[1,455,[655]],[1,242,[624]],[1,247,[576]],[1,246,[560]],[1,241,[2]],[1,241,[544]],[1,278,[240]],[1,278,[539]],[1,240,[528]],[1,480,[1]],[1,710,[712]],[1,710,[688]],[1,358,[688]],[1,358,[699]],[1,688,[692]],[1,708,[711]],[1,708,[672]],[1,423,[672]],[1,423,[687]],[1,672,[676]],[1,707,[709]],[1,707,[656]],[1,439,[656]],[1,439,[671]],[1,656,[660]],[1,717,[720]],[1,720,[458]],[1,458,[452]],[1,719,[718]],[1,719,[624]],[1,624,[628]],[1,714,[243]],[1,243,[608]],[1,342,[608]],[1,342,[619]],[1,608,[612]],[1,249,[716]],[1,249,[592]],[1,267,[592]],[1,267,[607]],[1,262,[592]],[1,262,[603]],[1,592,[596]],[1,715,[253]],[1,715,[576]],[1,576,[580]],[1,255,[713]],[1,713,[560]],[1,560,[564]],[1,251,[254]],[1,251,[544]],[1,544,[548]],[1,245,[248]],[1,248,[528]],[1,528,[532]],[1,294,[706]],[1,294,[252]],[1,294,[523]],[1,706,[512]],[1,512,[516]],[1,705,[250]],[1,705,[496]],[1,496,[500]],[1,244,[704]],[1,704,[480]],[1,480,[484]],[1,916,[701]],[1,701,[703]],[1,915,[700]],[1,700,[702]],[1,914,[367]],[1,367,[363]],[1,913,[365]],[1,365,[361]],[1,912,[697]],[1,697,[699]],[1,911,[696]],[1,696,[698]],[1,910,[356]],[1,356,[358]],[1,909,[352]],[1,352,[354]],[1,908,[691]],[1,691,[695]],[1,907,[689]],[1,689,[693]],[1,906,[692]],[1,905,[692]],[1,692,[694]],[1,904,[688]],[1,903,[688]],[1,688,[690]],[1,902,[685]],[1,685,[687]],[1,901,[684]],[1,684,[686]],[1,900,[681]],[1,681,[683]],[1,899,[680]],[1,680,[682]],[1,898,[431]],[1,431,[423]],[1,897,[417]],[1,417,[425]],[1,896,[420]],[1,420,[428]],[1,895,[426]],[1,426,[418]],[1,894,[675]],[1,675,[679]],[1,893,[673]],[1,673,[677]],[1,892,[676]],[1,891,[676]],[1,676,[678]],[1,890,[672]],[1,889,[672]],[1,672,[674]],[1,888,[665]],[1,665,[667]],[1,887,[664]],[1,664,[666]],[1,886,[669]],[1,669,[671]],[1,885,[668]],[1,668,[670]],[1,884,[447]],[1,447,[439]],[1,883,[433]],[1,433,[441]],[1,882,[436]],[1,436,[444]],[1,881,[442]],[1,442,[434]],[1,880,[659]],[1,659,[663]],[1,879,[657]],[1,657,[661]],[1,878,[660]],[1,877,[660]],[1,660,[662]],[1,876,[656]],[1,875,[656]],[1,656,[658]],[1,874,[653]],[1,653,[655]],[1,873,[652]],[1,652,[654]],[1,872,[649]],[1,649,[651]],[1,871,[648]],[1,648,[650]],[1,870,[643]],[1,643,[647]],[1,869,[641]],[1,641,[645]],[1,868,[463]],[1,463,[455]],[1,867,[449]],[1,449,[457]],[1,866,[452]],[1,865,[452]],[1,452,[460]],[1,864,[458]],[1,863,[458]],[1,458,[450]],[1,862,[644]],[1,644,[646]],[1,861,[640]],[1,640,[642]],[1,860,[633]],[1,633,[635]],[1,859,[632]],[1,632,[634]],[1,858,[637]],[1,637,[639]],[1,857,[636]],[1,636,[638]],[1,856,[627]],[1,627,[631]],[1,855,[625]],[1,625,[629]],[1,854,[415]],[1,415,[407]],[1,853,[401]],[1,401,[409]],[1,852,[404]],[1,404,[412]],[1,851,[410]],[1,410,[402]],[1,850,[628]],[1,849,[628]],[1,628,[630]],[1,848,[624]],[1,847,[624]],[1,624,[626]],[1,846,[611]],[1,611,[615]],[1,845,[609]],[1,609,[613]],[1,844,[621]],[1,621,[623]],[1,843,[620]],[1,620,[622]],[1,842,[617]],[1,617,[619]],[1,841,[616]],[1,616,[618]],[1,840,[339]],[1,339,[347]],[1,839,[349]],[1,349,[341]],[1,838,[350]],[1,350,[342]],[1,837,[336]],[1,336,[344]],[1,836,[612]],[1,835,[612]],[1,612,[614]],[1,834,[608]],[1,833,[608]],[1,608,[610]],[1,832,[595]],[1,595,[599]],[1,831,[593]],[1,593,[597]],[1,830,[601]],[1,601,[603]],[1,829,[600]],[1,600,[602]],[1,828,[605]],[1,605,[607]],[1,827,[604]],[1,604,[606]],[1,826,[271]],[1,271,[267]],[1,825,[269]],[1,269,[265]],[1,824,[260]],[1,260,[262]],[1,823,[256]],[1,256,[258]],[1,822,[596]],[1,821,[596]],[1,596,[598]],[1,820,[592]],[1,819,[592]],[1,592,[594]],[1,818,[589]],[1,589,[591]],[1,817,[588]],[1,588,[590]],[1,816,[585]],[1,585,[587]],[1,815,[584]],[1,584,[586]],[1,814,[579]],[1,579,[583]],[1,813,[577]],[1,577,[581]],[1,812,[467]],[1,467,[471]],[1,811,[465]],[1,465,[469]],[1,810,[478]],[1,478,[476]],[1,809,[474]],[1,474,[472]],[1,808,[580]],[1,807,[580]],[1,580,[582]],[1,806,[576]],[1,805,[576]],[1,576,[578]],[1,804,[569]],[1,569,[571]],[1,803,[568]],[1,568,[570]],[1,802,[573]],[1,573,[575]],[1,801,[572]],[1,572,[574]],[1,800,[563]],[1,563,[567]],[1,799,[561]],[1,561,[565]],[1,798,[387]],[1,387,[395]],[1,797,[397]],[1,397,[389]],[1,796,[398]],[1,398,[390]],[1,795,[384]],[1,384,[392]],[1,794,[564]],[1,793,[564]],[1,564,[566]],[1,792,[560]],[1,791,[560]],[1,560,[562]],[1,790,[547]],[1,547,[551]],[1,789,[545]],[1,545,[549]],[1,788,[557]],[1,557,[559]],[1,787,[556]],[1,556,[558]],[1,786,[553]],[1,553,[555]],[1,785,[552]],[1,552,[554]],[1,784,[335]],[1,335,[331]],[1,783,[333]],[1,333,[329]],[1,782,[324]],[1,324,[326]],[1,781,[320]],[1,320,[322]],[1,780,[548]],[1,779,[548]],[1,548,[550]],[1,778,[544]],[1,777,[544]],[1,544,[546]],[1,776,[531]],[1,531,[535]],[1,775,[529]],[1,529,[533]],[1,774,[537]],[1,537,[539]],[1,773,[536]],[1,536,[538]],[1,772,[541]],[1,541,[543]],[1,771,[540]],[1,540,[542]],[1,770,[275]],[1,275,[283]],[1,769,[285]],[1,285,[277]],[1,768,[286]],[1,286,[278]],[1,767,[272]],[1,272,[280]],[1,766,[532]],[1,765,[532]],[1,532,[534]],[1,764,[528]],[1,763,[528]],[1,528,[530]],[1,762,[515]],[1,515,[519]],[1,761,[513]],[1,513,[517]],[1,760,[525]],[1,525,[527]],[1,759,[524]],[1,524,[526]],[1,758,[521]],[1,521,[523]],[1,757,[520]],[1,520,[522]],[1,756,[291]],[1,291,[299]],[1,755,[301]],[1,301,[293]],[1,754,[302]],[1,302,[294]],[1,753,[288]],[1,288,[296]],[1,752,[516]],[1,751,[516]],[1,516,[518]],[1,750,[512]],[1,749,[512]],[1,512,[514]],[1,748,[499]],[1,499,[503]],[1,747,[497]],[1,497,[501]],[1,746,[505]],[1,505,[507]],[1,745,[504]],[1,504,[506]],[1,744,[509]],[1,509,[511]],[1,743,[508]],[1,508,[510]],[1,742,[307]],[1,307,[311]],[1,741,[305]],[1,305,[309]],[1,740,[318]],[1,318,[316]],[1,739,[314]],[1,314,[312]],[1,738,[500]],[1,737,[500]],[1,500,[502]],[1,736,[496]],[1,735,[496]],[1,496,[498]],[1,734,[483]],[1,483,[487]],[1,733,[481]],[1,481,[485]],[1,732,[489]],[1,489,[491]],[1,731,[488]],[1,488,[490]],[1,730,[493]],[1,493,[495]],[1,729,[492]],[1,492,[494]],[1,728,[383]],[1,383,[379]],[1,727,[381]],[1,381,[377]],[1,726,[372]],[1,372,[374]],[1,725,[368]],[1,368,[370]],[1,724,[484]],[1,723,[484]],[1,484,[486]],[1,722,[480]],[1,721,[480]],[1,480,[482]],[1,720,[243]],[1,243,[5]],[1,719,[249]],[1,249,[242]],[1,718,[253]],[1,253,[247]],[1,717,[255]],[1,255,[246]],[1,716,[254]],[1,254,[2]],[1,715,[251]],[1,251,[241]],[1,714,[245]],[1,245,[6]],[1,713,[248]],[1,248,[240]],[1,712,[252]],[1,711,[252]],[1,252,[7]],[1,710,[250]],[1,709,[250]],[1,250,[4]],[1,708,[244]],[1,707,[244]],[1,244,[3]],[1,706,[704]],[1,705,[704]],[1,704,[0]],[1,704,[1]],[1,703,[363]],[1,363,[359]],[1,702,[367]],[1,367,[355]],[1,701,[361]],[1,361,[357]],[1,700,[365]],[1,365,[353]],[1,699,[358]],[1,358,[364]],[1,698,[356]],[1,356,[366]],[1,697,[354]],[1,354,[360]],[1,696,[352]],[1,352,[362]],[1,695,[694]],[1,694,[61]],[1,694,[62]],[1,693,[692]],[1,692,[60]],[1,692,[63]],[1,691,[690]],[1,690,[57]],[1,690,[58]],[1,689,[688]],[1,688,[56]],[1,688,[59]],[1,687,[423]],[1,423,[427]],[1,686,[431]],[1,431,[419]],[1,685,[425]],[1,425,[421]],[1,684,[417]],[1,417,[429]],[1,683,[428]],[1,428,[422]],[1,682,[420]],[1,420,[430]],[1,681,[418]],[1,418,[424]],[1,680,[426]],[1,426,[416]],[1,679,[678]],[1,678,[93]],[1,678,[94]],[1,677,[676]],[1,676,[92]],[1,676,[95]],[1,675,[674]],[1,674,[89]],[1,674,[90]],[1,673,[672]],[1,672,[88]],[1,672,[91]],[1,671,[439]],[1,439,[443]],[1,670,[447]],[1,447,[435]],[1,669,[441]],[1,441,[437]],[1,668,[433]],[1,433,[445]],[1,667,[444]],[1,444,[438]],[1,666,[436]],[1,436,[446]],[1,665,[434]],[1,434,[440]],[1,664,[442]],[1,442,[432]],[1,663,[662]],[1,662,[101]],[1,662,[102]],[1,661,[660]],[1,660,[100]],[1,660,[103]],[1,659,[658]],[1,658,[97]],[1,658,[98]],[1,657,[656]],[1,656,[96]],[1,656,[99]],[1,655,[455]],[1,455,[459]],[1,654,[463]],[1,463,[451]],[1,653,[457]],[1,457,[453]],[1,652,[449]],[1,449,[461]],[1,651,[460]],[1,460,[454]],[1,650,[452]],[1,452,[462]],[1,649,[450]],[1,450,[456]],[1,648,[458]],[1,458,[448]],[1,647,[646]],[1,646,[109]],[1,646,[110]],[1,645,[644]],[1,644,[108]],[1,644,[111]],[1,643,[642]],[1,642,[105]],[1,642,[106]],[1,641,[640]],[1,640,[104]],[1,640,[107]],[1,639,[407]],[1,407,[411]],[1,638,[415]],[1,415,[403]],[1,637,[409]],[1,409,[405]],[1,636,[401]],[1,401,[413]],[1,635,[412]],[1,412,[406]],[1,634,[404]],[1,404,[414]],[1,633,[402]],[1,402,[408]],[1,632,[410]],[1,410,[400]],[1,631,[630]],[1,630,[85]],[1,630,[86]],[1,629,[628]],[1,628,[84]],[1,628,[87]],[1,627,[626]],[1,626,[81]],[1,626,[82]],[1,625,[624]],[1,624,[80]],[1,624,[83]],[1,623,[347]],[1,347,[343]],[1,622,[339]],[1,339,[351]],[1,621,[341]],[1,341,[345]],[1,620,[349]],[1,349,[337]],[1,619,[342]],[1,342,[348]],[1,618,[350]],[1,350,[340]],[1,617,[344]],[1,344,[338]],[1,616,[336]],[1,336,[346]],[1,615,[614]],[1,614,[53]],[1,614,[54]],[1,613,[612]],[1,612,[52]],[1,612,[55]],[1,611,[610]],[1,610,[49]],[1,610,[50]],[1,609,[608]],[1,608,[48]],[1,608,[51]],[1,607,[267]],[1,267,[263]],[1,606,[271]],[1,271,[259]],[1,605,[265]],[1,265,[261]],[1,604,[269]],[1,269,[257]],[1,603,[262]],[1,262,[268]],[1,602,[260]],[1,260,[270]],[1,601,[258]],[1,258,[264]],[1,600,[256]],[1,256,[266]],[1,599,[598]],[1,598,[13]],[1,598,[14]],[1,597,[596]],[1,596,[12]],[1,596,[15]],[1,595,[594]],[1,594,[9]],[1,594,[10]],[1,593,[592]],[1,592,[8]],[1,592,[11]],[1,591,[471]],[1,471,[475]],[1,590,[467]],[1,467,[479]],[1,589,[469]],[1,469,[473]],[1,588,[465]],[1,465,[477]],[1,587,[476]],[1,476,[470]],[1,586,[478]],[1,478,[468]],[1,585,[472]],[1,472,[466]],[1,584,[474]],[1,474,[464]],[1,583,[582]],[1,582,[117]],[1,582,[118]],[1,581,[580]],[1,580,[116]],[1,580,[119]],[1,579,[578]],[1,578,[113]],[1,578,[114]],[1,577,[576]],[1,576,[112]],[1,576,[115]],[1,575,[395]],[1,395,[391]],[1,574,[387]],[1,387,[399]],[1,573,[389]],[1,389,[393]],[1,572,[397]],[1,397,[385]],[1,571,[390]],[1,390,[396]],[1,570,[398]],[1,398,[388]],[1,569,[392]],[1,392,[386]],[1,568,[384]],[1,384,[394]],[1,567,[566]],[1,566,[77]],[1,566,[78]],[1,565,[564]],[1,564,[76]],[1,564,[79]],[1,563,[562]],[1,562,[73]],[1,562,[74]],[1,561,[560]],[1,560,[72]],[1,560,[75]],[1,559,[331]],[1,331,[327]],[1,558,[335]],[1,335,[323]],[1,557,[329]],[1,329,[325]],[1,556,[333]],[1,333,[321]],[1,555,[326]],[1,326,[332]],[1,554,[324]],[1,324,[334]],[1,553,[322]],[1,322,[328]],[1,552,[320]],[1,320,[330]],[1,551,[550]],[1,550,[45]],[1,550,[46]],[1,549,[548]],[1,548,[44]],[1,548,[47]],[1,547,[546]],[1,546,[41]],[1,546,[42]],[1,545,[544]],[1,544,[40]],[1,544,[43]],[1,543,[283]],[1,283,[279]],[1,542,[275]],[1,275,[287]],[1,541,[277]],[1,277,[281]],[1,540,[285]],[1,285,[273]],[1,539,[278]],[1,278,[284]],[1,538,[286]],[1,286,[276]],[1,537,[280]],[1,280,[274]],[1,536,[272]],[1,272,[282]],[1,535,[534]],[1,534,[21]],[1,534,[22]],[1,533,[532]],[1,532,[20]],[1,532,[23]],[1,531,[530]],[1,530,[17]],[1,530,[18]],[1,529,[528]],[1,528,[16]],[1,528,[19]],[1,527,[299]],[1,299,[295]],[1,526,[291]],[1,291,[303]],[1,525,[293]],[1,293,[297]],[1,524,[301]],[1,301,[289]],[1,523,[294]],[1,294,[300]],[1,522,[302]],[1,302,[292]],[1,521,[296]],[1,296,[290]],[1,520,[288]],[1,288,[298]],[1,519,[518]],[1,518,[29]],[1,518,[30]],[1,517,[516]],[1,516,[28]],[1,516,[31]],[1,515,[514]],[1,514,[25]],[1,514,[26]],[1,513,[512]],[1,512,[24]],[1,512,[27]],[1,511,[311]],[1,311,[315]],[1,510,[307]],[1,307,[319]],[1,509,[309]],[1,309,[313]],[1,508,[305]],[1,305,[317]],[1,507,[316]],[1,316,[310]],[1,506,[318]],[1,318,[308]],[1,505,[312]],[1,312,[306]],[1,504,[314]],[1,314,[304]],[1,503,[502]],[1,502,[37]],[1,502,[38]],[1,501,[500]],[1,500,[36]],[1,500,[39]],[1,499,[498]],[1,498,[33]],[1,498,[34]],[1,497,[496]],[1,496,[32]],[1,496,[35]],[1,495,[379]],[1,379,[375]],[1,494,[383]],[1,383,[371]],[1,493,[377]],[1,377,[373]],[1,492,[381]],[1,381,[369]],[1,491,[374]],[1,374,[380]],[1,490,[372]],[1,372,[382]],[1,489,[370]],[1,370,[376]],[1,488,[368]],[1,368,[378]],[1,487,[486]],[1,486,[69]],[1,486,[70]],[1,485,[484]],[1,484,[68]],[1,484,[71]],[1,483,[482]],[1,482,[65]],[1,482,[66]],[1,481,[480]],[1,480,[64]],[1,480,[67]],[1,479,[119]],[1,478,[119]],[1,477,[118]],[1,476,[118]],[1,475,[117]],[1,474,[117]],[1,473,[116]],[1,472,[116]],[1,471,[115]],[1,470,[115]],[1,469,[114]],[1,468,[114]],[1,467,[113]],[1,466,[113]],[1,465,[112]],[1,464,[112]],[1,463,[111]],[1,462,[111]],[1,461,[110]],[1,460,[110]],[1,459,[109]],[1,458,[109]],[1,457,[108]],[1,456,[108]],[1,455,[107]],[1,454,[107]],[1,453,[106]],[1,452,[106]],[1,451,[105]],[1,450,[105]],[1,449,[104]],[1,448,[104]],[1,447,[103]],[1,446,[103]],[1,445,[102]],[1,444,[102]],[1,443,[101]],[1,442,[101]],[1,441,[100]],[1,440,[100]],[1,439,[99]],[1,438,[99]],[1,437,[98]],[1,436,[98]],[1,435,[97]],[1,434,[97]],[1,433,[96]],[1,432,[96]],[1,431,[95]],[1,430,[95]],[1,429,[94]],[1,428,[94]],[1,427,[93]],[1,426,[93]],[1,425,[92]],[1,424,[92]],[1,423,[91]],[1,422,[91]],[1,421,[90]],[1,420,[90]],[1,419,[89]],[1,418,[89]],[1,417,[88]],[1,416,[88]],[1,415,[87]],[1,414,[87]],[1,413,[86]],[1,412,[86]],[1,411,[85]],[1,410,[85]],[1,409,[84]],[1,408,[84]],[1,407,[83]],[1,406,[83]],[1,405,[82]],[1,404,[82]],[1,403,[81]],[1,402,[81]],[1,401,[80]],[1,400,[80]],[1,399,[79]],[1,398,[79]],[1,397,[78]],[1,396,[78]],[1,395,[77]],[1,394,[77]],[1,393,[76]],[1,392,[76]],[1,391,[75]],[1,390,[75]],[1,389,[74]],[1,388,[74]],[1,387,[73]],[1,386,[73]],[1,385,[72]],[1,384,[72]],[1,383,[71]],[1,382,[71]],[1,381,[70]],[1,380,[70]],[1,379,[69]],[1,378,[69]],[1,377,[68]],[1,376,[68]],[1,375,[67]],[1,374,[67]],[1,373,[66]],[1,372,[66]],[1,371,[65]],[1,370,[65]],[1,369,[64]],[1,368,[64]],[1,367,[63]],[1,366,[63]],[1,365,[62]],[1,364,[62]],[1,363,[61]],[1,362,[61]],[1,361,[60]],[1,360,[60]],[1,359,[59]],[1,358,[59]],[1,357,[58]],[1,356,[58]],[1,355,[57]],[1,354,[57]],[1,353,[56]],[1,352,[56]],[1,351,[55]],[1,350,[55]],[1,349,[54]],[1,348,[54]],[1,347,[53]],[1,346,[53]],[1,345,[52]],[1,344,[52]],[1,343,[51]],[1,342,[51]],[1,341,[50]],[1,340,[50]],[1,339,[49]],[1,338,[49]],[1,337,[48]],[1,336,[48]],[1,335,[47]],[1,334,[47]],[1,333,[46]],[1,332,[46]],[1,331,[45]],[1,330,[45]],[1,329,[44]],[1,328,[44]],[1,327,[43]],[1,326,[43]],[1,325,[42]],[1,324,[42]],[1,323,[41]],[1,322,[41]],[1,321,[40]],[1,320,[40]],[1,319,[39]],[1,318,[39]],[1,317,[38]],[1,316,[38]],[1,315,[37]],[1,314,[37]],[1,313,[36]],[1,312,[36]],[1,311,[35]],[1,310,[35]],[1,309,[34]],[1,308,[34]],[1,307,[33]],[1,306,[33]],[1,305,[32]],[1,304,[32]],[1,303,[31]],[1,302,[31]],[1,301,[30]],[1,300,[30]],[1,299,[29]],[1,298,[29]],[1,297,[28]],[1,296,[28]],[1,295,[27]],[1,294,[27]],[1,293,[26]],[1,292,[26]],[1,291,[25]],[1,290,[25]],[1,289,[24]],[1,288,[24]],[1,287,[23]],[1,286,[23]],[1,285,[22]],[1,284,[22]],[1,283,[21]],[1,282,[21]],[1,281,[20]],[1,280,[20]],[1,279,[19]],[1,278,[19]],[1,277,[18]],[1,276,[18]],[1,275,[17]],[1,274,[17]],[1,273,[16]],[1,272,[16]],[1,271,[15]],[1,270,[15]],[1,269,[14]],[1,268,[14]],[1,267,[13]],[1,266,[13]],[1,265,[12]],[1,264,[12]],[1,263,[11]],[1,262,[11]],[1,261,[10]],[1,260,[10]],[1,259,[9]],[1,258,[9]],[1,257,[8]],[1,256,[8]],[1,255,[7]],[1,254,[7]],[1,253,[6]],[1,252,[6]],[1,251,[5]],[1,250,[5]],[1,249,[4]],[1,248,[4]],[1,247,[3]],[1,246,[3]],[1,245,[2]],[1,244,[2]],[1,243,[1]],[1,242,[1]],[1,241,[0]],[1,240,[0]],[1,242,[842]],[1,242,[856]],[1,243,[842]],[1,243,[856]],[1,255,[821]],[1,255,[865]],[1,707,[724]],[1,707,[798]],[1,707,[812]],[1,707,[854]],[1,707,[868]],[1,707,[894]],[1,708,[723]],[1,708,[810]],[1,708,[852]],[1,708,[880]],[1,709,[737]],[1,709,[908]],[1,710,[738]],[1,710,[878]],[1,711,[782]],[1,711,[796]],[1,711,[824]],[1,711,[906]],[1,712,[752]],[1,712,[780]],[1,712,[794]],[1,712,[822]],[1,712,[862]],[1,712,[892]],[1,714,[900]],[1,717,[779]],[1,717,[821]],[1,717,[828]],[1,717,[865]],[1,717,[896]],[1,717,[910]],[1,719,[842]],[1,719,[856]],[1,721,[723]],[1,721,[879]],[1,721,[880]],[1,722,[724]],[1,722,[853]],[1,722,[854]],[1,722,[867]],[1,722,[868]],[1,725,[870]],[1,725,[884]],[1,725,[898]],[1,726,[870]],[1,726,[884]],[1,726,[898]],[1,727,[742]],[1,727,[842]],[1,727,[846]],[1,727,[856]],[1,727,[859]],[1,728,[742]],[1,728,[842]],[1,728,[846]],[1,728,[856]],[1,728,[860]],[1,731,[746]],[1,731,[758]],[1,732,[746]],[1,732,[758]],[1,733,[774]],[1,733,[786]],[1,733,[803]],[1,733,[815]],[1,734,[774]],[1,734,[786]],[1,734,[804]],[1,734,[816]],[1,735,[737]],[1,735,[936]],[1,735,[941]],[1,736,[738]],[1,736,[947]],[1,739,[756]],[1,739,[831]],[1,739,[842]],[1,739,[856]],[1,739,[858]],[1,739,[871]],[1,740,[756]],[1,740,[832]],[1,740,[842]],[1,740,[856]],[1,740,[858]],[1,740,[872]],[1,741,[742]],[1,741,[859]],[1,741,[860]],[1,745,[746]],[1,747,[762]],[1,747,[776]],[1,747,[789]],[1,747,[800]],[1,747,[813]],[1,748,[762]],[1,748,[776]],[1,748,[790]],[1,748,[800]],[1,748,[814]],[1,749,[823]],[1,749,[824]],[1,749,[864]],[1,750,[752]],[1,750,[820]],[1,750,[822]],[1,750,[861]],[1,750,[862]],[1,753,[793]],[1,753,[874]],[1,753,[901]],[1,753,[915]],[1,754,[793]],[1,754,[874]],[1,754,[902]],[1,754,[916]],[1,755,[756]],[1,755,[831]],[1,755,[832]],[1,755,[871]],[1,755,[872]],[1,757,[758]],[1,761,[762]],[1,761,[789]],[1,761,[790]],[1,761,[799]],[1,761,[800]],[1,763,[912]],[1,763,[945]],[1,765,[912]],[1,767,[838]],[1,767,[939]],[1,768,[838]],[1,769,[784]],[1,769,[826]],[1,769,[839]],[1,770,[784]],[1,770,[826]],[1,770,[840]],[1,771,[818]],[1,771,[932]],[1,772,[818]],[1,773,[774]],[1,773,[815]],[1,773,[816]],[1,775,[776]],[1,775,[789]],[1,775,[790]],[1,775,[799]],[1,775,[800]],[1,775,[813]],[1,775,[814]],[1,777,[779]],[1,778,[780]],[1,778,[820]],[1,778,[822]],[1,778,[890]],[1,778,[892]],[1,781,[782]],[1,781,[864]],[1,783,[784]],[1,783,[839]],[1,783,[840]],[1,785,[786]],[1,785,[803]],[1,785,[804]],[1,787,[802]],[1,787,[891]],[1,787,[903]],[1,788,[802]],[1,788,[891]],[1,788,[905]],[1,791,[793]],[1,791,[901]],[1,791,[902]],[1,791,[915]],[1,791,[916]],[1,792,[794]],[1,792,[861]],[1,792,[862]],[1,792,[890]],[1,792,[892]],[1,795,[796]],[1,795,[823]],[1,795,[824]],[1,797,[798]],[1,797,[867]],[1,797,[868]],[1,797,[893]],[1,797,[894]],[1,801,[802]],[1,801,[903]],[1,801,[905]],[1,805,[914]],[1,805,[952]],[1,807,[914]],[1,809,[810]],[1,809,[879]],[1,809,[880]],[1,811,[812]],[1,811,[853]],[1,811,[854]],[1,811,[893]],[1,811,[894]],[1,817,[818]],[1,817,[932]],[1,819,[821]],[1,825,[826]],[1,825,[839]],[1,825,[840]],[1,827,[828]],[1,827,[909]],[1,827,[910]],[1,837,[838]],[1,837,[939]],[1,841,[842]],[1,845,[846]],[1,845,[859]],[1,845,[860]],[1,851,[852]],[1,851,[879]],[1,851,[880]],[1,855,[856]],[1,857,[858]],[1,857,[871]],[1,857,[872]],[1,863,[865]],[1,869,[870]],[1,869,[897]],[1,869,[898]],[1,873,[874]],[1,873,[915]],[1,873,[916]],[1,876,[878]],[1,876,[947]],[1,883,[884]],[1,883,[897]],[1,883,[898]],[1,889,[891]],[1,889,[903]],[1,889,[905]],[1,895,[896]],[1,895,[909]],[1,895,[910]],[1,899,[900]],[1,904,[906]],[1,907,[908]],[1,907,[936]],[1,907,[941]],[1,911,[912]],[1,911,[945]],[1,913,[914]],[1,913,[952]],[1,930,[932]],[1,935,[936]],[1,938,[939]],[1,940,[941]],[1,944,[945]],[1,946,[947]],[1,949,[954]],[1,950,[954]],[1,951,[952]],[1,953,[954]]],"D":[[0,120,[242]],[0,120,[247]],[0,120,[249]],[0,120,[250]],[0,120,[252]],[0,120,[253]],[0,120,[254]],[0,120,[448]],[0,120,[450]],[0,120,[452]],[0,120,[454]],[0,120,[456]],[0,120,[458]],[0,120,[460]],[0,120,[462]],[0,120,[592]],[0,120,[594]],[0,120,[596]],[0,120,[598]],[0,120,[608]],[0,120,[610]],[0,120,[612]],[0,120,[614]],[0,120,[624]],[0,120,[626]],[0,120,[628]],[0,120,[630]],[0,120,[656]],[0,120,[658]],[0,120,[660]],[0,120,[662]],[0,120,[672]],[0,120,[674]],[0,120,[676]],[0,120,[678]],[0,120,[688]],[0,120,[690]],[0,120,[692]],[0,120,[694]],[0,120,[716]],[0,120,[718]],[0,120,[719]],[0,120,[720]],[0,120,[866]],[0,121,[241]],[0,121,[248]],[0,121,[250]],[0,121,[251]],[0,121,[254]],[0,121,[528]],[0,121,[530]],[0,121,[532]],[0,121,[534]],[0,121,[544]],[0,121,[546]],[0,121,[548]],[0,121,[550]],[0,121,[560]],[0,121,[562]],[0,121,[564]],[0,121,[566]],[0,121,[576]],[0,121,[578]],[0,121,[580]],[0,121,[582]],[0,121,[656]],[0,121,[658]],[0,121,[660]],[0,121,[662]],[0,121,[672]],[0,121,[674]],[0,121,[676]],[0,121,[678]],[0,121,[687]],[0,121,[688]],[0,121,[690]],[0,121,[692]],[0,121,[694]],[0,121,[713]],[0,121,[715]],[0,121,[904]],[0,122,[242]],[0,122,[243]],[0,122,[247]],[0,122,[252]],[0,122,[254]],[0,122,[448]],[0,122,[450]],[0,122,[452]],[0,122,[454]],[0,122,[456]],[0,122,[458]],[0,122,[460]],[0,122,[462]],[0,122,[496]],[0,122,[498]],[0,122,[500]],[0,122,[502]],[0,122,[512]],[0,122,[514]],[0,122,[516]],[0,122,[518]],[0,122,[560]],[0,122,[562]],[0,122,[564]],[0,122,[566]],[0,122,[576]],[0,122,[578]],[0,122,[580]],[0,122,[582]],[0,122,[624]],[0,122,[626]],[0,122,[628]],[0,122,[630]],[0,122,[655]],[0,122,[688]],[0,122,[690]],[0,122,[692]],[0,122,[694]],[0,122,[699]],[0,122,[704]],[0,122,[705]],[0,122,[720]],[0,123,[240]],[0,123,[241]],[0,123,[247]],[0,123,[253]],[0,123,[254]],[0,123,[496]],[0,123,[498]],[0,123,[500]],[0,123,[502]],[0,123,[512]],[0,123,[514]],[0,123,[516]],[0,123,[518]],[0,123,[528]],[0,123,[530]],[0,123,[532]],[0,123,[534]],[0,123,[539]],[0,123,[544]],[0,123,[546]],[0,123,[548]],[0,123,[550]],[0,123,[592]],[0,123,[594]],[0,123,[596]],[0,123,[598]],[0,123,[603]],[0,123,[608]],[0,123,[610]],[0,123,[612]],[0,123,[614]],[0,123,[688]],[0,123,[690]],[0,123,[692]],[0,123,[694]],[0,123,[699]],[0,123,[704]],[0,123,[705]],[0,124,[241]],[0,124,[247]],[0,124,[250]],[0,124,[251]],[0,124,[253]],[0,124,[254]],[0,124,[261]],[0,124,[265]],[0,124,[448]],[0,124,[450]],[0,124,[452]],[0,124,[454]],[0,124,[456]],[0,124,[458]],[0,124,[460]],[0,124,[462]],[0,124,[480]],[0,124,[482]],[0,124,[484]],[0,124,[486]],[0,124,[512]],[0,124,[514]],[0,124,[516]],[0,124,[518]],[0,124,[544]],[0,124,[546]],[0,124,[548]],[0,124,[550]],[0,124,[576]],[0,124,[578]],[0,124,[580]],[0,124,[582]],[0,124,[608]],[0,124,[610]],[0,124,[612]],[0,124,[614]],[0,124,[672]],[0,124,[674]],[0,124,[676]],[0,124,[678]],[0,124,[687]],[0,124,[706]],[0,124,[715]],[0,124,[720]],[0,124,[751]],[0,125,[242]],[0,125,[249]],[0,125,[250]],[0,125,[252]],[0,125,[254]],[0,125,[261]],[0,125,[265]],[0,125,[480]],[0,125,[482]],[0,125,[484]],[0,125,[486]],[0,125,[512]],[0,125,[514]],[0,125,[516]],[0,125,[518]],[0,125,[528]],[0,125,[530]],[0,125,[532]],[0,125,[534]],[0,125,[560]],[0,125,[562]],[0,125,[564]],[0,125,[566]],[0,125,[592]],[0,125,[594]],[0,125,[596]],[0,125,[598]],[0,125,[624]],[0,125,[626]],[0,125,[628]],[0,125,[630]],[0,125,[672]],[0,125,[674]],[0,125,[676]],[0,125,[678]],[0,125,[706]],[0,125,[713]],[0,125,[716]],[0,125,[718]],[0,125,[719]],[0,126,[241]],[0,126,[246]],[0,126,[250]],[0,126,[251]],[0,126,[252]],[0,126,[261]],[0,126,[265]],[0,126,[448]],[0,126,[450]],[0,126,[452]],[0,126,[454]],[0,126,[456]],[0,126,[458]],[0,126,[460]],[0,126,[462]],[0,126,[480]],[0,126,[482]],[0,126,[484]],[0,126,[486]],[0,126,[496]],[0,126,[498]],[0,126,[500]],[0,126,[502]],[0,126,[544]],[0,126,[546]],[0,126,[548]],[0,126,[550]],[0,126,[560]],[0,126,[562]],[0,126,[564]],[0,126,[566]],[0,126,[592]],[0,126,[594]],[0,126,[596]],[0,126,[598]],[0,126,[607]],[0,126,[656]],[0,126,[658]],[0,126,[660]],[0,126,[662]],[0,126,[667]],[0,127,[244]],[0,127,[247]],[0,127,[253]],[0,127,[254]],[0,127,[261]],[0,127,[265]],[0,127,[480]],[0,127,[482]],[0,127,[484]],[0,127,[486]],[0,127,[496]],[0,127,[498]],[0,127,[500]],[0,127,[502]],[0,127,[528]],[0,127,[530]],[0,127,[532]],[0,127,[534]],[0,127,[576]],[0,127,[578]],[0,127,[580]],[0,127,[582]],[0,127,[608]],[0,127,[610]],[0,127,[612]],[0,127,[614]],[0,127,[619]],[0,127,[624]],[0,127,[626]],[0,127,[628]],[0,127,[630]],[0,127,[656]],[0,127,[658]],[0,127,[660]],[0,127,[662]],[0,127,[671]],[0,127,[704]],[0,128,[241]],[0,128,[247]],[0,128,[250]],[0,128,[251]],[0,128,[253]],[0,128,[263]],[0,128,[274]],[0,128,[277]],[0,128,[279]],[0,128,[280]],[0,128,[281]],[0,128,[283]],[0,128,[290]],[0,128,[294]],[0,128,[296]],[0,128,[300]],[0,128,[309]],[0,128,[311]],[0,128,[313]],[0,128,[315]],[0,128,[322]],[0,128,[326]],[0,128,[328]],[0,128,[332]],[0,128,[355]],[0,128,[359]],[0,128,[363]],[0,128,[367]],[0,128,[373]],[0,128,[375]],[0,128,[377]],[0,128,[379]],[0,128,[404]],[0,128,[406]],[0,128,[412]],[0,128,[414]],[0,128,[419]],[0,128,[423]],[0,128,[427]],[0,128,[431]],[0,128,[436]],[0,128,[438]],[0,128,[444]],[0,128,[446]],[0,128,[451]],[0,128,[455]],[0,128,[459]],[0,128,[463]],[0,128,[493]],[0,128,[495]],[0,128,[509]],[0,128,[511]],[0,128,[521]],[0,128,[523]],[0,128,[541]],[0,128,[543]],[0,128,[553]],[0,128,[555]],[0,128,[562]],[0,128,[563]],[0,128,[566]],[0,128,[567]],[0,128,[576]],[0,128,[578]],[0,128,[580]],[0,128,[582]],[0,128,[612]],[0,128,[614]],[0,128,[715]],[0,128,[835]],[0,129,[241]],[0,129,[250]],[0,129,[251]],[0,129,[254]],[0,129,[265]],[0,129,[274]],[0,129,[277]],[0,129,[279]],[0,129,[280]],[0,129,[281]],[0,129,[283]],[0,129,[288]],[0,129,[292]],[0,129,[298]],[0,129,[302]],[0,129,[309]],[0,129,[311]],[0,129,[313]],[0,129,[315]],[0,129,[320]],[0,129,[324]],[0,129,[330]],[0,129,[334]],[0,129,[353]],[0,129,[357]],[0,129,[361]],[0,129,[365]],[0,129,[373]],[0,129,[375]],[0,129,[377]],[0,129,[379]],[0,129,[404]],[0,129,[406]],[0,129,[412]],[0,129,[414]],[0,129,[417]],[0,129,[421]],[0,129,[425]],[0,129,[429]],[0,129,[436]],[0,129,[438]],[0,129,[444]],[0,129,[446]],[0,129,[449]],[0,129,[453]],[0,129,[457]],[0,129,[461]],[0,129,[466]],[0,129,[467]],[0,129,[470]],[0,129,[471]],[0,129,[472]],[0,129,[475]],[0,129,[476]],[0,129,[479]],[0,129,[493]],[0,129,[495]],[0,129,[509]],[0,129,[511]],[0,129,[520]],[0,129,[522]],[0,129,[541]],[0,129,[543]],[0,129,[552]],[0,129,[554]],[0,129,[560]],[0,129,[561]],[0,129,[564]],[0,129,[565]],[0,129,[576]],[0,129,[578]],[0,129,[583]],[0,129,[590]],[0,129,[591]],[0,129,[612]],[0,129,[614]],[0,129,[715]],[0,129,[835]],[0,129,[917]],[0,130,[241]],[0,130,[247]],[0,130,[250]],[0,130,[251]],[0,130,[253]],[0,130,[259]],[0,130,[261]],[0,130,[265]],[0,130,[273]],[0,130,[274]],[0,130,[275]],[0,130,[280]],[0,130,[285]],[0,130,[287]],[0,130,[290]],[0,130,[294]],[0,130,[296]],[0,130,[300]],[0,130,[305]],[0,130,[307]],[0,130,[317]],[0,130,[319]],[0,130,[322]],[0,130,[326]],[0,130,[328]],[0,130,[332]],[0,130,[353]],[0,130,[357]],[0,130,[361]],[0,130,[365]],[0,130,[373]],[0,130,[375]],[0,130,[377]],[0,130,[379]],[0,130,[400]],[0,130,[402]],[0,130,[408]],[0,130,[410]],[0,130,[419]],[0,130,[423]],[0,130,[427]],[0,130,[431]],[0,130,[432]],[0,130,[434]],[0,130,[440]],[0,130,[442]],[0,130,[451]],[0,130,[455]],[0,130,[459]],[0,130,[463]],[0,130,[466]],[0,130,[467]],[0,130,[468]],[0,130,[469]],[0,130,[470]],[0,130,[471]],[0,130,[472]],[0,130,[473]],[0,130,[475]],[0,130,[476]],[0,130,[478]],[0,130,[479]],[0,130,[493]],[0,130,[495]],[0,130,[508]],[0,130,[510]],[0,130,[521]],[0,130,[523]],[0,130,[540]],[0,130,[542]],[0,130,[553]],[0,130,[555]],[0,130,[560]],[0,130,[561]],[0,130,[564]],[0,130,[565]],[0,130,[576]],[0,130,[578]],[0,130,[580]],[0,130,[581]],[0,130,[586]],[0,130,[590]],[0,130,[591]],[0,130,[612]],[0,130,[614]],[0,130,[715]],[0,130,[835]],[0,130,[918]],[0,131,[241]],[0,131,[250]],[0,131,[251]],[0,131,[254]],[0,131,[257]],[0,131,[273]],[0,131,[274]],[0,131,[275]],[0,131,[280]],[0,131,[285]],[0,131,[287]],[0,131,[288]],[0,131,[292]],[0,131,[298]],[0,131,[302]],[0,131,[305]],[0,131,[307]],[0,131,[317]],[0,131,[319]],[0,131,[320]],[0,131,[324]],[0,131,[330]],[0,131,[334]],[0,131,[355]],[0,131,[359]],[0,131,[363]],[0,131,[367]],[0,131,[373]],[0,131,[375]],[0,131,[377]],[0,131,[379]],[0,131,[400]],[0,131,[402]],[0,131,[408]],[0,131,[410]],[0,131,[417]],[0,131,[421]],[0,131,[425]],[0,131,[429]],[0,131,[432]],[0,131,[434]],[0,131,[440]],[0,131,[442]],[0,131,[449]],[0,131,[453]],[0,131,[457]],[0,131,[461]],[0,131,[493]],[0,131,[495]],[0,131,[508]],[0,131,[510]],[0,131,[520]],[0,131,[522]],[0,131,[540]],[0,131,[542]],[0,131,[552]],[0,131,[554]],[0,131,[562]],[0,131,[563]],[0,131,[566]],[0,131,[567]],[0,131,[576]],[0,131,[578]],[0,131,[580]],[0,131,[582]],[0,131,[612]],[0,131,[614]],[0,131,[715]],[0,131,[835]],[0,132,[241]],[0,132,[247]],[0,132,[250]],[0,132,[251]],[0,132,[253]],[0,132,[254]],[0,132,[270]],[0,132,[273]],[0,132,[274]],[0,132,[275]],[0,132,[280]],[0,132,[285]],[0,132,[287]],[0,132,[290]],[0,132,[294]],[0,132,[296]],[0,132,[300]],[0,132,[309]],[0,132,[311]],[0,132,[313]],[0,132,[315]],[0,132,[320]],[0,132,[324]],[0,132,[330]],[0,132,[334]],[0,132,[355]],[0,132,[359]],[0,132,[363]],[0,132,[367]],[0,132,[369]],[0,132,[371]],[0,132,[381]],[0,132,[383]],[0,132,[404]],[0,132,[406]],[0,132,[412]],[0,132,[414]],[0,132,[417]],[0,132,[421]],[0,132,[425]],[0,132,[429]],[0,132,[432]],[0,132,[434]],[0,132,[440]],[0,132,[442]],[0,132,[451]],[0,132,[455]],[0,132,[459]],[0,132,[463]],[0,132,[466]],[0,132,[467]],[0,132,[468]],[0,132,[469]],[0,132,[470]],[0,132,[471]],[0,132,[472]],[0,132,[473]],[0,132,[475]],[0,132,[476]],[0,132,[478]],[0,132,[479]],[0,132,[492]],[0,132,[494]],[0,132,[509]],[0,132,[511]],[0,132,[521]],[0,132,[523]],[0,132,[540]],[0,132,[542]],[0,132,[552]],[0,132,[554]],[0,132,[562]],[0,132,[563]],[0,132,[566]],[0,132,[567]],[0,132,[576]],[0,132,[578]],[0,132,[580]],[0,132,[586]],[0,132,[587]],[0,132,[590]],[0,132,[608]],[0,132,[610]],[0,132,[715]],[0,132,[833]],[0,132,[917]],[0,133,[241]],[0,133,[250]],[0,133,[251]],[0,133,[261]],[0,133,[265]],[0,133,[268]],[0,133,[273]],[0,133,[274]],[0,133,[275]],[0,133,[280]],[0,133,[285]],[0,133,[287]],[0,133,[288]],[0,133,[292]],[0,133,[298]],[0,133,[302]],[0,133,[309]],[0,133,[311]],[0,133,[313]],[0,133,[315]],[0,133,[322]],[0,133,[326]],[0,133,[328]],[0,133,[332]],[0,133,[353]],[0,133,[357]],[0,133,[361]],[0,133,[365]],[0,133,[369]],[0,133,[371]],[0,133,[381]],[0,133,[383]],[0,133,[404]],[0,133,[406]],[0,133,[412]],[0,133,[414]],[0,133,[419]],[0,133,[423]],[0,133,[427]],[0,133,[431]],[0,133,[432]],[0,133,[434]],[0,133,[440]],[0,133,[442]],[0,133,[449]],[0,133,[453]],[0,133,[457]],[0,133,[461]],[0,133,[492]],[0,133,[494]],[0,133,[509]],[0,133,[511]],[0,133,[520]],[0,133,[522]],[0,133,[540]],[0,133,[542]],[0,133,[553]],[0,133,[555]],[0,133,[560]],[0,133,[561]],[0,133,[564]],[0,133,[565]],[0,133,[576]],[0,133,[578]],[0,133,[580]],[0,133,[582]],[0,133,[608]],[0,133,[610]],[0,133,[715]],[0,133,[833]],[0,134,[241]],[0,134,[247]],[0,134,[250]],[0,134,[251]],[0,134,[253]],[0,134,[254]],[0,134,[261]],[0,134,[265]],[0,134,[266]],[0,134,[274]],[0,134,[277]],[0,134,[279]],[0,134,[280]],[0,134,[281]],[0,134,[283]],[0,134,[290]],[0,134,[294]],[0,134,[296]],[0,134,[300]],[0,134,[305]],[0,134,[307]],[0,134,[317]],[0,134,[319]],[0,134,[320]],[0,134,[324]],[0,134,[330]],[0,134,[334]],[0,134,[353]],[0,134,[357]],[0,134,[361]],[0,134,[365]],[0,134,[369]],[0,134,[371]],[0,134,[381]],[0,134,[383]],[0,134,[400]],[0,134,[402]],[0,134,[408]],[0,134,[410]],[0,134,[417]],[0,134,[421]],[0,134,[425]],[0,134,[429]],[0,134,[436]],[0,134,[438]],[0,134,[444]],[0,134,[446]],[0,134,[451]],[0,134,[455]],[0,134,[459]],[0,134,[463]],[0,134,[492]],[0,134,[494]],[0,134,[508]],[0,134,[510]],[0,134,[521]],[0,134,[523]],[0,134,[541]],[0,134,[543]],[0,134,[552]],[0,134,[554]],[0,134,[560]],[0,134,[561]],[0,134,[564]],[0,134,[565]],[0,134,[576]],[0,134,[578]],[0,134,[580]],[0,134,[582]],[0,134,[608]],[0,134,[610]],[0,134,[715]],[0,134,[833]],[0,135,[241]],[0,135,[250]],[0,135,[251]],[0,135,[264]],[0,135,[274]],[0,135,[277]],[0,135,[279]],[0,135,[280]],[0,135,[281]],[0,135,[283]],[0,135,[288]],[0,135,[292]],[0,135,[298]],[0,135,[302]],[0,135,[305]],[0,135,[307]],[0,135,[317]],[0,135,[319]],[0,135,[322]],[0,135,[326]],[0,135,[328]],[0,135,[332]],[0,135,[355]],[0,135,[359]],[0,135,[363]],[0,135,[367]],[0,135,[369]],[0,135,[371]],[0,135,[381]],[0,135,[383]],[0,135,[400]],[0,135,[402]],[0,135,[408]],[0,135,[410]],[0,135,[419]],[0,135,[423]],[0,135,[427]],[0,135,[431]],[0,135,[436]],[0,135,[438]],[0,135,[444]],[0,135,[446]],[0,135,[449]],[0,135,[453]],[0,135,[457]],[0,135,[461]],[0,135,[466]],[0,135,[467]],[0,135,[470]],[0,135,[471]],[0,135,[472]],[0,135,[475]],[0,135,[476]],[0,135,[479]],[0,135,[492]],[0,135,[494]],[0,135,[508]],[0,135,[510]],[0,135,[520]],[0,135,[522]],[0,135,[541]],[0,135,[543]],[0,135,[553]],[0,135,[555]],[0,135,[562]],[0,135,[563]],[0,135,[566]],[0,135,[567]],[0,135,[576]],[0,135,[578]],[0,135,[581]],[0,135,[583]],[0,135,[587]],[0,135,[590]],[0,135,[608]],[0,135,[610]],[0,135,[715]],[0,135,[833]],[0,135,[918]],[0,136,[243]],[0,136,[246]],[0,136,[250]],[0,136,[255]],[0,136,[261]],[0,136,[263]],[0,136,[265]],[0,136,[267]],[0,136,[279]],[0,136,[290]],[0,136,[292]],[0,136,[294]],[0,136,[296]],[0,136,[300]],[0,136,[302]],[0,136,[308]],[0,136,[310]],[0,136,[316]],[0,136,[318]],[0,136,[338]],[0,136,[342]],[0,136,[344]],[0,136,[348]],[0,136,[356]],[0,136,[358]],[0,136,[364]],[0,136,[366]],[0,136,[372]],[0,136,[374]],[0,136,[380]],[0,136,[382]],[0,136,[388]],[0,136,[390]],[0,136,[396]],[0,136,[398]],[0,136,[420]],[0,136,[422]],[0,136,[428]],[0,136,[430]],[0,136,[436]],[0,136,[438]],[0,136,[444]],[0,136,[446]],[0,136,[448]],[0,136,[450]],[0,136,[452]],[0,136,[454]],[0,136,[456]],[0,136,[458]],[0,136,[460]],[0,136,[462]],[0,136,[467]],[0,136,[471]],[0,136,[475]],[0,136,[479]],[0,136,[548]],[0,136,[550]],[0,136,[605]],[0,136,[607]],[0,136,[617]],[0,136,[619]],[0,136,[626]],[0,136,[627]],[0,136,[630]],[0,136,[631]],[0,136,[717]],[0,136,[720]],[0,136,[882]],[0,137,[243]],[0,137,[246]],[0,137,[250]],[0,137,[252]],[0,137,[254]],[0,137,[255]],[0,137,[263]],[0,137,[267]],[0,137,[276]],[0,137,[288]],[0,137,[298]],[0,137,[308]],[0,137,[310]],[0,137,[316]],[0,137,[318]],[0,137,[336]],[0,137,[340]],[0,137,[346]],[0,137,[350]],[0,137,[352]],[0,137,[354]],[0,137,[360]],[0,137,[362]],[0,137,[372]],[0,137,[374]],[0,137,[380]],[0,137,[382]],[0,137,[388]],[0,137,[390]],[0,137,[396]],[0,137,[398]],[0,137,[416]],[0,137,[418]],[0,137,[424]],[0,137,[426]],[0,137,[436]],[0,137,[438]],[0,137,[444]],[0,137,[446]],[0,137,[448]],[0,137,[450]],[0,137,[453]],[0,137,[455]],[0,137,[456]],[0,137,[457]],[0,137,[458]],[0,137,[459]],[0,137,[465]],[0,137,[469]],[0,137,[473]],[0,137,[477]],[0,137,[548]],[0,137,[550]],[0,137,[605]],[0,137,[607]],[0,137,[616]],[0,137,[618]],[0,137,[624]],[0,137,[625]],[0,137,[628]],[0,137,[629]],[0,137,[644]],[0,137,[645]],[0,137,[646]],[0,137,[650]],[0,137,[651]],[0,137,[655]],[0,137,[717]],[0,137,[720]],[0,137,[841]],[0,137,[855]],[0,137,[882]],[0,137,[895]],[0,137,[937]],[0,137,[942]],[0,138,[243]],[0,138,[246]],[0,138,[250]],[0,138,[255]],[0,138,[257]],[0,138,[259]],[0,138,[261]],[0,138,[265]],[0,138,[269]],[0,138,[271]],[0,138,[274]],[0,138,[290]],[0,138,[292]],[0,138,[294]],[0,138,[296]],[0,138,[300]],[0,138,[302]],[0,138,[304]],[0,138,[306]],[0,138,[312]],[0,138,[314]],[0,138,[338]],[0,138,[342]],[0,138,[344]],[0,138,[348]],[0,138,[352]],[0,138,[354]],[0,138,[360]],[0,138,[362]],[0,138,[372]],[0,138,[374]],[0,138,[380]],[0,138,[382]],[0,138,[384]],[0,138,[386]],[0,138,[392]],[0,138,[394]],[0,138,[420]],[0,138,[422]],[0,138,[428]],[0,138,[430]],[0,138,[432]],[0,138,[434]],[0,138,[440]],[0,138,[442]],[0,138,[448]],[0,138,[454]],[0,138,[458]],[0,138,[460]],[0,138,[467]],[0,138,[471]],[0,138,[475]],[0,138,[479]],[0,138,[548]],[0,138,[550]],[0,138,[604]],[0,138,[606]],[0,138,[617]],[0,138,[619]],[0,138,[624]],[0,138,[625]],[0,138,[628]],[0,138,[629]],[0,138,[642]],[0,138,[644]],[0,138,[645]],[0,138,[647]],[0,138,[651]],[0,138,[717]],[0,138,[720]],[0,138,[827]],[0,138,[855]],[0,138,[881]],[0,138,[943]],[0,139,[243]],[0,139,[246]],[0,139,[250]],[0,139,[252]],[0,139,[254]],[0,139,[255]],[0,139,[257]],[0,139,[259]],[0,139,[269]],[0,139,[271]],[0,139,[273]],[0,139,[288]],[0,139,[298]],[0,139,[304]],[0,139,[306]],[0,139,[312]],[0,139,[314]],[0,139,[336]],[0,139,[340]],[0,139,[346]],[0,139,[350]],[0,139,[356]],[0,139,[358]],[0,139,[364]],[0,139,[366]],[0,139,[372]],[0,139,[374]],[0,139,[380]],[0,139,[382]],[0,139,[384]],[0,139,[386]],[0,139,[392]],[0,139,[394]],[0,139,[416]],[0,139,[418]],[0,139,[424]],[0,139,[426]],[0,139,[432]],[0,139,[434]],[0,139,[440]],[0,139,[442]],[0,139,[448]],[0,139,[450]],[0,139,[452]],[0,139,[454]],[0,139,[456]],[0,139,[458]],[0,139,[460]],[0,139,[462]],[0,139,[465]],[0,139,[469]],[0,139,[473]],[0,139,[477]],[0,139,[548]],[0,139,[550]],[0,139,[604]],[0,139,[606]],[0,139,[616]],[0,139,[618]],[0,139,[626]],[0,139,[627]],[0,139,[630]],[0,139,[631]],[0,139,[717]],[0,139,[720]],[0,139,[827]],[0,139,[841]],[0,139,[881]],[0,139,[895]],[0,140,[243]],[0,140,[246]],[0,140,[250]],[0,140,[254]],[0,140,[255]],[0,140,[257]],[0,140,[259]],[0,140,[269]],[0,140,[271]],[0,140,[287]],[0,140,[290]],[0,140,[292]],[0,140,[294]],[0,140,[296]],[0,140,[300]],[0,140,[302]],[0,140,[308]],[0,140,[310]],[0,140,[316]],[0,140,[318]],[0,140,[336]],[0,140,[340]],[0,140,[346]],[0,140,[350]],[0,140,[356]],[0,140,[358]],[0,140,[364]],[0,140,[366]],[0,140,[368]],[0,140,[370]],[0,140,[376]],[0,140,[378]],[0,140,[388]],[0,140,[390]],[0,140,[396]],[0,140,[398]],[0,140,[416]],[0,140,[418]],[0,140,[424]],[0,140,[426]],[0,140,[432]],[0,140,[434]],[0,140,[440]],[0,140,[442]],[0,140,[448]],[0,140,[454]],[0,140,[458]],[0,140,[460]],[0,140,[467]],[0,140,[471]],[0,140,[475]],[0,140,[479]],[0,140,[544]],[0,140,[546]],[0,140,[604]],[0,140,[606]],[0,140,[616]],[0,140,[618]],[0,140,[626]],[0,140,[627]],[0,140,[630]],[0,140,[631]],[0,140,[642]],[0,140,[644]],[0,140,[645]],[0,140,[650]],[0,140,[651]],[0,140,[717]],[0,140,[720]],[0,140,[777]],[0,140,[827]],[0,140,[841]],[0,140,[881]],[0,140,[895]],[0,140,[942]],[0,141,[243]],[0,141,[246]],[0,141,[250]],[0,141,[252]],[0,141,[255]],[0,141,[257]],[0,141,[259]],[0,141,[261]],[0,141,[265]],[0,141,[269]],[0,141,[271]],[0,141,[284]],[0,141,[288]],[0,141,[298]],[0,141,[308]],[0,141,[310]],[0,141,[316]],[0,141,[318]],[0,141,[338]],[0,141,[342]],[0,141,[344]],[0,141,[348]],[0,141,[352]],[0,141,[354]],[0,141,[360]],[0,141,[362]],[0,141,[368]],[0,141,[370]],[0,141,[376]],[0,141,[378]],[0,141,[388]],[0,141,[390]],[0,141,[396]],[0,141,[398]],[0,141,[420]],[0,141,[422]],[0,141,[428]],[0,141,[430]],[0,141,[432]],[0,141,[434]],[0,141,[440]],[0,141,[442]],[0,141,[448]],[0,141,[450]],[0,141,[452]],[0,141,[454]],[0,141,[456]],[0,141,[458]],[0,141,[460]],[0,141,[462]],[0,141,[465]],[0,141,[469]],[0,141,[473]],[0,141,[477]],[0,141,[544]],[0,141,[546]],[0,141,[604]],[0,141,[606]],[0,141,[617]],[0,141,[619]],[0,141,[624]],[0,141,[625]],[0,141,[628]],[0,141,[629]],[0,141,[717]],[0,141,[720]],[0,141,[777]],[0,141,[827]],[0,141,[855]],[0,141,[881]],[0,142,[243]],[0,142,[246]],[0,142,[250]],[0,142,[254]],[0,142,[255]],[0,142,[263]],[0,142,[267]],[0,142,[282]],[0,142,[290]],[0,142,[292]],[0,142,[294]],[0,142,[296]],[0,142,[300]],[0,142,[302]],[0,142,[304]],[0,142,[306]],[0,142,[312]],[0,142,[314]],[0,142,[336]],[0,142,[340]],[0,142,[346]],[0,142,[350]],[0,142,[352]],[0,142,[354]],[0,142,[360]],[0,142,[362]],[0,142,[368]],[0,142,[370]],[0,142,[376]],[0,142,[378]],[0,142,[384]],[0,142,[386]],[0,142,[392]],[0,142,[394]],[0,142,[416]],[0,142,[418]],[0,142,[424]],[0,142,[426]],[0,142,[436]],[0,142,[438]],[0,142,[444]],[0,142,[446]],[0,142,[448]],[0,142,[450]],[0,142,[452]],[0,142,[454]],[0,142,[456]],[0,142,[458]],[0,142,[460]],[0,142,[462]],[0,142,[467]],[0,142,[471]],[0,142,[475]],[0,142,[479]],[0,142,[544]],[0,142,[546]],[0,142,[605]],[0,142,[607]],[0,142,[616]],[0,142,[618]],[0,142,[624]],[0,142,[625]],[0,142,[628]],[0,142,[629]],[0,142,[717]],[0,142,[720]],[0,142,[777]],[0,142,[841]],[0,142,[855]],[0,142,[882]],[0,142,[895]],[0,143,[243]],[0,143,[246]],[0,143,[250]],[0,143,[252]],[0,143,[255]],[0,143,[261]],[0,143,[263]],[0,143,[265]],[0,143,[267]],[0,143,[281]],[0,143,[288]],[0,143,[298]],[0,143,[304]],[0,143,[306]],[0,143,[312]],[0,143,[314]],[0,143,[338]],[0,143,[342]],[0,143,[344]],[0,143,[348]],[0,143,[356]],[0,143,[358]],[0,143,[364]],[0,143,[366]],[0,143,[368]],[0,143,[370]],[0,143,[376]],[0,143,[378]],[0,143,[384]],[0,143,[386]],[0,143,[392]],[0,143,[394]],[0,143,[420]],[0,143,[422]],[0,143,[428]],[0,143,[430]],[0,143,[436]],[0,143,[438]],[0,143,[444]],[0,143,[446]],[0,143,[448]],[0,143,[450]],[0,143,[453]],[0,143,[455]],[0,143,[456]],[0,143,[457]],[0,143,[458]],[0,143,[459]],[0,143,[465]],[0,143,[469]],[0,143,[473]],[0,143,[477]],[0,143,[544]],[0,143,[546]],[0,143,[605]],[0,143,[607]],[0,143,[617]],[0,143,[619]],[0,143,[626]],[0,143,[627]],[0,143,[630]],[0,143,[631]],[0,143,[644]],[0,143,[645]],[0,143,[646]],[0,143,[647]],[0,143,[651]],[0,143,[655]],[0,143,[717]],[0,143,[720]],[0,143,[777]],[0,143,[882]],[0,143,[937]],[0,143,[943]],[0,144,[244]],[0,144,[254]],[0,144,[259]],[0,144,[261]],[0,144,[263]],[0,144,[265]],[0,144,[267]],[0,144,[271]],[0,144,[274]],[0,144,[275]],[0,144,[279]],[0,144,[280]],[0,144,[283]],[0,144,[287]],[0,144,[290]],[0,144,[295]],[0,144,[296]],[0,144,[323]],[0,144,[327]],[0,144,[331]],[0,144,[335]],[0,144,[339]],[0,144,[343]],[0,144,[347]],[0,144,[351]],[0,144,[387]],[0,144,[391]],[0,144,[395]],[0,144,[399]],[0,144,[403]],[0,144,[407]],[0,144,[411]],[0,144,[415]],[0,144,[451]],[0,144,[455]],[0,144,[459]],[0,144,[463]],[0,144,[467]],[0,144,[471]],[0,144,[475]],[0,144,[479]],[0,144,[484]],[0,144,[486]],[0,144,[500]],[0,144,[502]],[0,144,[656]],[0,144,[658]],[0,144,[660]],[0,144,[662]],[0,144,[674]],[0,144,[675]],[0,144,[678]],[0,144,[679]],[0,144,[690]],[0,144,[691]],[0,144,[694]],[0,144,[695]],[0,144,[707]],[0,144,[709]],[0,144,[770]],[0,145,[244]],[0,145,[247]],[0,145,[253]],[0,145,[257]],[0,145,[261]],[0,145,[265]],[0,145,[269]],[0,145,[274]],[0,145,[275]],[0,145,[279]],[0,145,[280]],[0,145,[283]],[0,145,[287]],[0,145,[290]],[0,145,[292]],[0,145,[296]],[0,145,[321]],[0,145,[325]],[0,145,[329]],[0,145,[333]],[0,145,[339]],[0,145,[343]],[0,145,[347]],[0,145,[351]],[0,145,[385]],[0,145,[389]],[0,145,[393]],[0,145,[397]],[0,145,[403]],[0,145,[407]],[0,145,[411]],[0,145,[415]],[0,145,[434]],[0,145,[435]],[0,145,[436]],[0,145,[437]],[0,145,[438]],[0,145,[439]],[0,145,[440]],[0,145,[441]],[0,145,[443]],[0,145,[444]],[0,145,[446]],[0,145,[447]],[0,145,[449]],[0,145,[453]],[0,145,[457]],[0,145,[461]],[0,145,[467]],[0,145,[471]],[0,145,[475]],[0,145,[479]],[0,145,[484]],[0,145,[486]],[0,145,[500]],[0,145,[502]],[0,145,[656]],[0,145,[658]],[0,145,[660]],[0,145,[666]],[0,145,[667]],[0,145,[670]],[0,145,[671]],[0,145,[672]],[0,145,[673]],[0,145,[676]],[0,145,[677]],[0,145,[688]],[0,145,[689]],[0,145,[692]],[0,145,[693]],[0,145,[707]],[0,145,[709]],[0,145,[770]],[0,145,[783]],[0,145,[797]],[0,145,[825]],[0,145,[907]],[0,145,[935]],[0,146,[244]],[0,146,[252]],[0,146,[259]],[0,146,[263]],[0,146,[267]],[0,146,[271]],[0,146,[273]],[0,146,[274]],[0,146,[277]],[0,146,[280]],[0,146,[281]],[0,146,[285]],[0,146,[296]],[0,146,[323]],[0,146,[327]],[0,146,[331]],[0,146,[335]],[0,146,[337]],[0,146,[341]],[0,146,[345]],[0,146,[349]],[0,146,[387]],[0,146,[391]],[0,146,[395]],[0,146,[399]],[0,146,[401]],[0,146,[405]],[0,146,[409]],[0,146,[413]],[0,146,[435]],[0,146,[437]],[0,146,[438]],[0,146,[439]],[0,146,[441]],[0,146,[443]],[0,146,[444]],[0,146,[447]],[0,146,[451]],[0,146,[455]],[0,146,[459]],[0,146,[463]],[0,146,[465]],[0,146,[469]],[0,146,[473]],[0,146,[477]],[0,146,[484]],[0,146,[486]],[0,146,[500]],[0,146,[502]],[0,146,[656]],[0,146,[663]],[0,146,[667]],[0,146,[670]],[0,146,[671]],[0,146,[672]],[0,146,[673]],[0,146,[676]],[0,146,[677]],[0,146,[688]],[0,146,[689]],[0,146,[692]],[0,146,[693]],[0,146,[707]],[0,146,[709]],[0,146,[769]],[0,146,[811]],[0,146,[907]],[0,146,[940]],[0,147,[244]],[0,147,[247]],[0,147,[252]],[0,147,[253]],[0,147,[254]],[0,147,[257]],[0,147,[269]],[0,147,[273]],[0,147,[274]],[0,147,[277]],[0,147,[280]],[0,147,[281]],[0,147,[285]],[0,147,[289]],[0,147,[290]],[0,147,[296]],[0,147,[321]],[0,147,[325]],[0,147,[329]],[0,147,[333]],[0,147,[337]],[0,147,[341]],[0,147,[345]],[0,147,[349]],[0,147,[385]],[0,147,[389]],[0,147,[393]],[0,147,[397]],[0,147,[401]],[0,147,[405]],[0,147,[409]],[0,147,[413]],[0,147,[449]],[0,147,[453]],[0,147,[457]],[0,147,[461]],[0,147,[465]],[0,147,[469]],[0,147,[473]],[0,147,[477]],[0,147,[484]],[0,147,[486]],[0,147,[500]],[0,147,[502]],[0,147,[656]],[0,147,[658]],[0,147,[660]],[0,147,[662]],[0,147,[674]],[0,147,[675]],[0,147,[678]],[0,147,[679]],[0,147,[690]],[0,147,[691]],[0,147,[694]],[0,147,[695]],[0,147,[707]],[0,147,[709]],[0,147,[769]],[0,147,[783]],[0,147,[797]],[0,147,[811]],[0,147,[825]],[0,148,[244]],[0,148,[247]],[0,148,[253]],[0,148,[254]],[0,148,[257]],[0,148,[269]],[0,148,[274]],[0,148,[275]],[0,148,[279]],[0,148,[280]],[0,148,[283]],[0,148,[287]],[0,148,[290]],[0,148,[296]],[0,148,[303]],[0,148,[323]],[0,148,[327]],[0,148,[331]],[0,148,[335]],[0,148,[337]],[0,148,[341]],[0,148,[345]],[0,148,[349]],[0,148,[387]],[0,148,[391]],[0,148,[395]],[0,148,[399]],[0,148,[401]],[0,148,[405]],[0,148,[409]],[0,148,[413]],[0,148,[434]],[0,148,[435]],[0,148,[440]],[0,148,[447]],[0,148,[449]],[0,148,[453]],[0,148,[457]],[0,148,[461]],[0,148,[467]],[0,148,[471]],[0,148,[475]],[0,148,[479]],[0,148,[480]],[0,148,[482]],[0,148,[496]],[0,148,[498]],[0,148,[656]],[0,148,[658]],[0,148,[661]],[0,148,[662]],[0,148,[670]],[0,148,[674]],[0,148,[675]],[0,148,[678]],[0,148,[679]],[0,148,[690]],[0,148,[691]],[0,148,[694]],[0,148,[695]],[0,148,[707]],[0,148,[709]],[0,148,[722]],[0,148,[735]],[0,148,[770]],[0,148,[825]],[0,148,[935]],[0,148,[940]],[0,149,[244]],[0,149,[259]],[0,149,[263]],[0,149,[267]],[0,149,[271]],[0,149,[274]],[0,149,[275]],[0,149,[279]],[0,149,[280]],[0,149,[283]],[0,149,[287]],[0,149,[290]],[0,149,[296]],[0,149,[300]],[0,149,[321]],[0,149,[325]],[0,149,[329]],[0,149,[333]],[0,149,[337]],[0,149,[341]],[0,149,[345]],[0,149,[349]],[0,149,[385]],[0,149,[389]],[0,149,[393]],[0,149,[397]],[0,149,[401]],[0,149,[405]],[0,149,[409]],[0,149,[413]],[0,149,[451]],[0,149,[455]],[0,149,[459]],[0,149,[463]],[0,149,[467]],[0,149,[471]],[0,149,[475]],[0,149,[479]],[0,149,[480]],[0,149,[482]],[0,149,[496]],[0,149,[498]],[0,149,[656]],[0,149,[658]],[0,149,[660]],[0,149,[662]],[0,149,[672]],[0,149,[673]],[0,149,[676]],[0,149,[677]],[0,149,[688]],[0,149,[689]],[0,149,[692]],[0,149,[693]],[0,149,[707]],[0,149,[709]],[0,149,[722]],[0,149,[735]],[0,149,[770]],[0,149,[783]],[0,149,[797]],[0,149,[907]],[0,150,[244]],[0,150,[247]],[0,150,[252]],[0,150,[253]],[0,150,[257]],[0,150,[261]],[0,150,[265]],[0,150,[269]],[0,150,[273]],[0,150,[274]],[0,150,[277]],[0,150,[280]],[0,150,[281]],[0,150,[285]],[0,150,[290]],[0,150,[296]],[0,150,[298]],[0,150,[323]],[0,150,[327]],[0,150,[331]],[0,150,[335]],[0,150,[339]],[0,150,[343]],[0,150,[347]],[0,150,[351]],[0,150,[387]],[0,150,[391]],[0,150,[395]],[0,150,[399]],[0,150,[403]],[0,150,[407]],[0,150,[411]],[0,150,[415]],[0,150,[449]],[0,150,[453]],[0,150,[457]],[0,150,[461]],[0,150,[465]],[0,150,[469]],[0,150,[473]],[0,150,[477]],[0,150,[480]],[0,150,[482]],[0,150,[496]],[0,150,[498]],[0,150,[656]],[0,150,[658]],[0,150,[660]],[0,150,[662]],[0,150,[672]],[0,150,[673]],[0,150,[676]],[0,150,[677]],[0,150,[688]],[0,150,[689]],[0,150,[692]],[0,150,[693]],[0,150,[707]],[0,150,[709]],[0,150,[722]],[0,150,[735]],[0,150,[769]],[0,150,[811]],[0,150,[825]],[0,150,[907]],[0,151,[244]],[0,151,[252]],[0,151,[254]],[0,151,[259]],[0,151,[261]],[0,151,[263]],[0,151,[265]],[0,151,[267]],[0,151,[271]],[0,151,[273]],[0,151,[274]],[0,151,[277]],[0,151,[280]],[0,151,[281]],[0,151,[285]],[0,151,[290]],[0,151,[296]],[0,151,[297]],[0,151,[321]],[0,151,[325]],[0,151,[329]],[0,151,[333]],[0,151,[339]],[0,151,[343]],[0,151,[347]],[0,151,[351]],[0,151,[385]],[0,151,[389]],[0,151,[393]],[0,151,[397]],[0,151,[403]],[0,151,[407]],[0,151,[411]],[0,151,[415]],[0,151,[435]],[0,151,[436]],[0,151,[446]],[0,151,[447]],[0,151,[451]],[0,151,[455]],[0,151,[459]],[0,151,[463]],[0,151,[465]],[0,151,[469]],[0,151,[473]],[0,151,[477]],[0,151,[480]],[0,151,[482]],[0,151,[496]],[0,151,[498]],[0,151,[656]],[0,151,[660]],[0,151,[661]],[0,151,[662]],[0,151,[663]],[0,151,[666]],[0,151,[670]],[0,151,[674]],[0,151,[675]],[0,151,[678]],[0,151,[679]],[0,151,[690]],[0,151,[691]],[0,151,[694]],[0,151,[695]],[0,151,[707]],[0,151,[709]],[0,151,[722]],[0,151,[735]],[0,151,[769]],[0,151,[783]],[0,151,[797]],[0,151,[811]],[0,152,[244]],[0,152,[250]],[0,152,[252]],[0,152,[260]],[0,152,[262]],[0,152,[268]],[0,152,[270]],[0,152,[276]],[0,152,[278]],[0,152,[284]],[0,152,[286]],[0,152,[306]],[0,152,[310]],[0,152,[312]],[0,152,[324]],[0,152,[326]],[0,152,[332]],[0,152,[334]],[0,152,[340]],[0,152,[342]],[0,152,[348]],[0,152,[350]],[0,152,[388]],[0,152,[390]],[0,152,[396]],[0,152,[398]],[0,152,[404]],[0,152,[406]],[0,152,[412]],[0,152,[414]],[0,152,[452]],[0,152,[454]],[0,152,[460]],[0,152,[462]],[0,152,[468]],[0,152,[470]],[0,152,[476]],[0,152,[478]],[0,152,[484]],[0,152,[486]],[0,152,[516]],[0,152,[518]],[0,152,[658]],[0,152,[659]],[0,152,[662]],[0,152,[663]],[0,152,[672]],[0,152,[674]],[0,152,[676]],[0,152,[678]],[0,152,[692]],[0,152,[694]],[0,152,[708]],[0,152,[711]],[0,152,[751]],[0,152,[768]],[0,152,[866]],[0,153,[244]],[0,153,[247]],[0,153,[250]],[0,153,[253]],[0,153,[260]],[0,153,[261]],[0,153,[262]],[0,153,[265]],[0,153,[268]],[0,153,[270]],[0,153,[276]],[0,153,[278]],[0,153,[284]],[0,153,[286]],[0,153,[306]],[0,153,[308]],[0,153,[312]],[0,153,[320]],[0,153,[322]],[0,153,[328]],[0,153,[330]],[0,153,[336]],[0,153,[338]],[0,153,[344]],[0,153,[346]],[0,153,[388]],[0,153,[390]],[0,153,[396]],[0,153,[398]],[0,153,[404]],[0,153,[406]],[0,153,[412]],[0,153,[414]],[0,153,[418]],[0,153,[421]],[0,153,[424]],[0,153,[425]],[0,153,[448]],[0,153,[450]],[0,153,[456]],[0,153,[458]],[0,153,[464]],[0,153,[466]],[0,153,[472]],[0,153,[474]],[0,153,[484]],[0,153,[486]],[0,153,[516]],[0,153,[518]],[0,153,[656]],[0,153,[657]],[0,153,[660]],[0,153,[661]],[0,153,[672]],[0,153,[676]],[0,153,[677]],[0,153,[678]],[0,153,[679]],[0,153,[688]],[0,153,[690]],[0,153,[708]],[0,153,[711]],[0,153,[751]],[0,153,[768]],[0,153,[781]],[0,153,[809]],[0,153,[837]],[0,153,[904]],[0,153,[934]],[0,153,[938]],[0,154,[244]],[0,154,[250]],[0,154,[252]],[0,154,[256]],[0,154,[258]],[0,154,[261]],[0,154,[264]],[0,154,[265]],[0,154,[266]],[0,154,[272]],[0,154,[274]],[0,154,[280]],[0,154,[282]],[0,154,[312]],[0,154,[324]],[0,154,[326]],[0,154,[332]],[0,154,[334]],[0,154,[340]],[0,154,[342]],[0,154,[348]],[0,154,[350]],[0,154,[384]],[0,154,[386]],[0,154,[392]],[0,154,[394]],[0,154,[400]],[0,154,[402]],[0,154,[408]],[0,154,[410]],[0,154,[420]],[0,154,[421]],[0,154,[422]],[0,154,[423]],[0,154,[425]],[0,154,[427]],[0,154,[428]],[0,154,[430]],[0,154,[452]],[0,154,[454]],[0,154,[460]],[0,154,[462]],[0,154,[468]],[0,154,[470]],[0,154,[476]],[0,154,[478]],[0,154,[484]],[0,154,[486]],[0,154,[516]],[0,154,[518]],[0,154,[656]],[0,154,[657]],[0,154,[660]],[0,154,[661]],[0,154,[672]],[0,154,[674]],[0,154,[677]],[0,154,[682]],[0,154,[683]],[0,154,[687]],[0,154,[688]],[0,154,[690]],[0,154,[708]],[0,154,[711]],[0,154,[751]],[0,154,[767]],[0,154,[795]],[0,154,[851]],[0,154,[866]],[0,154,[904]],[0,155,[244]],[0,155,[247]],[0,155,[250]],[0,155,[253]],[0,155,[256]],[0,155,[258]],[0,155,[264]],[0,155,[266]],[0,155,[272]],[0,155,[274]],[0,155,[280]],[0,155,[282]],[0,155,[304]],[0,155,[306]],[0,155,[312]],[0,155,[320]],[0,155,[322]],[0,155,[328]],[0,155,[330]],[0,155,[336]],[0,155,[338]],[0,155,[344]],[0,155,[346]],[0,155,[384]],[0,155,[386]],[0,155,[392]],[0,155,[394]],[0,155,[400]],[0,155,[402]],[0,155,[408]],[0,155,[410]],[0,155,[448]],[0,155,[450]],[0,155,[456]],[0,155,[458]],[0,155,[464]],[0,155,[466]],[0,155,[472]],[0,155,[474]],[0,155,[484]],[0,155,[486]],[0,155,[516]],[0,155,[518]],[0,155,[658]],[0,155,[659]],[0,155,[662]],[0,155,[663]],[0,155,[672]],[0,155,[674]],[0,155,[676]],[0,155,[678]],[0,155,[692]],[0,155,[694]],[0,155,[708]],[0,155,[711]],[0,155,[751]],[0,155,[767]],[0,155,[781]],[0,155,[795]],[0,155,[809]],[0,155,[837]],[0,155,[851]],[0,156,[244]],[0,156,[247]],[0,156,[250]],[0,156,[252]],[0,156,[253]],[0,156,[256]],[0,156,[258]],[0,156,[264]],[0,156,[266]],[0,156,[276]],[0,156,[278]],[0,156,[284]],[0,156,[286]],[0,156,[306]],[0,156,[312]],[0,156,[319]],[0,156,[324]],[0,156,[326]],[0,156,[332]],[0,156,[334]],[0,156,[336]],[0,156,[338]],[0,156,[344]],[0,156,[346]],[0,156,[388]],[0,156,[390]],[0,156,[396]],[0,156,[398]],[0,156,[400]],[0,156,[402]],[0,156,[408]],[0,156,[410]],[0,156,[420]],[0,156,[421]],[0,156,[425]],[0,156,[430]],[0,156,[448]],[0,156,[450]],[0,156,[456]],[0,156,[458]],[0,156,[468]],[0,156,[470]],[0,156,[476]],[0,156,[478]],[0,156,[480]],[0,156,[482]],[0,156,[512]],[0,156,[514]],[0,156,[658]],[0,156,[659]],[0,156,[662]],[0,156,[663]],[0,156,[672]],[0,156,[674]],[0,156,[678]],[0,156,[679]],[0,156,[682]],[0,156,[683]],[0,156,[692]],[0,156,[694]],[0,156,[708]],[0,156,[711]],[0,156,[721]],[0,156,[749]],[0,156,[768]],[0,156,[837]],[0,156,[851]],[0,156,[938]],[0,157,[244]],[0,157,[250]],[0,157,[256]],[0,157,[258]],[0,157,[261]],[0,157,[264]],[0,157,[265]],[0,157,[266]],[0,157,[276]],[0,157,[278]],[0,157,[284]],[0,157,[286]],[0,157,[306]],[0,157,[312]],[0,157,[317]],[0,157,[320]],[0,157,[322]],[0,157,[328]],[0,157,[330]],[0,157,[340]],[0,157,[342]],[0,157,[348]],[0,157,[350]],[0,157,[388]],[0,157,[390]],[0,157,[396]],[0,157,[398]],[0,157,[400]],[0,157,[402]],[0,157,[408]],[0,157,[410]],[0,157,[452]],[0,157,[454]],[0,157,[460]],[0,157,[462]],[0,157,[464]],[0,157,[466]],[0,157,[472]],[0,157,[474]],[0,157,[480]],[0,157,[482]],[0,157,[512]],[0,157,[514]],[0,157,[656]],[0,157,[657]],[0,157,[660]],[0,157,[661]],[0,157,[672]],[0,157,[674]],[0,157,[676]],[0,157,[678]],[0,157,[688]],[0,157,[690]],[0,157,[708]],[0,157,[711]],[0,157,[721]],[0,157,[749]],[0,157,[768]],[0,157,[781]],[0,157,[809]],[0,157,[851]],[0,157,[866]],[0,157,[904]],[0,158,[244]],[0,158,[247]],[0,158,[250]],[0,158,[252]],[0,158,[253]],[0,158,[260]],[0,158,[261]],[0,158,[262]],[0,158,[265]],[0,158,[268]],[0,158,[270]],[0,158,[272]],[0,158,[274]],[0,158,[280]],[0,158,[282]],[0,158,[306]],[0,158,[312]],[0,158,[315]],[0,158,[324]],[0,158,[326]],[0,158,[332]],[0,158,[334]],[0,158,[336]],[0,158,[338]],[0,158,[344]],[0,158,[346]],[0,158,[384]],[0,158,[386]],[0,158,[392]],[0,158,[394]],[0,158,[404]],[0,158,[406]],[0,158,[412]],[0,158,[414]],[0,158,[448]],[0,158,[450]],[0,158,[456]],[0,158,[458]],[0,158,[468]],[0,158,[470]],[0,158,[476]],[0,158,[478]],[0,158,[480]],[0,158,[482]],[0,158,[512]],[0,158,[514]],[0,158,[656]],[0,158,[657]],[0,158,[660]],[0,158,[661]],[0,158,[672]],[0,158,[674]],[0,158,[676]],[0,158,[678]],[0,158,[688]],[0,158,[690]],[0,158,[708]],[0,158,[711]],[0,158,[721]],[0,158,[749]],[0,158,[767]],[0,158,[795]],[0,158,[837]],[0,158,[904]],[0,159,[244]],[0,159,[250]],[0,159,[260]],[0,159,[262]],[0,159,[268]],[0,159,[270]],[0,159,[272]],[0,159,[274]],[0,159,[280]],[0,159,[282]],[0,159,[306]],[0,159,[312]],[0,159,[313]],[0,159,[320]],[0,159,[322]],[0,159,[328]],[0,159,[330]],[0,159,[340]],[0,159,[342]],[0,159,[348]],[0,159,[350]],[0,159,[384]],[0,159,[386]],[0,159,[392]],[0,159,[394]],[0,159,[404]],[0,159,[406]],[0,159,[412]],[0,159,[414]],[0,159,[418]],[0,159,[421]],[0,159,[422]],[0,159,[423]],[0,159,[424]],[0,159,[425]],[0,159,[427]],[0,159,[428]],[0,159,[452]],[0,159,[454]],[0,159,[460]],[0,159,[462]],[0,159,[464]],[0,159,[466]],[0,159,[472]],[0,159,[474]],[0,159,[480]],[0,159,[482]],[0,159,[512]],[0,159,[514]],[0,159,[658]],[0,159,[659]],[0,159,[662]],[0,159,[663]],[0,159,[672]],[0,159,[676]],[0,159,[687]],[0,159,[692]],[0,159,[694]],[0,159,[708]],[0,159,[711]],[0,159,[721]],[0,159,[749]],[0,159,[767]],[0,159,[781]],[0,159,[795]],[0,159,[809]],[0,159,[866]],[0,159,[934]],[0,160,[242]],[0,160,[249]],[0,160,[250]],[0,160,[258]],[0,160,[261]],[0,160,[262]],[0,160,[264]],[0,160,[265]],[0,160,[268]],[0,160,[274]],[0,160,[280]],[0,160,[291]],[0,160,[295]],[0,160,[299]],[0,160,[303]],[0,160,[306]],[0,160,[307]],[0,160,[311]],[0,160,[312]],[0,160,[315]],[0,160,[319]],[0,160,[327]],[0,160,[341]],[0,160,[343]],[0,160,[345]],[0,160,[347]],[0,160,[354]],[0,160,[358]],[0,160,[360]],[0,160,[364]],[0,160,[372]],[0,160,[374]],[0,160,[380]],[0,160,[382]],[0,160,[387]],[0,160,[391]],[0,160,[395]],[0,160,[399]],[0,160,[419]],[0,160,[423]],[0,160,[427]],[0,160,[431]],[0,160,[435]],[0,160,[439]],[0,160,[443]],[0,160,[447]],[0,160,[468]],[0,160,[470]],[0,160,[476]],[0,160,[478]],[0,160,[532]],[0,160,[534]],[0,160,[601]],[0,160,[603]],[0,160,[621]],[0,160,[623]],[0,160,[624]],[0,160,[626]],[0,160,[628]],[0,160,[630]],[0,160,[642]],[0,160,[643]],[0,160,[646]],[0,160,[647]],[0,160,[697]],[0,160,[699]],[0,160,[718]],[0,160,[719]],[0,160,[726]],[0,160,[765]],[0,160,[830]],[0,160,[844]],[0,161,[242]],[0,161,[247]],[0,161,[249]],[0,161,[250]],[0,161,[253]],[0,161,[254]],[0,161,[256]],[0,161,[260]],[0,161,[266]],[0,161,[270]],[0,161,[274]],[0,161,[280]],[0,161,[289]],[0,161,[293]],[0,161,[297]],[0,161,[301]],[0,161,[306]],[0,161,[307]],[0,161,[311]],[0,161,[312]],[0,161,[315]],[0,161,[319]],[0,161,[325]],[0,161,[341]],[0,161,[343]],[0,161,[345]],[0,161,[347]],[0,161,[352]],[0,161,[356]],[0,161,[362]],[0,161,[366]],[0,161,[372]],[0,161,[374]],[0,161,[380]],[0,161,[382]],[0,161,[385]],[0,161,[389]],[0,161,[393]],[0,161,[397]],[0,161,[403]],[0,161,[404]],[0,161,[414]],[0,161,[415]],[0,161,[417]],[0,161,[421]],[0,161,[425]],[0,161,[429]],[0,161,[435]],[0,161,[439]],[0,161,[443]],[0,161,[447]],[0,161,[468]],[0,161,[470]],[0,161,[476]],[0,161,[478]],[0,161,[532]],[0,161,[534]],[0,161,[600]],[0,161,[602]],[0,161,[621]],[0,161,[623]],[0,161,[624]],[0,161,[628]],[0,161,[630]],[0,161,[631]],[0,161,[634]],[0,161,[635]],[0,161,[638]],[0,161,[640]],[0,161,[641]],[0,161,[644]],[0,161,[645]],[0,161,[696]],[0,161,[698]],[0,161,[718]],[0,161,[719]],[0,161,[726]],[0,161,[765]],[0,161,[829]],[0,161,[844]],[0,161,[869]],[0,161,[911]],[0,162,[242]],[0,162,[247]],[0,162,[249]],[0,162,[250]],[0,162,[252]],[0,162,[253]],[0,162,[258]],[0,162,[262]],[0,162,[264]],[0,162,[268]],[0,162,[274]],[0,162,[280]],[0,162,[291]],[0,162,[295]],[0,162,[299]],[0,162,[303]],[0,162,[305]],[0,162,[306]],[0,162,[309]],[0,162,[312]],[0,162,[313]],[0,162,[317]],[0,162,[323]],[0,162,[337]],[0,162,[339]],[0,162,[349]],[0,162,[351]],[0,162,[352]],[0,162,[356]],[0,162,[362]],[0,162,[366]],[0,162,[372]],[0,162,[374]],[0,162,[380]],[0,162,[382]],[0,162,[387]],[0,162,[391]],[0,162,[395]],[0,162,[399]],[0,162,[402]],[0,162,[403]],[0,162,[408]],[0,162,[415]],[0,162,[419]],[0,162,[423]],[0,162,[427]],[0,162,[431]],[0,162,[433]],[0,162,[437]],[0,162,[441]],[0,162,[445]],[0,162,[464]],[0,162,[466]],[0,162,[472]],[0,162,[474]],[0,162,[532]],[0,162,[534]],[0,162,[601]],[0,162,[603]],[0,162,[620]],[0,162,[622]],[0,162,[624]],[0,162,[626]],[0,162,[629]],[0,162,[630]],[0,162,[635]],[0,162,[638]],[0,162,[640]],[0,162,[641]],[0,162,[644]],[0,162,[645]],[0,162,[696]],[0,162,[698]],[0,162,[718]],[0,162,[719]],[0,162,[726]],[0,162,[765]],[0,162,[830]],[0,162,[843]],[0,162,[869]],[0,162,[883]],[0,162,[911]],[0,162,[944]],[0,163,[242]],[0,163,[249]],[0,163,[250]],[0,163,[252]],[0,163,[254]],[0,163,[256]],[0,163,[260]],[0,163,[261]],[0,163,[265]],[0,163,[266]],[0,163,[270]],[0,163,[274]],[0,163,[280]],[0,163,[289]],[0,163,[293]],[0,163,[297]],[0,163,[301]],[0,163,[305]],[0,163,[306]],[0,163,[309]],[0,163,[312]],[0,163,[313]],[0,163,[317]],[0,163,[321]],[0,163,[337]],[0,163,[339]],[0,163,[349]],[0,163,[351]],[0,163,[354]],[0,163,[358]],[0,163,[360]],[0,163,[364]],[0,163,[372]],[0,163,[374]],[0,163,[380]],[0,163,[382]],[0,163,[385]],[0,163,[389]],[0,163,[393]],[0,163,[397]],[0,163,[417]],[0,163,[421]],[0,163,[425]],[0,163,[429]],[0,163,[433]],[0,163,[437]],[0,163,[441]],[0,163,[445]],[0,163,[464]],[0,163,[466]],[0,163,[472]],[0,163,[474]],[0,163,[532]],[0,163,[534]],[0,163,[600]],[0,163,[602]],[0,163,[620]],[0,163,[622]],[0,163,[624]],[0,163,[626]],[0,163,[628]],[0,163,[630]],[0,163,[642]],[0,163,[643]],[0,163,[646]],[0,163,[647]],[0,163,[697]],[0,163,[699]],[0,163,[718]],[0,163,[719]],[0,163,[726]],[0,163,[765]],[0,163,[829]],[0,163,[843]],[0,163,[883]],[0,164,[242]],[0,164,[249]],[0,164,[250]],[0,164,[254]],[0,164,[256]],[0,164,[260]],[0,164,[261]],[0,164,[265]],[0,164,[266]],[0,164,[270]],[0,164,[274]],[0,164,[280]],[0,164,[291]],[0,164,[295]],[0,164,[299]],[0,164,[303]],[0,164,[306]],[0,164,[307]],[0,164,[311]],[0,164,[312]],[0,164,[315]],[0,164,[319]],[0,164,[334]],[0,164,[337]],[0,164,[339]],[0,164,[349]],[0,164,[351]],[0,164,[354]],[0,164,[358]],[0,164,[360]],[0,164,[364]],[0,164,[368]],[0,164,[370]],[0,164,[376]],[0,164,[378]],[0,164,[387]],[0,164,[391]],[0,164,[395]],[0,164,[399]],[0,164,[402]],[0,164,[403]],[0,164,[404]],[0,164,[405]],[0,164,[406]],[0,164,[407]],[0,164,[408]],[0,164,[409]],[0,164,[411]],[0,164,[412]],[0,164,[414]],[0,164,[415]],[0,164,[417]],[0,164,[421]],[0,164,[425]],[0,164,[429]],[0,164,[433]],[0,164,[437]],[0,164,[441]],[0,164,[445]],[0,164,[468]],[0,164,[470]],[0,164,[476]],[0,164,[478]],[0,164,[528]],[0,164,[530]],[0,164,[600]],[0,164,[602]],[0,164,[620]],[0,164,[622]],[0,164,[624]],[0,164,[626]],[0,164,[628]],[0,164,[634]],[0,164,[635]],[0,164,[638]],[0,164,[642]],[0,164,[643]],[0,164,[646]],[0,164,[647]],[0,164,[697]],[0,164,[699]],[0,164,[718]],[0,164,[719]],[0,164,[725]],[0,164,[763]],[0,164,[829]],[0,164,[843]],[0,164,[883]],[0,164,[944]],[0,165,[242]],[0,165,[247]],[0,165,[249]],[0,165,[250]],[0,165,[253]],[0,165,[258]],[0,165,[262]],[0,165,[264]],[0,165,[268]],[0,165,[274]],[0,165,[280]],[0,165,[289]],[0,165,[293]],[0,165,[297]],[0,165,[301]],[0,165,[306]],[0,165,[307]],[0,165,[311]],[0,165,[312]],[0,165,[315]],[0,165,[319]],[0,165,[332]],[0,165,[337]],[0,165,[339]],[0,165,[349]],[0,165,[351]],[0,165,[352]],[0,165,[356]],[0,165,[362]],[0,165,[366]],[0,165,[368]],[0,165,[370]],[0,165,[376]],[0,165,[378]],[0,165,[385]],[0,165,[389]],[0,165,[393]],[0,165,[397]],[0,165,[419]],[0,165,[423]],[0,165,[427]],[0,165,[431]],[0,165,[433]],[0,165,[437]],[0,165,[441]],[0,165,[445]],[0,165,[468]],[0,165,[470]],[0,165,[476]],[0,165,[478]],[0,165,[528]],[0,165,[530]],[0,165,[601]],[0,165,[603]],[0,165,[620]],[0,165,[622]],[0,165,[624]],[0,165,[626]],[0,165,[628]],[0,165,[630]],[0,165,[640]],[0,165,[641]],[0,165,[644]],[0,165,[645]],[0,165,[696]],[0,165,[698]],[0,165,[718]],[0,165,[719]],[0,165,[725]],[0,165,[763]],[0,165,[830]],[0,165,[843]],[0,165,[869]],[0,165,[883]],[0,165,[911]],[0,166,[242]],[0,166,[247]],[0,166,[249]],[0,166,[250]],[0,166,[252]],[0,166,[253]],[0,166,[254]],[0,166,[256]],[0,166,[260]],[0,166,[266]],[0,166,[270]],[0,166,[274]],[0,166,[280]],[0,166,[291]],[0,166,[295]],[0,166,[299]],[0,166,[303]],[0,166,[305]],[0,166,[306]],[0,166,[309]],[0,166,[312]],[0,166,[313]],[0,166,[317]],[0,166,[330]],[0,166,[341]],[0,166,[343]],[0,166,[345]],[0,166,[347]],[0,166,[352]],[0,166,[356]],[0,166,[362]],[0,166,[366]],[0,166,[368]],[0,166,[370]],[0,166,[376]],[0,166,[378]],[0,166,[387]],[0,166,[391]],[0,166,[395]],[0,166,[399]],[0,166,[417]],[0,166,[421]],[0,166,[425]],[0,166,[429]],[0,166,[435]],[0,166,[439]],[0,166,[443]],[0,166,[447]],[0,166,[464]],[0,166,[466]],[0,166,[472]],[0,166,[474]],[0,166,[528]],[0,166,[530]],[0,166,[600]],[0,166,[602]],[0,166,[621]],[0,166,[623]],[0,166,[624]],[0,166,[626]],[0,166,[628]],[0,166,[630]],[0,166,[640]],[0,166,[641]],[0,166,[644]],[0,166,[645]],[0,166,[696]],[0,166,[698]],[0,166,[718]],[0,166,[719]],[0,166,[725]],[0,166,[763]],[0,166,[829]],[0,166,[844]],[0,166,[869]],[0,166,[911]],[0,167,[242]],[0,167,[249]],[0,167,[250]],[0,167,[252]],[0,167,[258]],[0,167,[261]],[0,167,[262]],[0,167,[264]],[0,167,[265]],[0,167,[268]],[0,167,[274]],[0,167,[280]],[0,167,[289]],[0,167,[293]],[0,167,[297]],[0,167,[301]],[0,167,[305]],[0,167,[306]],[0,167,[309]],[0,167,[312]],[0,167,[313]],[0,167,[317]],[0,167,[328]],[0,167,[341]],[0,167,[343]],[0,167,[345]],[0,167,[347]],[0,167,[354]],[0,167,[358]],[0,167,[360]],[0,167,[364]],[0,167,[368]],[0,167,[370]],[0,167,[376]],[0,167,[378]],[0,167,[385]],[0,167,[389]],[0,167,[393]],[0,167,[397]],[0,167,[403]],[0,167,[405]],[0,167,[406]],[0,167,[407]],[0,167,[409]],[0,167,[411]],[0,167,[412]],[0,167,[415]],[0,167,[419]],[0,167,[423]],[0,167,[427]],[0,167,[431]],[0,167,[435]],[0,167,[439]],[0,167,[443]],[0,167,[447]],[0,167,[464]],[0,167,[466]],[0,167,[472]],[0,167,[474]],[0,167,[528]],[0,167,[530]],[0,167,[601]],[0,167,[603]],[0,167,[621]],[0,167,[623]],[0,167,[624]],[0,167,[629]],[0,167,[631]],[0,167,[635]],[0,167,[638]],[0,167,[642]],[0,167,[643]],[0,167,[646]],[0,167,[647]],[0,167,[697]],[0,167,[699]],[0,167,[718]],[0,167,[719]],[0,167,[725]],[0,167,[763]],[0,167,[830]],[0,167,[844]],[0,168,[240]],[0,168,[246]],[0,168,[248]],[0,168,[250]],[0,168,[252]],[0,168,[255]],[0,168,[261]],[0,168,[265]],[0,168,[274]],[0,168,[278]],[0,168,[280]],[0,168,[284]],[0,168,[290]],[0,168,[293]],[0,168,[295]],[0,168,[296]],[0,168,[297]],[0,168,[299]],[0,168,[310]],[0,168,[316]],[0,168,[325]],[0,168,[327]],[0,168,[329]],[0,168,[331]],[0,168,[343]],[0,168,[357]],[0,168,[359]],[0,168,[361]],[0,168,[363]],[0,168,[373]],[0,168,[375]],[0,168,[377]],[0,168,[379]],[0,168,[403]],[0,168,[407]],[0,168,[411]],[0,168,[415]],[0,168,[420]],[0,168,[422]],[0,168,[428]],[0,168,[430]],[0,168,[435]],[0,168,[439]],[0,168,[443]],[0,168,[447]],[0,168,[452]],[0,168,[454]],[0,168,[460]],[0,168,[462]],[0,168,[493]],[0,168,[495]],[0,168,[505]],[0,168,[507]],[0,168,[525]],[0,168,[527]],[0,168,[537]],[0,168,[539]],[0,168,[557]],[0,168,[559]],[0,168,[560]],[0,168,[562]],[0,168,[564]],[0,168,[566]],[0,168,[578]],[0,168,[579]],[0,168,[582]],[0,168,[583]],[0,168,[596]],[0,168,[598]],[0,168,[701]],[0,168,[703]],[0,168,[713]],[0,168,[730]],[0,169,[240]],[0,169,[246]],[0,169,[248]],[0,169,[250]],[0,169,[254]],[0,169,[255]],[0,169,[272]],[0,169,[276]],[0,169,[282]],[0,169,[286]],[0,169,[289]],[0,169,[290]],[0,169,[291]],[0,169,[296]],[0,169,[301]],[0,169,[303]],[0,169,[310]],[0,169,[316]],[0,169,[325]],[0,169,[327]],[0,169,[329]],[0,169,[331]],[0,169,[340]],[0,169,[353]],[0,169,[355]],[0,169,[365]],[0,169,[367]],[0,169,[373]],[0,169,[375]],[0,169,[377]],[0,169,[379]],[0,169,[387]],[0,169,[388]],[0,169,[398]],[0,169,[399]],[0,169,[401]],[0,169,[405]],[0,169,[409]],[0,169,[413]],[0,169,[416]],[0,169,[418]],[0,169,[424]],[0,169,[426]],[0,169,[435]],[0,169,[439]],[0,169,[443]],[0,169,[447]],[0,169,[452]],[0,169,[454]],[0,169,[460]],[0,169,[462]],[0,169,[493]],[0,169,[495]],[0,169,[505]],[0,169,[507]],[0,169,[524]],[0,169,[526]],[0,169,[536]],[0,169,[538]],[0,169,[557]],[0,169,[559]],[0,169,[560]],[0,169,[564]],[0,169,[566]],[0,169,[567]],[0,169,[570]],[0,169,[574]],[0,169,[575]],[0,169,[576]],[0,169,[577]],[0,169,[580]],[0,169,[581]],[0,169,[596]],[0,169,[598]],[0,169,[700]],[0,169,[702]],[0,169,[713]],[0,169,[730]],[0,169,[920]],[0,170,[240]],[0,170,[246]],[0,170,[247]],[0,170,[248]],[0,170,[250]],[0,170,[253]],[0,170,[255]],[0,170,[274]],[0,170,[278]],[0,170,[280]],[0,170,[284]],[0,170,[290]],[0,170,[293]],[0,170,[295]],[0,170,[296]],[0,170,[297]],[0,170,[299]],[0,170,[304]],[0,170,[306]],[0,170,[308]],[0,170,[312]],[0,170,[314]],[0,170,[318]],[0,170,[321]],[0,170,[323]],[0,170,[333]],[0,170,[335]],[0,170,[338]],[0,170,[353]],[0,170,[355]],[0,170,[365]],[0,170,[367]],[0,170,[373]],[0,170,[375]],[0,170,[377]],[0,170,[379]],[0,170,[387]],[0,170,[389]],[0,170,[393]],[0,170,[399]],[0,170,[403]],[0,170,[407]],[0,170,[411]],[0,170,[415]],[0,170,[420]],[0,170,[422]],[0,170,[428]],[0,170,[430]],[0,170,[433]],[0,170,[437]],[0,170,[441]],[0,170,[445]],[0,170,[448]],[0,170,[450]],[0,170,[456]],[0,170,[458]],[0,170,[493]],[0,170,[495]],[0,170,[504]],[0,170,[506]],[0,170,[525]],[0,170,[527]],[0,170,[537]],[0,170,[539]],[0,170,[556]],[0,170,[558]],[0,170,[560]],[0,170,[565]],[0,170,[566]],[0,170,[574]],[0,170,[575]],[0,170,[576]],[0,170,[577]],[0,170,[580]],[0,170,[581]],[0,170,[596]],[0,170,[598]],[0,170,[700]],[0,170,[702]],[0,170,[713]],[0,170,[730]],[0,170,[863]],[0,170,[919]],[0,171,[240]],[0,171,[246]],[0,171,[247]],[0,171,[248]],[0,171,[250]],[0,171,[252]],[0,171,[253]],[0,171,[254]],[0,171,[255]],[0,171,[261]],[0,171,[265]],[0,171,[272]],[0,171,[276]],[0,171,[282]],[0,171,[286]],[0,171,[289]],[0,171,[290]],[0,171,[291]],[0,171,[296]],[0,171,[301]],[0,171,[303]],[0,171,[304]],[0,171,[306]],[0,171,[308]],[0,171,[312]],[0,171,[314]],[0,171,[318]],[0,171,[321]],[0,171,[323]],[0,171,[333]],[0,171,[335]],[0,171,[337]],[0,171,[357]],[0,171,[359]],[0,171,[361]],[0,171,[363]],[0,171,[373]],[0,171,[375]],[0,171,[377]],[0,171,[379]],[0,171,[401]],[0,171,[405]],[0,171,[409]],[0,171,[413]],[0,171,[416]],[0,171,[418]],[0,171,[424]],[0,171,[426]],[0,171,[433]],[0,171,[437]],[0,171,[441]],[0,171,[445]],[0,171,[448]],[0,171,[450]],[0,171,[456]],[0,171,[458]],[0,171,[493]],[0,171,[495]],[0,171,[504]],[0,171,[506]],[0,171,[524]],[0,171,[526]],[0,171,[536]],[0,171,[538]],[0,171,[556]],[0,171,[558]],[0,171,[560]],[0,171,[562]],[0,171,[564]],[0,171,[566]],[0,171,[578]],[0,171,[579]],[0,171,[582]],[0,171,[583]],[0,171,[596]],[0,171,[598]],[0,171,[701]],[0,171,[703]],[0,171,[713]],[0,171,[730]],[0,171,[863]],[0,172,[240]],[0,172,[246]],[0,172,[248]],[0,172,[250]],[0,172,[252]],[0,172,[254]],[0,172,[255]],[0,172,[261]],[0,172,[265]],[0,172,[272]],[0,172,[276]],[0,172,[282]],[0,172,[286]],[0,172,[290]],[0,172,[293]],[0,172,[295]],[0,172,[296]],[0,172,[297]],[0,172,[299]],[0,172,[310]],[0,172,[316]],[0,172,[321]],[0,172,[323]],[0,172,[333]],[0,172,[335]],[0,172,[351]],[0,172,[357]],[0,172,[359]],[0,172,[361]],[0,172,[363]],[0,172,[369]],[0,172,[371]],[0,172,[381]],[0,172,[383]],[0,172,[386]],[0,172,[387]],[0,172,[388]],[0,172,[389]],[0,172,[390]],[0,172,[391]],[0,172,[392]],[0,172,[393]],[0,172,[395]],[0,172,[396]],[0,172,[398]],[0,172,[399]],[0,172,[403]],[0,172,[407]],[0,172,[411]],[0,172,[415]],[0,172,[416]],[0,172,[418]],[0,172,[424]],[0,172,[426]],[0,172,[433]],[0,172,[437]],[0,172,[441]],[0,172,[445]],[0,172,[452]],[0,172,[454]],[0,172,[460]],[0,172,[462]],[0,172,[492]],[0,172,[494]],[0,172,[505]],[0,172,[507]],[0,172,[525]],[0,172,[527]],[0,172,[536]],[0,172,[538]],[0,172,[556]],[0,172,[558]],[0,172,[560]],[0,172,[562]],[0,172,[564]],[0,172,[570]],[0,172,[574]],[0,172,[575]],[0,172,[578]],[0,172,[579]],[0,172,[582]],[0,172,[583]],[0,172,[592]],[0,172,[594]],[0,172,[701]],[0,172,[703]],[0,172,[713]],[0,172,[729]],[0,172,[819]],[0,172,[919]],[0,173,[240]],[0,173,[246]],[0,173,[248]],[0,173,[250]],[0,173,[255]],[0,173,[274]],[0,173,[278]],[0,173,[280]],[0,173,[284]],[0,173,[289]],[0,173,[290]],[0,173,[291]],[0,173,[296]],[0,173,[301]],[0,173,[303]],[0,173,[310]],[0,173,[316]],[0,173,[321]],[0,173,[323]],[0,173,[333]],[0,173,[335]],[0,173,[348]],[0,173,[353]],[0,173,[355]],[0,173,[365]],[0,173,[367]],[0,173,[369]],[0,173,[371]],[0,173,[381]],[0,173,[383]],[0,173,[401]],[0,173,[405]],[0,173,[409]],[0,173,[413]],[0,173,[420]],[0,173,[422]],[0,173,[428]],[0,173,[430]],[0,173,[433]],[0,173,[437]],[0,173,[441]],[0,173,[445]],[0,173,[452]],[0,173,[454]],[0,173,[460]],[0,173,[462]],[0,173,[492]],[0,173,[494]],[0,173,[505]],[0,173,[507]],[0,173,[524]],[0,173,[526]],[0,173,[537]],[0,173,[539]],[0,173,[556]],[0,173,[558]],[0,173,[560]],[0,173,[562]],[0,173,[564]],[0,173,[566]],[0,173,[576]],[0,173,[577]],[0,173,[580]],[0,173,[581]],[0,173,[592]],[0,173,[594]],[0,173,[700]],[0,173,[702]],[0,173,[713]],[0,173,[729]],[0,173,[819]],[0,174,[240]],[0,174,[246]],[0,174,[247]],[0,174,[248]],[0,174,[250]],[0,174,[253]],[0,174,[254]],[0,174,[255]],[0,174,[272]],[0,174,[276]],[0,174,[282]],[0,174,[286]],[0,174,[290]],[0,174,[293]],[0,174,[295]],[0,174,[296]],[0,174,[297]],[0,174,[299]],[0,174,[304]],[0,174,[306]],[0,174,[308]],[0,174,[312]],[0,174,[314]],[0,174,[318]],[0,174,[325]],[0,174,[327]],[0,174,[329]],[0,174,[331]],[0,174,[346]],[0,174,[353]],[0,174,[355]],[0,174,[365]],[0,174,[367]],[0,174,[369]],[0,174,[371]],[0,174,[381]],[0,174,[383]],[0,174,[403]],[0,174,[407]],[0,174,[411]],[0,174,[415]],[0,174,[416]],[0,174,[418]],[0,174,[424]],[0,174,[426]],[0,174,[435]],[0,174,[439]],[0,174,[443]],[0,174,[447]],[0,174,[448]],[0,174,[450]],[0,174,[456]],[0,174,[458]],[0,174,[492]],[0,174,[494]],[0,174,[504]],[0,174,[506]],[0,174,[525]],[0,174,[527]],[0,174,[536]],[0,174,[538]],[0,174,[557]],[0,174,[559]],[0,174,[560]],[0,174,[562]],[0,174,[564]],[0,174,[566]],[0,174,[576]],[0,174,[577]],[0,174,[580]],[0,174,[581]],[0,174,[592]],[0,174,[594]],[0,174,[700]],[0,174,[702]],[0,174,[713]],[0,174,[729]],[0,174,[819]],[0,174,[863]],[0,175,[240]],[0,175,[246]],[0,175,[247]],[0,175,[248]],[0,175,[250]],[0,175,[252]],[0,175,[253]],[0,175,[255]],[0,175,[261]],[0,175,[265]],[0,175,[274]],[0,175,[278]],[0,175,[280]],[0,175,[284]],[0,175,[289]],[0,175,[290]],[0,175,[291]],[0,175,[296]],[0,175,[301]],[0,175,[303]],[0,175,[304]],[0,175,[306]],[0,175,[308]],[0,175,[312]],[0,175,[314]],[0,175,[318]],[0,175,[325]],[0,175,[327]],[0,175,[329]],[0,175,[331]],[0,175,[345]],[0,175,[357]],[0,175,[359]],[0,175,[361]],[0,175,[363]],[0,175,[369]],[0,175,[371]],[0,175,[381]],[0,175,[383]],[0,175,[386]],[0,175,[387]],[0,175,[390]],[0,175,[391]],[0,175,[392]],[0,175,[395]],[0,175,[396]],[0,175,[399]],[0,175,[401]],[0,175,[405]],[0,175,[409]],[0,175,[413]],[0,175,[420]],[0,175,[422]],[0,175,[428]],[0,175,[430]],[0,175,[435]],[0,175,[439]],[0,175,[443]],[0,175,[447]],[0,175,[448]],[0,175,[450]],[0,175,[456]],[0,175,[458]],[0,175,[492]],[0,175,[494]],[0,175,[504]],[0,175,[506]],[0,175,[524]],[0,175,[526]],[0,175,[537]],[0,175,[539]],[0,175,[557]],[0,175,[559]],[0,175,[560]],[0,175,[562]],[0,175,[565]],[0,175,[567]],[0,175,[574]],[0,175,[575]],[0,175,[578]],[0,175,[579]],[0,175,[582]],[0,175,[583]],[0,175,[592]],[0,175,[594]],[0,175,[701]],[0,175,[703]],[0,175,[713]],[0,175,[729]],[0,175,[819]],[0,175,[863]],[0,175,[920]],[0,176,[244]],[0,176,[247]],[0,176,[250]],[0,176,[252]],[0,176,[253]],[0,176,[254]],[0,176,[261]],[0,176,[265]],[0,176,[274]],[0,176,[280]],[0,176,[290]],[0,176,[296]],[0,176,[306]],[0,176,[312]],[0,176,[359]],[0,176,[480]],[0,176,[482]],[0,176,[484]],[0,176,[486]],[0,176,[498]],[0,176,[499]],[0,176,[502]],[0,176,[503]],[0,176,[514]],[0,176,[515]],[0,176,[518]],[0,176,[519]],[0,176,[530]],[0,176,[531]],[0,176,[534]],[0,176,[535]],[0,176,[546]],[0,176,[547]],[0,176,[550]],[0,176,[551]],[0,176,[562]],[0,176,[563]],[0,176,[566]],[0,176,[567]],[0,176,[578]],[0,176,[579]],[0,176,[582]],[0,176,[583]],[0,176,[594]],[0,176,[595]],[0,176,[598]],[0,176,[599]],[0,176,[610]],[0,176,[611]],[0,176,[614]],[0,176,[615]],[0,176,[626]],[0,176,[627]],[0,176,[630]],[0,176,[631]],[0,176,[642]],[0,176,[643]],[0,176,[646]],[0,176,[647]],[0,176,[658]],[0,176,[659]],[0,176,[662]],[0,176,[663]],[0,176,[674]],[0,176,[675]],[0,176,[678]],[0,176,[679]],[0,176,[704]],[0,176,[748]],[0,177,[244]],[0,177,[250]],[0,177,[252]],[0,177,[274]],[0,177,[280]],[0,177,[290]],[0,177,[296]],[0,177,[306]],[0,177,[312]],[0,177,[357]],[0,177,[371]],[0,177,[372]],[0,177,[382]],[0,177,[383]],[0,177,[480]],[0,177,[484]],[0,177,[486]],[0,177,[487]],[0,177,[490]],[0,177,[494]],[0,177,[495]],[0,177,[498]],[0,177,[499]],[0,177,[502]],[0,177,[503]],[0,177,[512]],[0,177,[513]],[0,177,[516]],[0,177,[517]],[0,177,[530]],[0,177,[531]],[0,177,[534]],[0,177,[535]],[0,177,[544]],[0,177,[545]],[0,177,[548]],[0,177,[549]],[0,177,[560]],[0,177,[561]],[0,177,[564]],[0,177,[565]],[0,177,[578]],[0,177,[579]],[0,177,[582]],[0,177,[583]],[0,177,[592]],[0,177,[593]],[0,177,[596]],[0,177,[597]],[0,177,[610]],[0,177,[611]],[0,177,[614]],[0,177,[615]],[0,177,[626]],[0,177,[627]],[0,177,[630]],[0,177,[631]],[0,177,[640]],[0,177,[641]],[0,177,[644]],[0,177,[645]],[0,177,[658]],[0,177,[659]],[0,177,[662]],[0,177,[663]],[0,177,[672]],[0,177,[673]],[0,177,[676]],[0,177,[677]],[0,177,[704]],[0,177,[748]],[0,177,[761]],[0,177,[924]],[0,178,[244]],[0,178,[247]],[0,178,[250]],[0,178,[253]],[0,178,[274]],[0,178,[280]],[0,178,[290]],[0,178,[296]],[0,178,[306]],[0,178,[312]],[0,178,[355]],[0,178,[370]],[0,178,[371]],[0,178,[376]],[0,178,[383]],[0,178,[480]],[0,178,[482]],[0,178,[485]],[0,178,[486]],[0,178,[494]],[0,178,[495]],[0,178,[498]],[0,178,[499]],[0,178,[502]],[0,178,[503]],[0,178,[512]],[0,178,[513]],[0,178,[516]],[0,178,[517]],[0,178,[528]],[0,178,[529]],[0,178,[532]],[0,178,[533]],[0,178,[546]],[0,178,[547]],[0,178,[550]],[0,178,[551]],[0,178,[562]],[0,178,[563]],[0,178,[566]],[0,178,[567]],[0,178,[576]],[0,178,[577]],[0,178,[580]],[0,178,[581]],[0,178,[594]],[0,178,[595]],[0,178,[598]],[0,178,[599]],[0,178,[608]],[0,178,[609]],[0,178,[612]],[0,178,[613]],[0,178,[624]],[0,178,[625]],[0,178,[628]],[0,178,[629]],[0,178,[642]],[0,178,[643]],[0,178,[646]],[0,178,[647]],[0,178,[658]],[0,178,[659]],[0,178,[662]],[0,178,[663]],[0,178,[672]],[0,178,[673]],[0,178,[676]],[0,178,[677]],[0,178,[704]],[0,178,[748]],[0,178,[761]],[0,178,[775]],[0,178,[923]],[0,179,[244]],[0,179,[250]],[0,179,[254]],[0,179,[261]],[0,179,[265]],[0,179,[274]],[0,179,[280]],[0,179,[290]],[0,179,[296]],[0,179,[306]],[0,179,[312]],[0,179,[353]],[0,179,[480]],[0,179,[482]],[0,179,[484]],[0,179,[486]],[0,179,[498]],[0,179,[499]],[0,179,[502]],[0,179,[503]],[0,179,[514]],[0,179,[515]],[0,179,[518]],[0,179,[519]],[0,179,[528]],[0,179,[529]],[0,179,[532]],[0,179,[533]],[0,179,[544]],[0,179,[545]],[0,179,[548]],[0,179,[549]],[0,179,[560]],[0,179,[561]],[0,179,[564]],[0,179,[565]],[0,179,[576]],[0,179,[577]],[0,179,[580]],[0,179,[581]],[0,179,[592]],[0,179,[593]],[0,179,[596]],[0,179,[597]],[0,179,[608]],[0,179,[609]],[0,179,[612]],[0,179,[613]],[0,179,[624]],[0,179,[625]],[0,179,[628]],[0,179,[629]],[0,179,[640]],[0,179,[641]],[0,179,[644]],[0,179,[645]],[0,179,[658]],[0,179,[659]],[0,179,[662]],[0,179,[663]],[0,179,[674]],[0,179,[675]],[0,179,[678]],[0,179,[679]],[0,179,[704]],[0,179,[748]],[0,179,[775]],[0,180,[244]],[0,180,[250]],[0,180,[254]],[0,180,[274]],[0,180,[280]],[0,180,[290]],[0,180,[296]],[0,180,[306]],[0,180,[312]],[0,180,[366]],[0,180,[371]],[0,180,[373]],[0,180,[374]],[0,180,[375]],[0,180,[377]],[0,180,[379]],[0,180,[380]],[0,180,[383]],[0,180,[480]],[0,180,[487]],[0,180,[494]],[0,180,[495]],[0,180,[496]],[0,180,[497]],[0,180,[500]],[0,180,[501]],[0,180,[514]],[0,180,[515]],[0,180,[518]],[0,180,[519]],[0,180,[530]],[0,180,[531]],[0,180,[534]],[0,180,[535]],[0,180,[544]],[0,180,[545]],[0,180,[548]],[0,180,[549]],[0,180,[562]],[0,180,[563]],[0,180,[566]],[0,180,[567]],[0,180,[576]],[0,180,[577]],[0,180,[580]],[0,180,[581]],[0,180,[594]],[0,180,[595]],[0,180,[598]],[0,180,[599]],[0,180,[608]],[0,180,[609]],[0,180,[612]],[0,180,[613]],[0,180,[626]],[0,180,[627]],[0,180,[630]],[0,180,[631]],[0,180,[640]],[0,180,[641]],[0,180,[644]],[0,180,[645]],[0,180,[656]],[0,180,[657]],[0,180,[660]],[0,180,[661]],[0,180,[674]],[0,180,[675]],[0,180,[678]],[0,180,[679]],[0,180,[704]],[0,180,[747]],[0,180,[923]],[0,181,[244]],[0,181,[247]],[0,181,[250]],[0,181,[253]],[0,181,[261]],[0,181,[265]],[0,181,[274]],[0,181,[280]],[0,181,[290]],[0,181,[296]],[0,181,[306]],[0,181,[312]],[0,181,[364]],[0,181,[480]],[0,181,[482]],[0,181,[484]],[0,181,[486]],[0,181,[496]],[0,181,[497]],[0,181,[500]],[0,181,[501]],[0,181,[512]],[0,181,[513]],[0,181,[516]],[0,181,[517]],[0,181,[530]],[0,181,[531]],[0,181,[534]],[0,181,[535]],[0,181,[546]],[0,181,[547]],[0,181,[550]],[0,181,[551]],[0,181,[560]],[0,181,[561]],[0,181,[564]],[0,181,[565]],[0,181,[576]],[0,181,[577]],[0,181,[580]],[0,181,[581]],[0,181,[592]],[0,181,[593]],[0,181,[596]],[0,181,[597]],[0,181,[608]],[0,181,[609]],[0,181,[612]],[0,181,[613]],[0,181,[626]],[0,181,[627]],[0,181,[630]],[0,181,[631]],[0,181,[642]],[0,181,[643]],[0,181,[646]],[0,181,[647]],[0,181,[656]],[0,181,[657]],[0,181,[660]],[0,181,[661]],[0,181,[672]],[0,181,[673]],[0,181,[676]],[0,181,[677]],[0,181,[704]],[0,181,[747]],[0,181,[761]],[0,182,[244]],[0,182,[250]],[0,182,[252]],[0,182,[261]],[0,182,[265]],[0,182,[274]],[0,182,[280]],[0,182,[290]],[0,182,[296]],[0,182,[306]],[0,182,[312]],[0,182,[362]],[0,182,[480]],[0,182,[482]],[0,182,[484]],[0,182,[486]],[0,182,[496]],[0,182,[497]],[0,182,[500]],[0,182,[501]],[0,182,[512]],[0,182,[513]],[0,182,[516]],[0,182,[517]],[0,182,[528]],[0,182,[529]],[0,182,[532]],[0,182,[533]],[0,182,[544]],[0,182,[545]],[0,182,[548]],[0,182,[549]],[0,182,[562]],[0,182,[563]],[0,182,[566]],[0,182,[567]],[0,182,[578]],[0,182,[579]],[0,182,[582]],[0,182,[583]],[0,182,[594]],[0,182,[595]],[0,182,[598]],[0,182,[599]],[0,182,[610]],[0,182,[611]],[0,182,[614]],[0,182,[615]],[0,182,[624]],[0,182,[625]],[0,182,[628]],[0,182,[629]],[0,182,[640]],[0,182,[641]],[0,182,[644]],[0,182,[645]],[0,182,[656]],[0,182,[657]],[0,182,[660]],[0,182,[661]],[0,182,[672]],[0,182,[673]],[0,182,[676]],[0,182,[677]],[0,182,[704]],[0,182,[747]],[0,182,[761]],[0,182,[775]],[0,183,[244]],[0,183,[247]],[0,183,[250]],[0,183,[252]],[0,183,[253]],[0,183,[254]],[0,183,[274]],[0,183,[280]],[0,183,[290]],[0,183,[296]],[0,183,[306]],[0,183,[312]],[0,183,[360]],[0,183,[370]],[0,183,[371]],[0,183,[372]],[0,183,[373]],[0,183,[374]],[0,183,[375]],[0,183,[376]],[0,183,[377]],[0,183,[379]],[0,183,[380]],[0,183,[382]],[0,183,[383]],[0,183,[480]],[0,183,[482]],[0,183,[484]],[0,183,[485]],[0,183,[490]],[0,183,[494]],[0,183,[495]],[0,183,[496]],[0,183,[497]],[0,183,[500]],[0,183,[501]],[0,183,[514]],[0,183,[515]],[0,183,[518]],[0,183,[519]],[0,183,[528]],[0,183,[529]],[0,183,[532]],[0,183,[533]],[0,183,[546]],[0,183,[547]],[0,183,[550]],[0,183,[551]],[0,183,[560]],[0,183,[561]],[0,183,[564]],[0,183,[565]],[0,183,[578]],[0,183,[579]],[0,183,[582]],[0,183,[583]],[0,183,[592]],[0,183,[593]],[0,183,[596]],[0,183,[597]],[0,183,[610]],[0,183,[611]],[0,183,[614]],[0,183,[615]],[0,183,[624]],[0,183,[625]],[0,183,[628]],[0,183,[629]],[0,183,[642]],[0,183,[643]],[0,183,[646]],[0,183,[647]],[0,183,[656]],[0,183,[657]],[0,183,[660]],[0,183,[661]],[0,183,[674]],[0,183,[675]],[0,183,[678]],[0,183,[679]],[0,183,[704]],[0,183,[747]],[0,183,[775]],[0,183,[924]],[0,184,[252]],[0,184,[325]],[0,184,[329]],[0,184,[375]],[0,184,[500]],[0,184,[502]],[0,184,[516]],[0,184,[518]],[0,184,[532]],[0,184,[534]],[0,184,[548]],[0,184,[550]],[0,184,[564]],[0,184,[566]],[0,184,[580]],[0,184,[582]],[0,184,[596]],[0,184,[598]],[0,184,[612]],[0,184,[614]],[0,184,[628]],[0,184,[630]],[0,184,[644]],[0,184,[646]],[0,184,[660]],[0,184,[662]],[0,184,[676]],[0,184,[678]],[0,184,[688]],[0,184,[690]],[0,184,[692]],[0,184,[694]],[0,184,[710]],[0,184,[712]],[0,184,[766]],[0,184,[808]],[0,184,[836]],[0,184,[850]],[0,185,[247]],[0,185,[253]],[0,185,[254]],[0,185,[325]],[0,185,[329]],[0,185,[354]],[0,185,[357]],[0,185,[360]],[0,185,[361]],[0,185,[373]],[0,185,[500]],[0,185,[502]],[0,185,[516]],[0,185,[518]],[0,185,[532]],[0,185,[534]],[0,185,[548]],[0,185,[550]],[0,185,[560]],[0,185,[562]],[0,185,[576]],[0,185,[578]],[0,185,[596]],[0,185,[598]],[0,185,[612]],[0,185,[614]],[0,185,[624]],[0,185,[626]],[0,185,[640]],[0,185,[642]],[0,185,[656]],[0,185,[658]],[0,185,[672]],[0,185,[674]],[0,185,[688]],[0,185,[692]],[0,185,[693]],[0,185,[694]],[0,185,[695]],[0,185,[710]],[0,185,[712]],[0,185,[766]],[0,185,[792]],[0,185,[806]],[0,185,[836]],[0,185,[848]],[0,185,[876]],[0,185,[933]],[0,185,[946]],[0,186,[252]],[0,186,[254]],[0,186,[325]],[0,186,[329]],[0,186,[356]],[0,186,[357]],[0,186,[358]],[0,186,[359]],[0,186,[361]],[0,186,[363]],[0,186,[364]],[0,186,[366]],[0,186,[371]],[0,186,[500]],[0,186,[502]],[0,186,[516]],[0,186,[518]],[0,186,[528]],[0,186,[530]],[0,186,[544]],[0,186,[546]],[0,186,[564]],[0,186,[566]],[0,186,[580]],[0,186,[582]],[0,186,[592]],[0,186,[594]],[0,186,[608]],[0,186,[610]],[0,186,[628]],[0,186,[630]],[0,186,[644]],[0,186,[646]],[0,186,[656]],[0,186,[658]],[0,186,[672]],[0,186,[674]],[0,186,[688]],[0,186,[690]],[0,186,[693]],[0,186,[698]],[0,186,[699]],[0,186,[703]],[0,186,[710]],[0,186,[712]],[0,186,[764]],[0,186,[778]],[0,186,[808]],[0,186,[834]],[0,186,[850]],[0,186,[876]],[0,187,[247]],[0,187,[253]],[0,187,[325]],[0,187,[329]],[0,187,[369]],[0,187,[500]],[0,187,[502]],[0,187,[516]],[0,187,[518]],[0,187,[528]],[0,187,[530]],[0,187,[544]],[0,187,[546]],[0,187,[560]],[0,187,[562]],[0,187,[576]],[0,187,[578]],[0,187,[592]],[0,187,[594]],[0,187,[608]],[0,187,[610]],[0,187,[624]],[0,187,[626]],[0,187,[640]],[0,187,[642]],[0,187,[660]],[0,187,[662]],[0,187,[676]],[0,187,[678]],[0,187,[688]],[0,187,[690]],[0,187,[692]],[0,187,[694]],[0,187,[710]],[0,187,[712]],[0,187,[764]],[0,187,[778]],[0,187,[792]],[0,187,[806]],[0,187,[834]],[0,187,[848]],[0,188,[247]],[0,188,[252]],[0,188,[253]],[0,188,[325]],[0,188,[329]],[0,188,[356]],[0,188,[357]],[0,188,[361]],[0,188,[366]],[0,188,[382]],[0,188,[496]],[0,188,[498]],[0,188,[512]],[0,188,[514]],[0,188,[532]],[0,188,[534]],[0,188,[548]],[0,188,[550]],[0,188,[564]],[0,188,[566]],[0,188,[580]],[0,188,[582]],[0,188,[592]],[0,188,[594]],[0,188,[608]],[0,188,[610]],[0,188,[624]],[0,188,[626]],[0,188,[640]],[0,188,[642]],[0,188,[660]],[0,188,[662]],[0,188,[676]],[0,188,[678]],[0,188,[688]],[0,188,[690]],[0,188,[694]],[0,188,[695]],[0,188,[698]],[0,188,[703]],[0,188,[710]],[0,188,[712]],[0,188,[736]],[0,188,[750]],[0,188,[766]],[0,188,[808]],[0,188,[834]],[0,188,[848]],[0,188,[946]],[0,189,[254]],[0,189,[325]],[0,189,[329]],[0,189,[380]],[0,189,[496]],[0,189,[498]],[0,189,[512]],[0,189,[514]],[0,189,[532]],[0,189,[534]],[0,189,[548]],[0,189,[550]],[0,189,[560]],[0,189,[562]],[0,189,[576]],[0,189,[578]],[0,189,[592]],[0,189,[594]],[0,189,[608]],[0,189,[610]],[0,189,[628]],[0,189,[630]],[0,189,[644]],[0,189,[646]],[0,189,[656]],[0,189,[658]],[0,189,[672]],[0,189,[674]],[0,189,[688]],[0,189,[690]],[0,189,[692]],[0,189,[694]],[0,189,[710]],[0,189,[712]],[0,189,[736]],[0,189,[750]],[0,189,[766]],[0,189,[792]],[0,189,[806]],[0,189,[834]],[0,189,[850]],[0,189,[876]],[0,190,[247]],[0,190,[252]],[0,190,[253]],[0,190,[254]],[0,190,[325]],[0,190,[329]],[0,190,[378]],[0,190,[496]],[0,190,[498]],[0,190,[512]],[0,190,[514]],[0,190,[528]],[0,190,[530]],[0,190,[544]],[0,190,[546]],[0,190,[564]],[0,190,[566]],[0,190,[580]],[0,190,[582]],[0,190,[596]],[0,190,[598]],[0,190,[612]],[0,190,[614]],[0,190,[624]],[0,190,[626]],[0,190,[640]],[0,190,[642]],[0,190,[656]],[0,190,[658]],[0,190,[672]],[0,190,[674]],[0,190,[688]],[0,190,[690]],[0,190,[692]],[0,190,[694]],[0,190,[710]],[0,190,[712]],[0,190,[736]],[0,190,[750]],[0,190,[764]],[0,190,[778]],[0,190,[808]],[0,190,[836]],[0,190,[848]],[0,190,[876]],[0,191,[325]],[0,191,[329]],[0,191,[354]],[0,191,[357]],[0,191,[358]],[0,191,[359]],[0,191,[360]],[0,191,[361]],[0,191,[363]],[0,191,[364]],[0,191,[376]],[0,191,[496]],[0,191,[498]],[0,191,[512]],[0,191,[514]],[0,191,[528]],[0,191,[530]],[0,191,[544]],[0,191,[546]],[0,191,[560]],[0,191,[562]],[0,191,[576]],[0,191,[578]],[0,191,[596]],[0,191,[598]],[0,191,[612]],[0,191,[614]],[0,191,[628]],[0,191,[630]],[0,191,[644]],[0,191,[646]],[0,191,[660]],[0,191,[662]],[0,191,[676]],[0,191,[678]],[0,191,[688]],[0,191,[692]],[0,191,[699]],[0,191,[710]],[0,191,[712]],[0,191,[736]],[0,191,[750]],[0,191,[764]],[0,191,[778]],[0,191,[792]],[0,191,[806]],[0,191,[836]],[0,191,[850]],[0,191,[933]],[0,192,[243]],[0,192,[245]],[0,192,[247]],[0,192,[250]],[0,192,[253]],[0,192,[254]],[0,192,[274]],[0,192,[276]],[0,192,[278]],[0,192,[280]],[0,192,[284]],[0,192,[286]],[0,192,[291]],[0,192,[295]],[0,192,[299]],[0,192,[303]],[0,192,[308]],[0,192,[310]],[0,192,[316]],[0,192,[318]],[0,192,[323]],[0,192,[325]],[0,192,[327]],[0,192,[329]],[0,192,[331]],[0,192,[335]],[0,192,[355]],[0,192,[359]],[0,192,[363]],[0,192,[367]],[0,192,[371]],[0,192,[375]],[0,192,[379]],[0,192,[383]],[0,192,[391]],[0,192,[405]],[0,192,[407]],[0,192,[409]],[0,192,[411]],[0,192,[418]],[0,192,[422]],[0,192,[424]],[0,192,[428]],[0,192,[437]],[0,192,[439]],[0,192,[441]],[0,192,[443]],[0,192,[450]],[0,192,[454]],[0,192,[456]],[0,192,[460]],[0,192,[580]],[0,192,[582]],[0,192,[594]],[0,192,[595]],[0,192,[598]],[0,192,[599]],[0,192,[608]],[0,192,[610]],[0,192,[612]],[0,192,[614]],[0,192,[637]],[0,192,[639]],[0,192,[649]],[0,192,[651]],[0,192,[669]],[0,192,[671]],[0,192,[681]],[0,192,[683]],[0,192,[714]],[0,192,[740]],[0,192,[807]],[0,192,[886]],[0,193,[243]],[0,193,[245]],[0,193,[250]],[0,193,[261]],[0,193,[265]],[0,193,[274]],[0,193,[276]],[0,193,[278]],[0,193,[280]],[0,193,[284]],[0,193,[286]],[0,193,[289]],[0,193,[293]],[0,193,[297]],[0,193,[301]],[0,193,[308]],[0,193,[310]],[0,193,[316]],[0,193,[318]],[0,193,[321]],[0,193,[333]],[0,193,[338]],[0,193,[341]],[0,193,[344]],[0,193,[345]],[0,193,[353]],[0,193,[357]],[0,193,[361]],[0,193,[365]],[0,193,[371]],[0,193,[375]],[0,193,[379]],[0,193,[383]],[0,193,[388]],[0,193,[405]],[0,193,[407]],[0,193,[409]],[0,193,[411]],[0,193,[416]],[0,193,[420]],[0,193,[426]],[0,193,[430]],[0,193,[437]],[0,193,[439]],[0,193,[441]],[0,193,[443]],[0,193,[448]],[0,193,[452]],[0,193,[458]],[0,193,[462]],[0,193,[580]],[0,193,[582]],[0,193,[592]],[0,193,[593]],[0,193,[596]],[0,193,[597]],[0,193,[608]],[0,193,[612]],[0,193,[613]],[0,193,[614]],[0,193,[615]],[0,193,[637]],[0,193,[639]],[0,193,[648]],[0,193,[650]],[0,193,[669]],[0,193,[671]],[0,193,[680]],[0,193,[682]],[0,193,[714]],[0,193,[740]],[0,193,[755]],[0,193,[807]],[0,193,[886]],[0,193,[899]],[0,193,[913]],[0,193,[948]],[0,193,[951]],[0,194,[243]],[0,194,[245]],[0,194,[247]],[0,194,[250]],[0,194,[253]],[0,194,[254]],[0,194,[261]],[0,194,[265]],[0,194,[272]],[0,194,[282]],[0,194,[291]],[0,194,[295]],[0,194,[299]],[0,194,[303]],[0,194,[304]],[0,194,[306]],[0,194,[312]],[0,194,[314]],[0,194,[323]],[0,194,[325]],[0,194,[327]],[0,194,[329]],[0,194,[331]],[0,194,[335]],[0,194,[338]],[0,194,[340]],[0,194,[342]],[0,194,[343]],[0,194,[344]],[0,194,[347]],[0,194,[348]],[0,194,[350]],[0,194,[353]],[0,194,[357]],[0,194,[361]],[0,194,[365]],[0,194,[371]],[0,194,[375]],[0,194,[379]],[0,194,[383]],[0,194,[386]],[0,194,[401]],[0,194,[403]],[0,194,[413]],[0,194,[415]],[0,194,[418]],[0,194,[422]],[0,194,[424]],[0,194,[428]],[0,194,[433]],[0,194,[435]],[0,194,[445]],[0,194,[447]],[0,194,[450]],[0,194,[454]],[0,194,[456]],[0,194,[460]],[0,194,[580]],[0,194,[582]],[0,194,[592]],[0,194,[593]],[0,194,[596]],[0,194,[597]],[0,194,[608]],[0,194,[613]],[0,194,[618]],[0,194,[619]],[0,194,[623]],[0,194,[636]],[0,194,[638]],[0,194,[649]],[0,194,[651]],[0,194,[668]],[0,194,[670]],[0,194,[681]],[0,194,[683]],[0,194,[714]],[0,194,[739]],[0,194,[807]],[0,194,[857]],[0,194,[885]],[0,194,[913]],[0,195,[243]],[0,195,[245]],[0,195,[250]],[0,195,[272]],[0,195,[282]],[0,195,[289]],[0,195,[293]],[0,195,[297]],[0,195,[301]],[0,195,[304]],[0,195,[306]],[0,195,[312]],[0,195,[314]],[0,195,[321]],[0,195,[333]],[0,195,[355]],[0,195,[359]],[0,195,[363]],[0,195,[367]],[0,195,[371]],[0,195,[375]],[0,195,[379]],[0,195,[383]],[0,195,[385]],[0,195,[401]],[0,195,[403]],[0,195,[413]],[0,195,[415]],[0,195,[416]],[0,195,[420]],[0,195,[426]],[0,195,[430]],[0,195,[433]],[0,195,[435]],[0,195,[445]],[0,195,[447]],[0,195,[448]],[0,195,[452]],[0,195,[458]],[0,195,[462]],[0,195,[580]],[0,195,[582]],[0,195,[594]],[0,195,[595]],[0,195,[598]],[0,195,[599]],[0,195,[608]],[0,195,[610]],[0,195,[612]],[0,195,[614]],[0,195,[636]],[0,195,[638]],[0,195,[648]],[0,195,[650]],[0,195,[668]],[0,195,[670]],[0,195,[680]],[0,195,[682]],[0,195,[714]],[0,195,[739]],[0,195,[755]],[0,195,[807]],[0,195,[857]],[0,195,[885]],[0,195,[899]],[0,196,[243]],[0,196,[245]],[0,196,[250]],[0,196,[252]],[0,196,[274]],[0,196,[276]],[0,196,[278]],[0,196,[280]],[0,196,[284]],[0,196,[286]],[0,196,[291]],[0,196,[295]],[0,196,[299]],[0,196,[303]],[0,196,[308]],[0,196,[310]],[0,196,[316]],[0,196,[318]],[0,196,[323]],[0,196,[325]],[0,196,[327]],[0,196,[329]],[0,196,[331]],[0,196,[335]],[0,196,[338]],[0,196,[340]],[0,196,[344]],[0,196,[350]],[0,196,[355]],[0,196,[359]],[0,196,[363]],[0,196,[367]],[0,196,[369]],[0,196,[373]],[0,196,[377]],[0,196,[381]],[0,196,[399]],[0,196,[401]],[0,196,[403]],[0,196,[413]],[0,196,[415]],[0,196,[416]],[0,196,[420]],[0,196,[426]],[0,196,[430]],[0,196,[433]],[0,196,[435]],[0,196,[445]],[0,196,[447]],[0,196,[448]],[0,196,[452]],[0,196,[458]],[0,196,[462]],[0,196,[576]],[0,196,[578]],[0,196,[594]],[0,196,[595]],[0,196,[598]],[0,196,[599]],[0,196,[608]],[0,196,[614]],[0,196,[615]],[0,196,[618]],[0,196,[623]],[0,196,[636]],[0,196,[638]],[0,196,[648]],[0,196,[650]],[0,196,[668]],[0,196,[670]],[0,196,[680]],[0,196,[682]],[0,196,[714]],[0,196,[740]],[0,196,[805]],[0,196,[857]],[0,196,[885]],[0,196,[899]],[0,196,[951]],[0,197,[243]],[0,197,[245]],[0,197,[247]],[0,197,[250]],[0,197,[252]],[0,197,[253]],[0,197,[254]],[0,197,[261]],[0,197,[265]],[0,197,[274]],[0,197,[276]],[0,197,[278]],[0,197,[280]],[0,197,[284]],[0,197,[286]],[0,197,[289]],[0,197,[293]],[0,197,[297]],[0,197,[301]],[0,197,[308]],[0,197,[310]],[0,197,[316]],[0,197,[318]],[0,197,[321]],[0,197,[333]],[0,197,[353]],[0,197,[357]],[0,197,[361]],[0,197,[365]],[0,197,[369]],[0,197,[373]],[0,197,[377]],[0,197,[381]],[0,197,[396]],[0,197,[401]],[0,197,[403]],[0,197,[413]],[0,197,[415]],[0,197,[418]],[0,197,[422]],[0,197,[424]],[0,197,[428]],[0,197,[433]],[0,197,[435]],[0,197,[445]],[0,197,[447]],[0,197,[450]],[0,197,[454]],[0,197,[456]],[0,197,[460]],[0,197,[576]],[0,197,[578]],[0,197,[592]],[0,197,[593]],[0,197,[596]],[0,197,[597]],[0,197,[608]],[0,197,[610]],[0,197,[612]],[0,197,[614]],[0,197,[636]],[0,197,[638]],[0,197,[649]],[0,197,[651]],[0,197,[668]],[0,197,[670]],[0,197,[681]],[0,197,[683]],[0,197,[714]],[0,197,[740]],[0,197,[755]],[0,197,[805]],[0,197,[857]],[0,197,[885]],[0,197,[913]],[0,198,[243]],[0,198,[245]],[0,198,[250]],[0,198,[252]],[0,198,[261]],[0,198,[265]],[0,198,[272]],[0,198,[282]],[0,198,[291]],[0,198,[295]],[0,198,[299]],[0,198,[303]],[0,198,[304]],[0,198,[306]],[0,198,[312]],[0,198,[314]],[0,198,[323]],[0,198,[325]],[0,198,[327]],[0,198,[329]],[0,198,[331]],[0,198,[335]],[0,198,[353]],[0,198,[357]],[0,198,[361]],[0,198,[365]],[0,198,[369]],[0,198,[373]],[0,198,[377]],[0,198,[381]],[0,198,[394]],[0,198,[405]],[0,198,[407]],[0,198,[409]],[0,198,[411]],[0,198,[416]],[0,198,[420]],[0,198,[426]],[0,198,[430]],[0,198,[437]],[0,198,[439]],[0,198,[441]],[0,198,[443]],[0,198,[448]],[0,198,[452]],[0,198,[458]],[0,198,[462]],[0,198,[576]],[0,198,[578]],[0,198,[592]],[0,198,[593]],[0,198,[596]],[0,198,[597]],[0,198,[608]],[0,198,[610]],[0,198,[612]],[0,198,[614]],[0,198,[637]],[0,198,[639]],[0,198,[648]],[0,198,[650]],[0,198,[669]],[0,198,[671]],[0,198,[680]],[0,198,[682]],[0,198,[714]],[0,198,[739]],[0,198,[805]],[0,198,[886]],[0,198,[899]],[0,198,[913]],[0,199,[243]],[0,199,[245]],[0,199,[247]],[0,199,[250]],[0,199,[252]],[0,199,[253]],[0,199,[254]],[0,199,[272]],[0,199,[282]],[0,199,[289]],[0,199,[293]],[0,199,[297]],[0,199,[301]],[0,199,[304]],[0,199,[306]],[0,199,[312]],[0,199,[314]],[0,199,[321]],[0,199,[333]],[0,199,[338]],[0,199,[341]],[0,199,[342]],[0,199,[343]],[0,199,[344]],[0,199,[345]],[0,199,[347]],[0,199,[348]],[0,199,[355]],[0,199,[359]],[0,199,[363]],[0,199,[367]],[0,199,[369]],[0,199,[373]],[0,199,[377]],[0,199,[381]],[0,199,[393]],[0,199,[405]],[0,199,[407]],[0,199,[409]],[0,199,[411]],[0,199,[418]],[0,199,[422]],[0,199,[424]],[0,199,[428]],[0,199,[437]],[0,199,[439]],[0,199,[441]],[0,199,[443]],[0,199,[450]],[0,199,[454]],[0,199,[456]],[0,199,[460]],[0,199,[576]],[0,199,[578]],[0,199,[594]],[0,199,[595]],[0,199,[598]],[0,199,[599]],[0,199,[608]],[0,199,[612]],[0,199,[619]],[0,199,[637]],[0,199,[639]],[0,199,[649]],[0,199,[651]],[0,199,[669]],[0,199,[671]],[0,199,[681]],[0,199,[683]],[0,199,[714]],[0,199,[739]],[0,199,[755]],[0,199,[805]],[0,199,[886]],[0,199,[948]],[0,200,[241]],[0,200,[250]],[0,200,[251]],[0,200,[252]],[0,200,[260]],[0,200,[262]],[0,200,[268]],[0,200,[270]],[0,200,[290]],[0,200,[293]],[0,200,[295]],[0,200,[296]],[0,200,[297]],[0,200,[299]],[0,200,[309]],[0,200,[311]],[0,200,[313]],[0,200,[315]],[0,200,[325]],[0,200,[329]],[0,200,[339]],[0,200,[343]],[0,200,[347]],[0,200,[351]],[0,200,[356]],[0,200,[358]],[0,200,[364]],[0,200,[366]],[0,200,[370]],[0,200,[374]],[0,200,[376]],[0,200,[380]],[0,200,[389]],[0,200,[391]],[0,200,[393]],[0,200,[395]],[0,200,[406]],[0,200,[421]],[0,200,[423]],[0,200,[425]],[0,200,[427]],[0,200,[437]],[0,200,[439]],[0,200,[441]],[0,200,[443]],[0,200,[466]],[0,200,[470]],[0,200,[472]],[0,200,[476]],[0,200,[489]],[0,200,[491]],[0,200,[509]],[0,200,[511]],[0,200,[525]],[0,200,[527]],[0,200,[530]],[0,200,[531]],[0,200,[534]],[0,200,[535]],[0,200,[544]],[0,200,[546]],[0,200,[548]],[0,200,[550]],[0,200,[573]],[0,200,[575]],[0,200,[585]],[0,200,[587]],[0,200,[644]],[0,200,[646]],[0,200,[669]],[0,200,[671]],[0,200,[685]],[0,200,[687]],[0,200,[744]],[0,200,[760]],[0,201,[241]],[0,201,[250]],[0,201,[251]],[0,201,[254]],[0,201,[260]],[0,201,[261]],[0,201,[262]],[0,201,[265]],[0,201,[268]],[0,201,[270]],[0,201,[289]],[0,201,[290]],[0,201,[291]],[0,201,[296]],[0,201,[301]],[0,201,[303]],[0,201,[309]],[0,201,[311]],[0,201,[313]],[0,201,[315]],[0,201,[323]],[0,201,[326]],[0,201,[327]],[0,201,[331]],[0,201,[332]],[0,201,[335]],[0,201,[337]],[0,201,[341]],[0,201,[345]],[0,201,[349]],[0,201,[352]],[0,201,[354]],[0,201,[360]],[0,201,[362]],[0,201,[370]],[0,201,[374]],[0,201,[376]],[0,201,[380]],[0,201,[389]],[0,201,[391]],[0,201,[393]],[0,201,[395]],[0,201,[405]],[0,201,[417]],[0,201,[419]],[0,201,[429]],[0,201,[431]],[0,201,[437]],[0,201,[439]],[0,201,[441]],[0,201,[443]],[0,201,[464]],[0,201,[468]],[0,201,[474]],[0,201,[478]],[0,201,[489]],[0,201,[491]],[0,201,[509]],[0,201,[511]],[0,201,[524]],[0,201,[526]],[0,201,[528]],[0,201,[529]],[0,201,[532]],[0,201,[533]],[0,201,[544]],[0,201,[551]],[0,201,[555]],[0,201,[558]],[0,201,[573]],[0,201,[575]],[0,201,[584]],[0,201,[586]],[0,201,[644]],[0,201,[646]],[0,201,[669]],[0,201,[671]],[0,201,[684]],[0,201,[686]],[0,201,[744]],[0,201,[759]],[0,201,[925]],[0,202,[241]],[0,202,[250]],[0,202,[251]],[0,202,[252]],[0,202,[256]],[0,202,[258]],[0,202,[261]],[0,202,[264]],[0,202,[265]],[0,202,[266]],[0,202,[290]],[0,202,[293]],[0,202,[295]],[0,202,[296]],[0,202,[297]],[0,202,[299]],[0,202,[305]],[0,202,[307]],[0,202,[317]],[0,202,[319]],[0,202,[322]],[0,202,[323]],[0,202,[324]],[0,202,[326]],[0,202,[327]],[0,202,[328]],[0,202,[331]],[0,202,[332]],[0,202,[334]],[0,202,[335]],[0,202,[339]],[0,202,[343]],[0,202,[347]],[0,202,[351]],[0,202,[352]],[0,202,[354]],[0,202,[360]],[0,202,[362]],[0,202,[370]],[0,202,[374]],[0,202,[376]],[0,202,[380]],[0,202,[385]],[0,202,[387]],[0,202,[397]],[0,202,[399]],[0,202,[403]],[0,202,[421]],[0,202,[423]],[0,202,[425]],[0,202,[427]],[0,202,[433]],[0,202,[435]],[0,202,[445]],[0,202,[447]],[0,202,[466]],[0,202,[470]],[0,202,[472]],[0,202,[476]],[0,202,[489]],[0,202,[491]],[0,202,[508]],[0,202,[510]],[0,202,[525]],[0,202,[527]],[0,202,[528]],[0,202,[529]],[0,202,[532]],[0,202,[533]],[0,202,[544]],[0,202,[546]],[0,202,[548]],[0,202,[549]],[0,202,[554]],[0,202,[555]],[0,202,[558]],[0,202,[572]],[0,202,[574]],[0,202,[585]],[0,202,[587]],[0,202,[644]],[0,202,[646]],[0,202,[668]],[0,202,[670]],[0,202,[685]],[0,202,[687]],[0,202,[743]],[0,202,[760]],[0,202,[927]],[0,203,[241]],[0,203,[250]],[0,203,[251]],[0,203,[254]],[0,203,[256]],[0,203,[258]],[0,203,[264]],[0,203,[266]],[0,203,[289]],[0,203,[290]],[0,203,[291]],[0,203,[296]],[0,203,[301]],[0,203,[303]],[0,203,[305]],[0,203,[307]],[0,203,[317]],[0,203,[319]],[0,203,[325]],[0,203,[329]],[0,203,[337]],[0,203,[341]],[0,203,[345]],[0,203,[349]],[0,203,[356]],[0,203,[358]],[0,203,[364]],[0,203,[366]],[0,203,[370]],[0,203,[374]],[0,203,[376]],[0,203,[380]],[0,203,[385]],[0,203,[387]],[0,203,[397]],[0,203,[399]],[0,203,[400]],[0,203,[417]],[0,203,[419]],[0,203,[429]],[0,203,[431]],[0,203,[433]],[0,203,[435]],[0,203,[445]],[0,203,[447]],[0,203,[464]],[0,203,[468]],[0,203,[474]],[0,203,[478]],[0,203,[489]],[0,203,[491]],[0,203,[508]],[0,203,[510]],[0,203,[524]],[0,203,[526]],[0,203,[530]],[0,203,[531]],[0,203,[534]],[0,203,[535]],[0,203,[544]],[0,203,[546]],[0,203,[548]],[0,203,[550]],[0,203,[572]],[0,203,[574]],[0,203,[584]],[0,203,[586]],[0,203,[644]],[0,203,[646]],[0,203,[668]],[0,203,[670]],[0,203,[684]],[0,203,[686]],[0,203,[743]],[0,203,[759]],[0,204,[241]],[0,204,[247]],[0,204,[250]],[0,204,[251]],[0,204,[253]],[0,204,[254]],[0,204,[260]],[0,204,[262]],[0,204,[268]],[0,204,[270]],[0,204,[290]],[0,204,[293]],[0,204,[295]],[0,204,[296]],[0,204,[297]],[0,204,[299]],[0,204,[309]],[0,204,[311]],[0,204,[313]],[0,204,[315]],[0,204,[322]],[0,204,[323]],[0,204,[324]],[0,204,[326]],[0,204,[327]],[0,204,[328]],[0,204,[331]],[0,204,[332]],[0,204,[334]],[0,204,[335]],[0,204,[339]],[0,204,[343]],[0,204,[347]],[0,204,[351]],[0,204,[356]],[0,204,[358]],[0,204,[364]],[0,204,[366]],[0,204,[368]],[0,204,[372]],[0,204,[378]],[0,204,[382]],[0,204,[385]],[0,204,[387]],[0,204,[397]],[0,204,[399]],[0,204,[414]],[0,204,[417]],[0,204,[419]],[0,204,[429]],[0,204,[431]],[0,204,[433]],[0,204,[435]],[0,204,[445]],[0,204,[447]],[0,204,[464]],[0,204,[468]],[0,204,[474]],[0,204,[478]],[0,204,[488]],[0,204,[490]],[0,204,[509]],[0,204,[511]],[0,204,[525]],[0,204,[527]],[0,204,[530]],[0,204,[531]],[0,204,[534]],[0,204,[535]],[0,204,[544]],[0,204,[546]],[0,204,[548]],[0,204,[554]],[0,204,[558]],[0,204,[559]],[0,204,[572]],[0,204,[574]],[0,204,[584]],[0,204,[586]],[0,204,[640]],[0,204,[642]],[0,204,[668]],[0,204,[670]],[0,204,[684]],[0,204,[686]],[0,204,[744]],[0,204,[760]],[0,204,[925]],[0,205,[241]],[0,205,[247]],[0,205,[250]],[0,205,[251]],[0,205,[252]],[0,205,[253]],[0,205,[260]],[0,205,[261]],[0,205,[262]],[0,205,[265]],[0,205,[268]],[0,205,[270]],[0,205,[289]],[0,205,[290]],[0,205,[291]],[0,205,[296]],[0,205,[301]],[0,205,[303]],[0,205,[309]],[0,205,[311]],[0,205,[313]],[0,205,[315]],[0,205,[325]],[0,205,[329]],[0,205,[337]],[0,205,[341]],[0,205,[345]],[0,205,[349]],[0,205,[352]],[0,205,[354]],[0,205,[360]],[0,205,[362]],[0,205,[368]],[0,205,[372]],[0,205,[378]],[0,205,[382]],[0,205,[385]],[0,205,[387]],[0,205,[397]],[0,205,[399]],[0,205,[413]],[0,205,[421]],[0,205,[423]],[0,205,[425]],[0,205,[427]],[0,205,[433]],[0,205,[435]],[0,205,[445]],[0,205,[447]],[0,205,[466]],[0,205,[470]],[0,205,[472]],[0,205,[476]],[0,205,[488]],[0,205,[490]],[0,205,[509]],[0,205,[511]],[0,205,[524]],[0,205,[526]],[0,205,[528]],[0,205,[529]],[0,205,[532]],[0,205,[533]],[0,205,[544]],[0,205,[546]],[0,205,[548]],[0,205,[550]],[0,205,[572]],[0,205,[574]],[0,205,[585]],[0,205,[587]],[0,205,[640]],[0,205,[642]],[0,205,[668]],[0,205,[670]],[0,205,[685]],[0,205,[687]],[0,205,[744]],[0,205,[759]],[0,206,[241]],[0,206,[247]],[0,206,[250]],[0,206,[251]],[0,206,[253]],[0,206,[254]],[0,206,[256]],[0,206,[258]],[0,206,[261]],[0,206,[264]],[0,206,[265]],[0,206,[266]],[0,206,[290]],[0,206,[293]],[0,206,[295]],[0,206,[296]],[0,206,[297]],[0,206,[299]],[0,206,[305]],[0,206,[307]],[0,206,[317]],[0,206,[319]],[0,206,[325]],[0,206,[329]],[0,206,[339]],[0,206,[343]],[0,206,[347]],[0,206,[351]],[0,206,[352]],[0,206,[354]],[0,206,[360]],[0,206,[362]],[0,206,[368]],[0,206,[372]],[0,206,[378]],[0,206,[382]],[0,206,[389]],[0,206,[391]],[0,206,[393]],[0,206,[395]],[0,206,[411]],[0,206,[417]],[0,206,[419]],[0,206,[429]],[0,206,[431]],[0,206,[437]],[0,206,[439]],[0,206,[441]],[0,206,[443]],[0,206,[464]],[0,206,[468]],[0,206,[474]],[0,206,[478]],[0,206,[488]],[0,206,[490]],[0,206,[508]],[0,206,[510]],[0,206,[525]],[0,206,[527]],[0,206,[528]],[0,206,[529]],[0,206,[532]],[0,206,[533]],[0,206,[544]],[0,206,[546]],[0,206,[548]],[0,206,[550]],[0,206,[573]],[0,206,[575]],[0,206,[584]],[0,206,[586]],[0,206,[640]],[0,206,[642]],[0,206,[669]],[0,206,[671]],[0,206,[684]],[0,206,[686]],[0,206,[743]],[0,206,[760]],[0,207,[241]],[0,207,[247]],[0,207,[250]],[0,207,[251]],[0,207,[252]],[0,207,[253]],[0,207,[256]],[0,207,[258]],[0,207,[264]],[0,207,[266]],[0,207,[289]],[0,207,[290]],[0,207,[291]],[0,207,[296]],[0,207,[301]],[0,207,[303]],[0,207,[305]],[0,207,[307]],[0,207,[317]],[0,207,[319]],[0,207,[323]],[0,207,[326]],[0,207,[327]],[0,207,[331]],[0,207,[332]],[0,207,[335]],[0,207,[337]],[0,207,[341]],[0,207,[345]],[0,207,[349]],[0,207,[356]],[0,207,[358]],[0,207,[364]],[0,207,[366]],[0,207,[368]],[0,207,[372]],[0,207,[378]],[0,207,[382]],[0,207,[389]],[0,207,[391]],[0,207,[393]],[0,207,[395]],[0,207,[408]],[0,207,[421]],[0,207,[423]],[0,207,[425]],[0,207,[427]],[0,207,[437]],[0,207,[439]],[0,207,[441]],[0,207,[443]],[0,207,[466]],[0,207,[470]],[0,207,[472]],[0,207,[476]],[0,207,[488]],[0,207,[490]],[0,207,[508]],[0,207,[510]],[0,207,[524]],[0,207,[526]],[0,207,[530]],[0,207,[531]],[0,207,[534]],[0,207,[535]],[0,207,[544]],[0,207,[549]],[0,207,[551]],[0,207,[558]],[0,207,[559]],[0,207,[573]],[0,207,[575]],[0,207,[585]],[0,207,[587]],[0,207,[640]],[0,207,[642]],[0,207,[669]],[0,207,[671]],[0,207,[685]],[0,207,[687]],[0,207,[743]],[0,207,[759]],[0,207,[927]],[0,208,[247]],[0,208,[252]],[0,208,[253]],[0,208,[254]],[0,208,[258]],[0,208,[261]],[0,208,[262]],[0,208,[264]],[0,208,[265]],[0,208,[268]],[0,208,[278]],[0,208,[284]],[0,208,[290]],[0,208,[296]],[0,208,[322]],[0,208,[325]],[0,208,[326]],[0,208,[328]],[0,208,[329]],[0,208,[332]],[0,208,[338]],[0,208,[342]],[0,208,[344]],[0,208,[348]],[0,208,[386]],[0,208,[390]],[0,208,[392]],[0,208,[396]],[0,208,[402]],[0,208,[406]],[0,208,[408]],[0,208,[412]],[0,208,[422]],[0,208,[450]],[0,208,[454]],[0,208,[456]],[0,208,[460]],[0,208,[466]],[0,208,[470]],[0,208,[472]],[0,208,[476]],[0,208,[482]],[0,208,[483]],[0,208,[486]],[0,208,[487]],[0,208,[496]],[0,208,[498]],[0,208,[500]],[0,208,[502]],[0,208,[514]],[0,208,[515]],[0,208,[518]],[0,208,[519]],[0,208,[537]],[0,208,[539]],[0,208,[553]],[0,208,[555]],[0,208,[569]],[0,208,[571]],[0,208,[585]],[0,208,[587]],[0,208,[601]],[0,208,[603]],[0,208,[617]],[0,208,[619]],[0,208,[633]],[0,208,[635]],[0,208,[649]],[0,208,[651]],[0,208,[660]],[0,208,[662]],[0,208,[690]],[0,208,[691]],[0,208,[694]],[0,208,[695]],[0,208,[704]],[0,208,[705]],[0,208,[734]],[0,208,[877]],[0,209,[252]],[0,209,[256]],[0,209,[260]],[0,209,[266]],[0,209,[270]],[0,209,[278]],[0,209,[284]],[0,209,[290]],[0,209,[296]],[0,209,[307]],[0,209,[308]],[0,209,[318]],[0,209,[319]],[0,209,[320]],[0,209,[324]],[0,209,[325]],[0,209,[329]],[0,209,[330]],[0,209,[334]],[0,209,[338]],[0,209,[342]],[0,209,[344]],[0,209,[348]],[0,209,[384]],[0,209,[388]],[0,209,[394]],[0,209,[398]],[0,209,[402]],[0,209,[406]],[0,209,[408]],[0,209,[412]],[0,209,[421]],[0,209,[448]],[0,209,[452]],[0,209,[458]],[0,209,[462]],[0,209,[466]],[0,209,[470]],[0,209,[472]],[0,209,[476]],[0,209,[482]],[0,209,[483]],[0,209,[486]],[0,209,[487]],[0,209,[496]],[0,209,[500]],[0,209,[502]],[0,209,[503]],[0,209,[506]],[0,209,[507]],[0,209,[510]],[0,209,[512]],[0,209,[513]],[0,209,[516]],[0,209,[517]],[0,209,[537]],[0,209,[539]],[0,209,[552]],[0,209,[554]],[0,209,[568]],[0,209,[570]],[0,209,[585]],[0,209,[587]],[0,209,[600]],[0,209,[602]],[0,209,[617]],[0,209,[619]],[0,209,[633]],[0,209,[635]],[0,209,[648]],[0,209,[650]],[0,209,[660]],[0,209,[662]],[0,209,[688]],[0,209,[689]],[0,209,[692]],[0,209,[693]],[0,209,[704]],[0,209,[705]],[0,209,[734]],[0,209,[785]],[0,209,[877]],[0,209,[928]],[0,210,[247]],[0,210,[253]],[0,210,[258]],[0,210,[262]],[0,210,[264]],[0,210,[268]],[0,210,[272]],[0,210,[274]],[0,210,[276]],[0,210,[280]],[0,210,[282]],[0,210,[286]],[0,210,[290]],[0,210,[296]],[0,210,[307]],[0,210,[309]],[0,210,[313]],[0,210,[319]],[0,210,[322]],[0,210,[325]],[0,210,[326]],[0,210,[328]],[0,210,[329]],[0,210,[332]],[0,210,[336]],[0,210,[340]],[0,210,[346]],[0,210,[350]],[0,210,[386]],[0,210,[390]],[0,210,[392]],[0,210,[396]],[0,210,[400]],[0,210,[404]],[0,210,[410]],[0,210,[414]],[0,210,[419]],[0,210,[450]],[0,210,[454]],[0,210,[456]],[0,210,[460]],[0,210,[464]],[0,210,[468]],[0,210,[474]],[0,210,[478]],[0,210,[482]],[0,210,[483]],[0,210,[486]],[0,210,[487]],[0,210,[496]],[0,210,[501]],[0,210,[502]],[0,210,[507]],[0,210,[510]],[0,210,[512]],[0,210,[513]],[0,210,[516]],[0,210,[517]],[0,210,[536]],[0,210,[538]],[0,210,[553]],[0,210,[555]],[0,210,[569]],[0,210,[571]],[0,210,[584]],[0,210,[586]],[0,210,[601]],[0,210,[603]],[0,210,[616]],[0,210,[618]],[0,210,[632]],[0,210,[634]],[0,210,[649]],[0,210,[651]],[0,210,[660]],[0,210,[662]],[0,210,[688]],[0,210,[689]],[0,210,[692]],[0,210,[693]],[0,210,[704]],[0,210,[705]],[0,210,[734]],[0,210,[773]],[0,210,[877]],[0,210,[926]],[0,211,[254]],[0,211,[256]],[0,211,[260]],[0,211,[261]],[0,211,[265]],[0,211,[266]],[0,211,[270]],[0,211,[272]],[0,211,[274]],[0,211,[276]],[0,211,[280]],[0,211,[282]],[0,211,[286]],[0,211,[290]],[0,211,[296]],[0,211,[320]],[0,211,[324]],[0,211,[325]],[0,211,[329]],[0,211,[330]],[0,211,[334]],[0,211,[336]],[0,211,[340]],[0,211,[346]],[0,211,[350]],[0,211,[384]],[0,211,[388]],[0,211,[394]],[0,211,[398]],[0,211,[400]],[0,211,[404]],[0,211,[410]],[0,211,[414]],[0,211,[416]],[0,211,[448]],[0,211,[452]],[0,211,[458]],[0,211,[462]],[0,211,[464]],[0,211,[468]],[0,211,[474]],[0,211,[478]],[0,211,[482]],[0,211,[483]],[0,211,[486]],[0,211,[487]],[0,211,[496]],[0,211,[498]],[0,211,[500]],[0,211,[502]],[0,211,[514]],[0,211,[515]],[0,211,[518]],[0,211,[519]],[0,211,[536]],[0,211,[538]],[0,211,[552]],[0,211,[554]],[0,211,[568]],[0,211,[570]],[0,211,[584]],[0,211,[586]],[0,211,[600]],[0,211,[602]],[0,211,[616]],[0,211,[618]],[0,211,[632]],[0,211,[634]],[0,211,[648]],[0,211,[650]],[0,211,[660]],[0,211,[662]],[0,211,[690]],[0,211,[691]],[0,211,[694]],[0,211,[695]],[0,211,[704]],[0,211,[705]],[0,211,[734]],[0,211,[773]],[0,211,[785]],[0,211,[877]],[0,212,[258]],[0,212,[261]],[0,212,[262]],[0,212,[264]],[0,212,[265]],[0,212,[268]],[0,212,[278]],[0,212,[284]],[0,212,[290]],[0,212,[296]],[0,212,[306]],[0,212,[307]],[0,212,[308]],[0,212,[309]],[0,212,[310]],[0,212,[311]],[0,212,[312]],[0,212,[313]],[0,212,[315]],[0,212,[316]],[0,212,[318]],[0,212,[319]],[0,212,[322]],[0,212,[325]],[0,212,[326]],[0,212,[328]],[0,212,[329]],[0,212,[332]],[0,212,[338]],[0,212,[342]],[0,212,[344]],[0,212,[348]],[0,212,[384]],[0,212,[388]],[0,212,[394]],[0,212,[398]],[0,212,[400]],[0,212,[404]],[0,212,[410]],[0,212,[414]],[0,212,[430]],[0,212,[448]],[0,212,[452]],[0,212,[458]],[0,212,[462]],[0,212,[464]],[0,212,[468]],[0,212,[474]],[0,212,[478]],[0,212,[480]],[0,212,[481]],[0,212,[484]],[0,212,[485]],[0,212,[496]],[0,212,[498]],[0,212,[500]],[0,212,[506]],[0,212,[507]],[0,212,[510]],[0,212,[514]],[0,212,[515]],[0,212,[518]],[0,212,[519]],[0,212,[537]],[0,212,[539]],[0,212,[553]],[0,212,[555]],[0,212,[568]],[0,212,[570]],[0,212,[584]],[0,212,[586]],[0,212,[601]],[0,212,[603]],[0,212,[617]],[0,212,[619]],[0,212,[632]],[0,212,[634]],[0,212,[648]],[0,212,[650]],[0,212,[656]],[0,212,[658]],[0,212,[690]],[0,212,[691]],[0,212,[694]],[0,212,[695]],[0,212,[704]],[0,212,[705]],[0,212,[733]],[0,212,[875]],[0,212,[926]],[0,213,[247]],[0,213,[253]],[0,213,[254]],[0,213,[256]],[0,213,[260]],[0,213,[266]],[0,213,[270]],[0,213,[278]],[0,213,[284]],[0,213,[290]],[0,213,[296]],[0,213,[320]],[0,213,[324]],[0,213,[325]],[0,213,[329]],[0,213,[330]],[0,213,[334]],[0,213,[338]],[0,213,[342]],[0,213,[344]],[0,213,[348]],[0,213,[386]],[0,213,[390]],[0,213,[392]],[0,213,[396]],[0,213,[400]],[0,213,[404]],[0,213,[410]],[0,213,[414]],[0,213,[429]],[0,213,[450]],[0,213,[454]],[0,213,[456]],[0,213,[460]],[0,213,[464]],[0,213,[468]],[0,213,[474]],[0,213,[478]],[0,213,[480]],[0,213,[481]],[0,213,[484]],[0,213,[485]],[0,213,[496]],[0,213,[498]],[0,213,[500]],[0,213,[502]],[0,213,[512]],[0,213,[513]],[0,213,[516]],[0,213,[517]],[0,213,[537]],[0,213,[539]],[0,213,[552]],[0,213,[554]],[0,213,[569]],[0,213,[571]],[0,213,[584]],[0,213,[586]],[0,213,[600]],[0,213,[602]],[0,213,[617]],[0,213,[619]],[0,213,[632]],[0,213,[634]],[0,213,[649]],[0,213,[651]],[0,213,[656]],[0,213,[658]],[0,213,[688]],[0,213,[689]],[0,213,[692]],[0,213,[693]],[0,213,[704]],[0,213,[705]],[0,213,[733]],[0,213,[785]],[0,213,[875]],[0,214,[252]],[0,214,[254]],[0,214,[258]],[0,214,[262]],[0,214,[264]],[0,214,[268]],[0,214,[272]],[0,214,[274]],[0,214,[276]],[0,214,[280]],[0,214,[282]],[0,214,[286]],[0,214,[290]],[0,214,[296]],[0,214,[322]],[0,214,[325]],[0,214,[326]],[0,214,[328]],[0,214,[329]],[0,214,[332]],[0,214,[336]],[0,214,[340]],[0,214,[346]],[0,214,[350]],[0,214,[384]],[0,214,[388]],[0,214,[394]],[0,214,[398]],[0,214,[402]],[0,214,[406]],[0,214,[408]],[0,214,[412]],[0,214,[427]],[0,214,[448]],[0,214,[452]],[0,214,[458]],[0,214,[462]],[0,214,[466]],[0,214,[470]],[0,214,[472]],[0,214,[476]],[0,214,[480]],[0,214,[481]],[0,214,[484]],[0,214,[485]],[0,214,[496]],[0,214,[498]],[0,214,[500]],[0,214,[502]],[0,214,[512]],[0,214,[513]],[0,214,[516]],[0,214,[517]],[0,214,[536]],[0,214,[538]],[0,214,[553]],[0,214,[555]],[0,214,[568]],[0,214,[570]],[0,214,[585]],[0,214,[587]],[0,214,[601]],[0,214,[603]],[0,214,[616]],[0,214,[618]],[0,214,[633]],[0,214,[635]],[0,214,[648]],[0,214,[650]],[0,214,[656]],[0,214,[658]],[0,214,[688]],[0,214,[689]],[0,214,[692]],[0,214,[693]],[0,214,[704]],[0,214,[705]],[0,214,[733]],[0,214,[773]],[0,214,[875]],[0,215,[247]],[0,215,[252]],[0,215,[253]],[0,215,[256]],[0,215,[260]],[0,215,[261]],[0,215,[265]],[0,215,[266]],[0,215,[270]],[0,215,[272]],[0,215,[274]],[0,215,[276]],[0,215,[280]],[0,215,[282]],[0,215,[286]],[0,215,[290]],[0,215,[296]],[0,215,[306]],[0,215,[307]],[0,215,[310]],[0,215,[311]],[0,215,[312]],[0,215,[315]],[0,215,[316]],[0,215,[319]],[0,215,[320]],[0,215,[324]],[0,215,[325]],[0,215,[329]],[0,215,[330]],[0,215,[334]],[0,215,[336]],[0,215,[340]],[0,215,[346]],[0,215,[350]],[0,215,[386]],[0,215,[390]],[0,215,[392]],[0,215,[396]],[0,215,[402]],[0,215,[406]],[0,215,[408]],[0,215,[412]],[0,215,[424]],[0,215,[450]],[0,215,[454]],[0,215,[456]],[0,215,[460]],[0,215,[466]],[0,215,[470]],[0,215,[472]],[0,215,[476]],[0,215,[480]],[0,215,[481]],[0,215,[484]],[0,215,[485]],[0,215,[496]],[0,215,[498]],[0,215,[501]],[0,215,[503]],[0,215,[507]],[0,215,[510]],[0,215,[514]],[0,215,[515]],[0,215,[518]],[0,215,[519]],[0,215,[536]],[0,215,[538]],[0,215,[552]],[0,215,[554]],[0,215,[569]],[0,215,[571]],[0,215,[585]],[0,215,[587]],[0,215,[600]],[0,215,[602]],[0,215,[616]],[0,215,[618]],[0,215,[633]],[0,215,[635]],[0,215,[649]],[0,215,[651]],[0,215,[656]],[0,215,[658]],[0,215,[690]],[0,215,[691]],[0,215,[694]],[0,215,[695]],[0,215,[704]],[0,215,[705]],[0,215,[733]],[0,215,[773]],[0,215,[785]],[0,215,[875]],[0,215,[928]],[0,216,[247]],[0,216,[250]],[0,216,[253]],[0,216,[261]],[0,216,[263]],[0,216,[265]],[0,216,[267]],[0,216,[277]],[0,216,[279]],[0,216,[281]],[0,216,[283]],[0,216,[306]],[0,216,[312]],[0,216,[327]],[0,216,[331]],[0,216,[341]],[0,216,[343]],[0,216,[345]],[0,216,[347]],[0,216,[389]],[0,216,[391]],[0,216,[393]],[0,216,[395]],[0,216,[405]],[0,216,[407]],[0,216,[409]],[0,216,[411]],[0,216,[438]],[0,216,[453]],[0,216,[455]],[0,216,[457]],[0,216,[459]],[0,216,[469]],[0,216,[471]],[0,216,[473]],[0,216,[475]],[0,216,[482]],[0,216,[483]],[0,216,[486]],[0,216,[487]],[0,216,[498]],[0,216,[499]],[0,216,[502]],[0,216,[503]],[0,216,[512]],[0,216,[514]],[0,216,[516]],[0,216,[518]],[0,216,[523]],[0,216,[541]],[0,216,[543]],[0,216,[557]],[0,216,[559]],[0,216,[573]],[0,216,[575]],[0,216,[589]],[0,216,[591]],[0,216,[605]],[0,216,[607]],[0,216,[621]],[0,216,[623]],[0,216,[637]],[0,216,[639]],[0,216,[653]],[0,216,[655]],[0,216,[676]],[0,216,[678]],[0,216,[692]],[0,216,[694]],[0,216,[704]],[0,216,[706]],[0,216,[772]],[0,216,[788]],[0,217,[250]],[0,217,[252]],[0,217,[263]],[0,217,[267]],[0,217,[277]],[0,217,[279]],[0,217,[281]],[0,217,[283]],[0,217,[290]],[0,217,[293]],[0,217,[296]],[0,217,[297]],[0,217,[306]],[0,217,[312]],[0,217,[321]],[0,217,[323]],[0,217,[325]],[0,217,[329]],[0,217,[333]],[0,217,[335]],[0,217,[337]],[0,217,[339]],[0,217,[349]],[0,217,[351]],[0,217,[389]],[0,217,[391]],[0,217,[393]],[0,217,[395]],[0,217,[405]],[0,217,[407]],[0,217,[409]],[0,217,[411]],[0,217,[437]],[0,217,[449]],[0,217,[451]],[0,217,[461]],[0,217,[463]],[0,217,[465]],[0,217,[467]],[0,217,[477]],[0,217,[479]],[0,217,[482]],[0,217,[483]],[0,217,[486]],[0,217,[487]],[0,217,[496]],[0,217,[497]],[0,217,[500]],[0,217,[501]],[0,217,[512]],[0,217,[516]],[0,217,[517]],[0,217,[518]],[0,217,[519]],[0,217,[523]],[0,217,[541]],[0,217,[543]],[0,217,[556]],[0,217,[558]],[0,217,[573]],[0,217,[575]],[0,217,[588]],[0,217,[590]],[0,217,[605]],[0,217,[607]],[0,217,[620]],[0,217,[622]],[0,217,[637]],[0,217,[639]],[0,217,[652]],[0,217,[654]],[0,217,[676]],[0,217,[678]],[0,217,[688]],[0,217,[690]],[0,217,[704]],[0,217,[706]],[0,217,[772]],[0,217,[787]],[0,217,[817]],[0,217,[921]],[0,217,[930]],[0,218,[247]],[0,218,[250]],[0,218,[253]],[0,218,[257]],[0,218,[259]],[0,218,[261]],[0,218,[265]],[0,218,[269]],[0,218,[271]],[0,218,[273]],[0,218,[275]],[0,218,[285]],[0,218,[287]],[0,218,[290]],[0,218,[292]],[0,218,[294]],[0,218,[295]],[0,218,[296]],[0,218,[299]],[0,218,[300]],[0,218,[302]],[0,218,[306]],[0,218,[312]],[0,218,[327]],[0,218,[331]],[0,218,[341]],[0,218,[343]],[0,218,[345]],[0,218,[347]],[0,218,[385]],[0,218,[387]],[0,218,[397]],[0,218,[399]],[0,218,[401]],[0,218,[403]],[0,218,[413]],[0,218,[415]],[0,218,[435]],[0,218,[453]],[0,218,[455]],[0,218,[457]],[0,218,[459]],[0,218,[469]],[0,218,[471]],[0,218,[473]],[0,218,[475]],[0,218,[482]],[0,218,[483]],[0,218,[486]],[0,218,[487]],[0,218,[496]],[0,218,[497]],[0,218,[500]],[0,218,[501]],[0,218,[512]],[0,218,[517]],[0,218,[522]],[0,218,[527]],[0,218,[540]],[0,218,[542]],[0,218,[557]],[0,218,[559]],[0,218,[572]],[0,218,[574]],[0,218,[589]],[0,218,[591]],[0,218,[604]],[0,218,[606]],[0,218,[621]],[0,218,[623]],[0,218,[636]],[0,218,[638]],[0,218,[653]],[0,218,[655]],[0,218,[676]],[0,218,[678]],[0,218,[688]],[0,218,[690]],[0,218,[704]],[0,218,[706]],[0,218,[771]],[0,218,[788]],[0,218,[801]],[0,219,[250]],[0,219,[252]],[0,219,[257]],[0,219,[259]],[0,219,[269]],[0,219,[271]],[0,219,[273]],[0,219,[275]],[0,219,[285]],[0,219,[287]],[0,219,[306]],[0,219,[312]],[0,219,[321]],[0,219,[323]],[0,219,[325]],[0,219,[329]],[0,219,[333]],[0,219,[335]],[0,219,[337]],[0,219,[339]],[0,219,[349]],[0,219,[351]],[0,219,[385]],[0,219,[387]],[0,219,[397]],[0,219,[399]],[0,219,[401]],[0,219,[403]],[0,219,[413]],[0,219,[415]],[0,219,[432]],[0,219,[449]],[0,219,[451]],[0,219,[461]],[0,219,[463]],[0,219,[465]],[0,219,[467]],[0,219,[477]],[0,219,[479]],[0,219,[482]],[0,219,[483]],[0,219,[486]],[0,219,[487]],[0,219,[498]],[0,219,[499]],[0,219,[502]],[0,219,[503]],[0,219,[512]],[0,219,[514]],[0,219,[516]],[0,219,[518]],[0,219,[523]],[0,219,[540]],[0,219,[542]],[0,219,[556]],[0,219,[558]],[0,219,[572]],[0,219,[574]],[0,219,[588]],[0,219,[590]],[0,219,[604]],[0,219,[606]],[0,219,[620]],[0,219,[622]],[0,219,[636]],[0,219,[638]],[0,219,[652]],[0,219,[654]],[0,219,[676]],[0,219,[678]],[0,219,[692]],[0,219,[694]],[0,219,[704]],[0,219,[706]],[0,219,[771]],[0,219,[787]],[0,219,[801]],[0,219,[817]],[0,220,[250]],[0,220,[252]],[0,220,[254]],[0,220,[261]],[0,220,[263]],[0,220,[265]],[0,220,[267]],[0,220,[277]],[0,220,[279]],[0,220,[281]],[0,220,[283]],[0,220,[290]],[0,220,[292]],[0,220,[296]],[0,220,[302]],[0,220,[306]],[0,220,[312]],[0,220,[327]],[0,220,[331]],[0,220,[341]],[0,220,[343]],[0,220,[345]],[0,220,[347]],[0,220,[385]],[0,220,[387]],[0,220,[397]],[0,220,[399]],[0,220,[401]],[0,220,[403]],[0,220,[413]],[0,220,[415]],[0,220,[446]],[0,220,[449]],[0,220,[451]],[0,220,[461]],[0,220,[463]],[0,220,[465]],[0,220,[467]],[0,220,[477]],[0,220,[479]],[0,220,[480]],[0,220,[481]],[0,220,[484]],[0,220,[485]],[0,220,[498]],[0,220,[499]],[0,220,[502]],[0,220,[503]],[0,220,[512]],[0,220,[518]],[0,220,[519]],[0,220,[522]],[0,220,[523]],[0,220,[527]],[0,220,[541]],[0,220,[543]],[0,220,[557]],[0,220,[559]],[0,220,[572]],[0,220,[574]],[0,220,[588]],[0,220,[590]],[0,220,[605]],[0,220,[607]],[0,220,[621]],[0,220,[623]],[0,220,[636]],[0,220,[638]],[0,220,[652]],[0,220,[654]],[0,220,[672]],[0,220,[674]],[0,220,[692]],[0,220,[694]],[0,220,[704]],[0,220,[706]],[0,220,[772]],[0,220,[788]],[0,220,[801]],[0,220,[817]],[0,220,[889]],[0,220,[930]],[0,221,[247]],[0,221,[250]],[0,221,[253]],[0,221,[254]],[0,221,[263]],[0,221,[267]],[0,221,[277]],[0,221,[279]],[0,221,[281]],[0,221,[283]],[0,221,[306]],[0,221,[312]],[0,221,[321]],[0,221,[323]],[0,221,[325]],[0,221,[329]],[0,221,[333]],[0,221,[335]],[0,221,[337]],[0,221,[339]],[0,221,[349]],[0,221,[351]],[0,221,[385]],[0,221,[387]],[0,221,[397]],[0,221,[399]],[0,221,[401]],[0,221,[403]],[0,221,[413]],[0,221,[415]],[0,221,[445]],[0,221,[453]],[0,221,[455]],[0,221,[457]],[0,221,[459]],[0,221,[469]],[0,221,[471]],[0,221,[473]],[0,221,[475]],[0,221,[480]],[0,221,[481]],[0,221,[484]],[0,221,[485]],[0,221,[496]],[0,221,[497]],[0,221,[500]],[0,221,[501]],[0,221,[512]],[0,221,[514]],[0,221,[516]],[0,221,[518]],[0,221,[523]],[0,221,[541]],[0,221,[543]],[0,221,[556]],[0,221,[558]],[0,221,[572]],[0,221,[574]],[0,221,[589]],[0,221,[591]],[0,221,[605]],[0,221,[607]],[0,221,[620]],[0,221,[622]],[0,221,[636]],[0,221,[638]],[0,221,[653]],[0,221,[655]],[0,221,[672]],[0,221,[674]],[0,221,[688]],[0,221,[690]],[0,221,[704]],[0,221,[706]],[0,221,[772]],[0,221,[787]],[0,221,[801]],[0,221,[889]],[0,222,[250]],[0,222,[252]],[0,222,[254]],[0,222,[257]],[0,222,[259]],[0,222,[261]],[0,222,[265]],[0,222,[269]],[0,222,[271]],[0,222,[273]],[0,222,[275]],[0,222,[285]],[0,222,[287]],[0,222,[306]],[0,222,[312]],[0,222,[327]],[0,222,[331]],[0,222,[341]],[0,222,[343]],[0,222,[345]],[0,222,[347]],[0,222,[389]],[0,222,[391]],[0,222,[393]],[0,222,[395]],[0,222,[405]],[0,222,[407]],[0,222,[409]],[0,222,[411]],[0,222,[443]],[0,222,[449]],[0,222,[451]],[0,222,[461]],[0,222,[463]],[0,222,[465]],[0,222,[467]],[0,222,[477]],[0,222,[479]],[0,222,[480]],[0,222,[481]],[0,222,[484]],[0,222,[485]],[0,222,[496]],[0,222,[497]],[0,222,[500]],[0,222,[501]],[0,222,[512]],[0,222,[514]],[0,222,[516]],[0,222,[518]],[0,222,[523]],[0,222,[540]],[0,222,[542]],[0,222,[557]],[0,222,[559]],[0,222,[573]],[0,222,[575]],[0,222,[588]],[0,222,[590]],[0,222,[604]],[0,222,[606]],[0,222,[621]],[0,222,[623]],[0,222,[637]],[0,222,[639]],[0,222,[652]],[0,222,[654]],[0,222,[672]],[0,222,[674]],[0,222,[688]],[0,222,[690]],[0,222,[704]],[0,222,[706]],[0,222,[771]],[0,222,[788]],[0,222,[817]],[0,222,[889]],[0,223,[247]],[0,223,[250]],[0,223,[253]],[0,223,[254]],[0,223,[257]],[0,223,[259]],[0,223,[269]],[0,223,[271]],[0,223,[273]],[0,223,[275]],[0,223,[285]],[0,223,[287]],[0,223,[290]],[0,223,[293]],[0,223,[294]],[0,223,[295]],[0,223,[296]],[0,223,[297]],[0,223,[299]],[0,223,[300]],[0,223,[306]],[0,223,[312]],[0,223,[321]],[0,223,[323]],[0,223,[325]],[0,223,[329]],[0,223,[333]],[0,223,[335]],[0,223,[337]],[0,223,[339]],[0,223,[349]],[0,223,[351]],[0,223,[389]],[0,223,[391]],[0,223,[393]],[0,223,[395]],[0,223,[405]],[0,223,[407]],[0,223,[409]],[0,223,[411]],[0,223,[440]],[0,223,[453]],[0,223,[455]],[0,223,[457]],[0,223,[459]],[0,223,[469]],[0,223,[471]],[0,223,[473]],[0,223,[475]],[0,223,[480]],[0,223,[481]],[0,223,[484]],[0,223,[485]],[0,223,[498]],[0,223,[499]],[0,223,[502]],[0,223,[503]],[0,223,[512]],[0,223,[516]],[0,223,[540]],[0,223,[542]],[0,223,[556]],[0,223,[558]],[0,223,[573]],[0,223,[575]],[0,223,[589]],[0,223,[591]],[0,223,[604]],[0,223,[606]],[0,223,[620]],[0,223,[622]],[0,223,[637]],[0,223,[639]],[0,223,[653]],[0,223,[655]],[0,223,[672]],[0,223,[674]],[0,223,[692]],[0,223,[694]],[0,223,[704]],[0,223,[706]],[0,223,[771]],[0,223,[787]],[0,223,[889]],[0,223,[921]],[0,224,[240]],[0,224,[245]],[0,224,[247]],[0,224,[248]],[0,224,[250]],[0,224,[252]],[0,224,[253]],[0,224,[254]],[0,224,[259]],[0,224,[261]],[0,224,[263]],[0,224,[265]],[0,224,[267]],[0,224,[271]],[0,224,[274]],[0,224,[280]],[0,224,[290]],[0,224,[294]],[0,224,[296]],[0,224,[300]],[0,224,[310]],[0,224,[316]],[0,224,[325]],[0,224,[329]],[0,224,[340]],[0,224,[342]],[0,224,[348]],[0,224,[350]],[0,224,[354]],[0,224,[358]],[0,224,[360]],[0,224,[364]],[0,224,[370]],[0,224,[374]],[0,224,[376]],[0,224,[380]],[0,224,[386]],[0,224,[390]],[0,224,[392]],[0,224,[396]],[0,224,[418]],[0,224,[422]],[0,224,[424]],[0,224,[428]],[0,224,[434]],[0,224,[438]],[0,224,[440]],[0,224,[444]],[0,224,[454]],[0,224,[469]],[0,224,[471]],[0,224,[473]],[0,224,[475]],[0,224,[489]],[0,224,[491]],[0,224,[505]],[0,224,[507]],[0,224,[521]],[0,224,[523]],[0,224,[528]],[0,224,[530]],[0,224,[532]],[0,224,[534]],[0,224,[546]],[0,224,[547]],[0,224,[550]],[0,224,[551]],[0,224,[569]],[0,224,[571]],[0,224,[589]],[0,224,[591]],[0,224,[628]],[0,224,[630]],[0,224,[665]],[0,224,[667]],[0,224,[681]],[0,224,[683]],[0,224,[697]],[0,224,[699]],[0,224,[732]],[0,224,[849]],[0,225,[240]],[0,225,[245]],[0,225,[248]],[0,225,[250]],[0,225,[252]],[0,225,[257]],[0,225,[261]],[0,225,[265]],[0,225,[269]],[0,225,[274]],[0,225,[275]],[0,225,[277]],[0,225,[278]],[0,225,[279]],[0,225,[280]],[0,225,[281]],[0,225,[283]],[0,225,[284]],[0,225,[287]],[0,225,[288]],[0,225,[292]],[0,225,[298]],[0,225,[302]],[0,225,[310]],[0,225,[316]],[0,225,[325]],[0,225,[329]],[0,225,[340]],[0,225,[342]],[0,225,[348]],[0,225,[350]],[0,225,[352]],[0,225,[356]],[0,225,[362]],[0,225,[366]],[0,225,[370]],[0,225,[374]],[0,225,[376]],[0,225,[380]],[0,225,[384]],[0,225,[388]],[0,225,[394]],[0,225,[398]],[0,225,[416]],[0,225,[420]],[0,225,[426]],[0,225,[430]],[0,225,[434]],[0,225,[438]],[0,225,[440]],[0,225,[444]],[0,225,[453]],[0,225,[469]],[0,225,[471]],[0,225,[473]],[0,225,[475]],[0,225,[489]],[0,225,[491]],[0,225,[505]],[0,225,[507]],[0,225,[520]],[0,225,[522]],[0,225,[528]],[0,225,[533]],[0,225,[535]],[0,225,[539]],[0,225,[542]],[0,225,[543]],[0,225,[544]],[0,225,[545]],[0,225,[548]],[0,225,[549]],[0,225,[568]],[0,225,[570]],[0,225,[589]],[0,225,[591]],[0,225,[628]],[0,225,[630]],[0,225,[665]],[0,225,[667]],[0,225,[680]],[0,225,[682]],[0,225,[696]],[0,225,[698]],[0,225,[732]],[0,225,[757]],[0,225,[849]],[0,225,[931]],[0,226,[240]],[0,226,[245]],[0,226,[248]],[0,226,[250]],[0,226,[254]],[0,226,[259]],[0,226,[263]],[0,226,[267]],[0,226,[271]],[0,226,[274]],[0,226,[275]],[0,226,[276]],[0,226,[280]],[0,226,[286]],[0,226,[287]],[0,226,[290]],[0,226,[294]],[0,226,[296]],[0,226,[300]],[0,226,[304]],[0,226,[306]],[0,226,[308]],[0,226,[312]],[0,226,[314]],[0,226,[318]],[0,226,[325]],[0,226,[329]],[0,226,[336]],[0,226,[338]],[0,226,[344]],[0,226,[346]],[0,226,[352]],[0,226,[356]],[0,226,[362]],[0,226,[366]],[0,226,[370]],[0,226,[374]],[0,226,[376]],[0,226,[380]],[0,226,[386]],[0,226,[390]],[0,226,[392]],[0,226,[396]],[0,226,[418]],[0,226,[422]],[0,226,[424]],[0,226,[428]],[0,226,[432]],[0,226,[436]],[0,226,[442]],[0,226,[446]],[0,226,[451]],[0,226,[465]],[0,226,[467]],[0,226,[477]],[0,226,[479]],[0,226,[489]],[0,226,[491]],[0,226,[504]],[0,226,[506]],[0,226,[521]],[0,226,[523]],[0,226,[528]],[0,226,[532]],[0,226,[533]],[0,226,[534]],[0,226,[538]],[0,226,[542]],[0,226,[544]],[0,226,[545]],[0,226,[548]],[0,226,[549]],[0,226,[569]],[0,226,[571]],[0,226,[588]],[0,226,[590]],[0,226,[628]],[0,226,[630]],[0,226,[664]],[0,226,[666]],[0,226,[681]],[0,226,[683]],[0,226,[696]],[0,226,[698]],[0,226,[732]],[0,226,[745]],[0,226,[849]],[0,226,[922]],[0,226,[929]],[0,227,[240]],[0,227,[245]],[0,227,[247]],[0,227,[248]],[0,227,[250]],[0,227,[253]],[0,227,[257]],[0,227,[269]],[0,227,[274]],[0,227,[280]],[0,227,[288]],[0,227,[292]],[0,227,[298]],[0,227,[302]],[0,227,[304]],[0,227,[306]],[0,227,[308]],[0,227,[312]],[0,227,[314]],[0,227,[318]],[0,227,[325]],[0,227,[329]],[0,227,[336]],[0,227,[338]],[0,227,[344]],[0,227,[346]],[0,227,[354]],[0,227,[358]],[0,227,[360]],[0,227,[364]],[0,227,[370]],[0,227,[374]],[0,227,[376]],[0,227,[380]],[0,227,[384]],[0,227,[388]],[0,227,[394]],[0,227,[398]],[0,227,[416]],[0,227,[420]],[0,227,[426]],[0,227,[430]],[0,227,[432]],[0,227,[436]],[0,227,[442]],[0,227,[446]],[0,227,[448]],[0,227,[465]],[0,227,[467]],[0,227,[477]],[0,227,[479]],[0,227,[489]],[0,227,[491]],[0,227,[504]],[0,227,[506]],[0,227,[520]],[0,227,[522]],[0,227,[528]],[0,227,[530]],[0,227,[532]],[0,227,[534]],[0,227,[546]],[0,227,[547]],[0,227,[550]],[0,227,[551]],[0,227,[568]],[0,227,[570]],[0,227,[588]],[0,227,[590]],[0,227,[628]],[0,227,[630]],[0,227,[664]],[0,227,[666]],[0,227,[680]],[0,227,[682]],[0,227,[697]],[0,227,[699]],[0,227,[732]],[0,227,[745]],[0,227,[757]],[0,227,[849]],[0,228,[240]],[0,228,[245]],[0,228,[248]],[0,228,[250]],[0,228,[259]],[0,228,[261]],[0,228,[263]],[0,228,[265]],[0,228,[267]],[0,228,[271]],[0,228,[276]],[0,228,[286]],[0,228,[290]],[0,228,[294]],[0,228,[296]],[0,228,[300]],[0,228,[310]],[0,228,[316]],[0,228,[325]],[0,228,[329]],[0,228,[340]],[0,228,[342]],[0,228,[348]],[0,228,[350]],[0,228,[354]],[0,228,[358]],[0,228,[360]],[0,228,[364]],[0,228,[368]],[0,228,[372]],[0,228,[378]],[0,228,[382]],[0,228,[384]],[0,228,[388]],[0,228,[394]],[0,228,[398]],[0,228,[416]],[0,228,[420]],[0,228,[426]],[0,228,[430]],[0,228,[432]],[0,228,[436]],[0,228,[442]],[0,228,[446]],[0,228,[462]],[0,228,[465]],[0,228,[467]],[0,228,[477]],[0,228,[479]],[0,228,[488]],[0,228,[490]],[0,228,[505]],[0,228,[507]],[0,228,[521]],[0,228,[523]],[0,228,[528]],[0,228,[534]],[0,228,[535]],[0,228,[538]],[0,228,[543]],[0,228,[546]],[0,228,[547]],[0,228,[550]],[0,228,[551]],[0,228,[568]],[0,228,[570]],[0,228,[588]],[0,228,[590]],[0,228,[624]],[0,228,[626]],[0,228,[664]],[0,228,[666]],[0,228,[680]],[0,228,[682]],[0,228,[697]],[0,228,[699]],[0,228,[731]],[0,228,[847]],[0,228,[929]],[0,229,[240]],[0,229,[245]],[0,229,[247]],[0,229,[248]],[0,229,[250]],[0,229,[253]],[0,229,[254]],[0,229,[257]],[0,229,[261]],[0,229,[265]],[0,229,[269]],[0,229,[274]],[0,229,[280]],[0,229,[288]],[0,229,[292]],[0,229,[298]],[0,229,[302]],[0,229,[310]],[0,229,[316]],[0,229,[325]],[0,229,[329]],[0,229,[340]],[0,229,[342]],[0,229,[348]],[0,229,[350]],[0,229,[352]],[0,229,[356]],[0,229,[362]],[0,229,[366]],[0,229,[368]],[0,229,[372]],[0,229,[378]],[0,229,[382]],[0,229,[386]],[0,229,[390]],[0,229,[392]],[0,229,[396]],[0,229,[418]],[0,229,[422]],[0,229,[424]],[0,229,[428]],[0,229,[432]],[0,229,[436]],[0,229,[442]],[0,229,[446]],[0,229,[461]],[0,229,[465]],[0,229,[467]],[0,229,[477]],[0,229,[479]],[0,229,[488]],[0,229,[490]],[0,229,[505]],[0,229,[507]],[0,229,[520]],[0,229,[522]],[0,229,[528]],[0,229,[530]],[0,229,[532]],[0,229,[534]],[0,229,[544]],[0,229,[545]],[0,229,[548]],[0,229,[549]],[0,229,[569]],[0,229,[571]],[0,229,[588]],[0,229,[590]],[0,229,[624]],[0,229,[626]],[0,229,[664]],[0,229,[666]],[0,229,[681]],[0,229,[683]],[0,229,[696]],[0,229,[698]],[0,229,[731]],[0,229,[757]],[0,229,[847]],[0,230,[240]],[0,230,[245]],[0,230,[247]],[0,230,[248]],[0,230,[250]],[0,230,[252]],[0,230,[253]],[0,230,[259]],[0,230,[263]],[0,230,[267]],[0,230,[271]],[0,230,[274]],[0,230,[280]],[0,230,[290]],[0,230,[294]],[0,230,[296]],[0,230,[300]],[0,230,[304]],[0,230,[306]],[0,230,[308]],[0,230,[312]],[0,230,[314]],[0,230,[318]],[0,230,[325]],[0,230,[329]],[0,230,[336]],[0,230,[338]],[0,230,[344]],[0,230,[346]],[0,230,[352]],[0,230,[356]],[0,230,[362]],[0,230,[366]],[0,230,[368]],[0,230,[372]],[0,230,[378]],[0,230,[382]],[0,230,[384]],[0,230,[388]],[0,230,[394]],[0,230,[398]],[0,230,[416]],[0,230,[420]],[0,230,[426]],[0,230,[430]],[0,230,[434]],[0,230,[438]],[0,230,[440]],[0,230,[444]],[0,230,[459]],[0,230,[469]],[0,230,[471]],[0,230,[473]],[0,230,[475]],[0,230,[488]],[0,230,[490]],[0,230,[504]],[0,230,[506]],[0,230,[521]],[0,230,[523]],[0,230,[528]],[0,230,[530]],[0,230,[532]],[0,230,[534]],[0,230,[544]],[0,230,[545]],[0,230,[548]],[0,230,[549]],[0,230,[568]],[0,230,[570]],[0,230,[589]],[0,230,[591]],[0,230,[624]],[0,230,[626]],[0,230,[665]],[0,230,[667]],[0,230,[680]],[0,230,[682]],[0,230,[696]],[0,230,[698]],[0,230,[731]],[0,230,[745]],[0,230,[847]],[0,231,[240]],[0,231,[245]],[0,231,[248]],[0,231,[250]],[0,231,[252]],[0,231,[254]],[0,231,[257]],[0,231,[269]],[0,231,[277]],[0,231,[278]],[0,231,[279]],[0,231,[281]],[0,231,[283]],[0,231,[284]],[0,231,[288]],[0,231,[292]],[0,231,[298]],[0,231,[302]],[0,231,[304]],[0,231,[306]],[0,231,[308]],[0,231,[312]],[0,231,[314]],[0,231,[318]],[0,231,[325]],[0,231,[329]],[0,231,[336]],[0,231,[338]],[0,231,[344]],[0,231,[346]],[0,231,[354]],[0,231,[358]],[0,231,[360]],[0,231,[364]],[0,231,[368]],[0,231,[372]],[0,231,[378]],[0,231,[382]],[0,231,[386]],[0,231,[390]],[0,231,[392]],[0,231,[396]],[0,231,[418]],[0,231,[422]],[0,231,[424]],[0,231,[428]],[0,231,[434]],[0,231,[438]],[0,231,[440]],[0,231,[444]],[0,231,[456]],[0,231,[469]],[0,231,[471]],[0,231,[473]],[0,231,[475]],[0,231,[488]],[0,231,[490]],[0,231,[504]],[0,231,[506]],[0,231,[520]],[0,231,[522]],[0,231,[528]],[0,231,[532]],[0,231,[539]],[0,231,[546]],[0,231,[547]],[0,231,[550]],[0,231,[551]],[0,231,[569]],[0,231,[571]],[0,231,[589]],[0,231,[591]],[0,231,[624]],[0,231,[626]],[0,231,[665]],[0,231,[667]],[0,231,[681]],[0,231,[683]],[0,231,[697]],[0,231,[699]],[0,231,[731]],[0,231,[745]],[0,231,[757]],[0,231,[847]],[0,231,[922]],[0,231,[931]],[0,232,[242]],[0,232,[247]],[0,232,[249]],[0,232,[250]],[0,232,[252]],[0,232,[253]],[0,232,[261]],[0,232,[265]],[0,232,[275]],[0,232,[279]],[0,232,[283]],[0,232,[287]],[0,232,[290]],[0,232,[292]],[0,232,[294]],[0,232,[296]],[0,232,[300]],[0,232,[302]],[0,232,[306]],[0,232,[307]],[0,232,[311]],[0,232,[312]],[0,232,[315]],[0,232,[319]],[0,232,[324]],[0,232,[325]],[0,232,[326]],[0,232,[329]],[0,232,[332]],[0,232,[334]],[0,232,[357]],[0,232,[359]],[0,232,[361]],[0,232,[363]],[0,232,[371]],[0,232,[375]],[0,232,[379]],[0,232,[383]],[0,232,[402]],[0,232,[406]],[0,232,[408]],[0,232,[412]],[0,232,[421]],[0,232,[423]],[0,232,[425]],[0,232,[427]],[0,232,[434]],[0,232,[438]],[0,232,[440]],[0,232,[444]],[0,232,[453]],[0,232,[455]],[0,232,[457]],[0,232,[459]],[0,232,[470]],[0,232,[564]],[0,232,[566]],[0,232,[592]],[0,232,[594]],[0,232,[596]],[0,232,[598]],[0,232,[610]],[0,232,[611]],[0,232,[614]],[0,232,[615]],[0,232,[633]],[0,232,[635]],[0,232,[653]],[0,232,[655]],[0,232,[665]],[0,232,[667]],[0,232,[685]],[0,232,[687]],[0,232,[701]],[0,232,[703]],[0,232,[716]],[0,232,[728]],[0,232,[754]],[0,232,[888]],[0,233,[242]],[0,233,[247]],[0,233,[249]],[0,233,[250]],[0,233,[253]],[0,233,[254]],[0,233,[258]],[0,233,[259]],[0,233,[260]],[0,233,[261]],[0,233,[262]],[0,233,[263]],[0,233,[264]],[0,233,[265]],[0,233,[267]],[0,233,[268]],[0,233,[270]],[0,233,[271]],[0,233,[273]],[0,233,[277]],[0,233,[281]],[0,233,[285]],[0,233,[288]],[0,233,[298]],[0,233,[306]],[0,233,[307]],[0,233,[311]],[0,233,[312]],[0,233,[315]],[0,233,[319]],[0,233,[324]],[0,233,[325]],[0,233,[326]],[0,233,[329]],[0,233,[332]],[0,233,[334]],[0,233,[353]],[0,233,[355]],[0,233,[365]],[0,233,[367]],[0,233,[371]],[0,233,[375]],[0,233,[379]],[0,233,[383]],[0,233,[400]],[0,233,[404]],[0,233,[410]],[0,233,[414]],[0,233,[417]],[0,233,[419]],[0,233,[429]],[0,233,[431]],[0,233,[434]],[0,233,[438]],[0,233,[440]],[0,233,[444]],[0,233,[453]],[0,233,[455]],[0,233,[457]],[0,233,[459]],[0,233,[468]],[0,233,[564]],[0,233,[566]],[0,233,[592]],[0,233,[594]],[0,233,[596]],[0,233,[602]],[0,233,[603]],[0,233,[606]],[0,233,[607]],[0,233,[608]],[0,233,[609]],[0,233,[612]],[0,233,[613]],[0,233,[632]],[0,233,[634]],[0,233,[653]],[0,233,[655]],[0,233,[665]],[0,233,[667]],[0,233,[684]],[0,233,[686]],[0,233,[700]],[0,233,[702]],[0,233,[716]],[0,233,[728]],[0,233,[753]],[0,233,[845]],[0,233,[888]],[0,233,[949]],[0,234,[242]],[0,234,[249]],[0,234,[250]],[0,234,[259]],[0,234,[261]],[0,234,[262]],[0,234,[263]],[0,234,[265]],[0,234,[267]],[0,234,[268]],[0,234,[271]],[0,234,[275]],[0,234,[279]],[0,234,[283]],[0,234,[287]],[0,234,[290]],[0,234,[292]],[0,234,[294]],[0,234,[296]],[0,234,[300]],[0,234,[302]],[0,234,[305]],[0,234,[306]],[0,234,[309]],[0,234,[312]],[0,234,[313]],[0,234,[317]],[0,234,[320]],[0,234,[322]],[0,234,[325]],[0,234,[328]],[0,234,[329]],[0,234,[330]],[0,234,[353]],[0,234,[355]],[0,234,[365]],[0,234,[367]],[0,234,[371]],[0,234,[375]],[0,234,[379]],[0,234,[383]],[0,234,[402]],[0,234,[406]],[0,234,[408]],[0,234,[412]],[0,234,[421]],[0,234,[423]],[0,234,[425]],[0,234,[427]],[0,234,[432]],[0,234,[436]],[0,234,[442]],[0,234,[446]],[0,234,[449]],[0,234,[451]],[0,234,[461]],[0,234,[463]],[0,234,[466]],[0,234,[564]],[0,234,[566]],[0,234,[592]],[0,234,[599]],[0,234,[603]],[0,234,[606]],[0,234,[607]],[0,234,[608]],[0,234,[609]],[0,234,[612]],[0,234,[613]],[0,234,[633]],[0,234,[635]],[0,234,[652]],[0,234,[654]],[0,234,[664]],[0,234,[666]],[0,234,[685]],[0,234,[687]],[0,234,[700]],[0,234,[702]],[0,234,[716]],[0,234,[728]],[0,234,[741]],[0,234,[754]],[0,234,[845]],[0,234,[873]],[0,234,[887]],[0,234,[950]],[0,234,[953]],[0,235,[242]],[0,235,[249]],[0,235,[250]],[0,235,[252]],[0,235,[254]],[0,235,[261]],[0,235,[265]],[0,235,[273]],[0,235,[277]],[0,235,[281]],[0,235,[285]],[0,235,[288]],[0,235,[298]],[0,235,[305]],[0,235,[306]],[0,235,[309]],[0,235,[312]],[0,235,[313]],[0,235,[317]],[0,235,[320]],[0,235,[322]],[0,235,[325]],[0,235,[328]],[0,235,[329]],[0,235,[330]],[0,235,[357]],[0,235,[359]],[0,235,[361]],[0,235,[363]],[0,235,[371]],[0,235,[375]],[0,235,[379]],[0,235,[383]],[0,235,[400]],[0,235,[404]],[0,235,[410]],[0,235,[414]],[0,235,[417]],[0,235,[419]],[0,235,[429]],[0,235,[431]],[0,235,[432]],[0,235,[436]],[0,235,[442]],[0,235,[446]],[0,235,[449]],[0,235,[451]],[0,235,[461]],[0,235,[463]],[0,235,[464]],[0,235,[564]],[0,235,[566]],[0,235,[592]],[0,235,[594]],[0,235,[596]],[0,235,[598]],[0,235,[610]],[0,235,[611]],[0,235,[614]],[0,235,[615]],[0,235,[632]],[0,235,[634]],[0,235,[652]],[0,235,[654]],[0,235,[664]],[0,235,[666]],[0,235,[684]],[0,235,[686]],[0,235,[701]],[0,235,[703]],[0,235,[716]],[0,235,[728]],[0,235,[741]],[0,235,[753]],[0,235,[873]],[0,235,[887]],[0,236,[242]],[0,236,[249]],[0,236,[250]],[0,236,[254]],[0,236,[258]],[0,236,[259]],[0,236,[261]],[0,236,[264]],[0,236,[265]],[0,236,[271]],[0,236,[275]],[0,236,[279]],[0,236,[283]],[0,236,[287]],[0,236,[290]],[0,236,[292]],[0,236,[294]],[0,236,[296]],[0,236,[300]],[0,236,[302]],[0,236,[306]],[0,236,[307]],[0,236,[311]],[0,236,[312]],[0,236,[315]],[0,236,[319]],[0,236,[324]],[0,236,[325]],[0,236,[326]],[0,236,[329]],[0,236,[332]],[0,236,[334]],[0,236,[357]],[0,236,[359]],[0,236,[361]],[0,236,[363]],[0,236,[369]],[0,236,[373]],[0,236,[377]],[0,236,[381]],[0,236,[400]],[0,236,[404]],[0,236,[410]],[0,236,[414]],[0,236,[417]],[0,236,[419]],[0,236,[429]],[0,236,[431]],[0,236,[432]],[0,236,[436]],[0,236,[442]],[0,236,[446]],[0,236,[449]],[0,236,[451]],[0,236,[461]],[0,236,[463]],[0,236,[479]],[0,236,[560]],[0,236,[562]],[0,236,[592]],[0,236,[594]],[0,236,[597]],[0,236,[598]],[0,236,[606]],[0,236,[610]],[0,236,[611]],[0,236,[614]],[0,236,[615]],[0,236,[632]],[0,236,[634]],[0,236,[652]],[0,236,[654]],[0,236,[664]],[0,236,[666]],[0,236,[684]],[0,236,[686]],[0,236,[701]],[0,236,[703]],[0,236,[716]],[0,236,[727]],[0,236,[754]],[0,236,[791]],[0,236,[873]],[0,236,[887]],[0,236,[949]],[0,236,[953]],[0,237,[242]],[0,237,[249]],[0,237,[250]],[0,237,[252]],[0,237,[273]],[0,237,[277]],[0,237,[281]],[0,237,[285]],[0,237,[288]],[0,237,[298]],[0,237,[306]],[0,237,[307]],[0,237,[311]],[0,237,[312]],[0,237,[315]],[0,237,[319]],[0,237,[324]],[0,237,[325]],[0,237,[326]],[0,237,[329]],[0,237,[332]],[0,237,[334]],[0,237,[353]],[0,237,[355]],[0,237,[365]],[0,237,[367]],[0,237,[369]],[0,237,[373]],[0,237,[377]],[0,237,[381]],[0,237,[402]],[0,237,[406]],[0,237,[408]],[0,237,[412]],[0,237,[421]],[0,237,[423]],[0,237,[425]],[0,237,[427]],[0,237,[432]],[0,237,[436]],[0,237,[442]],[0,237,[446]],[0,237,[449]],[0,237,[451]],[0,237,[461]],[0,237,[463]],[0,237,[477]],[0,237,[560]],[0,237,[562]],[0,237,[592]],[0,237,[594]],[0,237,[596]],[0,237,[598]],[0,237,[608]],[0,237,[609]],[0,237,[612]],[0,237,[613]],[0,237,[633]],[0,237,[635]],[0,237,[652]],[0,237,[654]],[0,237,[664]],[0,237,[666]],[0,237,[685]],[0,237,[687]],[0,237,[700]],[0,237,[702]],[0,237,[716]],[0,237,[727]],[0,237,[753]],[0,237,[791]],[0,237,[845]],[0,237,[873]],[0,237,[887]],[0,238,[242]],[0,238,[247]],[0,238,[249]],[0,238,[250]],[0,238,[252]],[0,238,[253]],[0,238,[254]],[0,238,[275]],[0,238,[279]],[0,238,[283]],[0,238,[287]],[0,238,[290]],[0,238,[292]],[0,238,[294]],[0,238,[296]],[0,238,[300]],[0,238,[302]],[0,238,[305]],[0,238,[306]],[0,238,[309]],[0,238,[312]],[0,238,[313]],[0,238,[317]],[0,238,[320]],[0,238,[322]],[0,238,[325]],[0,238,[328]],[0,238,[329]],[0,238,[330]],[0,238,[353]],[0,238,[355]],[0,238,[365]],[0,238,[367]],[0,238,[369]],[0,238,[373]],[0,238,[377]],[0,238,[381]],[0,238,[400]],[0,238,[404]],[0,238,[410]],[0,238,[414]],[0,238,[417]],[0,238,[419]],[0,238,[429]],[0,238,[431]],[0,238,[434]],[0,238,[438]],[0,238,[440]],[0,238,[444]],[0,238,[453]],[0,238,[455]],[0,238,[457]],[0,238,[459]],[0,238,[475]],[0,238,[560]],[0,238,[562]],[0,238,[592]],[0,238,[594]],[0,238,[596]],[0,238,[598]],[0,238,[608]],[0,238,[609]],[0,238,[612]],[0,238,[613]],[0,238,[632]],[0,238,[634]],[0,238,[653]],[0,238,[655]],[0,238,[665]],[0,238,[667]],[0,238,[684]],[0,238,[686]],[0,238,[700]],[0,238,[702]],[0,238,[716]],[0,238,[727]],[0,238,[741]],[0,238,[754]],[0,238,[791]],[0,238,[845]],[0,238,[888]],[0,239,[242]],[0,239,[247]],[0,239,[249]],[0,239,[250]],[0,239,[253]],[0,239,[259]],[0,239,[260]],[0,239,[261]],[0,239,[265]],[0,239,[270]],[0,239,[271]],[0,239,[273]],[0,239,[277]],[0,239,[281]],[0,239,[285]],[0,239,[288]],[0,239,[298]],[0,239,[305]],[0,239,[306]],[0,239,[309]],[0,239,[312]],[0,239,[313]],[0,239,[317]],[0,239,[320]],[0,239,[322]],[0,239,[325]],[0,239,[328]],[0,239,[329]],[0,239,[330]],[0,239,[357]],[0,239,[359]],[0,239,[361]],[0,239,[363]],[0,239,[369]],[0,239,[373]],[0,239,[377]],[0,239,[381]],[0,239,[402]],[0,239,[406]],[0,239,[408]],[0,239,[412]],[0,239,[421]],[0,239,[423]],[0,239,[425]],[0,239,[427]],[0,239,[434]],[0,239,[438]],[0,239,[440]],[0,239,[444]],[0,239,[453]],[0,239,[455]],[0,239,[457]],[0,239,[459]],[0,239,[473]],[0,239,[560]],[0,239,[562]],[0,239,[592]],[0,239,[596]],[0,239,[597]],[0,239,[598]],[0,239,[599]],[0,239,[602]],[0,239,[606]],[0,239,[610]],[0,239,[611]],[0,239,[614]],[0,239,[615]],[0,239,[633]],[0,239,[635]],[0,239,[653]],[0,239,[655]],[0,239,[665]],[0,239,[667]],[0,239,[685]],[0,239,[687]],[0,239,[701]],[0,239,[703]],[0,239,[716]],[0,239,[727]],[0,239,[741]],[0,239,[753]],[0,239,[791]],[0,239,[888]],[0,239,[950]],[0,128,[131]],[0,129,[130]],[0,132,[135]],[0,133,[134]],[0,136,[139]],[0,137,[138]],[0,140,[143]],[0,141,[142]],[0,144,[147]],[0,145,[146]],[0,148,[151]],[0,149,[150]],[0,152,[155]],[0,153,[154]],[0,156,[159]],[0,157,[158]],[0,160,[163]],[0,161,[162]],[0,164,[167]],[0,165,[166]],[0,168,[171]],[0,169,[170]],[0,172,[175]],[0,173,[174]],[0,176,[179]],[0,177,[178]],[0,180,[183]],[0,181,[182]],[0,184,[187]],[0,185,[186]],[0,188,[191]],[0,189,[190]],[0,192,[195]],[0,193,[194]],[0,196,[199]],[0,197,[198]],[0,200,[203]],[0,201,[202]],[0,204,[207]],[0,205,[206]],[0,208,[211]],[0,209,[210]],[0,212,[215]],[0,213,[214]],[0,216,[219]],[0,217,[218]],[0,220,[223]],[0,221,[222]],[0,224,[227]],[0,225,[226]],[0,228,[231]],[0,229,[230]],[0,232,[235]],[0,233,[234]],[0,236,[239]],[0,237,[238]]],"R":715,"coords":"ham","final":[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,836,837,838,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866,867,868,869,870,871,872,873,874,875,876,877,878,879,880,881,882,883,884,885,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,906,907,908,909,910,911,912,913,914,915,916,917,918,919,920,921,922,923,924,925,926,927,928,929,930,931,932,933,934,935,936,937,938,939,940,941,942,943,944,945,946,947,948,949,950,951,952,953,954,955,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,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,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,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,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,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],"form":"/2","format":"bitE8/1","frames":[[],[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],[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],[64,67],[65,66],[68,71],[69,70],[64,69],[65,68],[66,71],[67,70],[64,70],[66,68],[65,71],[67,69],[32,35],[33,34],[36,39],[37,38],[32,37],[33,36],[34,39],[35,38],[32,38],[34,36],[33,39],[35,37],[24,27],[25,26],[28,31],[29,30],[24,29],[25,28],[26,31],[27,30],[24,30],[26,28],[25,31],[27,29],[16,19],[17,18],[20,23],[21,22],[16,21],[17,20],[18,23],[19,22],[16,22],[18,20],[17,23],[19,21],[40,43],[41,42],[44,47],[45,46],[40,45],[41,44],[42,47],[43,46],[40,46],[42,44],[41,47],[43,45],[72,75],[73,74],[76,79],[77,78],[72,77],[73,76],[74,79],[75,78],[72,78],[74,76],[73,79],[75,77],[112,115],[113,114],[116,119],[117,118],[112,117],[113,116],[114,119],[115,118],[112,118],[114,116],[113,119],[115,117],[8,11],[9,10],[12,15],[13,14],[8,13],[9,12],[10,15],[11,14],[8,14],[10,12],[9,15],[11,13],[48,51],[49,50],[52,55],[53,54],[48,53],[49,52],[50,55],[51,54],[48,54],[50,52],[49,55],[51,53],[80,83],[81,82],[84,87],[85,86],[80,85],[81,84],[82,87],[83,86],[80,86],[82,84],[81,87],[83,85],[104,107],[105,106],[108,111],[109,110],[104,109],[105,108],[106,111],[107,110],[104,110],[106,108],[105,111],[107,109],[96,99],[97,98],[100,103],[101,102],[96,101],[97,100],[98,103],[99,102],[96,102],[98,100],[97,103],[99,101],[88,91],[89,90],[92,95],[93,94],[88,93],[89,92],[90,95],[91,94],[88,94],[90,92],[89,95],[91,93],[56,59],[57,58],[60,63],[61,62],[56,61],[57,60],[58,63],[59,62],[56,62],[58,60],[57,63],[59,61],[0,1],[2,3],[4,5],[6,7],[0,4],[2,6],[0,5],[2,7],[3,7],[3,6],[1,4],[1,5],[2,3,64,65,66,67],[2,3,68,69,70,71],[1,3,64,65,68,69],[1,3,66,67,70,71],[1,2,64,66,68,70],[1,2,65,67,69,71],[0,3,64,65,70,71],[0,3,66,67,68,69],[0,2,64,66,69,71],[0,2,65,67,68,70],[0,1,64,67,68,71],[0,1,65,66,69,70],[4,5,32,33,34,35],[4,5,36,37,38,39],[1,5,32,33,36,37],[1,5,34,35,38,39],[1,4,32,34,36,38],[1,4,33,35,37,39],[0,5,32,33,38,39],[0,5,34,35,36,37],[0,4,32,34,37,39],[0,4,33,35,36,38],[0,1,32,35,36,39],[0,1,33,34,37,38],[6,7,24,25,26,27],[6,7,28,29,30,31],[1,7,24,25,28,29],[1,7,26,27,30,31],[1,6,24,26,28,30],[1,6,25,27,29,31],[0,6,24,26,29,31],[0,6,25,27,28,30],[0,7,24,25,30,31],[0,7,26,27,28,29],[0,1,24,27,28,31],[0,1,25,26,29,30],[4,6,16,17,18,19],[4,6,20,21,22,23],[2,6,16,17,20,21],[2,6,18,19,22,23],[2,4,16,18,20,22],[2,4,17,19,21,23],[0,6,16,17,22,23],[0,6,18,19,20,21],[0,4,16,18,21,23],[0,4,17,19,20,22],[0,2,16,19,20,23],[0,2,17,18,21,22],[5,7,40,41,42,43],[5,7,44,45,46,47],[2,7,40,41,44,45],[2,7,42,43,46,47],[2,5,40,42,44,46],[2,5,41,43,45,47],[0,5,40,42,45,47],[0,5,41,43,44,46],[0,7,40,41,46,47],[0,7,42,43,44,45],[0,2,40,43,44,47],[0,2,41,42,45,46],[4,7,72,73,74,75],[4,7,76,77,78,79],[3,7,72,73,76,77],[3,7,74,75,78,79],[3,4,72,74,76,78],[3,4,73,75,77,79],[0,3,72,75,76,79],[0,3,73,74,77,78],[0,7,72,73,78,79],[0,7,74,75,76,77],[0,4,72,74,77,79],[0,4,73,75,76,78],[5,6,112,113,114,115],[5,6,116,117,118,119],[3,6,112,113,116,117],[3,6,114,115,118,119],[3,5,112,114,116,118],[3,5,113,115,117,119],[0,3,112,115,116,119],[0,3,113,114,117,118],[0,5,112,114,117,119],[0,5,113,115,116,118],[0,6,112,113,118,119],[0,6,114,115,116,117],[4,7,8,9,10,11],[4,7,12,13,14,15],[2,7,8,9,12,13],[2,7,10,11,14,15],[2,4,8,10,12,14],[2,4,9,11,13,15],[1,7,8,9,14,15],[1,7,10,11,12,13],[1,4,8,10,13,15],[1,4,9,11,12,14],[1,2,8,11,12,15],[1,2,9,10,13,14],[5,6,48,49,50,51],[5,6,52,53,54,55],[2,6,48,49,52,53],[2,6,50,51,54,55],[2,5,48,50,52,54],[2,5,49,51,53,55],[1,5,48,50,53,55],[1,5,49,51,52,54],[1,6,48,49,54,55],[1,6,50,51,52,53],[1,2,48,51,52,55],[1,2,49,50,53,54],[4,6,80,81,82,83],[4,6,84,85,86,87],[3,6,80,81,84,85],[3,6,82,83,86,87],[3,4,80,82,84,86],[3,4,81,83,85,87],[1,3,80,83,84,87],[1,3,81,82,85,86],[1,6,80,81,86,87],[1,6,82,83,84,85],[1,4,80,82,85,87],[1,4,81,83,84,86],[5,7,104,105,106,107],[5,7,108,109,110,111],[3,7,104,105,108,109],[3,7,106,107,110,111],[3,5,104,106,108,110],[3,5,105,107,109,111],[1,3,104,107,108,111],[1,3,105,106,109,110],[1,5,104,106,109,111],[1,5,105,107,108,110],[1,7,104,105,110,111],[1,7,106,107,108,109],[4,5,96,97,98,99],[4,5,100,101,102,103],[2,3,96,99,100,103],[2,3,97,98,101,102],[3,5,96,97,100,101],[3,5,98,99,102,103],[3,4,96,98,100,102],[3,4,97,99,101,103],[2,5,96,97,102,103],[2,5,98,99,100,101],[2,4,96,98,101,103],[2,4,97,99,100,102],[6,7,88,89,90,91],[6,7,92,93,94,95],[2,3,88,91,92,95],[2,3,89,90,93,94],[3,7,88,89,92,93],[3,7,90,91,94,95],[3,6,88,90,92,94],[3,6,89,91,93,95],[2,6,88,90,93,95],[2,6,89,91,92,94],[2,7,88,89,94,95],[2,7,90,91,92,93],[6,7,56,57,58,59],[6,7,60,61,62,63],[4,5,56,59,60,63],[4,5,57,58,61,62],[5,7,56,57,60,61],[5,7,58,59,62,63],[4,6,56,58,61,63],[4,6,57,59,60,62],[5,6,56,58,60,62],[5,6,57,59,61,63],[4,7,56,57,62,63],[4,7,58,59,60,61],[0,1,2,3,64,65,66,67,68,69,70,71],[0,1,4,5,32,33,34,35,36,37,38,39],[0,1,6,7,24,25,26,27,28,29,30,31],[0,2,4,6,16,17,18,19,20,21,22,23],[0,2,5,7,40,41,42,43,44,45,46,47],[0,3,4,7,72,73,74,75,76,77,78,79],[0,3,5,6,112,113,114,115,116,117,118,119],[1,2,4,7,8,9,10,11,12,13,14,15],[1,2,5,6,48,49,50,51,52,53,54,55],[1,3,4,6,80,81,82,83,84,85,86,87],[1,3,5,7,104,105,106,107,108,109,110,111],[2,3,4,5,96,97,98,99,100,101,102,103],[2,3,6,7,88,89,90,91,92,93,94,95],[4,5,6,7,56,57,58,59,60,61,62,63],[2,3,6,7,24,25,26,27,64,65,66,67,88,89,90,91,92,93,94,95],[2,3,4,5,32,33,34,35,64,65,66,67,96,97,98,99,100,101,102,103],[2,3,6,7,28,29,30,31,68,69,70,71,88,89,90,91,92,93,94,95],[2,3,4,5,36,37,38,39,68,69,70,71,96,97,98,99,100,101,102,103],[1,3,5,7,40,41,42,43,64,65,68,69,104,105,106,107,108,109,110,111],[1,3,4,6,16,17,18,19,64,65,68,69,80,81,82,83,84,85,86,87],[1,3,5,7,44,45,46,47,66,67,70,71,104,105,106,107,108,109,110,111],[1,3,4,6,20,21,22,23,66,67,70,71,80,81,82,83,84,85,86,87],[1,2,5,6,48,49,50,51,52,53,54,55,64,66,68,70,112,113,114,115],[1,2,4,7,8,9,10,11,12,13,14,15,64,66,68,70,72,73,74,75],[1,2,5,6,48,49,50,51,52,53,54,55,65,67,69,71,116,117,118,119],[1,2,4,7,8,9,10,11,12,13,14,15,65,67,69,71,76,77,78,79],[0,3,5,6,48,49,50,51,64,65,70,71,112,113,114,115,116,117,118,119],[0,3,4,7,8,9,10,11,64,65,70,71,72,73,74,75,76,77,78,79],[0,3,5,6,52,53,54,55,66,67,68,69,112,113,114,115,116,117,118,119],[0,3,4,7,12,13,14,15,66,67,68,69,72,73,74,75,76,77,78,79],[0,2,5,7,40,41,42,43,44,45,46,47,64,66,69,71,104,105,106,107],[0,2,4,6,16,17,18,19,20,21,22,23,64,66,69,71,80,81,82,83],[0,2,5,7,40,41,42,43,44,45,46,47,65,67,68,70,108,109,110,111],[0,2,4,6,16,17,18,19,20,21,22,23,65,67,68,70,84,85,86,87],[0,1,6,7,24,25,26,27,28,29,30,31,64,67,68,71,88,89,90,91],[0,1,4,5,32,33,34,35,36,37,38,39,64,67,68,71,96,97,98,99],[0,1,6,7,24,25,26,27,28,29,30,31,65,66,69,70,92,93,94,95],[0,1,4,5,32,33,34,35,36,37,38,39,65,66,69,70,100,101,102,103],[4,5,6,7,24,25,26,27,32,33,34,35,56,57,58,59,60,61,62,63],[4,5,6,7,28,29,30,31,36,37,38,39,56,57,58,59,60,61,62,63],[1,3,5,7,32,33,36,37,72,73,76,77,104,105,106,107,108,109,110,111],[1,2,5,6,16,17,20,21,32,33,36,37,48,49,50,51,52,53,54,55],[1,3,5,7,34,35,38,39,74,75,78,79,104,105,106,107,108,109,110,111],[1,2,5,6,18,19,22,23,34,35,38,39,48,49,50,51,52,53,54,55],[1,3,4,6,32,34,36,38,80,81,82,83,84,85,86,87,112,113,116,117],[1,2,4,7,8,9,10,11,12,13,14,15,32,34,36,38,40,41,44,45],[1,3,4,6,33,35,37,39,80,81,82,83,84,85,86,87,114,115,118,119],[1,2,4,7,8,9,10,11,12,13,14,15,33,35,37,39,42,43,46,47],[0,3,5,6,32,33,38,39,80,81,84,85,112,113,114,115,116,117,118,119],[0,2,5,7,8,9,12,13,32,33,38,39,40,41,42,43,44,45,46,47],[0,3,5,6,34,35,36,37,82,83,86,87,112,113,114,115,116,117,118,119],[0,2,5,7,10,11,14,15,34,35,36,37,40,41,42,43,44,45,46,47],[0,3,4,7,32,34,37,39,72,73,74,75,76,77,78,79,104,105,108,109],[0,2,4,6,16,17,18,19,20,21,22,23,32,34,37,39,48,49,52,53],[0,3,4,7,33,35,36,38,72,73,74,75,76,77,78,79,106,107,110,111],[0,2,4,6,16,17,18,19,20,21,22,23,33,35,36,38,50,51,54,55],[0,1,6,7,24,25,26,27,28,29,30,31,32,35,36,39,56,57,58,59],[0,1,2,3,32,35,36,39,64,65,66,67,68,69,70,71,96,99,100,103],[0,1,6,7,24,25,26,27,28,29,30,31,33,34,37,38,60,61,62,63],[0,1,2,3,33,34,37,38,64,65,66,67,68,69,70,71,97,98,101,102],[1,3,5,7,24,25,28,29,104,105,106,107,108,109,110,111,112,114,116,118],[1,2,4,7,8,9,10,11,12,13,14,15,16,18,20,22,24,25,28,29],[1,3,5,7,26,27,30,31,104,105,106,107,108,109,110,111,113,115,117,119],[1,2,4,7,8,9,10,11,12,13,14,15,17,19,21,23,26,27,30,31],[1,3,4,6,24,26,28,30,72,74,76,78,80,81,82,83,84,85,86,87],[1,2,5,6,24,26,28,30,40,42,44,46,48,49,50,51,52,53,54,55],[1,3,4,6,25,27,29,31,73,75,77,79,80,81,82,83,84,85,86,87],[1,2,5,6,25,27,29,31,41,43,45,47,48,49,50,51,52,53,54,55],[0,3,5,6,24,26,29,31,104,106,108,110,112,113,114,115,116,117,118,119],[0,2,4,6,8,10,12,14,16,17,18,19,20,21,22,23,24,26,29,31],[0,3,5,6,25,27,28,30,105,107,109,111,112,113,114,115,116,117,118,119],[0,2,4,6,9,11,13,15,16,17,18,19,20,21,22,23,25,27,28,30],[0,3,4,7,24,25,30,31,72,73,74,75,76,77,78,79,80,82,84,86],[0,2,5,7,24,25,30,31,40,41,42,43,44,45,46,47,48,50,52,54],[0,3,4,7,26,27,28,29,72,73,74,75,76,77,78,79,81,83,85,87],[0,2,5,7,26,27,28,29,40,41,42,43,44,45,46,47,49,51,53,55],[0,1,4,5,24,27,28,31,32,33,34,35,36,37,38,39,56,59,60,63],[0,1,2,3,24,27,28,31,64,65,66,67,68,69,70,71,88,91,92,95],[0,1,4,5,25,26,29,30,32,33,34,35,36,37,38,39,57,58,61,62],[0,1,2,3,25,26,29,30,64,65,66,67,68,69,70,71,89,90,93,94],[4,5,6,7,16,17,18,19,40,41,42,43,56,57,58,59,60,61,62,63],[4,5,6,7,20,21,22,23,44,45,46,47,56,57,58,59,60,61,62,63],[2,3,6,7,16,17,20,21,72,73,76,77,88,89,90,91,92,93,94,95],[2,3,6,7,18,19,22,23,74,75,78,79,88,89,90,91,92,93,94,95],[2,3,4,5,16,18,20,22,96,97,98,99,100,101,102,103,112,114,116,118],[2,3,4,5,17,19,21,23,96,97,98,99,100,101,102,103,113,115,117,119],[0,3,5,6,16,17,22,23,96,97,100,101,112,113,114,115,116,117,118,119],[0,1,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31],[0,3,5,6,18,19,20,21,98,99,102,103,112,113,114,115,116,117,118,119],[0,1,6,7,10,11,12,13,18,19,20,21,24,25,26,27,28,29,30,31],[0,3,4,7,16,18,21,23,72,73,74,75,76,77,78,79,88,89,92,93],[0,1,4,5,16,18,21,23,32,33,34,35,36,37,38,39,48,50,53,55],[0,3,4,7,17,19,20,22,72,73,74,75,76,77,78,79,90,91,94,95],[0,1,4,5,17,19,20,22,32,33,34,35,36,37,38,39,49,51,52,54],[0,2,5,7,16,19,20,23,40,41,42,43,44,45,46,47,56,57,60,61],[0,1,2,3,16,19,20,23,64,65,66,67,68,69,70,71,80,83,84,87],[0,2,5,7,17,18,21,22,40,41,42,43,44,45,46,47,58,59,62,63],[0,1,2,3,17,18,21,22,64,65,66,67,68,69,70,71,81,82,85,86],[2,3,6,7,40,41,44,45,88,89,90,91,92,93,94,95,112,113,116,117],[2,3,6,7,42,43,46,47,88,89,90,91,92,93,94,95,114,115,118,119],[2,3,4,5,40,42,44,46,72,74,76,78,96,97,98,99,100,101,102,103],[2,3,4,5,41,43,45,47,73,75,77,79,96,97,98,99,100,101,102,103],[0,3,5,6,40,42,45,47,88,90,92,94,112,113,114,115,116,117,118,119],[0,1,4,5,8,10,13,15,32,33,34,35,36,37,38,39,40,42,45,47],[0,3,5,6,41,43,44,46,89,91,93,95,112,113,114,115,116,117,118,119],[0,1,4,5,9,11,12,14,32,33,34,35,36,37,38,39,41,43,44,46],[0,3,4,7,40,41,46,47,72,73,74,75,76,77,78,79,96,98,100,102],[0,1,6,7,24,25,26,27,28,29,30,31,40,41,46,47,48,49,54,55],[0,3,4,7,42,43,44,45,72,73,74,75,76,77,78,79,97,99,101,103],[0,1,6,7,24,25,26,27,28,29,30,31,42,43,44,45,50,51,52,53],[0,2,4,6,16,17,18,19,20,21,22,23,40,43,44,47,56,58,61,63],[0,1,2,3,40,43,44,47,64,65,66,67,68,69,70,71,104,107,108,111],[0,2,4,6,16,17,18,19,20,21,22,23,41,42,45,46,57,59,60,62],[0,1,2,3,41,42,45,46,64,65,66,67,68,69,70,71,105,106,109,110],[4,5,6,7,56,57,58,59,60,61,62,63,72,73,74,75,112,113,114,115],[4,5,6,7,56,57,58,59,60,61,62,63,76,77,78,79,116,117,118,119],[0,3,5,6,56,58,60,62,72,75,76,79,112,113,114,115,116,117,118,119],[0,1,2,3,8,11,12,15,64,65,66,67,68,69,70,71,72,75,76,79],[0,3,5,6,57,59,61,63,73,74,77,78,112,113,114,115,116,117,118,119],[0,1,2,3,9,10,13,14,64,65,66,67,68,69,70,71,73,74,77,78],[0,2,5,7,40,41,42,43,44,45,46,47,72,73,78,79,96,97,102,103],[0,1,6,7,24,25,26,27,28,29,30,31,72,73,78,79,80,81,86,87],[0,2,5,7,40,41,42,43,44,45,46,47,74,75,76,77,98,99,100,101],[0,1,6,7,24,25,26,27,28,29,30,31,74,75,76,77,82,83,84,85],[0,2,4,6,16,17,18,19,20,21,22,23,72,74,77,79,88,90,93,95],[0,1,4,5,32,33,34,35,36,37,38,39,72,74,77,79,104,106,109,111],[0,2,4,6,16,17,18,19,20,21,22,23,73,75,76,78,89,91,92,94],[0,1,4,5,32,33,34,35,36,37,38,39,73,75,76,78,105,107,108,110],[0,3,4,7,56,57,62,63,72,73,74,75,76,77,78,79,112,115,116,119],[0,1,2,3,48,51,52,55,64,65,66,67,68,69,70,71,112,115,116,119],[0,3,4,7,58,59,60,61,72,73,74,75,76,77,78,79,113,114,117,118],[0,1,2,3,49,50,53,54,64,65,66,67,68,69,70,71,113,114,117,118],[0,2,5,7,40,41,42,43,44,45,46,47,88,89,94,95,112,114,117,119],[0,1,4,5,32,33,34,35,36,37,38,39,80,82,85,87,112,114,117,119],[0,2,5,7,40,41,42,43,44,45,46,47,90,91,92,93,113,115,116,118],[0,1,4,5,32,33,34,35,36,37,38,39,81,83,84,86,113,115,116,118],[0,2,4,6,16,17,18,19,20,21,22,23,96,98,101,103,112,113,118,119],[0,1,6,7,24,25,26,27,28,29,30,31,104,105,110,111,112,113,118,119],[0,2,4,6,16,17,18,19,20,21,22,23,97,99,100,102,114,115,116,117],[0,1,6,7,24,25,26,27,28,29,30,31,106,107,108,109,114,115,116,117],[4,5,6,7,8,9,10,11,48,49,50,51,56,57,58,59,60,61,62,63],[4,5,6,7,12,13,14,15,52,53,54,55,56,57,58,59,60,61,62,63],[2,3,6,7,8,9,12,13,80,81,84,85,88,89,90,91,92,93,94,95],[2,3,6,7,10,11,14,15,82,83,86,87,88,89,90,91,92,93,94,95],[2,3,4,5,8,10,12,14,96,97,98,99,100,101,102,103,104,106,108,110],[2,3,4,5,9,11,13,15,96,97,98,99,100,101,102,103,105,107,109,111],[1,3,5,7,8,9,14,15,96,97,100,101,104,105,106,107,108,109,110,111],[1,3,5,7,10,11,12,13,98,99,102,103,104,105,106,107,108,109,110,111],[1,3,4,6,8,10,13,15,80,81,82,83,84,85,86,87,88,90,92,94],[1,3,4,6,9,11,12,14,80,81,82,83,84,85,86,87,89,91,93,95],[1,2,5,6,8,11,12,15,48,49,50,51,52,53,54,55,56,58,60,62],[1,2,5,6,9,10,13,14,48,49,50,51,52,53,54,55,57,59,61,63],[2,3,6,7,48,49,52,53,88,89,90,91,92,93,94,95,104,105,108,109],[2,3,6,7,50,51,54,55,88,89,90,91,92,93,94,95,106,107,110,111],[2,3,4,5,48,50,52,54,80,82,84,86,96,97,98,99,100,101,102,103],[2,3,4,5,49,51,53,55,81,83,85,87,96,97,98,99,100,101,102,103],[1,3,5,7,48,50,53,55,88,89,92,93,104,105,106,107,108,109,110,111],[1,3,5,7,49,51,52,54,90,91,94,95,104,105,106,107,108,109,110,111],[1,3,4,6,48,49,54,55,80,81,82,83,84,85,86,87,96,98,100,102],[1,3,4,6,50,51,52,53,80,81,82,83,84,85,86,87,97,99,101,103],[1,2,4,7,8,9,10,11,12,13,14,15,48,51,52,55,56,57,62,63],[1,2,4,7,8,9,10,11,12,13,14,15,49,50,53,54,58,59,60,61],[4,5,6,7,56,57,58,59,60,61,62,63,80,81,82,83,104,105,106,107],[4,5,6,7,56,57,58,59,60,61,62,63,84,85,86,87,108,109,110,111],[1,3,5,7,56,57,60,61,80,83,84,87,104,105,106,107,108,109,110,111],[1,3,5,7,58,59,62,63,81,82,85,86,104,105,106,107,108,109,110,111],[1,2,5,6,48,49,50,51,52,53,54,55,80,81,86,87,96,97,102,103],[1,2,5,6,48,49,50,51,52,53,54,55,82,83,84,85,98,99,100,101],[1,2,4,7,8,9,10,11,12,13,14,15,80,82,85,87,88,89,94,95],[1,2,4,7,8,9,10,11,12,13,14,15,81,83,84,86,90,91,92,93],[1,3,4,6,56,58,61,63,80,81,82,83,84,85,86,87,104,107,108,111],[1,3,4,6,57,59,60,62,80,81,82,83,84,85,86,87,105,106,109,110],[1,2,5,6,48,49,50,51,52,53,54,55,88,90,93,95,104,106,109,111],[1,2,5,6,48,49,50,51,52,53,54,55,89,91,92,94,105,107,108,110],[1,2,4,7,8,9,10,11,12,13,14,15,96,98,101,103,104,105,110,111],[1,2,4,7,8,9,10,11,12,13,14,15,97,99,100,102,106,107,108,109],[4,5,6,7,56,57,58,59,60,61,62,63,88,89,90,91,96,97,98,99],[4,5,6,7,56,57,58,59,60,61,62,63,92,93,94,95,100,101,102,103],[2,3,6,7,56,57,58,59,88,89,90,91,92,93,94,95,96,99,100,103],[2,3,6,7,60,61,62,63,88,89,90,91,92,93,94,95,97,98,101,102],[2,3,4,5,56,59,60,63,88,91,92,95,96,97,98,99,100,101,102,103],[2,3,4,5,57,58,61,62,89,90,93,94,96,97,98,99,100,101,102,103],[4,5,6,7,28,29,30,31,36,37,38,39,56,57,58,59,60,61,62,63,69,70,92,93,94,95,100,101,102,103],[4,5,6,7,12,13,14,15,52,53,54,55,56,57,58,59,60,61,62,63,67,69,76,77,78,79,116,117,118,119],[4,5,6,7,20,21,22,23,44,45,46,47,56,57,58,59,60,61,62,63,67,70,84,85,86,87,108,109,110,111],[4,5,6,7,16,17,18,19,40,41,42,43,56,57,58,59,60,61,62,63,64,69,80,81,82,83,104,105,106,107],[4,5,6,7,8,9,10,11,48,49,50,51,56,57,58,59,60,61,62,63,64,70,72,73,74,75,112,113,114,115],[4,5,6,7,24,25,26,27,32,33,34,35,56,57,58,59,60,61,62,63,64,67,88,89,90,91,96,97,98,99],[4,5,6,7,28,29,30,31,36,37,38,39,56,57,58,59,60,61,62,63,68,71,88,89,90,91,96,97,98,99],[4,5,6,7,12,13,14,15,52,53,54,55,56,57,58,59,60,61,62,63,66,68,72,73,74,75,112,113,114,115],[4,5,6,7,20,21,22,23,44,45,46,47,56,57,58,59,60,61,62,63,66,71,80,81,82,83,104,105,106,107],[4,5,6,7,16,17,18,19,40,41,42,43,56,57,58,59,60,61,62,63,65,68,84,85,86,87,108,109,110,111],[4,5,6,7,8,9,10,11,48,49,50,51,56,57,58,59,60,61,62,63,65,71,76,77,78,79,116,117,118,119],[4,5,6,7,24,25,26,27,32,33,34,35,56,57,58,59,60,61,62,63,65,66,92,93,94,95,100,101,102,103],[2,3,6,7,28,29,30,31,37,38,60,61,62,63,68,69,70,71,88,89,90,91,92,93,94,95,97,98,101,102],[2,3,6,7,10,11,14,15,35,37,42,43,46,47,82,83,86,87,88,89,90,91,92,93,94,95,114,115,118,119],[2,3,6,7,18,19,22,23,35,38,50,51,54,55,74,75,78,79,88,89,90,91,92,93,94,95,106,107,110,111],[2,3,6,7,16,17,20,21,32,37,48,49,52,53,72,73,76,77,88,89,90,91,92,93,94,95,104,105,108,109],[2,3,6,7,8,9,12,13,32,38,40,41,44,45,80,81,84,85,88,89,90,91,92,93,94,95,112,113,116,117],[2,3,6,7,24,25,26,27,32,35,56,57,58,59,64,65,66,67,88,89,90,91,92,93,94,95,96,99,100,103],[2,3,6,7,28,29,30,31,36,39,56,57,58,59,68,69,70,71,88,89,90,91,92,93,94,95,96,99,100,103],[2,3,6,7,10,11,14,15,34,36,40,41,44,45,82,83,86,87,88,89,90,91,92,93,94,95,112,113,116,117],[2,3,6,7,18,19,22,23,34,39,48,49,52,53,74,75,78,79,88,89,90,91,92,93,94,95,104,105,108,109],[2,3,6,7,16,17,20,21,33,36,50,51,54,55,72,73,76,77,88,89,90,91,92,93,94,95,106,107,110,111],[2,3,6,7,8,9,12,13,33,39,42,43,46,47,80,81,84,85,88,89,90,91,92,93,94,95,114,115,118,119],[2,3,6,7,24,25,26,27,33,34,60,61,62,63,64,65,66,67,88,89,90,91,92,93,94,95,97,98,101,102],[2,3,4,5,29,30,36,37,38,39,57,58,61,62,68,69,70,71,89,90,93,94,96,97,98,99,100,101,102,103],[2,3,4,5,27,29,41,43,45,47,49,51,53,55,73,75,77,79,81,83,85,87,96,97,98,99,100,101,102,103],[2,3,4,5,9,11,13,15,17,19,21,23,27,30,96,97,98,99,100,101,102,103,105,107,109,111,113,115,117,119],[2,3,4,5,8,10,12,14,16,18,20,22,24,29,96,97,98,99,100,101,102,103,104,106,108,110,112,114,116,118],[2,3,4,5,24,30,40,42,44,46,48,50,52,54,72,74,76,78,80,82,84,86,96,97,98,99,100,101,102,103],[2,3,4,5,24,27,32,33,34,35,56,59,60,63,64,65,66,67,88,91,92,95,96,97,98,99,100,101,102,103],[2,3,4,5,28,31,36,37,38,39,56,59,60,63,68,69,70,71,88,91,92,95,96,97,98,99,100,101,102,103],[2,3,4,5,26,28,40,42,44,46,49,51,53,55,72,74,76,78,81,83,85,87,96,97,98,99,100,101,102,103],[2,3,4,5,8,10,12,14,17,19,21,23,26,31,96,97,98,99,100,101,102,103,104,106,108,110,113,115,117,119],[2,3,4,5,9,11,13,15,16,18,20,22,25,28,96,97,98,99,100,101,102,103,105,107,109,111,112,114,116,118],[2,3,4,5,25,31,41,43,45,47,48,50,52,54,73,75,77,79,80,82,84,86,96,97,98,99,100,101,102,103],[2,3,4,5,25,26,32,33,34,35,57,58,61,62,64,65,66,67,89,90,93,94,96,97,98,99,100,101,102,103],[1,3,5,7,21,22,44,45,46,47,58,59,62,63,66,67,70,71,81,82,85,86,104,105,106,107,108,109,110,111],[1,3,5,7,10,11,12,13,19,21,26,27,30,31,98,99,102,103,104,105,106,107,108,109,110,111,113,115,117,119],[1,3,5,7,19,22,34,35,38,39,49,51,52,54,74,75,78,79,90,91,94,95,104,105,106,107,108,109,110,111],[1,3,5,7,16,21,32,33,36,37,48,50,53,55,72,73,76,77,88,89,92,93,104,105,106,107,108,109,110,111],[1,3,5,7,8,9,14,15,16,22,24,25,28,29,96,97,100,101,104,105,106,107,108,109,110,111,112,114,116,118],[1,3,5,7,16,19,40,41,42,43,56,57,60,61,64,65,68,69,80,83,84,87,104,105,106,107,108,109,110,111],[1,3,5,7,20,23,44,45,46,47,56,57,60,61,66,67,70,71,80,83,84,87,104,105,106,107,108,109,110,111],[1,3,5,7,10,11,12,13,18,20,24,25,28,29,98,99,102,103,104,105,106,107,108,109,110,111,112,114,116,118],[1,3,5,7,18,23,34,35,38,39,48,50,53,55,74,75,78,79,88,89,92,93,104,105,106,107,108,109,110,111],[1,3,5,7,17,20,32,33,36,37,49,51,52,54,72,73,76,77,90,91,94,95,104,105,106,107,108,109,110,111],[1,3,5,7,8,9,14,15,17,23,26,27,30,31,96,97,100,101,104,105,106,107,108,109,110,111,113,115,117,119],[1,3,5,7,17,18,40,41,42,43,58,59,62,63,64,65,68,69,81,82,85,86,104,105,106,107,108,109,110,111],[1,3,4,6,20,21,22,23,45,46,57,59,60,62,66,67,70,71,80,81,82,83,84,85,86,87,105,106,109,110],[1,3,4,6,25,27,29,31,43,45,50,51,52,53,73,75,77,79,80,81,82,83,84,85,86,87,97,99,101,103],[1,3,4,6,9,11,12,14,33,35,37,39,43,46,80,81,82,83,84,85,86,87,89,91,93,95,114,115,118,119],[1,3,4,6,8,10,13,15,32,34,36,38,40,45,80,81,82,83,84,85,86,87,88,90,92,94,112,113,116,117],[1,3,4,6,24,26,28,30,40,46,48,49,54,55,72,74,76,78,80,81,82,83,84,85,86,87,96,98,100,102],[1,3,4,6,16,17,18,19,40,43,56,58,61,63,64,65,68,69,80,81,82,83,84,85,86,87,104,107,108,111],[1,3,4,6,20,21,22,23,44,47,56,58,61,63,66,67,70,71,80,81,82,83,84,85,86,87,104,107,108,111],[1,3,4,6,24,26,28,30,42,44,50,51,52,53,72,74,76,78,80,81,82,83,84,85,86,87,97,99,101,103],[1,3,4,6,8,10,13,15,33,35,37,39,42,47,80,81,82,83,84,85,86,87,88,90,92,94,114,115,118,119],[1,3,4,6,9,11,12,14,32,34,36,38,41,44,80,81,82,83,84,85,86,87,89,91,93,95,112,113,116,117],[1,3,4,6,25,27,29,31,41,47,48,49,54,55,73,75,77,79,80,81,82,83,84,85,86,87,96,98,100,102],[1,3,4,6,16,17,18,19,41,42,57,59,60,62,64,65,68,69,80,81,82,83,84,85,86,87,105,106,109,110],[1,2,5,6,9,10,13,14,48,49,50,51,52,53,54,55,57,59,61,63,65,67,69,71,77,78,116,117,118,119],[1,2,5,6,25,27,29,31,41,43,45,47,48,49,50,51,52,53,54,55,75,77,82,83,84,85,98,99,100,101],[1,2,5,6,18,19,22,23,34,35,38,39,48,49,50,51,52,53,54,55,75,78,89,91,92,94,105,107,108,110],[1,2,5,6,16,17,20,21,32,33,36,37,48,49,50,51,52,53,54,55,72,77,88,90,93,95,104,106,109,111],[1,2,5,6,24,26,28,30,40,42,44,46,48,49,50,51,52,53,54,55,72,78,80,81,86,87,96,97,102,103],[1,2,5,6,8,11,12,15,48,49,50,51,52,53,54,55,56,58,60,62,64,66,68,70,72,75,112,113,114,115],[1,2,5,6,8,11,12,15,48,49,50,51,52,53,54,55,56,58,60,62,65,67,69,71,76,79,116,117,118,119],[1,2,5,6,24,26,28,30,40,42,44,46,48,49,50,51,52,53,54,55,74,76,82,83,84,85,98,99,100,101],[1,2,5,6,18,19,22,23,34,35,38,39,48,49,50,51,52,53,54,55,74,79,88,90,93,95,104,106,109,111],[1,2,5,6,16,17,20,21,32,33,36,37,48,49,50,51,52,53,54,55,73,76,89,91,92,94,105,107,108,110],[1,2,5,6,25,27,29,31,41,43,45,47,48,49,50,51,52,53,54,55,73,79,80,81,86,87,96,97,102,103],[1,2,5,6,9,10,13,14,48,49,50,51,52,53,54,55,57,59,61,63,64,66,68,70,73,74,112,113,114,115],[1,2,4,7,8,9,10,11,12,13,14,15,49,50,53,54,58,59,60,61,65,67,69,71,76,77,78,79,117,118],[1,2,4,7,8,9,10,11,12,13,14,15,17,19,21,23,26,27,30,31,97,99,100,102,106,107,108,109,115,117],[1,2,4,7,8,9,10,11,12,13,14,15,33,35,37,39,42,43,46,47,81,83,84,86,90,91,92,93,115,118],[1,2,4,7,8,9,10,11,12,13,14,15,32,34,36,38,40,41,44,45,80,82,85,87,88,89,94,95,112,117],[1,2,4,7,8,9,10,11,12,13,14,15,16,18,20,22,24,25,28,29,96,98,101,103,104,105,110,111,112,118],[1,2,4,7,8,9,10,11,12,13,14,15,48,51,52,55,56,57,62,63,64,66,68,70,72,73,74,75,112,115],[1,2,4,7,8,9,10,11,12,13,14,15,48,51,52,55,56,57,62,63,65,67,69,71,76,77,78,79,116,119],[1,2,4,7,8,9,10,11,12,13,14,15,16,18,20,22,24,25,28,29,97,99,100,102,106,107,108,109,114,116],[1,2,4,7,8,9,10,11,12,13,14,15,33,35,37,39,42,43,46,47,80,82,85,87,88,89,94,95,114,119],[1,2,4,7,8,9,10,11,12,13,14,15,32,34,36,38,40,41,44,45,81,83,84,86,90,91,92,93,113,116],[1,2,4,7,8,9,10,11,12,13,14,15,17,19,21,23,26,27,30,31,96,98,101,103,104,105,110,111,113,119],[1,2,4,7,8,9,10,11,12,13,14,15,49,50,53,54,58,59,60,61,64,66,68,70,72,73,74,75,113,114],[0,3,5,6,13,14,52,53,54,55,57,59,61,63,66,67,68,69,73,74,77,78,112,113,114,115,116,117,118,119],[0,3,5,6,11,13,18,19,20,21,25,27,28,30,98,99,102,103,105,107,109,111,112,113,114,115,116,117,118,119],[0,3,5,6,11,14,34,35,36,37,41,43,44,46,82,83,86,87,89,91,93,95,112,113,114,115,116,117,118,119],[0,3,5,6,8,13,32,33,38,39,40,42,45,47,80,81,84,85,88,90,92,94,112,113,114,115,116,117,118,119],[0,3,5,6,8,14,16,17,22,23,24,26,29,31,96,97,100,101,104,106,108,110,112,113,114,115,116,117,118,119],[0,3,5,6,8,11,48,49,50,51,56,58,60,62,64,65,70,71,72,75,76,79,112,113,114,115,116,117,118,119],[0,3,5,6,12,15,52,53,54,55,56,58,60,62,66,67,68,69,72,75,76,79,112,113,114,115,116,117,118,119],[0,3,5,6,10,12,18,19,20,21,24,26,29,31,98,99,102,103,104,106,108,110,112,113,114,115,116,117,118,119],[0,3,5,6,10,15,34,35,36,37,40,42,45,47,82,83,86,87,88,90,92,94,112,113,114,115,116,117,118,119],[0,3,5,6,9,12,32,33,38,39,41,43,44,46,80,81,84,85,89,91,93,95,112,113,114,115,116,117,118,119],[0,3,5,6,9,15,16,17,22,23,25,27,28,30,96,97,100,101,105,107,109,111,112,113,114,115,116,117,118,119],[0,3,5,6,9,10,48,49,50,51,57,59,61,63,64,65,70,71,73,74,77,78,112,113,114,115,116,117,118,119],[0,3,4,7,12,13,14,15,53,54,58,59,60,61,66,67,68,69,72,73,74,75,76,77,78,79,113,114,117,118],[0,3,4,7,26,27,28,29,42,43,44,45,51,53,72,73,74,75,76,77,78,79,81,83,85,87,97,99,101,103],[0,3,4,7,17,19,20,22,33,35,36,38,51,54,72,73,74,75,76,77,78,79,90,91,94,95,106,107,110,111],[0,3,4,7,16,18,21,23,32,34,37,39,48,53,72,73,74,75,76,77,78,79,88,89,92,93,104,105,108,109],[0,3,4,7,24,25,30,31,40,41,46,47,48,54,72,73,74,75,76,77,78,79,80,82,84,86,96,98,100,102],[0,3,4,7,8,9,10,11,48,51,56,57,62,63,64,65,70,71,72,73,74,75,76,77,78,79,112,115,116,119],[0,3,4,7,12,13,14,15,52,55,56,57,62,63,66,67,68,69,72,73,74,75,76,77,78,79,112,115,116,119],[0,3,4,7,24,25,30,31,42,43,44,45,50,52,72,73,74,75,76,77,78,79,80,82,84,86,97,99,101,103],[0,3,4,7,16,18,21,23,33,35,36,38,50,55,72,73,74,75,76,77,78,79,88,89,92,93,106,107,110,111],[0,3,4,7,17,19,20,22,32,34,37,39,49,52,72,73,74,75,76,77,78,79,90,91,94,95,104,105,108,109],[0,3,4,7,26,27,28,29,40,41,46,47,49,55,72,73,74,75,76,77,78,79,81,83,85,87,96,98,100,102],[0,3,4,7,8,9,10,11,49,50,58,59,60,61,64,65,70,71,72,73,74,75,76,77,78,79,113,114,117,118],[0,2,5,7,17,18,21,22,40,41,42,43,44,45,46,47,58,59,62,63,65,67,68,70,85,86,108,109,110,111],[0,2,5,7,26,27,28,29,40,41,42,43,44,45,46,47,49,51,53,55,74,75,76,77,83,85,98,99,100,101],[0,2,5,7,10,11,14,15,34,35,36,37,40,41,42,43,44,45,46,47,83,86,90,91,92,93,113,115,116,118],[0,2,5,7,8,9,12,13,32,33,38,39,40,41,42,43,44,45,46,47,80,85,88,89,94,95,112,114,117,119],[0,2,5,7,24,25,30,31,40,41,42,43,44,45,46,47,48,50,52,54,72,73,78,79,80,86,96,97,102,103],[0,2,5,7,16,19,20,23,40,41,42,43,44,45,46,47,56,57,60,61,64,66,69,71,80,83,104,105,106,107],[0,2,5,7,16,19,20,23,40,41,42,43,44,45,46,47,56,57,60,61,65,67,68,70,84,87,108,109,110,111],[0,2,5,7,24,25,30,31,40,41,42,43,44,45,46,47,48,50,52,54,74,75,76,77,82,84,98,99,100,101],[0,2,5,7,10,11,14,15,34,35,36,37,40,41,42,43,44,45,46,47,82,87,88,89,94,95,112,114,117,119],[0,2,5,7,8,9,12,13,32,33,38,39,40,41,42,43,44,45,46,47,81,84,90,91,92,93,113,115,116,118],[0,2,5,7,26,27,28,29,40,41,42,43,44,45,46,47,49,51,53,55,72,73,78,79,81,87,96,97,102,103],[0,2,5,7,17,18,21,22,40,41,42,43,44,45,46,47,58,59,62,63,64,66,69,71,81,82,104,105,106,107],[0,2,4,6,16,17,18,19,20,21,22,23,41,42,45,46,57,59,60,62,65,67,68,70,84,85,86,87,109,110],[0,2,4,6,9,11,13,15,16,17,18,19,20,21,22,23,25,27,28,30,97,99,100,102,107,109,114,115,116,117],[0,2,4,6,16,17,18,19,20,21,22,23,33,35,36,38,50,51,54,55,73,75,76,78,89,91,92,94,107,110],[0,2,4,6,16,17,18,19,20,21,22,23,32,34,37,39,48,49,52,53,72,74,77,79,88,90,93,95,104,109],[0,2,4,6,8,10,12,14,16,17,18,19,20,21,22,23,24,26,29,31,96,98,101,103,104,110,112,113,118,119],[0,2,4,6,16,17,18,19,20,21,22,23,40,43,44,47,56,58,61,63,64,66,69,71,80,81,82,83,104,107],[0,2,4,6,16,17,18,19,20,21,22,23,40,43,44,47,56,58,61,63,65,67,68,70,84,85,86,87,108,111],[0,2,4,6,8,10,12,14,16,17,18,19,20,21,22,23,24,26,29,31,97,99,100,102,106,108,114,115,116,117],[0,2,4,6,16,17,18,19,20,21,22,23,33,35,36,38,50,51,54,55,72,74,77,79,88,90,93,95,106,111],[0,2,4,6,16,17,18,19,20,21,22,23,32,34,37,39,48,49,52,53,73,75,76,78,89,91,92,94,105,108],[0,2,4,6,9,11,13,15,16,17,18,19,20,21,22,23,25,27,28,30,96,98,101,103,105,111,112,113,118,119],[0,2,4,6,16,17,18,19,20,21,22,23,41,42,45,46,57,59,60,62,64,66,69,71,80,81,82,83,105,106],[0,1,6,7,24,25,26,27,28,29,30,31,33,34,37,38,60,61,62,63,65,66,69,70,92,93,94,95,101,102],[0,1,6,7,24,25,26,27,28,29,30,31,42,43,44,45,50,51,52,53,74,75,76,77,82,83,84,85,99,101],[0,1,6,7,10,11,12,13,18,19,20,21,24,25,26,27,28,29,30,31,99,102,106,107,108,109,114,115,116,117],[0,1,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,96,101,104,105,110,111,112,113,118,119],[0,1,6,7,24,25,26,27,28,29,30,31,40,41,46,47,48,49,54,55,72,73,78,79,80,81,86,87,96,102],[0,1,6,7,24,25,26,27,28,29,30,31,32,35,36,39,56,57,58,59,64,67,68,71,88,89,90,91,96,99],[0,1,6,7,24,25,26,27,28,29,30,31,32,35,36,39,56,57,58,59,65,66,69,70,92,93,94,95,100,103],[0,1,6,7,24,25,26,27,28,29,30,31,40,41,46,47,48,49,54,55,74,75,76,77,82,83,84,85,98,100],[0,1,6,7,10,11,12,13,18,19,20,21,24,25,26,27,28,29,30,31,98,103,104,105,110,111,112,113,118,119],[0,1,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,97,100,106,107,108,109,114,115,116,117],[0,1,6,7,24,25,26,27,28,29,30,31,42,43,44,45,50,51,52,53,72,73,78,79,80,81,86,87,97,103],[0,1,6,7,24,25,26,27,28,29,30,31,33,34,37,38,60,61,62,63,64,67,68,71,88,89,90,91,97,98],[0,1,4,5,25,26,29,30,32,33,34,35,36,37,38,39,57,58,61,62,65,66,69,70,93,94,100,101,102,103],[0,1,4,5,9,11,12,14,32,33,34,35,36,37,38,39,41,43,44,46,81,83,84,86,91,93,113,115,116,118],[0,1,4,5,17,19,20,22,32,33,34,35,36,37,38,39,49,51,52,54,73,75,76,78,91,94,105,107,108,110],[0,1,4,5,16,18,21,23,32,33,34,35,36,37,38,39,48,50,53,55,72,74,77,79,88,93,104,106,109,111],[0,1,4,5,8,10,13,15,32,33,34,35,36,37,38,39,40,42,45,47,80,82,85,87,88,94,112,114,117,119],[0,1,4,5,24,27,28,31,32,33,34,35,36,37,38,39,56,59,60,63,64,67,68,71,88,91,96,97,98,99],[0,1,4,5,24,27,28,31,32,33,34,35,36,37,38,39,56,59,60,63,65,66,69,70,92,95,100,101,102,103],[0,1,4,5,8,10,13,15,32,33,34,35,36,37,38,39,40,42,45,47,81,83,84,86,90,92,113,115,116,118],[0,1,4,5,17,19,20,22,32,33,34,35,36,37,38,39,49,51,52,54,72,74,77,79,90,95,104,106,109,111],[0,1,4,5,16,18,21,23,32,33,34,35,36,37,38,39,48,50,53,55,73,75,76,78,89,92,105,107,108,110],[0,1,4,5,9,11,12,14,32,33,34,35,36,37,38,39,41,43,44,46,80,82,85,87,89,95,112,114,117,119],[0,1,4,5,25,26,29,30,32,33,34,35,36,37,38,39,57,58,61,62,64,67,68,71,89,90,96,97,98,99],[0,1,2,3,25,26,29,30,33,34,37,38,61,62,64,65,66,67,68,69,70,71,89,90,93,94,97,98,101,102],[0,1,2,3,9,10,13,14,49,50,53,54,59,61,64,65,66,67,68,69,70,71,73,74,77,78,113,114,117,118],[0,1,2,3,17,18,21,22,41,42,45,46,59,62,64,65,66,67,68,69,70,71,81,82,85,86,105,106,109,110],[0,1,2,3,16,19,20,23,40,43,44,47,56,61,64,65,66,67,68,69,70,71,80,83,84,87,104,107,108,111],[0,1,2,3,8,11,12,15,48,51,52,55,56,62,64,65,66,67,68,69,70,71,72,75,76,79,112,115,116,119],[0,1,2,3,24,27,28,31,32,35,36,39,56,59,64,65,66,67,68,69,70,71,88,91,92,95,96,99,100,103],[0,1,2,3,24,27,28,31,33,34,37,38,60,63,64,65,66,67,68,69,70,71,88,91,92,95,97,98,101,102],[0,1,2,3,8,11,12,15,49,50,53,54,58,60,64,65,66,67,68,69,70,71,72,75,76,79,113,114,117,118],[0,1,2,3,17,18,21,22,40,43,44,47,58,63,64,65,66,67,68,69,70,71,81,82,85,86,104,107,108,111],[0,1,2,3,16,19,20,23,41,42,45,46,57,60,64,65,66,67,68,69,70,71,80,83,84,87,105,106,109,110],[0,1,2,3,9,10,13,14,48,51,52,55,57,63,64,65,66,67,68,69,70,71,73,74,77,78,112,115,116,119],[0,1,2,3,25,26,29,30,32,35,36,39,57,58,64,65,66,67,68,69,70,71,89,90,93,94,96,99,100,103],[1,2,3,4,6,7,8,9,10,11,12,13,14,15,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],[1,2,3,5,6,7,48,49,50,51,52,53,54,55,88,89,90,91,92,93,94,95,104,105,106,107,108,109,110,111],[2,3,4,5,6,7,56,57,58,59,60,61,62,63,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103],[0,2,3,5,6,7,40,41,42,43,44,45,46,47,88,89,90,91,92,93,94,95,112,113,114,115,116,117,118,119],[0,2,3,4,6,7,16,17,18,19,20,21,22,23,72,73,74,75,76,77,78,79,88,89,90,91,92,93,94,95],[0,1,4,5,6,7,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,56,57,58,59,60,61,62,63],[0,3,4,5,6,7,56,57,58,59,60,61,62,63,72,73,74,75,76,77,78,79,112,113,114,115,116,117,118,119],[1,3,4,5,6,7,56,57,58,59,60,61,62,63,80,81,82,83,84,85,86,87,104,105,106,107,108,109,110,111],[0,2,4,5,6,7,16,17,18,19,20,21,22,23,40,41,42,43,44,45,46,47,56,57,58,59,60,61,62,63],[1,2,4,5,6,7,8,9,10,11,12,13,14,15,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63],[0,1,2,3,6,7,24,25,26,27,28,29,30,31,64,65,66,67,68,69,70,71,88,89,90,91,92,93,94,95],[0,2,3,4,5,7,40,41,42,43,44,45,46,47,72,73,74,75,76,77,78,79,96,97,98,99,100,101,102,103],[0,1,2,3,4,5,32,33,34,35,36,37,38,39,64,65,66,67,68,69,70,71,96,97,98,99,100,101,102,103],[1,2,3,4,5,7,8,9,10,11,12,13,14,15,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],[0,2,3,4,5,6,16,17,18,19,20,21,22,23,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119],[1,2,3,4,5,6,48,49,50,51,52,53,54,55,80,81,82,83,84,85,86,87,96,97,98,99,100,101,102,103],[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,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],[0,2,3,4,5,6,7,16,17,18,19,20,21,22,23,40,41,42,43,44,45,46,47,56,57,58,59,60,61,62,63,72,73,74,75,76,77,78,79,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119],[0,1,3,4,5,6,7,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,56,57,58,59,60,61,62,63,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119],[0,1,2,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],[0,1,2,3,5,6,7,24,25,26,27,28,29,30,31,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,64,65,66,67,68,69,70,71,88,89,90,91,92,93,94,95,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119],[0,1,2,3,4,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,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],[0,1,2,3,4,5,7,8,9,10,11,12,13,14,15,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111],[0,1,2,3,4,5,6,16,17,18,19,20,21,22,23,32,33,34,35,36,37,38,39,48,49,50,51,52,53,54,55,64,65,66,67,68,69,70,71,80,81,82,83,84,85,86,87,96,97,98,99,100,101,102,103,112,113,114,115,116,117,118,119],[0,3,5,6,11,13,14,18,19,20,21,25,27,28,30,34,35,36,37,41,43,44,46,52,53,54,55,57,59,61,63,66,67,68,69,73,74,77,78,82,83,86,87,89,91,93,95,98,99,102,103,105,107,109,111,112,113,114,115,116,117,118,119],[0,3,5,6,10,12,15,18,19,20,21,24,26,29,31,34,35,36,37,40,42,45,47,52,53,54,55,56,58,60,62,66,67,68,69,72,75,76,79,82,83,86,87,88,90,92,94,98,99,102,103,104,106,108,110,112,113,114,115,116,117,118,119],[0,3,5,6,9,12,15,16,17,22,23,25,27,28,30,32,33,38,39,41,43,44,46,52,53,54,55,56,58,60,62,66,67,68,69,72,75,76,79,80,81,84,85,89,91,93,95,96,97,100,101,105,107,109,111,112,113,114,115,116,117,118,119],[0,3,5,6,8,13,14,16,17,22,23,24,26,29,31,32,33,38,39,40,42,45,47,52,53,54,55,57,59,61,63,66,67,68,69,73,74,77,78,80,81,84,85,88,90,92,94,96,97,100,101,104,106,108,110,112,113,114,115,116,117,118,119],[0,3,5,6,9,10,15,16,17,22,23,25,27,28,30,34,35,36,37,40,42,45,47,48,49,50,51,57,59,61,63,64,65,70,71,73,74,77,78,82,83,86,87,88,90,92,94,96,97,100,101,105,107,109,111,112,113,114,115,116,117,118,119],[0,3,5,6,8,11,14,16,17,22,23,24,26,29,31,34,35,36,37,41,43,44,46,48,49,50,51,56,58,60,62,64,65,70,71,72,75,76,79,82,83,86,87,89,91,93,95,96,97,100,101,104,106,108,110,112,113,114,115,116,117,118,119],[0,3,5,6,8,11,13,18,19,20,21,25,27,28,30,32,33,38,39,40,42,45,47,48,49,50,51,56,58,60,62,64,65,70,71,72,75,76,79,80,81,84,85,88,90,92,94,98,99,102,103,105,107,109,111,112,113,114,115,116,117,118,119],[0,3,5,6,9,10,12,18,19,20,21,24,26,29,31,32,33,38,39,41,43,44,46,48,49,50,51,57,59,61,63,64,65,70,71,73,74,77,78,80,81,84,85,89,91,93,95,98,99,102,103,104,106,108,110,112,113,114,115,116,117,118,119],[1,3,5,7,10,11,12,13,19,21,22,26,27,30,31,34,35,38,39,44,45,46,47,49,51,52,54,58,59,62,63,66,67,70,71,74,75,78,79,81,82,85,86,90,91,94,95,98,99,102,103,104,105,106,107,108,109,110,111,113,115,117,119],[1,3,5,7,10,11,12,13,18,20,23,24,25,28,29,34,35,38,39,44,45,46,47,48,50,53,55,56,57,60,61,66,67,70,71,74,75,78,79,80,83,84,87,88,89,92,93,98,99,102,103,104,105,106,107,108,109,110,111,112,114,116,118],[1,3,5,7,8,9,14,15,17,20,23,26,27,30,31,32,33,36,37,44,45,46,47,49,51,52,54,56,57,60,61,66,67,70,71,72,73,76,77,80,83,84,87,90,91,94,95,96,97,100,101,104,105,106,107,108,109,110,111,113,115,117,119],[1,3,5,7,8,9,14,15,16,21,22,24,25,28,29,32,33,36,37,44,45,46,47,48,50,53,55,58,59,62,63,66,67,70,71,72,73,76,77,81,82,85,86,88,89,92,93,96,97,100,101,104,105,106,107,108,109,110,111,112,114,116,118],[1,3,5,7,8,9,14,15,17,18,23,26,27,30,31,34,35,38,39,40,41,42,43,48,50,53,55,58,59,62,63,64,65,68,69,74,75,78,79,81,82,85,86,88,89,92,93,96,97,100,101,104,105,106,107,108,109,110,111,113,115,117,119],[1,3,5,7,8,9,14,15,16,19,22,24,25,28,29,34,35,38,39,40,41,42,43,49,51,52,54,56,57,60,61,64,65,68,69,74,75,78,79,80,83,84,87,90,91,94,95,96,97,100,101,104,105,106,107,108,109,110,111,112,114,116,118],[1,3,5,7,10,11,12,13,16,19,21,26,27,30,31,32,33,36,37,40,41,42,43,48,50,53,55,56,57,60,61,64,65,68,69,72,73,76,77,80,83,84,87,88,89,92,93,98,99,102,103,104,105,106,107,108,109,110,111,113,115,117,119],[1,3,5,7,10,11,12,13,17,18,20,24,25,28,29,32,33,36,37,40,41,42,43,49,51,52,54,58,59,62,63,64,65,68,69,72,73,76,77,81,82,85,86,90,91,94,95,98,99,102,103,104,105,106,107,108,109,110,111,112,114,116,118],[2,3,4,5,9,11,13,15,17,19,21,23,27,29,30,36,37,38,39,41,43,45,47,49,51,53,55,57,58,61,62,68,69,70,71,73,75,77,79,81,83,85,87,89,90,93,94,96,97,98,99,100,101,102,103,105,107,109,111,113,115,117,119],[2,3,4,5,8,10,12,14,17,19,21,23,26,28,31,36,37,38,39,40,42,44,46,49,51,53,55,56,59,60,63,68,69,70,71,72,74,76,78,81,83,85,87,88,91,92,95,96,97,98,99,100,101,102,103,104,106,108,110,113,115,117,119],[2,3,4,5,9,11,13,15,16,18,20,22,25,28,31,36,37,38,39,41,43,45,47,48,50,52,54,56,59,60,63,68,69,70,71,73,75,77,79,80,82,84,86,88,91,92,95,96,97,98,99,100,101,102,103,105,107,109,111,112,114,116,118],[2,3,4,5,8,10,12,14,16,18,20,22,24,29,30,36,37,38,39,40,42,44,46,48,50,52,54,57,58,61,62,68,69,70,71,72,74,76,78,80,82,84,86,89,90,93,94,96,97,98,99,100,101,102,103,104,106,108,110,112,114,116,118],[2,3,4,5,8,10,12,14,17,19,21,23,25,26,31,32,33,34,35,41,43,45,47,48,50,52,54,57,58,61,62,64,65,66,67,73,75,77,79,80,82,84,86,89,90,93,94,96,97,98,99,100,101,102,103,104,106,108,110,113,115,117,119],[2,3,4,5,9,11,13,15,17,19,21,23,24,27,30,32,33,34,35,40,42,44,46,48,50,52,54,56,59,60,63,64,65,66,67,72,74,76,78,80,82,84,86,88,91,92,95,96,97,98,99,100,101,102,103,105,107,109,111,113,115,117,119],[2,3,4,5,8,10,12,14,16,18,20,22,24,27,29,32,33,34,35,41,43,45,47,49,51,53,55,56,59,60,63,64,65,66,67,73,75,77,79,81,83,85,87,88,91,92,95,96,97,98,99,100,101,102,103,104,106,108,110,112,114,116,118],[2,3,4,5,9,11,13,15,16,18,20,22,25,26,28,32,33,34,35,40,42,44,46,49,51,53,55,57,58,61,62,64,65,66,67,72,74,76,78,81,83,85,87,89,90,93,94,96,97,98,99,100,101,102,103,105,107,109,111,112,114,116,118],[2,3,6,7,10,11,14,15,18,19,22,23,28,29,30,31,35,37,38,42,43,46,47,50,51,54,55,60,61,62,63,68,69,70,71,74,75,78,79,82,83,86,87,88,89,90,91,92,93,94,95,97,98,101,102,106,107,110,111,114,115,118,119],[2,3,6,7,10,11,14,15,18,19,22,23,28,29,30,31,34,36,39,40,41,44,45,48,49,52,53,56,57,58,59,68,69,70,71,74,75,78,79,82,83,86,87,88,89,90,91,92,93,94,95,96,99,100,103,104,105,108,109,112,113,116,117],[2,3,6,7,8,9,12,13,16,17,20,21,28,29,30,31,33,36,39,42,43,46,47,50,51,54,55,56,57,58,59,68,69,70,71,72,73,76,77,80,81,84,85,88,89,90,91,92,93,94,95,96,99,100,103,106,107,110,111,114,115,118,119],[2,3,6,7,8,9,12,13,16,17,20,21,28,29,30,31,32,37,38,40,41,44,45,48,49,52,53,60,61,62,63,68,69,70,71,72,73,76,77,80,81,84,85,88,89,90,91,92,93,94,95,97,98,101,102,104,105,108,109,112,113,116,117],[2,3,6,7,8,9,12,13,18,19,22,23,24,25,26,27,33,34,39,42,43,46,47,48,49,52,53,60,61,62,63,64,65,66,67,74,75,78,79,80,81,84,85,88,89,90,91,92,93,94,95,97,98,101,102,104,105,108,109,114,115,118,119],[2,3,6,7,8,9,12,13,18,19,22,23,24,25,26,27,32,35,38,40,41,44,45,50,51,54,55,56,57,58,59,64,65,66,67,74,75,78,79,80,81,84,85,88,89,90,91,92,93,94,95,96,99,100,103,106,107,110,111,112,113,116,117],[2,3,6,7,10,11,14,15,16,17,20,21,24,25,26,27,32,35,37,42,43,46,47,48,49,52,53,56,57,58,59,64,65,66,67,72,73,76,77,82,83,86,87,88,89,90,91,92,93,94,95,96,99,100,103,104,105,108,109,114,115,118,119],[2,3,6,7,10,11,14,15,16,17,20,21,24,25,26,27,33,34,36,40,41,44,45,50,51,54,55,60,61,62,63,64,65,66,67,72,73,76,77,82,83,86,87,88,89,90,91,92,93,94,95,97,98,101,102,106,107,110,111,112,113,116,117],[1,3,4,6,9,11,12,14,20,21,22,23,25,27,29,31,33,35,37,39,43,45,46,50,51,52,53,57,59,60,62,66,67,70,71,73,75,77,79,80,81,82,83,84,85,86,87,89,91,93,95,97,99,101,103,105,106,109,110,114,115,118,119],[1,3,4,6,8,10,13,15,20,21,22,23,24,26,28,30,33,35,37,39,42,44,47,50,51,52,53,56,58,61,63,66,67,70,71,72,74,76,78,80,81,82,83,84,85,86,87,88,90,92,94,97,99,101,103,104,107,108,111,114,115,118,119],[1,3,4,6,9,11,12,14,20,21,22,23,25,27,29,31,32,34,36,38,41,44,47,48,49,54,55,56,58,61,63,66,67,70,71,73,75,77,79,80,81,82,83,84,85,86,87,89,91,93,95,96,98,100,102,104,107,108,111,112,113,116,117],[1,3,4,6,8,10,13,15,20,21,22,23,24,26,28,30,32,34,36,38,40,45,46,48,49,54,55,57,59,60,62,66,67,70,71,72,74,76,78,80,81,82,83,84,85,86,87,88,90,92,94,96,98,100,102,105,106,109,110,112,113,116,117],[1,3,4,6,8,10,13,15,16,17,18,19,25,27,29,31,33,35,37,39,41,42,47,48,49,54,55,57,59,60,62,64,65,68,69,73,75,77,79,80,81,82,83,84,85,86,87,88,90,92,94,96,98,100,102,105,106,109,110,114,115,118,119],[1,3,4,6,9,11,12,14,16,17,18,19,24,26,28,30,33,35,37,39,40,43,46,48,49,54,55,56,58,61,63,64,65,68,69,72,74,76,78,80,81,82,83,84,85,86,87,89,91,93,95,96,98,100,102,104,107,108,111,114,115,118,119],[1,3,4,6,8,10,13,15,16,17,18,19,25,27,29,31,32,34,36,38,40,43,45,50,51,52,53,56,58,61,63,64,65,68,69,73,75,77,79,80,81,82,83,84,85,86,87,88,90,92,94,97,99,101,103,104,107,108,111,112,113,116,117],[1,3,4,6,9,11,12,14,16,17,18,19,24,26,28,30,32,34,36,38,41,42,44,50,51,52,53,57,59,60,62,64,65,68,69,72,74,76,78,80,81,82,83,84,85,86,87,89,91,93,95,97,99,101,103,105,106,109,110,112,113,116,117],[0,3,4,7,12,13,14,15,17,19,20,22,26,27,28,29,33,35,36,38,42,43,44,45,51,53,54,58,59,60,61,66,67,68,69,72,73,74,75,76,77,78,79,81,83,85,87,90,91,94,95,97,99,101,103,106,107,110,111,113,114,117,118],[0,3,4,7,12,13,14,15,16,18,21,23,24,25,30,31,33,35,36,38,42,43,44,45,50,52,55,56,57,62,63,66,67,68,69,72,73,74,75,76,77,78,79,80,82,84,86,88,89,92,93,97,99,101,103,106,107,110,111,112,115,116,119],[0,3,4,7,12,13,14,15,17,19,20,22,26,27,28,29,32,34,37,39,40,41,46,47,49,52,55,56,57,62,63,66,67,68,69,72,73,74,75,76,77,78,79,81,83,85,87,90,91,94,95,96,98,100,102,104,105,108,109,112,115,116,119],[0,3,4,7,12,13,14,15,16,18,21,23,24,25,30,31,32,34,37,39,40,41,46,47,48,53,54,58,59,60,61,66,67,68,69,72,73,74,75,76,77,78,79,80,82,84,86,88,89,92,93,96,98,100,102,104,105,108,109,113,114,117,118],[0,3,4,7,8,9,10,11,16,18,21,23,26,27,28,29,33,35,36,38,40,41,46,47,49,50,55,58,59,60,61,64,65,70,71,72,73,74,75,76,77,78,79,81,83,85,87,88,89,92,93,96,98,100,102,106,107,110,111,113,114,117,118],[0,3,4,7,8,9,10,11,17,19,20,22,24,25,30,31,33,35,36,38,40,41,46,47,48,51,54,56,57,62,63,64,65,70,71,72,73,74,75,76,77,78,79,80,82,84,86,90,91,94,95,96,98,100,102,106,107,110,111,112,115,116,119],[0,3,4,7,8,9,10,11,16,18,21,23,26,27,28,29,32,34,37,39,42,43,44,45,48,51,53,56,57,62,63,64,65,70,71,72,73,74,75,76,77,78,79,81,83,85,87,88,89,92,93,97,99,101,103,104,105,108,109,112,115,116,119],[0,3,4,7,8,9,10,11,17,19,20,22,24,25,30,31,32,34,37,39,42,43,44,45,49,50,52,58,59,60,61,64,65,70,71,72,73,74,75,76,77,78,79,80,82,84,86,90,91,94,95,97,99,101,103,104,105,108,109,113,114,117,118],[0,1,2,3,9,10,13,14,17,18,21,22,25,26,29,30,33,34,37,38,41,42,45,46,49,50,53,54,59,61,62,64,65,66,67,68,69,70,71,73,74,77,78,81,82,85,86,89,90,93,94,97,98,101,102,105,106,109,110,113,114,117,118],[0,1,2,3,8,11,12,15,17,18,21,22,24,27,28,31,33,34,37,38,40,43,44,47,49,50,53,54,58,60,63,64,65,66,67,68,69,70,71,72,75,76,79,81,82,85,86,88,91,92,95,97,98,101,102,104,107,108,111,113,114,117,118],[0,1,2,3,9,10,13,14,16,19,20,23,24,27,28,31,33,34,37,38,41,42,45,46,48,51,52,55,57,60,63,64,65,66,67,68,69,70,71,73,74,77,78,80,83,84,87,88,91,92,95,97,98,101,102,105,106,109,110,112,115,116,119],[0,1,2,3,8,11,12,15,16,19,20,23,25,26,29,30,33,34,37,38,40,43,44,47,48,51,52,55,56,61,62,64,65,66,67,68,69,70,71,72,75,76,79,80,83,84,87,89,90,93,94,97,98,101,102,104,107,108,111,112,115,116,119],[0,1,2,3,9,10,13,14,17,18,21,22,25,26,29,30,32,35,36,39,40,43,44,47,48,51,52,55,57,58,63,64,65,66,67,68,69,70,71,73,74,77,78,81,82,85,86,89,90,93,94,96,99,100,103,104,107,108,111,112,115,116,119],[0,1,2,3,8,11,12,15,17,18,21,22,24,27,28,31,32,35,36,39,41,42,45,46,48,51,52,55,56,59,62,64,65,66,67,68,69,70,71,72,75,76,79,81,82,85,86,88,91,92,95,96,99,100,103,105,106,109,110,112,115,116,119],[0,1,2,3,9,10,13,14,16,19,20,23,24,27,28,31,32,35,36,39,40,43,44,47,49,50,53,54,56,59,61,64,65,66,67,68,69,70,71,73,74,77,78,80,83,84,87,88,91,92,95,96,99,100,103,104,107,108,111,113,114,117,118],[0,1,2,3,8,11,12,15,16,19,20,23,25,26,29,30,32,35,36,39,41,42,45,46,49,50,53,54,57,58,60,64,65,66,67,68,69,70,71,72,75,76,79,80,83,84,87,89,90,93,94,96,99,100,103,105,106,109,110,113,114,117,118],[4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31,36,37,38,39,44,45,46,47,52,53,54,55,56,57,58,59,60,61,62,63,67,69,70,76,77,78,79,84,85,86,87,92,93,94,95,100,101,102,103,108,109,110,111,116,117,118,119],[4,5,6,7,12,13,14,15,20,21,22,23,28,29,30,31,36,37,38,39,44,45,46,47,52,53,54,55,56,57,58,59,60,61,62,63,66,68,71,72,73,74,75,80,81,82,83,88,89,90,91,96,97,98,99,104,105,106,107,112,113,114,115],[4,5,6,7,8,9,10,11,16,17,18,19,28,29,30,31,36,37,38,39,40,41,42,43,48,49,50,51,56,57,58,59,60,61,62,63,65,68,71,76,77,78,79,84,85,86,87,88,89,90,91,96,97,98,99,108,109,110,111,116,117,118,119],[4,5,6,7,8,9,10,11,16,17,18,19,28,29,30,31,36,37,38,39,40,41,42,43,48,49,50,51,56,57,58,59,60,61,62,63,64,69,70,72,73,74,75,80,81,82,83,92,93,94,95,100,101,102,103,104,105,106,107,112,113,114,115],[4,5,6,7,8,9,10,11,20,21,22,23,24,25,26,27,32,33,34,35,44,45,46,47,48,49,50,51,56,57,58,59,60,61,62,63,65,66,71,76,77,78,79,80,81,82,83,92,93,94,95,100,101,102,103,104,105,106,107,116,117,118,119],[4,5,6,7,8,9,10,11,20,21,22,23,24,25,26,27,32,33,34,35,44,45,46,47,48,49,50,51,56,57,58,59,60,61,62,63,64,67,70,72,73,74,75,84,85,86,87,88,89,90,91,96,97,98,99,108,109,110,111,112,113,114,115],[4,5,6,7,12,13,14,15,16,17,18,19,24,25,26,27,32,33,34,35,40,41,42,43,52,53,54,55,56,57,58,59,60,61,62,63,64,67,69,76,77,78,79,80,81,82,83,88,89,90,91,96,97,98,99,104,105,106,107,116,117,118,119],[4,5,6,7,12,13,14,15,16,17,18,19,24,25,26,27,32,33,34,35,40,41,42,43,52,53,54,55,56,57,58,59,60,61,62,63,65,66,68,72,73,74,75,84,85,86,87,92,93,94,95,100,101,102,103,108,109,110,111,112,113,114,115],[1,2,5,6,9,10,13,14,18,19,22,23,25,27,29,31,34,35,38,39,41,43,45,47,48,49,50,51,52,53,54,55,57,59,61,63,65,67,69,71,75,77,78,82,83,84,85,89,91,92,94,98,99,100,101,105,107,108,110,116,117,118,119],[1,2,5,6,8,11,12,15,18,19,22,23,24,26,28,30,34,35,38,39,40,42,44,46,48,49,50,51,52,53,54,55,56,58,60,62,65,67,69,71,74,76,79,82,83,84,85,88,90,93,95,98,99,100,101,104,106,109,111,116,117,118,119],[1,2,5,6,8,11,12,15,16,17,20,21,25,27,29,31,32,33,36,37,41,43,45,47,48,49,50,51,52,53,54,55,56,58,60,62,65,67,69,71,73,76,79,80,81,86,87,89,91,92,94,96,97,102,103,105,107,108,110,116,117,118,119],[1,2,5,6,9,10,13,14,16,17,20,21,24,26,28,30,32,33,36,37,40,42,44,46,48,49,50,51,52,53,54,55,57,59,61,63,65,67,69,71,72,77,78,80,81,86,87,88,90,93,95,96,97,102,103,104,106,109,111,116,117,118,119],[1,2,5,6,9,10,13,14,18,19,22,23,25,27,29,31,34,35,38,39,41,43,45,47,48,49,50,51,52,53,54,55,57,59,61,63,64,66,68,70,73,74,79,80,81,86,87,88,90,93,95,96,97,102,103,104,106,109,111,112,113,114,115],[1,2,5,6,8,11,12,15,18,19,22,23,24,26,28,30,34,35,38,39,40,42,44,46,48,49,50,51,52,53,54,55,56,58,60,62,64,66,68,70,72,75,78,80,81,86,87,89,91,92,94,96,97,102,103,105,107,108,110,112,113,114,115],[1,2,5,6,8,11,12,15,16,17,20,21,25,27,29,31,32,33,36,37,41,43,45,47,48,49,50,51,52,53,54,55,56,58,60,62,64,66,68,70,72,75,77,82,83,84,85,88,90,93,95,98,99,100,101,104,106,109,111,112,113,114,115],[1,2,5,6,9,10,13,14,16,17,20,21,24,26,28,30,32,33,36,37,40,42,44,46,48,49,50,51,52,53,54,55,57,59,61,63,64,66,68,70,73,74,76,82,83,84,85,89,91,92,94,98,99,100,101,105,107,108,110,112,113,114,115],[0,2,5,7,10,11,14,15,17,18,21,22,26,27,28,29,34,35,36,37,40,41,42,43,44,45,46,47,49,51,53,55,58,59,62,63,65,67,68,70,74,75,76,77,83,85,86,90,91,92,93,98,99,100,101,108,109,110,111,113,115,116,118],[0,2,5,7,10,11,14,15,16,19,20,23,24,25,30,31,34,35,36,37,40,41,42,43,44,45,46,47,48,50,52,54,56,57,60,61,65,67,68,70,74,75,76,77,82,84,87,88,89,94,95,98,99,100,101,108,109,110,111,112,114,117,119],[0,2,5,7,8,9,12,13,16,19,20,23,26,27,28,29,32,33,38,39,40,41,42,43,44,45,46,47,49,51,53,55,56,57,60,61,65,67,68,70,72,73,78,79,81,84,87,90,91,92,93,96,97,102,103,108,109,110,111,113,115,116,118],[0,2,5,7,8,9,12,13,17,18,21,22,24,25,30,31,32,33,38,39,40,41,42,43,44,45,46,47,48,50,52,54,58,59,62,63,65,67,68,70,72,73,78,79,80,85,86,88,89,94,95,96,97,102,103,108,109,110,111,112,114,117,119],[0,2,5,7,10,11,14,15,17,18,21,22,26,27,28,29,34,35,36,37,40,41,42,43,44,45,46,47,49,51,53,55,58,59,62,63,64,66,69,71,72,73,78,79,81,82,87,88,89,94,95,96,97,102,103,104,105,106,107,112,114,117,119],[0,2,5,7,10,11,14,15,16,19,20,23,24,25,30,31,34,35,36,37,40,41,42,43,44,45,46,47,48,50,52,54,56,57,60,61,64,66,69,71,72,73,78,79,80,83,86,90,91,92,93,96,97,102,103,104,105,106,107,113,115,116,118],[0,2,5,7,8,9,12,13,16,19,20,23,26,27,28,29,32,33,38,39,40,41,42,43,44,45,46,47,49,51,53,55,56,57,60,61,64,66,69,71,74,75,76,77,80,83,85,88,89,94,95,98,99,100,101,104,105,106,107,112,114,117,119],[0,2,5,7,8,9,12,13,17,18,21,22,24,25,30,31,32,33,38,39,40,41,42,43,44,45,46,47,48,50,52,54,58,59,62,63,64,66,69,71,74,75,76,77,81,82,84,90,91,92,93,98,99,100,101,104,105,106,107,113,115,116,118],[0,1,4,5,9,11,12,14,17,19,20,22,25,26,29,30,32,33,34,35,36,37,38,39,41,43,44,46,49,51,52,54,57,58,61,62,65,66,69,70,73,75,76,78,81,83,84,86,91,93,94,100,101,102,103,105,107,108,110,113,115,116,118],[0,1,4,5,8,10,13,15,17,19,20,22,24,27,28,31,32,33,34,35,36,37,38,39,40,42,45,47,49,51,52,54,56,59,60,63,65,66,69,70,72,74,77,79,81,83,84,86,90,92,95,100,101,102,103,104,106,109,111,113,115,116,118],[0,1,4,5,9,11,12,14,16,18,21,23,24,27,28,31,32,33,34,35,36,37,38,39,41,43,44,46,48,50,53,55,56,59,60,63,65,66,69,70,73,75,76,78,80,82,85,87,89,92,95,100,101,102,103,105,107,108,110,112,114,117,119],[0,1,4,5,8,10,13,15,16,18,21,23,25,26,29,30,32,33,34,35,36,37,38,39,40,42,45,47,48,50,53,55,57,58,61,62,65,66,69,70,72,74,77,79,80,82,85,87,88,93,94,100,101,102,103,104,106,109,111,112,114,117,119],[0,1,4,5,9,11,12,14,17,19,20,22,25,26,29,30,32,33,34,35,36,37,38,39,41,43,44,46,49,51,52,54,57,58,61,62,64,67,68,71,72,74,77,79,80,82,85,87,89,90,95,96,97,98,99,104,106,109,111,112,114,117,119],[0,1,4,5,8,10,13,15,17,19,20,22,24,27,28,31,32,33,34,35,36,37,38,39,40,42,45,47,49,51,52,54,56,59,60,63,64,67,68,71,73,75,76,78,80,82,85,87,88,91,94,96,97,98,99,105,107,108,110,112,114,117,119],[0,1,4,5,9,11,12,14,16,18,21,23,24,27,28,31,32,33,34,35,36,37,38,39,41,43,44,46,48,50,53,55,56,59,60,63,64,67,68,71,72,74,77,79,81,83,84,86,88,91,93,96,97,98,99,104,106,109,111,113,115,116,118],[0,1,4,5,8,10,13,15,16,18,21,23,25,26,29,30,32,33,34,35,36,37,38,39,40,42,45,47,48,50,53,55,57,58,61,62,64,67,68,71,73,75,76,78,81,83,84,86,89,90,92,96,97,98,99,105,107,108,110,113,115,116,118],[0,1,6,7,10,11,12,13,18,19,20,21,24,25,26,27,28,29,30,31,33,34,37,38,42,43,44,45,50,51,52,53,60,61,62,63,65,66,69,70,74,75,76,77,82,83,84,85,92,93,94,95,99,101,102,106,107,108,109,114,115,116,117],[0,1,6,7,10,11,12,13,18,19,20,21,24,25,26,27,28,29,30,31,32,35,36,39,40,41,46,47,48,49,54,55,56,57,58,59,65,66,69,70,74,75,76,77,82,83,84,85,92,93,94,95,98,100,103,104,105,110,111,112,113,118,119],[0,1,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,32,35,36,39,42,43,44,45,50,51,52,53,56,57,58,59,65,66,69,70,72,73,78,79,80,81,86,87,92,93,94,95,97,100,103,106,107,108,109,114,115,116,117],[0,1,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,33,34,37,38,40,41,46,47,48,49,54,55,60,61,62,63,65,66,69,70,72,73,78,79,80,81,86,87,92,93,94,95,96,101,102,104,105,110,111,112,113,118,119],[0,1,6,7,10,11,12,13,18,19,20,21,24,25,26,27,28,29,30,31,33,34,37,38,42,43,44,45,50,51,52,53,60,61,62,63,64,67,68,71,72,73,78,79,80,81,86,87,88,89,90,91,97,98,103,104,105,110,111,112,113,118,119],[0,1,6,7,10,11,12,13,18,19,20,21,24,25,26,27,28,29,30,31,32,35,36,39,40,41,46,47,48,49,54,55,56,57,58,59,64,67,68,71,72,73,78,79,80,81,86,87,88,89,90,91,96,99,102,106,107,108,109,114,115,116,117],[0,1,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,32,35,36,39,42,43,44,45,50,51,52,53,56,57,58,59,64,67,68,71,74,75,76,77,82,83,84,85,88,89,90,91,96,99,101,104,105,110,111,112,113,118,119],[0,1,6,7,8,9,14,15,16,17,22,23,24,25,26,27,28,29,30,31,33,34,37,38,40,41,46,47,48,49,54,55,60,61,62,63,64,67,68,71,74,75,76,77,82,83,84,85,88,89,90,91,97,98,100,106,107,108,109,114,115,116,117],[0,2,4,6,9,11,13,15,16,17,18,19,20,21,22,23,25,27,28,30,33,35,36,38,41,42,45,46,50,51,54,55,57,59,60,62,65,67,68,70,73,75,76,78,84,85,86,87,89,91,92,94,97,99,100,102,107,109,110,114,115,116,117],[0,2,4,6,8,10,12,14,16,17,18,19,20,21,22,23,24,26,29,31,33,35,36,38,40,43,44,47,50,51,54,55,56,58,61,63,65,67,68,70,72,74,77,79,84,85,86,87,88,90,93,95,97,99,100,102,106,108,111,114,115,116,117],[0,2,4,6,9,11,13,15,16,17,18,19,20,21,22,23,25,27,28,30,32,34,37,39,40,43,44,47,48,49,52,53,56,58,61,63,65,67,68,70,73,75,76,78,84,85,86,87,89,91,92,94,96,98,101,103,105,108,111,112,113,118,119],[0,2,4,6,8,10,12,14,16,17,18,19,20,21,22,23,24,26,29,31,32,34,37,39,41,42,45,46,48,49,52,53,57,59,60,62,65,67,68,70,72,74,77,79,84,85,86,87,88,90,93,95,96,98,101,103,104,109,110,112,113,118,119],[0,2,4,6,9,11,13,15,16,17,18,19,20,21,22,23,25,27,28,30,33,35,36,38,41,42,45,46,50,51,54,55,57,59,60,62,64,66,69,71,72,74,77,79,80,81,82,83,88,90,93,95,96,98,101,103,105,106,111,112,113,118,119],[0,2,4,6,8,10,12,14,16,17,18,19,20,21,22,23,24,26,29,31,33,35,36,38,40,43,44,47,50,51,54,55,56,58,61,63,64,66,69,71,73,75,76,78,80,81,82,83,89,91,92,94,96,98,101,103,104,107,110,112,113,118,119],[0,2,4,6,9,11,13,15,16,17,18,19,20,21,22,23,25,27,28,30,32,34,37,39,40,43,44,47,48,49,52,53,56,58,61,63,64,66,69,71,72,74,77,79,80,81,82,83,88,90,93,95,97,99,100,102,104,107,109,114,115,116,117],[0,2,4,6,8,10,12,14,16,17,18,19,20,21,22,23,24,26,29,31,32,34,37,39,41,42,45,46,48,49,52,53,57,59,60,62,64,66,69,71,73,75,76,78,80,81,82,83,89,91,92,94,97,99,100,102,105,106,108,114,115,116,117],[1,2,4,7,8,9,10,11,12,13,14,15,17,19,21,23,26,27,30,31,33,35,37,39,42,43,46,47,49,50,53,54,58,59,60,61,65,67,69,71,76,77,78,79,81,83,84,86,90,91,92,93,97,99,100,102,106,107,108,109,115,117,118],[1,2,4,7,8,9,10,11,12,13,14,15,16,18,20,22,24,25,28,29,33,35,37,39,42,43,46,47,48,51,52,55,56,57,62,63,65,67,69,71,76,77,78,79,80,82,85,87,88,89,94,95,97,99,100,102,106,107,108,109,114,116,119],[1,2,4,7,8,9,10,11,12,13,14,15,17,19,21,23,26,27,30,31,32,34,36,38,40,41,44,45,48,51,52,55,56,57,62,63,65,67,69,71,76,77,78,79,81,83,84,86,90,91,92,93,96,98,101,103,104,105,110,111,113,116,119],[1,2,4,7,8,9,10,11,12,13,14,15,16,18,20,22,24,25,28,29,32,34,36,38,40,41,44,45,49,50,53,54,58,59,60,61,65,67,69,71,76,77,78,79,80,82,85,87,88,89,94,95,96,98,101,103,104,105,110,111,112,117,118],[1,2,4,7,8,9,10,11,12,13,14,15,17,19,21,23,26,27,30,31,33,35,37,39,42,43,46,47,49,50,53,54,58,59,60,61,64,66,68,70,72,73,74,75,80,82,85,87,88,89,94,95,96,98,101,103,104,105,110,111,113,114,119],[1,2,4,7,8,9,10,11,12,13,14,15,16,18,20,22,24,25,28,29,33,35,37,39,42,43,46,47,48,51,52,55,56,57,62,63,64,66,68,70,72,73,74,75,81,83,84,86,90,91,92,93,96,98,101,103,104,105,110,111,112,115,118],[1,2,4,7,8,9,10,11,12,13,14,15,17,19,21,23,26,27,30,31,32,34,36,38,40,41,44,45,48,51,52,55,56,57,62,63,64,66,68,70,72,73,74,75,80,82,85,87,88,89,94,95,97,99,100,102,106,107,108,109,112,115,117],[1,2,4,7,8,9,10,11,12,13,14,15,16,18,20,22,24,25,28,29,32,34,36,38,40,41,44,45,49,50,53,54,58,59,60,61,64,66,68,70,72,73,74,75,81,83,84,86,90,91,92,93,97,99,100,102,106,107,108,109,113,114,116],[4,6],[0,6],[5,6]],"h":8,"lines":[[2,0,0,0,0,0,0,0],[0,2,0,0,0,0,0,0],[0,0,2,0,0,0,0,0],[0,0,0,2,0,0,0,0],[0,0,0,0,2,0,0,0],[0,0,0,0,0,2,0,0],[0,0,0,0,0,0,2,0],[0,0,0,0,0,0,0,2],[0,1,1,0,1,0,0,1],[0,1,1,0,1,0,0,-1],[0,1,1,0,-1,0,0,1],[0,1,1,0,-1,0,0,-1],[0,1,-1,0,1,0,0,1],[0,1,-1,0,1,0,0,-1],[0,1,-1,0,-1,0,0,1],[0,1,-1,0,-1,0,0,-1],[1,0,1,0,1,0,1,0],[1,0,1,0,1,0,-1,0],[1,0,1,0,-1,0,1,0],[1,0,1,0,-1,0,-1,0],[1,0,-1,0,1,0,1,0],[1,0,-1,0,1,0,-1,0],[1,0,-1,0,-1,0,1,0],[1,0,-1,0,-1,0,-1,0],[1,1,0,0,0,0,1,1],[1,1,0,0,0,0,1,-1],[1,1,0,0,0,0,-1,1],[1,1,0,0,0,0,-1,-1],[1,-1,0,0,0,0,1,1],[1,-1,0,0,0,0,1,-1],[1,-1,0,0,0,0,-1,1],[1,-1,0,0,0,0,-1,-1],[1,1,0,0,1,1,0,0],[1,1,0,0,1,-1,0,0],[1,1,0,0,-1,1,0,0],[1,1,0,0,-1,-1,0,0],[1,-1,0,0,1,1,0,0],[1,-1,0,0,1,-1,0,0],[1,-1,0,0,-1,1,0,0],[1,-1,0,0,-1,-1,0,0],[1,0,1,0,0,1,0,1],[1,0,1,0,0,1,0,-1],[1,0,1,0,0,-1,0,1],[1,0,1,0,0,-1,0,-1],[1,0,-1,0,0,1,0,1],[1,0,-1,0,0,1,0,-1],[1,0,-1,0,0,-1,0,1],[1,0,-1,0,0,-1,0,-1],[0,1,1,0,0,1,1,0],[0,1,1,0,0,1,-1,0],[0,1,1,0,0,-1,1,0],[0,1,1,0,0,-1,-1,0],[0,1,-1,0,0,1,1,0],[0,1,-1,0,0,1,-1,0],[0,1,-1,0,0,-1,1,0],[0,1,-1,0,0,-1,-1,0],[0,0,0,0,1,1,1,1],[0,0,0,0,1,1,1,-1],[0,0,0,0,1,1,-1,1],[0,0,0,0,1,1,-1,-1],[0,0,0,0,1,-1,1,1],[0,0,0,0,1,-1,1,-1],[0,0,0,0,1,-1,-1,1],[0,0,0,0,1,-1,-1,-1],[1,1,1,1,0,0,0,0],[1,1,1,-1,0,0,0,0],[1,1,-1,1,0,0,0,0],[1,1,-1,-1,0,0,0,0],[1,-1,1,1,0,0,0,0],[1,-1,1,-1,0,0,0,0],[1,-1,-1,1,0,0,0,0],[1,-1,-1,-1,0,0,0,0],[1,0,0,1,1,0,0,1],[1,0,0,1,1,0,0,-1],[1,0,0,1,-1,0,0,1],[1,0,0,1,-1,0,0,-1],[1,0,0,-1,1,0,0,1],[1,0,0,-1,1,0,0,-1],[1,0,0,-1,-1,0,0,1],[1,0,0,-1,-1,0,0,-1],[0,1,0,1,1,0,1,0],[0,1,0,1,1,0,-1,0],[0,1,0,1,-1,0,1,0],[0,1,0,1,-1,0,-1,0],[0,1,0,-1,1,0,1,0],[0,1,0,-1,1,0,-1,0],[0,1,0,-1,-1,0,1,0],[0,1,0,-1,-1,0,-1,0],[0,0,1,1,0,0,1,1],[0,0,1,1,0,0,1,-1],[0,0,1,1,0,0,-1,1],[0,0,1,1,0,0,-1,-1],[0,0,1,-1,0,0,1,1],[0,0,1,-1,0,0,1,-1],[0,0,1,-1,0,0,-1,1],[0,0,1,-1,0,0,-1,-1],[0,0,1,1,1,1,0,0],[0,0,1,1,1,-1,0,0],[0,0,1,1,-1,1,0,0],[0,0,1,1,-1,-1,0,0],[0,0,1,-1,1,1,0,0],[0,0,1,-1,1,-1,0,0],[0,0,1,-1,-1,1,0,0],[0,0,1,-1,-1,-1,0,0],[0,1,0,1,0,1,0,1],[0,1,0,1,0,1,0,-1],[0,1,0,1,0,-1,0,1],[0,1,0,1,0,-1,0,-1],[0,1,0,-1,0,1,0,1],[0,1,0,-1,0,1,0,-1],[0,1,0,-1,0,-1,0,1],[0,1,0,-1,0,-1,0,-1],[1,0,0,1,0,1,1,0],[1,0,0,1,0,1,-1,0],[1,0,0,1,0,-1,1,0],[1,0,0,1,0,-1,-1,0],[1,0,0,-1,0,1,1,0],[1,0,0,-1,0,1,-1,0],[1,0,0,-1,0,-1,1,0],[1,0,0,-1,0,-1,-1,0]],"ret":[250,252,253,254,265,280,296,312,329],"scatter":[[0,1],[0,2],[0,3],[0,1,2,3],[0,4],[0,1,2,4],[0,1,3,4],[0,2,3,4],[2,3],[2,3],[0,4,5],[0,2,3,5],[2,3],[2,3],[0,3,4,5],[0,2,5],[1,3],[1,3],[0,4,6],[0,1,3,6],[1,3],[1,3],[0,3,4,6],[0,1,6],[1,2],[1,2],[0,1,5,6],[0,1,2,3,4,5,6],[1,2],[1,2],[0,1,2,5,6],[0,1,3,4,5,6],[1,2],[1,2],[0,4,7],[0,1,2,7],[1,2],[1,2],[0,2,4,7],[0,1,7],[1,3],[1,3],[0,1,5,7],[0,1,2,3,4,5,7],[1,3],[1,3],[0,1,3,5,7],[0,1,2,4,5,7],[2,3],[2,3],[0,2,6,7],[0,1,2,3,4,6,7],[2,3],[2,3],[0,2,3,6,7],[0,1,2,4,6,7],[1,2],[1,2],[0,2,5,6,7],[0,3,4,5,6,7],[1,2],[1,2],[0,1,4,5,6,7],[0,1,2,3,5,6,7],[1,2],[1,2],[0,3,8],[0,1,2,8],[1,2],[1,2],[0,2,3,8],[0,1,8],[2,3],[2,3],[0,2,3,4,5,8],[0,5,8],[2,3],[2,3],[0,1,4,5,8],[0,1,2,3,5,8],[1,3],[1,3],[0,1,3,4,6,8],[0,6,8],[1,3],[1,3],[0,2,4,6,8],[0,1,2,3,6,8],[1,2],[1,2],[0,2,5,6,8],[0,3,4,5,6,8],[1,2],[1,2],[0,1,3,5,6,8],[0,1,2,4,5,6,8],[1,2],[1,2],[0,1,2,4,7,8],[0,7,8],[1,2],[1,2],[0,3,4,7,8],[0,1,2,3,7,8],[1,3],[1,3],[0,3,5,7,8],[0,2,4,5,7,8],[1,3],[1,3],[0,1,2,5,7,8],[0,1,3,4,5,7,8],[2,3],[2,3],[0,3,6,7,8],[0,1,4,6,7,8],[2,3],[2,3],[0,1,2,6,7,8],[0,2,3,4,6,7,8]],"start":[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,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,0,0,0,0,0,0,0,0,0,0,0,0,292,292,0,0,0,3,0,0,0,2,0,0,0,0,0,9,0,0,0,3,0,2,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,9,9,0,9,0,4,0,2,0,0,2,2,0,0,9,9,0,9,0,5,2,2,0,9,2,2,0,0,0,0,0,5,0,5,2,2,2,2,0,957,0,9,9,9,9,9,0,4,0,9,0,0,3,3,0,0,0,0,0,295,4,4,0,3,0,0,0,3,0,0,0,0,0,5,5,5,0,3,0,3,3,3,9,9,0,9,9,0,5,5,0,5,3,3,0,9,0,0,0,292,5,5,0,0,0,5,0,0,0,0,0,9,9,9,5,5,0,9,5,5,0,295,9,9,9,0,9,9,0,292,9,9,0,956,0,958,9,9,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,957,0,0,0,292,0,0,295,0,292,0,0,0,956,0,292,0,0,0,0,958,0,477],"target_mix":{"receivers":[[128,131,736],[129,130,742],[132,135,747],[133,134,741],[136,139,688],[137,138,694],[140,143,699],[141,142,693],[144,147,676],[145,146,682],[148,151,687],[149,150,681],[152,155,664],[153,154,670],[156,159,675],[157,158,669],[160,163,700],[161,162,706],[164,167,711],[165,166,705],[168,171,748],[169,170,754],[172,175,759],[173,174,753],[176,179,808],[177,178,814],[180,183,819],[181,182,813],[184,187,652],[185,186,658],[188,191,663],[189,190,657],[192,195,712],[193,194,718],[196,199,723],[197,198,717],[200,203,760],[201,202,766],[204,207,771],[205,206,765],[208,211,796],[209,210,802],[212,215,807],[213,214,801],[216,219,784],[217,218,790],[220,223,795],[221,222,789],[224,227,772],[225,226,778],[228,231,783],[229,230,777],[232,235,724],[233,234,730],[236,239,735],[237,238,729]],"rule":"y_u += y_w at frame G (after w reaches G); frame-0 preconditioner y_u += y_w; scatter_u ^= scatter_w"},"v":120} \ No newline at end of file diff --git a/research/e8-r715-whole-hosted/verify.py b/research/e8-r715-whole-hosted/verify.py new file mode 100644 index 0000000000..3c73a88fde --- /dev/null +++ b/research/e8-r715-whole-hosted/verify.py @@ -0,0 +1,72 @@ +"""Fresh paid-complex parent, R715 local word and whole-hosted global assembly. +Usage: verify.py NEW_ABSOLUTE_OUT [--quick] [--parent-output VERIFIED458_OUT] +Explicit parent reuse has a distinct receipt status. Apache-2.0. +Chafreaky with OpenAI Codex assistance; source authors in NOTICE.md. +""" +from pathlib import Path +import argparse,hashlib,json,os,subprocess,sys,time +assert __debug__ +ROOT=Path(__file__).resolve().parent +ap=argparse.ArgumentParser();ap.add_argument('output',type=Path);ap.add_argument('--quick',action='store_true');ap.add_argument('--parent-output',type=Path) +args=ap.parse_args();out=args.output.resolve() +assert not out.exists() and not out.is_relative_to(ROOT.parent) +read=lambda p:json.loads(p.read_text()) +sha=lambda p:hashlib.sha256(p.read_bytes()).hexdigest() +def inventory(p):return {f.relative_to(p).as_posix():sha(f) for f in p.rglob('*') if f.is_file() and '__pycache__' not in f.parts} +def integrity(): + actual=inventory(ROOT);actual.pop('MANIFEST.json');assert actual==read(ROOT/'MANIFEST.json') + for name,expected in read(ROOT/'SOURCE.json')['packages'].items():assert inventory(ROOT.parent/name)==expected['files'],name +integrity();out.mkdir(parents=True) +env=dict(os.environ,PYTHONDONTWRITEBYTECODE='1',PYTHONINTMAXSTRDIGITS='0',PYTHON=sys.executable);env.pop('PYTHONOPTIMIZE',None) +steps=[] +def run(name,command): + log=out/(name+'.log');started=time.monotonic();print('RUN',name,flush=True) + with log.open('w') as f:r=subprocess.run(list(map(str,command)),env=env,stdout=f,stderr=subprocess.STDOUT) + if r.returncode:raise RuntimeError((name,r.returncode,log.read_text()[-5000:])) + steps.append(dict(name=name,seconds=round(time.monotonic()-started,2),log_sha256=sha(log)));print('PASS',name,flush=True) +def py(name,path,*extra):run(name,[sys.executable,'-B',path,*extra]) +try: + parent_pkg=ROOT.parent/'e8-complex-adapted-kernel' + if args.parent_output:parent=args.parent_output.resolve() + else: + parent=out/'parent458';py('parent458',parent_pkg/'verify.py',parent,*(['--quick'] if args.quick else [])) + receipt=read(parent/'RECEIPT.json');pr=read(parent/'RESULT.json') + assert receipt['status']=='PASS_COMPLEX_ADAPTED_KERNEL_FULL_COMPOSITION' + assert receipt['manifest_sha256']==sha(parent_pkg/'MANIFEST.json') and receipt['source_sha256']==sha(parent_pkg/'SOURCE.json') + for k,v in read(parent_pkg/'EXPECTED.json').items():assert pr[k]==v,(k,pr[k],v) + parent451=parent/'parent454/parent451' + old=ROOT.parent/'e8-r740-replica32/parent436';B=old/'code/bit';ck=B/'checkers' + local=out/'local';host=out/'bit';word=ROOT/'data/word.json.gz';bins=out/'bin';bins.mkdir() + py('export-records',B/'export_records.py',word,local/'records') + py('exact-reconstruction',ROOT/'code/rebuild.py',local/'records') + py('mixing-controls',ROOT.parent/'e8-target-mixing-whole/upstream450/mix_check.py',word,local/'records','--controls',ROOT/'data/kernel-word.json.gz') + py('physical-target-labels',ROOT/'code/labels.py',local/'records') + py('stage-cohort',B/'regression/stage_cohort.py',local/'records',local/'records',local/'cin',local/'cout') + for name,source,ncopy in [('legality','legality_h',9),('legality_ncopy_h','legality_h',8),('columns_h','columns_h',9),('columns_k5','columns_k',9)]: + command=[os.environ.get('CXX','c++'),'-O2','-std=c++17','-DHDIM=8','-DVPORTS=120','-DRHELP=715','-DKPAIRS=5',f'-DNCOPY={ncopy}', + '-I'+str(old/'portable-include'),'-I'+str(ck)] + if os.environ.get('BOOST_INCLUDE'):command+=['-I'+os.environ['BOOST_INCLUDE']] + command += [ck/(source+'.cpp'),'-o',bins/name];run('build-'+name,command) + run('official-legality',[bins/'legality',local/'cin',local/'cout',local/'cout/legality.json']) + run('official-columns',[bins/'columns_h',local/'cout/COHORT249-RECORDS.bin',local/'cout/columns.json']) + run('official-eleven-stage-columns',[bins/'columns_k5',local/'cout/COHORT249-RECORDS.bin',local/'cout/columns_k5.json']) + column=read(local/'cout/columns_k5.json') + assert column['formal_columns_checked']==1915 and len(column['stages'])==11 and len(column['negative_controls'])==24 + assert all(x['rejected'] for x in column['negative_controls']) + py('record-mutations',B/'mutate_records.py',local/'records',local/'cin',local/'cout',bins/'legality',bins/'columns_k5',bins/'legality_ncopy_h') + py('positive-gram',ck/'gram_frames.py',local/'records','--gram','e8ham','--h',8,'--positive') + host.mkdir();(host/'GEOMETRY.json').write_bytes((parent451/'bit/GEOMETRY.json').read_bytes()) + py('global-emission',ROOT/'code/emit.py','--word',word,'--local-check',local,'--out',host,'--isometries',ROOT/'data/residual-isometries.json') + py('independent-global-audit',ROOT/'code/audit.py',local,parent451/'parent445/parent444/base443/candidate/nine',host) + assert len(read(host/'AUDIT.json')['mutations_rejected'])==22 + py('finite-invoices-and-outer-assembly',ROOT/'code/assemble.py',parent,host) + (out/'RESULT.json').write_bytes((host/'RESULT.json').read_bytes());actual=read(out/'RESULT.json') + for k,v in read(ROOT/'EXPECTED.json').items():assert actual[k]==v,(k,actual[k],v) + integrity() + result=dict(status='PASS_R715_COMPONENTS_WITH_VERIFIED_PARENT_REUSE' if args.parent_output else 'PASS_R715_WHOLE_HOSTED_FULL_COMPOSITION', + mode='parent-reuse' if args.parent_output else 'quick' if args.quick else 'full',kappa=actual['kappa'],python=sys.version.split()[0], + manifest_sha256=sha(ROOT/'MANIFEST.json'),source_sha256=sha(ROOT/'SOURCE.json'),parent_receipt_sha256=sha(parent/'RECEIPT.json'), + parent_manifest_sha256=receipt['manifest_sha256'],parent_mode=receipt['mode'],emitted_program_sha256=actual['emitted_program_sha256'],checks=steps) + (out/'RECEIPT.json').write_text(json.dumps(result,indent=2)+'\n');print(json.dumps(result,indent=2)) +except BaseException as e: + (out/'FAILURE.json').write_text(json.dumps(dict(error=repr(e),completed=steps),indent=2)+'\n');raise diff --git a/research/e8-r740-replica32/EXPECTED.json b/research/e8-r740-replica32/EXPECTED.json new file mode 100644 index 0000000000..bab8013596 --- /dev/null +++ b/research/e8-r740-replica32/EXPECTED.json @@ -0,0 +1,35 @@ +{ + "global": { + "R": 740, + "replicas": 32, + "live": 56739, + "physical": 56748, + "banks_per_stage": 2891, + "entrance_rank_total": 138, + "bank_assignments": 213120, + "local_invocations": 288, + "independent_unbanked_scalar_columns": 7620, + "deficit": 9984, + "global_prefix_bits": 123, + "local_additions": 15414, + "copy_erase_episodes": 2592, + "profile": { + "1": 728640, + "4": 99936, + "2": 290304, + "3": 80640, + "5": 33984, + "8": 2592, + "7": 27072, + "14": 15360, + "28": 15360, + "42": 15360 + } + }, + "result": { + "kappa": "1138823042306561/1000000000000000000", + "bit_lower": "1140121438872176364117/1000000000000000000000000", + "complex_lower": "1183986549206329/1000000000000000000", + "binding_component": "bit" + } +} diff --git a/research/e8-r740-replica32/LICENSE b/research/e8-r740-replica32/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/e8-r740-replica32/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/e8-r740-replica32/MANIFEST.json b/research/e8-r740-replica32/MANIFEST.json new file mode 100644 index 0000000000..5b72d8bc17 --- /dev/null +++ b/research/e8-r740-replica32/MANIFEST.json @@ -0,0 +1,119 @@ +{ + "EXPECTED.json": "02f3fd3ac40f17f25822fa49d01ae6e84c2e02e2fafbf24f02845f24e02ec931", + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "NOTICE.md": "cb5bb6520addd9517672136c5519df4a2c06ed17b8afa1ce24e63855689c114d", + "PROOF.md": "380a5269e012cb7d54cdf13289b7187aa82c16d23ed1689c5986485398f5cdca", + "README.md": "86030e96e06e0df02cc775ed1e41122854bc8dba2d1f90eb30b646436028ae5f", + "SOURCE.json": "20b4bc7418b62a7126fc476b0e8757f713f09dbe03b430048e9f66326688ea88", + "code/audit_kernel.py": "e49f9b499f98dc2938b10e32db28da3e4f38291dc345c0b5e7b906ca2b0cfb9c", + "code/bank_routes.py": "7c6997c455bd55acca3a1603797c34e7733d557c27a7694a1429ff15773a505d", + "code/compose_kernel.py": "010e081821f20bcf6e097306289031804b2609e5160dba1c743272126ef7472a", + "code/config.py": "283d7fad45155ee91e704d63ec947cf4a60aeff5cc43510bc0e835f7da7d8767", + "code/e8core.py": "1cb286196c1530d06f50f0997febc5993b388f33464e295611b920ba30a24eeb", + "code/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "code/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "code/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "code/export249.py": "6d9817f7c431573aff695e1eacfa7c2ca6d3a2a10baa3a2ea814ab9b9f7b13ab", + "code/global_kernel.py": "01cf4be0ab9affe48598062c4ae3610882aa77a9e18e75c4e596e2f08d8b2173", + "code/iface386.py": "1b7c998513759195dee3e82a34c1a46dc3310236530a7f1dfbeefe00f108fc4f", + "code/rebuild.py": "3efb6c81a247ac6d5cab87c47030a332292c2c46d482ff996588858f41cdad4d", + "code/replica_kernel.py": "780e08ad63983d0256271e8c7803c74bb1623d15cc202d98177c440ff3726aad", + "code/stages.py": "e73ab7836519510ed30dd7e3022dae557fa50fc513d723197929bff741859668", + "code/tile_m.py": "d6ae4a556472d403773cd2117c992bfc10e1187112da1b3893f3fae628a131dd", + "data/post-retiming.json": "d25a636bcebf97b46b01cd39259e8c4f59ab92a188f4cb4bd0b0b34936cf3b56", + "data/residual-isometries.json": "e12ed7ddd13cee101ba74a083b54665fd64d0b122b0bad5b83d817dcc8bae9d8", + "data/retiming.json": "f2b041a33577eebbf47f740ae1d7b94a68f2424de39df0c4ef075fad055c0793", + "data/selection.json": "1a96e47f1889bc690316f95a3858b0062ce212ea876dd15e5123ed89d09a9c39", + "data/upstream441/pair-retime-selection.json": "201d8cbc8ac1df10ee74246815f3ce8507b94395af69835e8098a8274bca5651", + "data/upstream441/window-retime-selection.json": "170a2190b6bae36de3a18a8b4c1a152cebd95b839ae889da3049f9d9b0109e30", + "data/word.json.gz": "d8d6d3d3f336720302bc40b3c1504fe3c3583a7a8d707bb9bd7b21f85e5e69c6", + "parent436/EXPECTED.json": "a9655e303cb2c40ce024443b27c0a810ffc24f1ee1e5b07eb19241fad399b5e2", + "parent436/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/MANIFEST.sha256": "7c6d4bd2ac74710d8a8a68fd637b31df9028a2376b569732374a739092c34310", + "parent436/NOTICE.md": "eb9cb7eab03977930484fee70d0aea066803917a6304b1ad2644cfcc6bf2acd4", + "parent436/README.md": "d737a3b77de97bdf67d2a140465be5b8886af6aa57516f78ad8f2839f3dae8cc", + "parent436/SOURCE-pr370.json": "352a68f0898535311c63cac879a52b686246ba80844f1a3cc2f3c3f6b1046b4d", + "parent436/SOURCE-pr376.json": "1608c15638f874243c3ad00bd6a08b30f0e9608de83002273819365ab300b0e7", + "parent436/SOURCE-pr381.json": "c457c422d54645ad841c8528bf2efa6c253d1c134ee86c875b9b7d76d4f9520c", + "parent436/SOURCE-pr386.json": "bba849ed0a1af4d45a76ec734d5f0d07806da2b161f1b5ad8ea63cf2d64b5aa4", + "parent436/SOURCE-pr417.json": "d9b7e606f09b840ed9fe10dc8c8250b4cab9bbe5d0cacb62864ca8366a28b2b1", + "parent436/SOURCE-pr425.json": "a2c5e2f0e03b0dbcba4ca18282a4ff390a6a395f14411410cfff42d5281d0289", + "parent436/SOURCE-pr426.json": "f884cc42793a3afd249ebee20985f61422e7b5baf7c1fcab5b990e1959f31697", + "parent436/SOURCE-pr431.json": "71cd86e64217fc4db0199ae8e5ef65cb0cc2ed593e15f03bc1501d4b32fdeb66", + "parent436/SOURCE-pr433.json": "f1181aa9f30dcc2e5df7e94738fa0c0cabe5f56b31c8eb843fa0a257da79ed91", + "parent436/code/b4/kappa_b4.py": "cc47efc71334d7d41d6475c5dfc8080a278d3b694b335c6a9873dad4632d1f7e", + "parent436/code/bit/checkers/certify_bit_k.py": "e68a81ef7981a90d613752003cd5cab5351e260f909b094f1668d8a4dfe480df", + "parent436/code/bit/checkers/columns_h.cpp": "d1297f9052be4f2496e1ff2a77e4db2c0cdbd7d460d489b4c03e50bf317238ce", + "parent436/code/bit/checkers/columns_k.cpp": "1c344d18fcd494eeca93e259f10cafae7705780e6592f6dcb35b34752dab9bc2", + "parent436/code/bit/checkers/cost.py": "d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f", + "parent436/code/bit/checkers/finite_k.py": "7e67dc75e63a11e38ac6d6615656c7cf6982e5a33dd404d04b967bf474cad02e", + "parent436/code/bit/checkers/geometry_k.py": "646b7e8773d9c99376cb00627f109a97319e6d72b439ff513c39035c28c3f70f", + "parent436/code/bit/checkers/gram_frames.py": "223a5a07731fc315a90a3e48177796babc155c1d9985c7ae5017eff6af2a0608", + "parent436/code/bit/checkers/json.hpp": "aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63", + "parent436/code/bit/checkers/legality_h.cpp": "6c1ef2b24e57781d6951c172a1024fc4300e6fd392c9d6672079a7806ab663b3", + "parent436/code/bit/checkers/tile_k.py": "64255088821f601ede2c3006f08cb97c39a4fa10dbbeb93a8a71fcfa0e1d8d77", + "parent436/code/bit/export_records.py": "8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3", + "parent436/code/bit/independent/checkword.py": "11bf9620ca9db16d52d9fe806b814fc9ec9a89c4d7645354d1861d96f6e805ad", + "parent436/code/bit/independent/mutate.py": "0ff65aace5da4b57d96235bf830f8f11969322e75134d498aeb70e9753ec6b0d", + "parent436/code/bit/mutate_records.py": "b0e75d6550412a7be4017695e6b237392b611bb852ad8ff309d6682c9f166a4e", + "parent436/code/bit/producer/compile.py": "60fea6a9d6617a3f87376d3fda040642e9cb70e7c179015e03ede8d289f30357", + "parent436/code/bit/producer/compile2.py": "0e23d4282ceb75768e82631da016aaff9818aec53c7d75a6b2a28ee1b1160dc3", + "parent436/code/bit/producer/e8lib.py": "4f8a6843e83bc4f7055d7337f33dbe12ce499051f46bee1b81bbf6b34c652574", + "parent436/code/bit/producer/frames.py": "ba71f77dd3e3c1c54f361c066cebe9faadbc78db46376046e7af625bf1de8c24", + "parent436/code/bit/producer/fullword.py": "0daf87599e9e48646b985ad87351c56c1b73cfc99cdf9eca081483846ddbfa90", + "parent436/code/bit/producer/ham1.py": "359040fb432fd392472af6b8f5dca0234dd6c2be744a791df27ba62bc5da5175", + "parent436/code/bit/producer/ham2.py": "fdf0af785ce697bd7f80b4e75f7163735f3b599d9dc42f652f0ffdbdf18ea8bf", + "parent436/code/bit/producer/params-r865.json": "1256c54debe0a551da8e24896ab73ef0bd4a5233ff8e6fedf21a9e6301d6e6f3", + "parent436/code/bit/producer/price.py": "46c858e60ba0a117bf8227b864abf55e85ebee2d56a0dce64472b706499ac405", + "parent436/code/bit/receipts_k.py": "67f714e10a846e9cc62996342f825cd715055031e0b12591abdafd225717e195", + "parent436/code/bit/regression/stage_cohort.py": "6c288f6f234b528c1a7c0a4adfb724e91e0fe6b18c8dffad96af3f973de1829a", + "parent436/code/complex/code/bridged.py": "5fe7174cd3a6580a74e4c1bf8fa7b426e8673f1c285603bf3076d4e758d70731", + "parent436/code/nine/audit_g.py": "48ac1d66a406ed72dd9192a19118776ba253f5c90e96185f5c1b98bb670a6361", + "parent436/code/nine/certify_g.py": "97a5f7e9bf2202d170da17d5d17d876903641d7d24433115c27ea95b9fe65ccd", + "parent436/code/nine/cited.py": "b6722d990fba39ef41b3d658326bdde97c25b749a454bda2509fdffeabd31a86", + "parent436/code/nine/compose433.py": "27dd61574f1f6921238ff9f57c6fd536e6f0a0983138bc5c99aeb141d3ccc195", + "parent436/code/nine/geometry.py": "36eeda3184bd009e89462b65c8725d10860c444f8da8f1f87e5f6e50120011ca", + "parent436/code/nine/global_word_g.py": "ff8d6be2432b79584dc2f2d2bdcd3cefede0d0730d1eecb0a6859dd527f5fce4", + "parent436/code/nine/regress386.py": "bf97418a9aec7c3f55d04d4754e626f17f44aa2059ffd8acd7b315dcf9e89110", + "parent436/code/pricing/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "parent436/code/pricing/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "parent436/code/pricing/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "parent436/code/pricing/prime_witnesses.py": "98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab", + "parent436/code/provenance.py": "e28fd87d0e34a6f6f6f1fddb6c4891deac220662c954de855d7aa5a7f9cceca4", + "parent436/code/reuse/controls.py": "89df84f78064de12cd11f0f5f63aa9cad2385f5d18d2e4ade7409a5ae0435721", + "parent436/code/reuse/ecost.py": "901c61f0a8082fc87012f91372aafbb2a1b464be685426e32e77cc9f0e393958", + "parent436/code/reuse/regen.py": "972740a54e487b12aebc09f2fab5f2878835727cb4ad82fb1aa26a0f2d34f517", + "parent436/code/reuse/retime.py": "d8530464a6e00e0a509cf8b392cae70579c8d0f636a0dc86677f5dee0863d34d", + "parent436/code/reuse/reuse.py": "b802483c024d23c92df30f1a2d93838280e39dfa0bd7129b879d6cc0b84c80a4", + "parent436/code/tail/apply376.py": "ac49a9a7da44a1e8fbf468c6d8901b5712705d3caa9dd3e0cb89f056f0e67b2a", + "parent436/code/tail/bootstrap.py": "6811203fb7df1ac8a9eee3fbeca722de98dbc99077921fe77e0d452c760f0ffc", + "parent436/code/tail/e8core.py": "1cb286196c1530d06f50f0997febc5993b388f33464e295611b920ba30a24eeb", + "parent436/code/tail/engines/base_two_moment.py": "aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098", + "parent436/code/tail/engines/moment.py": "81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482", + "parent436/code/tail/engines/outer.py": "c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c", + "parent436/data/bit/bitE8-r740.json.gz": "f8daa4982d865748fa9a3095b2cf4290f34e2c085d6d35673fd7171cab95623c", + "parent436/data/bit/bitE8-r865.json.gz": "1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55", + "parent436/data/bit/reuse-ledger.json": "e7bb324150a5342076c9a268f69b83c65f817a7cfc1d14fda9558a9f7e486f0b", + "parent436/data/complex-b-433.json": "161663bf22c8e6a62e2dce194b326016c11e551f31691140ef34355e9b2e4e92", + "parent436/data/complex-b-b4.json": "1bdd6a649615ddb6bf7cdf24abd7bb1bbd6cc9284e2aa44f796786310d3e1a3b", + "parent436/data/complex-b-nine.json": "2815ca568c88edde758c31e756d0d07aa08233243f365bc111383d7f0c1c757a", + "parent436/data/controls/LICENSE-pr426": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/data/controls/pr376/LICENSE-pr376": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "parent436/data/controls/pr376/frame-selection.json": "a83d4880579fb1f8cffb701d1d685c157b7fa14ef9d6642e42ff1e4f5a1b8c5c", + "parent436/data/controls/pr376/reuse-selection.json": "0b300bab47cf0d69cbc7965bf01c2a27c96b97677ee651334470d8c968b603f1", + "parent436/data/controls/pr386/AUDIT.json": "59625785de14c3df03abe009cdc67c7918b8fcfa8dc5f468c3d363af0494cbb7", + "parent436/data/controls/pr386/COMBINED.json": "6043a7486790ac8ca04dc67ddf5b57076e7c880b66eb456127c6cd933c77764a", + "parent436/data/controls/pr386/GLOBAL.json": "55af2a11552c04f5a87268bc2d1798246297874e9e87b50e49773e91cc495c2d", + "parent436/data/controls/pr417-bitE8-nine-kernel.json.gz": "acc2b138ce16be1ff12570d3ec1634fe28cccaf259de797be0f62628fb37cccb", + "parent436/data/controls/pr425/FINAL.json": "46ea33ad1979cd14a2b686e8742792739312a07ab72945517c3809b647b31c42", + "parent436/data/controls/pr426-bit-candidate.json.gz": "bd3b84244528767b85d8d7fe423b155630b5c659e21e51563674b1dcb6305ad7", + "parent436/data/controls/pr431/VALIDATION-LOCAL.json": "2b77c882ac524adbbacc9775ee172c854ecd4027e36db59ed15a7d1b6b9e1ce5", + "parent436/data/controls/pr433/CERTIFICATE.json": "f71580f22193726fb582eae604807ff70a7302265e001d9484a718e63bbe14c4", + "parent436/data/params/params-r740.json": "871fc75ce6fea2638f68553bcfe771d09297e987d59c123338227e29415851d1", + "parent436/discovery/README.md": "d840952ed60b4b460da83b04c4c8be3622b9bef04b62961c0d496c445f8b84d1", + "parent436/discovery/search_params.py": "57de04a8ea7e2df8b783e02c454bb102edab48206db0a41a1f28d50e7f164441", + "parent436/portable-include/bits/stdc++.h": "420094be2af295eed03a983dd66debbbe9cfb78d8252859f4498a615a0074b99", + "parent436/requirements.txt": "b9f87c1ec529679c19b8421a7a69b377b54b89949cfc5e1b1ed8c134bfab8917", + "parent436/verify.sh": "19bf483b109163b0ccc941f459e70c2e37d20c9c04e69e7c8eb98f329577b26c", + "verify.sh": "3720f542e9cf1ec35b052dec130b9cb6eefa37798f73ba5a4026b400c78d0697" +} diff --git a/research/e8-r740-replica32/NOTICE.md b/research/e8-r740-replica32/NOTICE.md new file mode 100644 index 0000000000..c47f06f58c --- /dev/null +++ b/research/e8-r740-replica32/NOTICE.md @@ -0,0 +1,37 @@ +# Attribution and scope + +New primitive retiming, untrimmed kernel selection, 32-replica residual banking, +integration and audits: +chafreaky, with substantial OpenAI Codex assistance. Apache-2.0. + +- eumemic, PR #441 (`6160c13526f5f957902910b462164c93c1d8f39a`): + paired-gate and window B-frame retiming witnesses, transplanted and independently + rechecked on the new kernel, with substantial OpenAI Codex assistance. +- eumemic, PR #440 (`bd03373b6d4d4e380d0b6ea7d55cd2ac8f163544`): + primitive-retiming composition and the 112-pivot kernel used as the search + warm start, with substantial OpenAI Codex assistance. +- rohanarun, PR #434: primitive retiming composed with response kernels, + with OpenAI Codex assistance. +- chafreaky, PR #439 (`fa3a588ec1e383083abb8de9c51904fb9d689ad4`): explicit + residual isometries, finite route charges and the starting release verifier. +- eumemic, PR #436 (`da8ca2025472553ac9b36f4400138ed48a6a0e3b`): R740 bit word, + reconstruction, elimination/reuse, independent checkers and #433 composition. + The entire parent package is byte-identical, including its notices, licenses, + source pins and Anthropic Claude disclosure. +- chafreaky, PR #417: shared-donor kernel, exact local replay and tiling code; + the earlier implementation had substantial Anthropic Claude assistance. +- rohanarun, PR #435 (`2c9c833ac8709402c37fc88a6a23393fb0d397fb`): prior mixed-width + residual-bank composition on #433. The new implementation derives from the + pinned #436 global/audit code and adds explicit residual isometries and controls. +- icekylinx, PR #433: split-centre complex supplier, bit finite invoice and tail, + with OpenAI Codex assistance; the complex result is cited, not rebuilt here. +- jacklightChen, PRs #386 and #425: compressed nine-stage geometry and the + mutable-basis complex interface, with OpenAI Codex assistance. +- utcorvusvolat-dotcom / Dylan Crow, PR #370: E8 bit format, producer and + independent checker lineage, with Anthropic Claude assistance. +- applecrusher (#376), ai-nanachi (#389/#426), DaysSky (#363/#375/#381), + DreamingOfClouds (#315), Jacob Sussman, and all earlier credited contributors: + see the unchanged `parent436/NOTICE.md` and source-specific notices. + +Do not infer an unconditional theorem or a new Lean proof from the finite +certificates. No inherited author or AI-assistance disclosure has been removed. diff --git a/research/e8-r740-replica32/PROOF.md b/research/e8-r740-replica32/PROOF.md new file mode 100644 index 0000000000..ae1ad94af0 --- /dev/null +++ b/research/e8-r740-replica32/PROOF.md @@ -0,0 +1,119 @@ +# Replication removes the eight-replica rank restriction + +## Local word and frozen transformations + +Start with eumemic's byte-identical PR #436 R740 word. Expand each grouped ADD +into its ordered primitive ADDs and apply 57 frozen frame changes. The ordered +scalar operands are unchanged. For every changed gate, the PR #417 retimer +checks its integer source-support lower bound and both neighboring register +frames in the joint configuration. All frames remain nested. + +Apply a 114-pivot shared-donor response kernel with 103 donor slots and total +entrance rank 138. Each pivot p has an entrance E contained in its first frame +and every donor's first frame, and response(p) = XOR response(donors). Start p +at E, remove its frame-zero target correction, and add it to those donors at E +before A and again at FULL after C. Pivots and donors are disjoint; each donor +uses one entrance. The exact local replay checks all 980 independent columns, +including all helper dirt, and integer source-span legality. Frozen input, +intermediate and output hashes bind both transformations. + +The PR #417 kernel code is retained unchanged. A separate adaptation keeps its +local checks and replaces only its eight-replica rank congruence with + +``` +T * (8R - entrance_rank) = 0 mod 64. +``` + +After the kernel, transplant the two frozen PR #441 joint B-frame stages: 112 +paired-gate changes and 42 window changes, with 126 net changed B frames. The +original witnesses remain byte-identical and pinned. Their frame choices are +independently checked against the new word's joint feasible intervals, integer +source supports and complete arbitrary-dirt replay; input/output hashes are +recomputed for this composition. Every scalar ADD and its position is retained. + +The complete selected word has local paid profile +`{1:2530, 2:1008, 3:280, 4:347, 5:118, 7:14, 8:9}`. The forward and reflected emitted +streams have the same profile, restore arbitrary input columns and erase each +private copy. The initial 57-frame retiming and PR #440 selection supplied a search +starting point; this selection retains two additional rank-one pivots. + +## Why 32 replicas are admissible + +The compressed nine-stage identity is an identity for one data-replica index. +Its four data pairs, alternating local calls, nine paired bridges and terminal +exchange do not refer to any other replica's data. Repeating that schedule for +four groups of eight replicas therefore gives a direct sum of the original +identities. The local eight-dimensional frames, 64-dimensional ambient form, +42-dimensional largest child, cover class and port maps are unchanged. + +Banking changes only the embeddings of helper residuals. The local theorem holds +for arbitrary independent helper dirt. Assigning every helper residual an +injective isometry into a disjoint bank interval preserves this theorem. The +same proof applies when those intervals belong to different replica groups: +no data owner is shared across groups, and each stage's helper intervals are a +partition of its entire bank coordinate space. The emitter and independent +audit enumerate all 288 calls and all 213,120 helper owner assignments, check +every data owner formula, and reject cross-group data aliasing, omission of a +replica group and an incorrect replica count. They also replay the one-replica +nine-stage identity on 7,620 unbanked scalar columns, which is the repeated +block identity, not a claim to replay 32 separate enlarged matrices. + +Here `8R - entrance_rank = 5782`. Eight replicas would require 722.75 banks; +32 replicas require exactly 2,891 banks. Thus 32 is the least positive multiple +of eight satisfying the exact bank equation. No incomplete bank is counted and +no padding calls or unused bank coordinates are introduced. Merely repeating a +fixed eight-replica word scales its profile and stock equally and gives no +rate improvement; the gain comes from admitting the stronger untrimmed kernel. + +## Residual routes and accounting + +Every distinct entrance has a stored integer matrix N with N N^T = 4I. Its +first dim(E) rows span exactly E, checked against every root of E. The remaining +rows give an isometry of E-perp to a coordinate block. For these 16 entrances, +N/2 is a coordinate permutation, reduced to identity with at most seven swaps. +Extending it by identity on 56 exterior coordinates and permuting coordinates +places the residual into its assigned interval. This is an explicit isometry +for I_64/2 at every inherited odd address prime. Reversal has the same residual +projector I-P_E; the common exterior window cancels from the endpoint difference. + +Per stage, the exact bank partition is: + +- 424 banks with widths `(7,7,7,7,7,7,7,7,8)`; +- 16 banks with sixteen width-four blocks; +- 2,451 banks with eight width-eight blocks. + +Each coordinate is used exactly once. The independent audit checks all intervals, +frame IDs, orthogonal matrices and elementary route factors. It rejects reused +slots, wrong frames, altered bases, missing route factors and omitted calls. +The 32 replicas use `8*120*32 = 30,720` data families. Hence live stock is +`30,720 + 9*2,891 = 56,739`, with nine sequential private-centre reserves giving +physical stock 56,748. The paid profile is 288 times the local profile plus +23,040 rank-seven idle children and 15,360 each of ranks 14, 28 and 42. +Its rank deficit is `64*56,739 - paid_rank_mass = 9,984 = 32*312`. +No rank mass, idle move, copied centre or bridge is omitted. + +## Finite and analytic gates + +The finite invoice is recomputed with T=32, the larger live/physical stock, all +288 local calls, replicated bridges and copy episodes, and explicit residual +routes. It charges 144 additional elementary route factors per helper routing, +covering seven local swaps and 64 coordinate swaps. The prefix bound comes from +the emitted forward and reflected programs. Independent replicas act on separate +data and disjoint residual coordinates; sequential private copies are erased, +so replication does not multiply the per-coordinate coefficient-growth bound. +The invoice nevertheless charges every emitted operation and route. + +Both rational moment engines must certify the bit lower endpoint +`0.001140121438872176364117`, including the inherited 10^-16 bad-branch allowance. +The maximum child still satisfies `2*42^2 < 64^2`. The newly computed two-level +coefficient must fit the retained 512-bit budget and row coefficient 18,355. +With the cited PR #433 complex rate, six ordinary bootstrap levels and all 47 +strict outer inequalities give conditional +`kappa = 1138823042306561 / 1000000000000000000 = 0.001138823042306561`. +The adjacent 10^-18 grid point and invalid outer parameters must be rejected. +These are release-verifier requirements, not substitutes for its receipts. + +The original all-size compiler, correlated dirty-bank, compressed-window, +restored-work, tape/common-grid, precision and analytic assumptions remain. +The complex supplier and its mutable-basis interface are cited from PR #433; +this package does not rerun its Gaussian phases or prove an unconditional theorem. diff --git a/research/e8-r740-replica32/README.md b/research/e8-r740-replica32/README.md new file mode 100644 index 0000000000..c8e8d3042a --- /dev/null +++ b/research/e8-r740-replica32/README.md @@ -0,0 +1,62 @@ +# R740 kernel with 32 replicas and complete residual banks + +The conditional candidate is **κ = 0.001138823042306561**, with bit lower endpoint +**0.001140121438872176364117**. Full verification is required before admission. +It exceeds PR #441 at `6160c13526f5f957902910b462164c93c1d8f39a` by about 0.00219%. + +Eight replicas forced the previous search to drop kernel pivots so that residuals +filled whole width-64 banks. Four independent groups of eight replicas allow a +114-pivot kernel with entrance rank 138 to fill 2,891 banks per stage exactly. +This preserves two rank-one pivots that the eight-replica packing discarded. +All bank coordinates are occupied; there is no padding. The primitive ADD +sequence retains PR #440's 57 A-frame choices and PR #441's two B-frame stages +(112 and 42 changes, 126 net changed B gates). Both stages are rechecked on the +new kernel word. + +| Quantity | Result | +| --- | ---: | +| Helpers / local arbitrary input columns | 740 / 980 | +| Replicas / local invocations | 32 / 288 | +| Kernel pivots / donor slots / entrance rank | 114 / 103 / 138 | +| Banks per stage | 2,891 | +| Live / physical families | 56,739 / 56,748 | +| One-replica unbanked global columns | 7,620 | +| Helper owner assignments | 213,120 | +| Rank deficit | 9,984 | +| Cited complex lower endpoint (#433) | 0.001183986549206329 | +| Binding side | Bit | + +## Reproduction + +Python 3.11 or newer, numpy, mpmath, sympy, a C++17 compiler and Boost headers: + +```sh +python3 -m pip install -r research/e8-r740-replica32/parent436/requirements.txt +bash research/e8-r740-replica32/verify.sh /tmp/e8-r740-replica32-full +``` + +Set `PYTHON`, `CXX` or `BOOST_INCLUDE` when needed. `--quick` skips only the +parent's historical regressions. Every mode checks the frozen manifest and +parent source blobs, reconstructs PR #436 and both new transformations, verifies +local arbitrary-dirt columns, reflected copy chronology, exact frame projectors, +all replica owners and residual bank coordinates, 16 explicit orthogonal routes, +mutation controls, two rational moments, a fresh finite invoice, six bootstrap +levels and 47 strict outer inequalities. The next grid point is rejected. + +## Scope + +PR #442 reports a larger bound using an additional idle-data hosting extension. +This package isolates the gain from exact replica banking within the prior +helper-bank interface. + +This is a finite conditional construction for the retained +`T(n) = O(n (log n)^(1-κ))` assembly. The complex supplier is cited from #433, +including its #425 mutable-basis interface; its construction and Gaussian-phase +audits are not rerun here. Astronomical cover enumeration, all-size compiler, +correlated dirty-bank, restored-work, precision, tape/common-grid and analytic +interfaces remain assumptions. This is not a Lean proof or an unconditional +integer-multiplication theorem. κ = 1 remains open. + +Search scores only nominated candidates. The admitted witnesses, costs, maps and +strict comparisons use integers or exact rationals. See `PROOF.md`, `NOTICE.md`, +`SOURCE.json` and the unchanged parent package for dependencies and proof scope. diff --git a/research/e8-r740-replica32/SOURCE.json b/research/e8-r740-replica32/SOURCE.json new file mode 100644 index 0000000000..405be7ad31 --- /dev/null +++ b/research/e8-r740-replica32/SOURCE.json @@ -0,0 +1,125 @@ +{ + "repository": "https://github.com/CrocSwap/integer-mult-bounds", + "parent436_commit": "da8ca2025472553ac9b36f4400138ed48a6a0e3b", + "parent436_pr": "https://github.com/CrocSwap/integer-mult-bounds/pull/436", + "parent436_blobs": { + "EXPECTED.json": "7f5f7f3f9da9864220d4c6ee6bac23010f590d47", + "LICENSE": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "MANIFEST.sha256": "399beb5da45c2e226ee7320b513f622938c0fdc1", + "NOTICE.md": "2c01026b8b300ccc16c313f652f9e46e61617304", + "README.md": "5ddb576f02f1e3ef8cfee443bd654ad8cf26b837", + "SOURCE-pr370.json": "db86b22e15681b5d120bdc7acd0a1e9cd5e6e363", + "SOURCE-pr376.json": "818f17fb6a01e198956b7faffc5d6ce87a0a4bbf", + "SOURCE-pr381.json": "042a26c7c2ec22de93dd2aa509a6087e71302f28", + "SOURCE-pr386.json": "ac24e5d262d38909a13ecc35fbf7bccb75f977aa", + "SOURCE-pr417.json": "33f0ae053c284e12097aaf810c56f7b235c160bc", + "SOURCE-pr425.json": "8d9c976b02a418eb2877375f1d83fcac17cc3df7", + "SOURCE-pr426.json": "7c72390e09ead086207b74e7d8029e9d14499545", + "SOURCE-pr431.json": "00f1075773f5db3d95075d524f412bd79d160c70", + "SOURCE-pr433.json": "910a7c34903b855e219a7ff47e48de018db2490d", + "code/b4/kappa_b4.py": "402a510e15fc8a3541ddd84d2044e79e288fef89", + "code/bit/checkers/certify_bit_k.py": "37ce2ee2b412b3b97a397159f48b912ef893b014", + "code/bit/checkers/columns_h.cpp": "00c5a3a5d81d083582f60f33dd2e7bea5049c37f", + "code/bit/checkers/columns_k.cpp": "42bb232fbec4de703e70cc13dc2f39a3b43a3a01", + "code/bit/checkers/cost.py": "677584c1c6b0e959c19f58521b68d4b3e847f97e", + "code/bit/checkers/finite_k.py": "8781815ee6ee663edc0e0afdf1380186594ec913", + "code/bit/checkers/geometry_k.py": "2a052980816d9b56b33c5e41132bb7f86286462b", + "code/bit/checkers/gram_frames.py": "b740d47295c02692260d7cc01874a49fe48f78ab", + "code/bit/checkers/json.hpp": "82d69f7c5d044c9887c96b90c97f5639083ecd14", + "code/bit/checkers/legality_h.cpp": "cb1233c7e96b1aa8bbf4d2e4165d75ab0dca64b9", + "code/bit/checkers/tile_k.py": "a4635e6681c2f1521b44f24364cc457d304cb077", + "code/bit/export_records.py": "3632d370486a02f5456f7643ced03f8c925b2350", + "code/bit/independent/checkword.py": "da4e0fe05067184d4dab1e130ae1384c1fa983f5", + "code/bit/independent/mutate.py": "eba592fd468e0d7e7e5100fe99da6eb548c5906b", + "code/bit/mutate_records.py": "6794516f665d36eac189894e350a5ad01113cb4c", + "code/bit/producer/compile.py": "86b12507ef86308336833a208a989d56072096d1", + "code/bit/producer/compile2.py": "a7bdfdfbe417c793b2a8c515f5432bdd10472259", + "code/bit/producer/e8lib.py": "8464b956f6a5aa5061695990a14b7a385d370c2e", + "code/bit/producer/frames.py": "b28c3b2413b9767e7ffe0a8b2db93836f3455494", + "code/bit/producer/fullword.py": "104f01b7803481b623809bc8a57682d28f09b5c3", + "code/bit/producer/ham1.py": "8086649a5f71c16698db7059bbada7187d781b56", + "code/bit/producer/ham2.py": "842f76b245a1bfb4150c53a853f6f472511f5a2f", + "code/bit/producer/params-r865.json": "110b4d94d884f03d4d37be22672ab27d836f1275", + "code/bit/producer/price.py": "9014d97d519eea1f8c96e4bfc75afa0febd5903f", + "code/bit/receipts_k.py": "428261488b4af028fd04df4f84eead1dad79a389", + "code/bit/regression/stage_cohort.py": "f6d7afe3e623208c4207b6a683a1e3e49249e31c", + "code/complex/code/bridged.py": "626a28614b07066528fd5f189d87cffa5015ac60", + "code/nine/audit_g.py": "719b378a0e20e99a79a3da6462be0e430fe7ee60", + "code/nine/certify_g.py": "9f4ae1600ae2f2cedd17ea37338f5d54ec7e83b9", + "code/nine/cited.py": "3aedb7a5c5bb06e04dae1f135ca5d5a4a5fdd2fe", + "code/nine/compose433.py": "b2f3fb6ba1a35b6dfcc6da12f0425c16be832cde", + "code/nine/geometry.py": "91594e0223e8fac49162b5aef834ffaa8e94a254", + "code/nine/global_word_g.py": "10eab502ded5374cf05bf89864044007e37458ed", + "code/nine/regress386.py": "8cbca55668a445502b3a0f07f27687474d0d764f", + "code/pricing/base_two_moment.py": "14a90fa0e788217856f070382c9e61bd7c603c61", + "code/pricing/moment.py": "7d697cb45203fe72d97037403d6da41f71f3b7fd", + "code/pricing/outer.py": "43007488ad2c43187c77cc6798beff8b1cd76ad2", + "code/pricing/prime_witnesses.py": "7f16d930302ae879c562dd58e085d9747fcac077", + "code/provenance.py": "9bfcb106230e454d9405ce5eb42dd2218d905ea6", + "code/reuse/controls.py": "ceb15852b726423f8b6978ba80817ba2b4ac5b39", + "code/reuse/ecost.py": "4ec2a959b1cd599e3297de17563446d623e2867c", + "code/reuse/regen.py": "529de1b8b37f28e877a57ab3e22a506002860370", + "code/reuse/retime.py": "9c3e94b800b70cfe1383ea6478d85bf859903006", + "code/reuse/reuse.py": "df455a0b37cca6ebd1a214661b540e8665467208", + "code/tail/apply376.py": "c401a84d8f549e0752464ab8313ce648bb4d14fa", + "code/tail/bootstrap.py": "1bc17e768259c342fb8b94b919bfeaea10304153", + "code/tail/e8core.py": "78983b368715e89fe8524a6dd2c13585d2b5394e", + "code/tail/engines/base_two_moment.py": "14a90fa0e788217856f070382c9e61bd7c603c61", + "code/tail/engines/moment.py": "7d697cb45203fe72d97037403d6da41f71f3b7fd", + "code/tail/engines/outer.py": "43007488ad2c43187c77cc6798beff8b1cd76ad2", + "data/bit/bitE8-r740.json.gz": "8a8ce996b890c7d11b2f8c7fbbd8148747627f46", + "data/bit/bitE8-r865.json.gz": "8bec1751f7e33c3a1e4673ef5dbc34d6f205321e", + "data/bit/reuse-ledger.json": "51eb63c7d8b3b4a0640412a215df042e878f1034", + "data/complex-b-433.json": "2d1db891592346fa225924d8d1666743c2144e11", + "data/complex-b-b4.json": "4fd117cd047ebbe86db44c732e72f1b75e9e45d4", + "data/complex-b-nine.json": "a215ba618871f09cdea2ede90240b980f62228e5", + "data/controls/LICENSE-pr426": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "data/controls/pr376/LICENSE-pr376": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "data/controls/pr376/frame-selection.json": "647b34368f3f0c7d228c70fa335af872e7946beb", + "data/controls/pr376/reuse-selection.json": "a6954dc65f28137ad16d015b42c40dbbde0bd66f", + "data/controls/pr386/AUDIT.json": "698e827ae87ae9db47fd30cf69537176276cff4e", + "data/controls/pr386/COMBINED.json": "8d6e3f22667fa0f6fa1a5495223e87f90a4cd103", + "data/controls/pr386/GLOBAL.json": "21bc6dcc7bbefedcd3064485d0e82c95e585044c", + "data/controls/pr417-bitE8-nine-kernel.json.gz": "572172b8148538d1937b9f7fa7f3939755008a8c", + "data/controls/pr425/FINAL.json": "1e9c8784c3cb719acb5274126141fe360af253fa", + "data/controls/pr426-bit-candidate.json.gz": "807cea53ebe1322721463ee2319bcd52b9714f24", + "data/controls/pr431/VALIDATION-LOCAL.json": "0f0a80418d7f3e521c980ef0354fc3945eae1795", + "data/controls/pr433/CERTIFICATE.json": "7e807079c1ec4907306035c84be1ba2fb1d69d79", + "data/params/params-r740.json": "d9bc74d95b4bd1acde79ada315508f24b4fc06e3", + "discovery/README.md": "025c3ac932a976b3ad5ff31ba08a39c0d3c9d4ff", + "discovery/search_params.py": "6e57d290f31e748753a4aa77472278c92407edf9", + "portable-include/bits/stdc++.h": "fc5664e929d9a81d9b4926bee049a93330be86ec", + "requirements.txt": "1cc9b96f593a9ce8a70b6b951c633452cb97e778", + "verify.sh": "1f03e028799147b03ecd6339cc951f1debbd9dbe" + }, + "kernel_origin": "https://github.com/CrocSwap/integer-mult-bounds/pull/417", + "kernel_origin_commit": "3f681fb571036ca4a267570318260b0d083f7b9d", + "bank_integration_reference": "https://github.com/CrocSwap/integer-mult-bounds/pull/435", + "bank_reference_commit": "2c9c833ac8709402c37fc88a6a23393fb0d397fb", + "note": "PR439 exact bank routes generalized to 32 replicas. PR440 inspired primitive retiming and supplied the search warm start. The new 114-pivot rank138 selection is re-derived on a frozen primitive-retimed PR436 word. Retained PR417 sources and the complete PR436 package remain byte-identical.", + "kernel_identical_blobs": { + "code/e8core.py": "78983b368715e89fe8524a6dd2c13585d2b5394e", + "code/stages.py": "9ef95d52f4b2ba0389bb2edb15228da698dd75f4", + "code/export249.py": "462a0f121f5363265b02d812cb12bed39e33dc74", + "code/tile_m.py": "cd5fd9b5399f5e7afe5d2a95bd3504bd543c0d60" + }, + "replica_origin": { + "pr": 439, + "commit": "fa3a588ec1e383083abb8de9c51904fb9d689ad4", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/439" + }, + "warm_start": { + "pr": 440, + "commit": "bd03373b6d4d4e380d0b6ea7d55cd2ac8f163544", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/440" + }, + "joint_retiming": { + "pr": 441, + "commit": "6160c13526f5f957902910b462164c93c1d8f39a", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/441" + }, + "witness_identical_blobs": { + "data/upstream441/pair-retime-selection.json": "1b7b7f33ff071d9f474ee6623c8a3fbfd7659646", + "data/upstream441/window-retime-selection.json": "d816fc0da675ead91188a8e9565c1275c31a18fc" + } +} diff --git a/research/e8-r740-replica32/code/audit_kernel.py b/research/e8-r740-replica32/code/audit_kernel.py new file mode 100644 index 0000000000..5bfcd07320 --- /dev/null +++ b/research/e8-r740-replica32/code/audit_kernel.py @@ -0,0 +1,150 @@ +# Explicit residual-bank audit added by chafreaky with OpenAI Codex assistance. +"""Independent projector, 32-replica ownership and emitted-template audit. +PR386 audit by Zhihao Chen with OpenAI Codex assistance; PR436 generalization by +eumemic with Anthropic Claude assistance; PR439 routes and this replication +extension by chafreaky with OpenAI Codex assistance. Apache-2.0. +Historical regression is performed by the unchanged parent wrapper. +""" +import argparse, copy, gzip, hashlib, json, struct, time +from collections import Counter, defaultdict +from pathlib import Path +import sympy as S +from bank_routes import validate_isometries +from config import REPLICAS + +def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() + +def main(): + ap=argparse.ArgumentParser(); ap.add_argument('--local-check',type=Path,required=True); ap.add_argument('--out',type=Path,required=True) + ap.add_argument('--word',type=Path,required=True) + a=ap.parse_args(); start=time.monotonic(); out=a.out + blob=gzip.decompress((out/'GLOBAL-TEMPLATE.json.gz').read_bytes()); t=json.loads(blob) + g=json.loads((out/'GLOBAL.json').read_text()); geo=json.loads((out/'GEOMETRY.json').read_text()) + assert hashlib.sha256(blob).hexdigest()==g['template_sha256'] + assert t['geometry_sha256']==sha(out/'GEOMETRY.json') and t['source_record_sha256']==sha(a.local_check/'records/249-records.bin') + fs=json.loads((a.local_check/'records/frames.json').read_text())['frames'] + records=list(struct.iter_unpack('<6i',(a.local_check/'records/249-records.bin').read_bytes())) + T=REPLICAS + assert T==32 and T%8==0 and g['replicas']==T + V,R=g['v'],g['R']; LOCAL=2*V+R; DATA=2*4*V*T; LIVE=g['live'] + assert V==120 and DATA==30720 and g['live']==LIVE + I=S.eye(8); proj={}; dimensions={} + for key,f in fs.items(): + k=int(key); B=S.Matrix(f['B']) if f['B'] else S.zeros(0,8) + P=B.T*(B*B.T).inv()*B if B.rows else S.zeros(8) + assert P.T==P and P*P==P and P.trace()==f['dim'] + proj[k]=P; dimensions[k]=f['dim'] + pairs={} + for op,x,y,c,r,z in records: + if op==0: + key=(y,c) + if key not in pairs: + D=proj[c]-proj[y] + assert proj[c]*proj[y]==proj[y] and proj[y]*proj[c]==proj[y] + assert D*D==D and D.trace()==r + # Reflected reverse has exactly the same positive projector. + assert (I-proj[y])-(I-proj[c])==D + pairs[key]=r + assert len(proj)==len(fs) + print('exact frame projectors',len(proj),'nested pairs',len(pairs),flush=True) + expected={} + for rev in (False,True): + es=[] + for op,x,y,c,f,z in (reversed(records) if rev else records): + if op==0: es.append([0,x,c if rev else y,y if rev else c,f,int(rev)]) + elif op==1: es.append([1,x,y,-c if rev else c,f,int(rev)]) + elif op==(3 if rev else 2): es.append([2,x,y,c,f,abs(dimensions[c]-dimensions[f]),int(rev)]) + else: es.append([3,x,y,c,f,z,int(rev)]) + expected['reverse' if rev else 'forward']=es + assert t['local_programs']==expected + + word=json.loads(gzip.decompress(a.word.read_bytes())) + assert sha(a.word)==g['word_sha256'] + state=json.loads((a.local_check/'records/249-states.json').read_text()) + initial=[state['initial'][str(i)] for i in range(LOCAL)] + assert initial==word['start'] + widths=[8-dimensions[f] for f in initial[2*V:]] + ENT=sum(8-x for x in widths) + assert T*(8*R-ENT)%64==0 + NB=T*(8*R-ENT)//64 + assert LIVE==DATA+9*NB and g['banks_per_stage']==NB + + def validate(q,check_profile=True): + assert validate_isometries(q['residual_isometries'],word['frames'],word['lines'],dimensions)==set(initial[2*V:]) + assert (q['m'],q['live'],q['replicas'],q['stages'])==(64,LIVE,T,9) + assert q['bank_padding'] is None and q['local_programs']==expected + hist=Counter(); occupation=defaultdict(set); calls=set() + for c in q['calls']: + st,rep,p=c['stage'],c['replica'],c['pair']; rev=c['orientation']=='reverse' + assert 0<=st<9 and 0<=rep 0 and replicas % 8 == 0 + by_width = {} + for rep in range(replicas): + for helper, width in enumerate(widths): + assert 0 < width <= 8 + by_width.setdefault(width, deque()).append((rep, helper)) + patterns = tile({w: len(q) for w, q in by_width.items()}, 64) + result = {} + bank = 0 + for widths_in_bank, count in patterns: + for _ in range(count): + offset = 0 + for width in widths_in_bank: + key = by_width[width].popleft() + result[key] = (bank, offset, width) + offset += width + assert offset == 64 + bank += 1 + assert all(not q for q in by_width.values()) + assert len(result) == replicas * len(widths) + return result, bank + + +def validate_isometries(rows, frames, roots, dimensions): + seen = set() + dot = lambda a, b: sum(x*y for x, y in zip(a, b)) + for record in rows: + f = record['frame'] + assert f not in seen + seen.add(f) + e = record['entrance_rank'] + assert e == dimensions[f] and record['denominator'] == 2 + basis = record['entrance_basis'] + record['residual_basis'] + matrix = record['orthogonal_rows_numerator'] + assert len(basis) == len(matrix) == 8 + assert matrix == [roots[i] for i in basis] + assert all(len(r) == 8 and all(type(x) is int for x in r) for r in matrix) + assert all(dot(a,b) == 4*(i==j) for i,a in enumerate(matrix) for j,b in enumerate(matrix)) + # The first e rows span precisely the frame, not only its dimension. + for i in frames[f]: + assert sum(dot(roots[i], q)**2 for q in matrix[:e]) == 4*dot(roots[i], roots[i]) + assert len(record['entrance_basis']) == e + # This selected family needs coordinate permutations only. Checking the + # elementary reduction also bounds the literal route cost and primes. + reduced = [[x // 2 for x in row] for row in matrix] + assert all(x % 2 == 0 for row in matrix for x in row) + operations = record['gaussian_reduction'] + assert len(operations) <= 7 + for kind, i, j, scalar in operations: + assert kind == 'swap' and scalar is None and 0 <= i < 8 and 0 <= j < 8 + reduced[i], reduced[j] = reduced[j], reduced[i] + assert reduced == [[int(i == j) for j in range(8)] for i in range(8)] + return seen diff --git a/research/e8-r740-replica32/code/compose_kernel.py b/research/e8-r740-replica32/code/compose_kernel.py new file mode 100644 index 0000000000..0d92ae7c41 --- /dev/null +++ b/research/e8-r740-replica32/code/compose_kernel.py @@ -0,0 +1,179 @@ +# Kernel finite invoice by chafreaky with OpenAI Codex assistance. +"""This word's bit side composed with PR #433's complex supplier, with PR #433's own bit pricing, finite invoice and +outer tail (icekylinx's code/bit_price.py and code/combined.py, ported line by line onto this package's receipts). + +Bit price (#433 bit_price.py): PR #315's moment.certify with the inherited 10^-16 bad-branch allowance; c is its + 10^-24-grid lower endpoint; the second engine (base_two_moment, same allowance) must put the lower endpoint below 1 + and the upper endpoint above 1. +Finite invoice (#433 combined.py): #386's coefficient with the fresh prefix bound charged at the next multiple of 64 + bits (at most 256), two-level coefficient below 2^512, row coefficient 18,355 < 20,161. +Tail (#433 combined.py): eta = beta = 10^-18, seed s = min(c, (1 - beta) b) - 10^-24, six bootstrap levels with the + 512-bit cutoff, kappa = the last 10^-18 grid point below (1 - eta) q / (1 + q), q = a_6 (1 - 2 eta); PR #315's outer + assembly with its 47 strict inequalities; next grid point, zero eta, zero beta and unit beta rejected. +Controls: PR #433's stated R758 profile must price to PR #433's bit c, and (that c, PR #433's b) must give PR #433's + kappa, before this word is composed. +usage: compose433.py --pricing DIR --out DIR --cited FILE --receipt CERTIFICATE.json +Prepared by eumemic with Anthropic Claude assistance; Apache-2.0.""" +import argparse +import hashlib +import importlib.util +import json +from fractions import Fraction as Q +from pathlib import Path +from config import REPLICAS + + +def load(path, name): + s = importlib.util.spec_from_file_location(name, path) + m = importlib.util.module_from_spec(s) + s.loader.exec_module(m) + return m + + +def sha(p): + return hashlib.sha256(p.read_bytes()).hexdigest() + + +ap = argparse.ArgumentParser() +ap.add_argument("--pricing", type=Path, required=True) +ap.add_argument("--out", type=Path, required=True) +ap.add_argument("--cited", type=Path, required=True) +ap.add_argument("--receipt", type=Path, required=True) +a = ap.parse_args() +M = load(a.pricing / "moment.py", "c433_moment") +Other = load(a.pricing / "base_two_moment.py", "c433_other") +Outer = load(a.pricing / "outer.py", "c433_outer") +cited = json.loads(a.cited.read_text()) +cert = json.loads(a.receipt.read_text()) +assert cert["status"] == "PASS_CONDITIONAL_SPLIT_CENTRE_ASSEMBLY" and cert["binding_component"] == "bit" +assert (cert["complex_lower"], cert["bit_lower"], cert["kappa"]) == (cited["b"], cited["bit_c"], cited["kappa"]) +grid = Q(1, 10 ** 18) + + +def price(P, m, W): + """#433 bit_price.py: 10^-24 lower endpoint of PR #315's certify (bad-branch allowance), second engine check""" + root = M.certify(P, m, W, True) + lo, hi = Q(root["lower"]), Q(root["upper"]) + fb = 32 * m * m * sum(P.values()) + + def other(x): + l, u = Other.moment(m, W, list(P.items()), x) + p, q = Other.moment(m, W, [(1, fb)], x) + return l + p / 10 ** 16, u + q / 10 ** 16 + assert other(lo)[1] < 1 < other(hi)[0] + lo2, hi2 = Other.moment(m, W, list(P.items()), lo) + bl, bh = Other.moment(m, W, [(1, fb)], lo) + assert hi2 + bh / 10 ** 16 < 1 # #433 combined.py's check at c + return lo, hi + + +def tail(c, b): + """#433 combined.py: six fixed bootstrap levels and the 47-inequality outer assembly""" + eta = beta = Q(1, 10 ** 18) + s = min(c, (1 - beta) * b) - Q(1, 10 ** 24) + assert 0 < s < c and s < (1 - beta) * b + chain = [Q(384599, 10 ** 10)] + cutoffs = [] + + def ceil(x): + return -((-x.numerator) // x.denominator) + for _ in range(6): + old = chain[-1] + z = (1 - s) * s + s * old + gap = min(s - z, 1 - z - s, 1 - z - s * (1 - old), 1 - s) + assert old < z < s < 1 - z and gap > 0 + cutoff = max(ceil(36 / gap ** 2), ceil(2 * (4 + 512) / gap)) + assert cutoff * gap ** 2 >= 36 and cutoff * gap >= 2 * (4 + 512) + cutoffs.append(dict(gap=str(gap), cutoff_log2=str(cutoff))) + chain.append(z) + q = chain[-1] * (1 - 2 * eta) + ticks = (1 - eta) * q / (1 + q) / grid + k = grid * ((ticks.numerator - 1) // ticks.denominator) + bridge = {"semantic": {"C0": {"base": 2, "exponent": 210000}, "strict_literal_gap": 1}, + "rows": {"degree_gap": Q(10 ** 6) - Q(51 * 20161, 25)}} + asm = Outer.assembly(chain[-1], b, bridge, k, eta=eta, beta=beta) + assert len(asm["strict_constraints"]) == 47 and all(x > 0 for x in asm["strict_constraints"].values()) + rejected = [] + for name, kk, ee, bb in [("next_grid", k + grid, eta, beta), ("zero_eta", k, Q(0), beta), + ("zero_beta", k, eta, Q(0)), ("unit_beta", k, eta, Q(1))]: + try: + Outer.assembly(chain[-1], b, bridge, kk, eta=ee, beta=bb) + except AssertionError: + rejected.append(name) + else: + raise AssertionError(name) + binding = "bit" if c < (1 - beta) * b else "complex" + return k, binding, rejected, cutoffs, asm + + +b = Q(cited["b"]) +# control 1: PR #433's stated R758 profile, priced by the same code, gives PR #433's bit c +L433 = {int(r): n for r, n in cited["bit_local_profile"].items()} +R433 = cited["bit_R"] +P433 = {r: 72 * n for r, n in L433.items()} +for r, n in ((7, 48 * 120), (14, 32 * 120), (28, 32 * 120), (42, 32 * 120)): + P433[r] = P433.get(r, 0) + n +W433 = 64 * 120 + 9 * R433 +assert sum(r * n for r, n in L433.items()) == 8 * R433 + 72 + 2 * 120 * 7 +assert 64 * W433 - sum(r * n for r, n in P433.items()) == 2496 +c433, _ = price(P433, 64, W433) +assert c433 == Q(cited["bit_c"]), (str(c433), cited["bit_c"]) +# control 2: PR #433's (c, b) through the tail gives PR #433's kappa +k433, bind433, _, _, _ = tail(c433, b) +assert k433 == Q(cited["kappa"]) and bind433 == "bit", str(k433) +print(" control: PR #433's R758 profile prices to c = %s (= PR #433 bit_lower); with b = %s the tail gives kappa = %s" + " (= PR #433, bit-bound)" % (c433, b, k433), flush=True) +# this word: the compressed nine-stage receipts of global_word_g.py / audit_g.py, #433's invoice and tail +out = a.out +g = json.loads((out / "GLOBAL.json").read_text()) +geo = json.loads((out / "GEOMETRY.json").read_text()) +audit = json.loads((out / "AUDIT.json").read_text()) +assert audit["template_sha256"] == g["template_sha256"] and len(audit["mutations_rejected"]) == 14 +P = {int(r): z for r, z in audit["profile"].items()} +m, W = 64, g["live"] +E = sum(P.values()) +T, L, R, V, K = REPLICAS, 9, g["R"], 120, 4 +assert T==32 and g["replicas"]==T +mass = sum(r * z for r, z in P.items()) +assert m * W - mass == 312*T and W == 8*T*V + 9 * g["banks_per_stage"] +physical = g["physical"] +d = m * m +N = 2 * m +unit = L * T * g["local_additions"] + g["bridge_additions"] +J = 8 * T * L * (2 * V + R) + 8 * (2 * K * V * T) + 2 * g["bank_assignments"] + 2 * g["copy_erase_episodes"] +high = 16 * (d + 1) ** 2 +good = 8 * m * m + 8 +compiler = 128 * N ** 3 +# Each new bank route is an 8-by-8 rational orthogonal matrix followed by +# a coordinate permutation. A conservative 8^2+16 elementary factors plus +# 64 transpositions is covered by an extra 144 factors per helper route. +selectors = 2 * L * T * ((W - 1) + R * m * (geo["max_route_factors"] + 144 + (m - 1) + m)) +prefix = int(g["global_prefix_bound"]) +charged_prefix = 64 * ((prefix.bit_length() + 63) // 64) +assert prefix < 1 << charged_prefix <= 1 << 256 +coefficient = unit + J * high + J * physical + E * (good + compiler) + 16 * m ** 3 + g["copy_erase_episodes"] + selectors + prefix + 1 +two = (coefficient + 1) ** 2 * (E + 1) ** 2 +assert two < 1 << 512 and 2 * max(P) ** 2 < m * m +row = 2 * (m * m + 1) + 9909 + 252 +assert row == 18355 < 20161 +assert geo["bad_prime_factors"] == [2] and geo["route_denominators"] == [1, 2, 4] +c, chi = price(P, m, W) +k, binding, rejected, cutoffs, asm = tail(c, b) +result = dict(status="PASS_KERNEL_BIT_SIDE_COMPOSED_WITH_CITED_PR433_COMPLEX", bit_lower=str(c), bit_upper=str(chi), + bit_lower_decimal=format(float(c), ".24f"), complex_lower=str(b), kappa=str(k), + kappa_decimal=format(float(k), ".18f"), binding_component=binding, + gain_over_pr433_percent=float(100 * (k / Q(cited["kappa"]) - 1)), + bit_gain_over_pr433_percent=float(100 * (c / Q(cited["bit_c"]) - 1)), + bit_invoice=dict(prefix_bits=prefix.bit_length(), charged_prefix_bits=charged_prefix, + coefficient_bits=coefficient.bit_length(), two_level_coefficient_bits=two.bit_length(), + charged_two_level_coefficient_bits=512, row_coefficient=row, live=W, physical=physical), + strict_outer_constraints={n: str(x) for n, x in asm["strict_constraints"].items()}, + minimum_strict_constraint=str(min(asm["strict_constraints"].values())), outer_controls=rejected, + bootstrap=cutoffs, bit_global_sha256=sha(out / "GLOBAL.json"), bit_audit_sha256=sha(out / "AUDIT.json"), + controls=dict(pr433_bit_c=str(c433), pr433_kappa=str(k433)), source=cited["source"]) +(out / "COMPOSED-433.json").write_text(json.dumps(result, indent=2) + "\n") +print("PASS this word with PR #433's bit engine and invoice: c = %s = %.24f (prefix %d bits, charged %d; two-level %d" + " bits < 512)" % (c, float(c), prefix.bit_length(), charged_prefix, two.bit_length()), flush=True) +print("PASS composed with PR #433's complex b = %s: kappa = %s = %.18f (%s-bound; PR #433: %s, %+.6f%%; 47 strict" + " inequalities, next grid point, zero eta, zero beta and unit beta rejected)" + % (b, k, float(k), binding, cited["kappa"], result["gain_over_pr433_percent"]), flush=True) diff --git a/research/e8-r740-replica32/code/config.py b/research/e8-r740-replica32/code/config.py new file mode 100644 index 0000000000..c6824d9c4e --- /dev/null +++ b/research/e8-r740-replica32/code/config.py @@ -0,0 +1,2 @@ +"""Four independent groups of eight replicas; no bank padding.""" +REPLICAS = 32 diff --git a/research/e8-r740-replica32/code/e8core.py b/research/e8-r740-replica32/code/e8core.py new file mode 100644 index 0000000000..78983b3687 --- /dev/null +++ b/research/e8-r740-replica32/code/e8core.py @@ -0,0 +1,203 @@ +"""Our own engine for bitE8/1 words (E8 root-line labels, h = 8): frame algebra over Q via root-line masks, +legality/F2 replay, five-stage histogram, exact bit coarse saving and PR #315 outer assembly (our engine copies). +Chafik Boukhalfa (chafreaky) with Anthropic Claude assistance; Apache-2.0.""" +import gzip, json, os, importlib.util +from fractions import Fraction as Q +from collections import Counter + +HERE = os.path.dirname(os.path.abspath(__file__)) +def _load(n): + s = importlib.util.spec_from_file_location('e8_' + n, os.path.join(HERE, "engines", n + ".py")) + m = importlib.util.module_from_spec(s); s.loader.exec_module(m); return m +moment = _load('moment'); other = _load('base_two_moment'); outer = _load('outer') + +B2 = Q(876248285600677, 10**18) # Sussman E8 five-stage (PR #352) +B3 = Q(932783231884153, 10**18) # DaysSky seven-stage B_3 (PR #363; no Lean proof) + + +def load_word(p): + with (gzip.open(p, 'rt') if p.endswith('.gz') else open(p)) as f: + return json.load(f) + + +def save_word(c, p): + with gzip.open(p, 'wt') as f: + json.dump(c, f, separators=(',', ':')) + + +def rank(vecs): + rows = [[Q(x) for x in r] for r in vecs]; rk = 0 + n = len(rows[0]) if rows else 0 + for col in range(n): + p = next((i for i in range(rk, len(rows)) if rows[i][col] != 0), None) + if p is None: continue + rows[rk], rows[p] = rows[p], rows[rk] + for i in range(len(rows)): + if i != rk and rows[i][col] != 0: + f = rows[i][col] / rows[rk][col]; rows[i] = [a - f * b for a, b in zip(rows[i], rows[rk])] + rk += 1 + return rk + + +class Lat: + """Root-spanned subspaces of Q^8 represented by the mask of root lines they contain.""" + def __init__(self, lines): + self.lines = [tuple(x) for x in lines]; self.v = len(lines) + self._dim = {0: 0}; self._close = {} + # Gram (form /2) for orthogonality + self.ip = [[sum(a * b for a, b in zip(x, y)) // 2 for y in self.lines] for x in self.lines] + + def close(self, mask): + """mask of all root lines in span(roots of mask)""" + if mask in self._close: return self._close[mask] + idx = [i for i in range(self.v) if mask >> i & 1] + basis = [] + for i in idx: + if rank([self.lines[j] for j in basis] + [self.lines[i]]) > len(basis): basis.append(i) + d = len(basis); out = 0 + if d == 8: out = (1 << self.v) - 1 + elif d: + B = [self.lines[j] for j in basis] + for i in range(self.v): + if rank(B + [self.lines[i]]) == d: out |= 1 << i + self._close[mask] = out; self._close[out] = out; self._dim[out] = d + return out + + def dim(self, mask): + if mask not in self._dim: self.close(mask) + return self._dim[mask] + + def basis(self, mask): + b = [] + for i in range(self.v): + if mask >> i & 1 and rank([self.lines[j] for j in b] + [self.lines[i]]) > len(b): b.append(i) + return b + + def perp(self, t): + return self.close(sum(1 << j for j in range(self.v) if self.ip[t][j] == 0)) + + +def to_masks(c, L): + return [L.close(sum(1 << i for i in fr)) for fr in c['frames']] + + +PHASES = ('D', 'A', 'B', 'C') + + +def replay(c, L=None, masks=None, check_f2=True, span=True, span_mode='z'): + """Exact legality + F2 replay + histogram of a bitE8/1 word. Returns dict(H_local, steps, ...). + Legality: each register's frames nested (mask inclusion = exact Q-subspace inclusion for root-spanned frames) and + strictly increasing at each move; every gate at one common frame; D compensation at frame 0; y at frame 0 at the + scatter; COPY of retained totals; final frames (x, helpers FULL; y_t at its cap t-perp). + Source-span: every non-target operand's x-support lies in the gate frame.""" + L = L or Lat(c['lines']); masks = masks or to_masks(c, L) + v, R, h = c['v'], c['R'], c['h']; n = 2 * v + R; FULL = (1 << v) - 1 + cur = [masks[f] for f in c['start']] + for r in range(v): assert cur[r] == L.close(1 << r), 'x start' + for r in range(v, 2 * v): assert cur[r] == 0, 'y start at 0' + sig = [L.dim(cur[r]) for r in range(n)] + H = Counter(); steps = 0; viol = [] + val = [1 << i for i in range(n)] + zsupp = [{i: 1} if i < v else {} for i in range(n)] # integer support of each register over the x columns (all ADDs are +1) + def climb(r, m): + nonlocal steps + if cur[r] == m: return + assert cur[r] & ~m == 0 and cur[r] != m, ('not nested', r) + H[L.dim(m) - L.dim(cur[r])] += 1; steps += 1; cur[r] = m + def run(gates, ph): + for k, (f, d, srcs) in enumerate(gates): + m = masks[f] + assert d >= v and d not in srcs and len(set(srcs)) == len(srcs), (ph, k) + for x in [d] + srcs: climb(x, m) + for s in srcs: + val[d] ^= val[s] + if span: + if s < v or s >= 2 * v: + ms = sum(1 << i for i in zsupp[s]) + if ms & ~m: viol.append((ph, k, s)) + zd = zsupp[d] + for i, a in zsupp[s].items(): + w = zd.get(i, 0) + a + if w: zd[i] = w + else: zd.pop(i, None) + if span_mode == 'f2': + zsupp[d] = {i: 1 for i in range(v) if val[d] >> i & 1} + if span and d >= 2 * v: + md = sum(1 << i for i in zsupp[d]) + if md & ~m: viol.append((ph, k, d)) + run(c['D'], 'D') + for r in range(v, n): assert cur[r] == masks[c['start'][r]], 'D compensation at frame 0 (helpers untouched otherwise)' + run(c['A'], 'A') + for t in range(v): assert cur[v + t] == 0, 'y at frame 0 at the scatter' + copies = [val[q] for q in c['ret']] + for q in c['ret']: + assert q >= 2 * v; H[L.dim(cur[q])] += 1 + for t, row in enumerate(c['scatter']): + for k in row: val[v + t] ^= copies[k] + run(c['B'], 'B'); run(c['C'], 'C') + for r in range(n): climb(r, masks[c['final'][r]]) + for r in range(v): assert cur[r] == FULL + for r in range(2 * v, n): assert cur[r] == FULL + for t in range(v): assert cur[v + t] == L.perp(t), 'y final at cap' + if check_f2: + for s in range(v): assert val[s] == 1 << s + for t in range(v): assert val[v + t] == (1 << (v + t)) | (1 << t), ('target', t) + for r in range(2 * v, n): assert val[r] == 1 << r, ('helper', r) + return dict(sig=sig, viol=viol, H=H, steps=steps, n=n, v=v, R=R, h=h, L=L, masks=masks, ncopy=len(c['ret'])) + + +def profile(H_local, v, h=8): + prof = Counter({j: 5 * c for j, c in H_local.items()}) + for j in (2 * h - 2, h - 1, 2 * h + 2, 4): prof[j] += 2 * v + return prof + + +def coarse(H, m, W): + grid = Q(1, 10**18) + root = moment.certify(dict(H), m, W, True); c = Q(int(Q(root['lower']) * 10**18), 10**18) + assert moment.moment(H, m, W, c, True)[1] < 1 < moment.moment(H, m, W, c + grid, True)[0] + fb = 32 * m * m * sum(H.values()) + _, up = other.moment(m, W, list(H.items()), c); _, bad = other.moment(m, W, [(1, fb)], c) + lo, _ = other.moment(m, W, list(H.items()), c + grid); blo, _ = other.moment(m, W, [(1, fb)], c + grid) + assert up + Q(1, 10**16) * bad < 1 < lo + Q(1, 10**16) * blo + return c + + +def kappa(c, b): + grid = Q(1, 10**18); eta = Q(1, 10**12); beta = Q(1, 10**9); cap = (1 - beta) * b + sv = min(c, Q(((cap - grid) * 10**18).__floor__(), 10**18)); binding = 'bit' if sv == c else 'complex' + chain = [Q(384599, 10**10)] + for _ in range(3): + a = (1 - sv) * sv + sv * chain[-1]; assert chain[-1] < a < sv < 1 - a; chain.append(a) + bit = chain[-1] + bridge = dict(proof='PROOF.md', representation='Exact powers with source-bound finite overcharges', + semantic=dict(G=dict(base=2, exponent=30000), E=dict(base=2, exponent=100000), B_upper=dict(base=2, exponent=100001), + C0=dict(base=2, exponent=210000), C1=1, strict_literal_gap=1, induction_gap_lower=1), + rows=dict(coefficient=20161, degree=10**6, suffix_slope=4 * 10**6, degree_gap=Q(10**6) - Q(51 * 20161, 25))) + q = bit * (1 - 2 * eta); mn = (1 - eta) * q / (1 + q); t = mn * 10**18; k = Q((t.numerator - 1) // t.denominator, 10**18) + asm = outer.assembly(bit, b, bridge, k, eta=eta, beta=beta) + assert len(asm['strict_constraints']) == 47 and min(asm['strict_constraints'].values()) > 0 + try: + outer.assembly(bit, b, bridge, k + grid, eta=eta, beta=beta); raise SystemExit('ADJACENT ADMITTED') + except AssertionError: pass + return k, binding + + +def price_word(c, **kw): + r = replay(c, **kw) + v, h, R = r['v'], r['h'], r['R']; m = 5 * h + resid = sum(h - r['sig'][x] for x in range(2 * v, 2 * v + R)) + T = 1 if resid % h == 0 else h + W = (4 * v * h + resid) * T // h; assert (4 * v * h + resid) * T % h == 0 + prof = Counter({j: T * k for j, k in profile(r['H'], v, h).items()}); mass = sum(a * b for a, b in prof.items()) + L_copy = h * r['ncopy'] + assert m * W - mass == T * (4 * v - 5 * L_copy), ('deficit', m * W - mass) + assert 2 * max(prof) < m + cc = coarse(prof, m, W) + return dict(c=cc, H=r['H'], prof=prof, W=W, T=T, resid=resid, m=m, deficit=m * W - mass, replay=r) + + +def phi_fn(m, W, a): + """linearized moment term per child of rank r (float), for search scoring""" + import math + return lambda r: r / (m * W) * math.exp(a * math.log(m / r)) diff --git a/research/e8-r740-replica32/code/engines/base_two_moment.py b/research/e8-r740-replica32/code/engines/base_two_moment.py new file mode 100644 index 0000000000..14a90fa0e7 --- /dev/null +++ b/research/e8-r740-replica32/code/engines/base_two_moment.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 +"""Maintainer arithmetic cross-check of the pinned PR39 certificate. + +Uses no producer/checker imports. Counts are inputs, not proved by this script. +80-term rational logarithms and 12-term exponentials independently enclose +the two moments. The accompanying written review addresses their realization. +""" +import argparse +from fractions import Fraction as Q +from hashlib import sha256 +import json +from pathlib import Path + +ROOT = Path(__file__).resolve().parents[1] +GRID = 10**30 + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def log_unit(x): + require(1 <= x <= 2, "logarithm range") + z = (x-1)/(x+1) + lo = 2*sum((z**(2*j+1)/(2*j+1) for j in range(80)), Q(0)) + return lo, lo+2*z**161/(161*(1-z*z)) + + +def log_bounds(x): + k = 0 + while x > 2: + x /= 2 + k += 1 + lo, hi = log_unit(x) + l2, u2 = log_unit(Q(2)) + lo, hi = lo+k*l2, hi+k*u2 + # Outward rational rounding keeps later certificates compact. + return Q((lo*GRID).__floor__(), GRID), Q((hi*GRID).__ceil__(), GRID) + + +def exp_bounds(x): + require(0 <= x < 1, "exponential range") + term = total = Q(1) + for j in range(1, 13): + term *= x/j + total += term + tail = term*x/13/(1-x/14) + return total, total+tail + + +def moment(m, W, entries, saving): + lo = hi = Q(0) + for t, count in entries: + t, count = int(t), int(count) + require(0 < t < m and count > 0, "improper child") + l, u = log_bounds(Q(m, t)) + lower = exp_bounds(saving*l)[0] + upper = exp_bounds(saving*u)[1] + lo += Q(t*count, m*W)*lower + hi += Q(t*count, m*W)*upper + return Q((lo*GRID).__floor__(), GRID), Q((hi*GRID).__ceil__(), GRID) + diff --git a/research/e8-r740-replica32/code/engines/moment.py b/research/e8-r740-replica32/code/engines/moment.py new file mode 100644 index 0000000000..7d697cb452 --- /dev/null +++ b/research/e8-r740-replica32/code/engines/moment.py @@ -0,0 +1,113 @@ +"""Independent prospective ordinary five-stage cost, never supplier admission. + +Consumes a raw one-invocation ledger made from the actual source/internal/target +paths. No packed profile is used as an input. Missing physical/finite/compiler +obligations must remain explicit in the accompanying report. +""" +from collections import Counter +from decimal import Decimal, localcontext, ROUND_FLOOR +from fractions import Fraction as F +from functools import lru_cache +from math import factorial +import hashlib, json, sys +from pathlib import Path + +DYAD = 1 << 224 + +def floor(x): return F(x.numerator*DYAD//x.denominator, DYAD) +def ceil(x): return -floor(-x) + +@lru_cache(None) +def logarithm(x): + """Mercator bounds after binary reduction; ln(2) via two Mercator sums. + + For 1 <= y < 2, log(y) is an alternating series in z=y-1. + We instead reduce to 1 <= y < 3/2, and bound log(3/2) and + log(2) by the same alternating series at z=1/2 and z=1/3, + using log(2)=log(3/2)+log(4/3). All sums are exact rationals. + """ + assert x >= 1 + k = 0 + while x >= 2: x /= 2; k += 1 + j = int(x >= F(3, 2)) + if j: x /= F(3, 2) + def mercator(y): + z=y-1 + assert 0 <= z <= F(1,2) + # An even partial sum is below log; the next term bounds its tail. + t=z; s=F(0) + for n in range(1, 225): + s += (t if n & 1 else -t)/n + t *= z + return s, s+t/225 + a,b=mercator(x); c,d=mercator(F(3,2)); e,f=mercator(F(4,3)) + return floor(a+(k+j)*c+k*e), ceil(b+(k+j)*d+k*f) + +def exponential(l,u): + assert 0 <= l <= u < F(1,10) + def poly(x): + s=t=F(1) + for j in range(1,25): t=t*x/j; s+=t + return s,t + lo,_=poly(l);hi,last=poly(u) + return floor(lo),ceil(hi+last*u/25/(1-u/26)) + +def moment(H,m,W,a,bad=False): + lo=hi=F(0) + for r,n in H.items(): + assert 0 < r < m and n > 0 + l,u=logarithm(F(m,r)); e,f=exponential(a*l,a*u) + p=F(r*n,m*W);lo+=p*e;hi+=p*f + if bad: + # Existing envelope shape, only conditionally portable to the new cover. + l,u=logarithm(F(m));e,f=exponential(a*l,a*u) + p=F(32*m*sum(H.values()),10**16*W) + lo+=p*e;hi+=p*f + return floor(lo),ceil(hi) + +def decimal(x): + with localcontext() as c: + c.prec=70 + return str(Decimal(x.numerator)/Decimal(x.denominator)) + +def certify(H,m,W,bad=False): + with localcontext() as c: + c.prec=70 + terms=[(Decimal(r*n)/Decimal(m*W),(Decimal(m)/Decimal(r)).ln()) for r,n in H.items()] + fallback=Decimal(32*m*sum(H.values()))/Decimal(10**16*W) if bad else Decimal(0) + lm=Decimal(m).ln();lo=Decimal(0);hi=Decimal('.003') + for _ in range(210): + a=(lo+hi)/2 + if sum(p*(a*l).exp() for p,l in terms)+fallback*(a*lm).exp()<1:lo=a + else:hi=a + q=int(((lo+hi)/2*10**24).to_integral_value(rounding=ROUND_FLOOR)) + lo=F(q,10**24);hi=lo+F(1,10**24) + lv=moment(H,m,W,lo,bad);hv=moment(H,m,W,hi,bad) + assert lv[1]<10 for v in slacks.values()),{k:str(v) for k,v in slacks.items() if v<=0} + assert min(margins.values())==minimum + assert margins['balanced_prefix']-minimum==eta and 1-eps-r==eta/2 + assert 1-eps*(1+c)==eta-eps*eta/4 + return dict(parameters=dict(a_bit=a,a_complex=b,tau=tau,sigma=sigma, + eta=eta,beta=beta,q=q,c=c,epsilon=eps,lambda_=lam, + lambda_prime=lp,alpha_squared_power=r,delta=delta, + C0=bridge['semantic']['C0'],C1=1,kappa=kappa), + strict_constraints=slacks,margins=margins,minimum_margin=minimum, + absorption_gap=minimum-kappa, + recurrence=dict(internal=internal,leaf=leaf,reservations=1-c)) diff --git a/research/e8-r740-replica32/code/export249.py b/research/e8-r740-replica32/code/export249.py new file mode 100644 index 0000000000..462a0f121f --- /dev/null +++ b/research/e8-r740-replica32/code/export249.py @@ -0,0 +1,86 @@ +"""Export a bitE8/1 word to PR249 snapshot format (249-records.bin, 249-states.json, frames.json) and stage it for +PR #266's official cohort checkers. Our own exporter (helpers may start at a kernel entrance E, sigma = dim E). +Records (int32 x 6): MOVE(0,role,old,new,rank,0), ADD(1,dst,src,1,frame,phase), COPY(2,centre,temp,frame,ZERO,rank), +ERASE(3,centre,temp,frame,ZERO,0). A gate with several sources: MOVE every participant to the gate frame, then one ADD +per source. Frames: B = integer label vectors of a basis among the frame's root lines; A = primitive integer +annihilator rows under the standard dot product (exact over Q). +usage: export249.py WORD.json.gz SNAPDIR COHORT_IN COHORT_OUT +Chafik Boukhalfa (chafreaky) with Anthropic Claude assistance; Apache-2.0.""" +import sys, os, json, struct, math, shutil +from fractions import Fraction as Q +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from e8core import load_word, Lat, to_masks + + +def nullspace(B, h): + M = [[Q(x) for x in r] for r in B]; piv = []; rk = 0 + for col in range(h): + p = next((i for i in range(rk, len(M)) if M[i][col] != 0), None) + if p is None: continue + M[rk], M[p] = M[p], M[rk]; pv = M[rk][col]; M[rk] = [x / pv for x in M[rk]] + for i in range(len(M)): + if i != rk and M[i][col] != 0: + f = M[i][col]; M[i] = [a - f * b for a, b in zip(M[i], M[rk])] + piv.append(col); rk += 1 + A = [] + for fc in [x for x in range(h) if x not in piv]: + a = [Q(0)] * h; a[fc] = Q(1) + for i, pc in enumerate(piv): a[pc] = -M[i][fc] + den = 1 + for x in a: den = den * x.denominator // math.gcd(den, x.denominator) + ai = [int(x * den) for x in a]; g = 0 + for x in ai: g = math.gcd(g, abs(x)) + A.append([x // g for x in ai]) + return A + + +def export(c, out): + os.makedirs(out, exist_ok=True) + L = Lat(c['lines']); masks = to_masks(c, L); v, R, h = c['v'], c['R'], c['h']; n = 2 * v + R + fid = {}; frames = {} + for k, m in enumerate(masks): + if m in fid: continue + fid[m] = k; B = [list(L.lines[i]) for i in L.basis(m)] + A = nullspace(B, h) if B else [[int(i == j) for j in range(h)] for i in range(h)] + assert len(A) + len(B) == h and all(sum(x * y for x, y in zip(a, b)) == 0 for a in A for b in B) + frames[str(k)] = dict(dim=len(B), B=B, A=A) + F = lambda f: fid[masks[f]] + ZERO = fid[0]; FULL = fid[(1 << v) - 1] + dim = {int(a): b['dim'] for a, b in frames.items()} + cur = [F(f) for f in c['start']]; rec = [] + def move(r, f): + if cur[r] != f: rec.append((0, r, cur[r], f, dim[f] - dim[cur[r]], 0)); cur[r] = f + def run(gates, ph): + for f, d, srcs in gates: + f = F(f) + for r in [d] + srcs: move(r, f) + for s in srcs: rec.append((1, d, s, 1, f, ph)) + run(c['D'], 1); run(c['A'], 2) + temp = n + for k, q in enumerate(c['ret']): + fq = cur[q]; rec.append((2, q, temp, fq, ZERO, dim[fq])) + for t, row in enumerate(c['scatter']): + if k in row: rec.append((1, v + t, temp, 1, ZERO, 3)) + rec.append((3, q, temp, fq, ZERO, 0)) + run(c['B'], 4); run(c['C'], 5) + for r in range(n): move(r, F(c['final'][r])) + with open(out + '/249-records.bin', 'wb') as fh: + for e in rec: fh.write(struct.pack('<6i', *e)) + st = dict(n=n, v=v, h=h, R=R, ZERO=ZERO, FULL=FULL, initial={str(r): F(c['start'][r]) for r in range(n)}, + final={str(r): F(c['final'][r]) for r in range(n)}, retained_totals=c['ret'], source_owned_roles=[], regs=[]) + json.dump(st, open(out + '/249-states.json', 'w'), sort_keys=True, separators=(',', ':')) + json.dump(dict(frames=frames), open(out + '/frames.json', 'w'), sort_keys=True, separators=(',', ':')) + return st, frames, rec + + +if __name__ == '__main__': + c = load_word(sys.argv[1]); snap, cin, cout = sys.argv[2:5] + st, frames, rec = export(c, snap) + os.makedirs(cin, exist_ok=True); os.makedirs(cout, exist_ok=True) + json.dump(st, open(cin + '/249-states.json', 'w')); json.dump(dict(frames=frames), open(cin + '/frames.json', 'w')) + json.dump({'donor_keys': []}, open(cin + '/249-DONOR-OWNERSHIP.json', 'w')) + json.dump({}, open(cout + '/COHORT249-FRAMES.json', 'w')) + json.dump({k: int(x) for k, x in st['initial'].items()}, open(cout + '/COHORT249-INITIAL.json', 'w')) + json.dump([], open(cout + '/COHORT249-SELECTION.json', 'w')) + shutil.copy(snap + '/249-records.bin', cout + '/COHORT249-RECORDS.bin') + print(' exported %d records, %d distinct frames, n %d, ZERO %d, FULL %d' % (len(rec), len(frames), st['n'], st['ZERO'], st['FULL'])) diff --git a/research/e8-r740-replica32/code/global_kernel.py b/research/e8-r740-replica32/code/global_kernel.py new file mode 100644 index 0000000000..72856bf507 --- /dev/null +++ b/research/e8-r740-replica32/code/global_kernel.py @@ -0,0 +1,243 @@ +# Kernel integration of PR436/PR386 by chafreaky, with OpenAI Codex assistance. +# Original copyright and attribution retained below. This variant uses explicit +# residual isometries and mixed-width banks; the original all-zero-start +# requirement is replaced by the verified kernel entrance contract. +"""Source-bound nine-stage bit template with 32 independent replicas. +PR386 global identity and PR436 generalization by Zhihao Chen and eumemic, +with their disclosed OpenAI Codex and Anthropic Claude assistance, Apache-2.0. +PR439 explicit residual routes and this replication extension by chafreaky, +with OpenAI Codex assistance. All owner assignments and emitted calls are checked. +Historical PR386 regression is performed by the unchanged parent wrapper. +""" +import argparse, gzip, hashlib, json, struct, time +from collections import Counter +from pathlib import Path +from bank_routes import placement, validate_isometries +from config import REPLICAS + +H,L,K,T,M=8,9,4,REPLICAS,64 +def sha(p): return hashlib.sha256(p.read_bytes()).hexdigest() +def write(p,x): p.write_text(json.dumps(x,indent=2)+'\n') + +def recipe(): + out=[dict(kind='local',stage=0,pair=0,reverse=False)]; stage=1 + for j in range(K): + out.append(dict(kind='local',stage=stage,pair=j,reverse=True)); stage+=1 + if j/2') + geo=json.loads((out/'GEOMETRY.json').read_text()) + assert geo['status']=='PASS_COMPRESSED_NINE_BIT_GEOMETRY_AND_BANK_BLOCKS' + # the port routes depend only on the labels: same 120 label vectors, in the same order + assert len(geo['ports'])==V and all(p['port']==t and p['q']==w['lines'][t] for t,p in enumerate(geo['ports'])) + rp=a.local_check/'records/249-records.bin'; raw=rp.read_bytes(); rec=list(struct.iter_unpack('<6i',raw)) + state=json.loads((a.local_check/'records/249-states.json').read_text()) + fs=json.loads((a.local_check/'records/frames.json').read_text())['frames'] + dims={int(f):z['dim'] for f,z in fs.items()} + lg=json.loads((a.local_check/'cout/legality.json').read_text()) + cc=json.loads((a.local_check/'cout/columns.json').read_text()) + assert lg['status'].startswith('PASS') and cc['status'].startswith('PASS') + assert (state['v'],state['n'])==(V,LOCAL) and lg['copies']==lg['erasures']==9 + ADDS=lg['common_frame_ADDs'] + assert cc['formal_columns_checked']==4*V+R and cc['local_scalar_additions']==ADDS + initial=[state['initial'][str(i)] for i in range(LOCAL)] + final=[state['final'][str(i)] for i in range(LOCAL)] + assert all(dims[final[i]]==H for i in range(2*V,LOCAL)) + widths=[H-dims[initial[i]] for i in range(2*V,LOCAL)] + ENT=sum(H-z for z in widths) + place,NB=placement(widths,T) + assert T%8==0 and T*(H*R-ENT)%M==0 and NB==T*(H*R-ENT)//M + LIVE=DATA+L*NB + isometries=json.loads(a.isometries.read_text()) + assert validate_isometries(isometries,w['frames'],w['lines'],dims)==set(initial[2*V:]) + streams={}; checks={}; localH=None + for reverse in (False,True): + cur=(final if reverse else initial)[:]+[-1]; val=[1<=0 + cur[x]=newf + if f: hist[f]+=1 + events.append([0,x,oldf,newf,f,int(reverse)]) + elif op==1: + assert cur[x]==cur[y]==f and x!=y and x U-perp, ERASE -> fresh COPY), F2 on all local columns + private centre, 9 copies of rank 8, +equal forward/reverse paid histograms, cancellation-free row l1 bounds and the nine-stage prefix 2^18 cf^5 cb^4 < 2^192, +helper initial/final frames (0 / FULL in #386; kernel pivots start at their entrance). usage: iface386.py WORD.json.gz""" +import sys, os, json, tempfile +from collections import Counter +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from e8core import load_word +from export249 import export +H = 8 +def check(c, allow=int(os.environ.get("PREFIX_ALLOW", "192"))): + st, frames, rec = export(c, tempfile.mkdtemp()) + v, n = st['v'], st['n']; dims = {int(k): z['dim'] for k, z in frames.items()} + initial = [st['initial'][str(i)] for i in range(n)]; final = [st['final'][str(i)] for i in range(n)] + nz_start = Counter(dims[initial[i]] for i in range(2 * v, n)); assert all(dims[final[i]] == H for i in range(2 * v, n)) + out = {} + for reverse in (False, True): + cur = (final if reverse else initial)[:] + [-1]; val = [1 << i for i in range(n)] + [0] + norm = [1] * n + [0]; mx = 1; centre = None; hist = Counter(); copies = adds = 0 + dim = (lambda f: H - dims[f]) if reverse else (lambda f: dims[f]) + for op, x, y, cc, f, z in (reversed(rec) if reverse else rec): + if op == 0: + old, new = (cc, y) if reverse else (y, cc) + assert cur[x] == old and dim(new) - dim(old) == f >= 0; cur[x] = new + if f: hist[f] += 1 + elif op == 1: + assert cur[x] == cur[y] == f and x != y and x < n + if centre is not None: assert x != centre + if y == n: assert centre is not None + if cc & 1: val[x] ^= val[y] + norm[x] += abs(cc) * norm[y]; mx = max(mx, norm[x]); adds += 1 + elif op == (3 if reverse else 2): + assert centre is None and y == n and cur[x] == cc and val[n] == 0 + r = abs(dim(cc) - dim(f)); assert r == 8 + centre = x; cur[n] = f; val[n] = val[x]; norm[n] = norm[x]; hist[r] += 1; copies += 1 + else: + assert centre == x and y == n and cur[x] == cc and cur[n] == f and val[n] == val[x] + val[n] = 0; norm[n] = 0; cur[n] = -1; centre = None + assert centre is None and copies == 9 and cur[:n] == (initial if reverse else final) + for i in range(n): assert val[i] == (1 << i) ^ ((1 << (i - v)) if v <= i < 2 * v else 0) + out['reverse' if reverse else 'forward'] = dict(adds=adds, copies=copies, row_l1=mx, hist=dict(sorted(hist.items()))) + assert out['forward']['hist'] == out['reverse']['hist'] + cf, cb = out['forward']['row_l1'], out['reverse']['row_l1']; pre = (1 << 18) * cf ** 5 * cb ** 4 + return dict(n=n, R=st['R'], helper_start_dims=dict(sorted(nz_start.items())), streams=out, prefix_bits=pre.bit_length(), prefix_ok=pre < 1 << allow, prefix_allow=allow) +if __name__ == '__main__': + print(json.dumps(check(load_word(sys.argv[1])))) diff --git a/research/e8-r740-replica32/code/rebuild.py b/research/e8-r740-replica32/code/rebuild.py new file mode 100644 index 0000000000..f7239ea69f --- /dev/null +++ b/research/e8-r740-replica32/code/rebuild.py @@ -0,0 +1,65 @@ +"""Reconstruct primitive retiming and the kernel with 32 exact bank replicas. +Prepared by chafreaky with OpenAI Codex assistance; Apache-2.0. +""" +import copy +import json +from pathlib import Path +from e8core import load_word, replay +from iface386 import check +from stages import content_sha, retime +from replica_kernel import kernel +from config import REPLICAS + +ROOT=Path(__file__).resolve().parents[1] +parent=load_word(str(ROOT/'parent436/data/bit/bitE8-r740.json.gz')) +timing=json.loads((ROOT/'data/retiming.json').read_text()) +assert content_sha(parent)==timing['input_sha256'] +primitive=copy.deepcopy(parent) +for phase in ('D','A','B','C'): + primitive[phase]=[[f,d,[s]] for f,d,ss in parent[phase] for s in ss] +retimed=retime(primitive,timing['changes']) +assert len(timing['changes'])==57 and content_sha(retimed)==timing['output_sha256'] +for phase in ('D','A','B','C'): + assert [(d,s) for f,d,ss in parent[phase] for s in ss]==[(d,s) for f,d,ss in retimed[phase] for s in ss] +selected=json.loads((ROOT/'data/selection.json').read_text()) +assert content_sha(retimed)==selected['input_sha256'] +word,entries,rank,donors=kernel(retimed,selected['entries'],REPLICAS) +assert (entries,rank,donors,REPLICAS)==(114,138,103,32) +assert content_sha(word)==selected['output_sha256'] +post=json.loads((ROOT/'data/post-retiming.json').read_text()) +assert [len(s['gates']) for s in post]==[112,42] +for stage in post: + original=json.loads((ROOT/'data/upstream441'/stage['source']).read_text()) + assert stage['gates']==original['gates'] and all(g[0]=='B' for g in stage['gates']) + assert content_sha(word)==stage['input_sha256'] + word=retime(word,stage['gates']) + assert content_sha(word)==stage['output_sha256'] +assert word==load_word(str(ROOT/'data/word.json.gz')) +audit=replay(word,span_mode='z');assert not audit['viol'],audit['viol'][:5] +interface=check(word,192);assert interface['prefix_ok'] + +rejected=[] +for name,mutate in [ + ('retained row used as pivot',lambda s:s[0].__setitem__(1,parent['ret'][0])), + ('duplicate pivot',lambda s:s.append(copy.deepcopy(s[0]))), +]: + bad=copy.deepcopy(selected['entries']);mutate(bad) + try:kernel(retimed,bad,REPLICAS) + except AssertionError:rejected.append(name) + else:raise AssertionError('accepted invalid kernel selection: '+name) +try:kernel(retimed,selected['entries'],8) +except AssertionError:rejected.append('eight replicas do not fill integral banks') +else:raise AssertionError('accepted nonintegral bank stock') +bad=copy.deepcopy(word);bad['A'][0][2].pop() +try:bad_audit=replay(bad,span_mode='z') +except AssertionError:pass +else:assert bad_audit['viol'],'missing dirty-response correction accepted' +rejected.append('omit a kernel dirty-response correction') +bad=copy.deepcopy(timing['changes']);bad[0][2]=[] +try:retime(primitive,bad) +except AssertionError:rejected.append('wrong primitive input frame') +else:raise AssertionError('accepted incorrect frame binding') +print(json.dumps(dict(status='PASS_FROZEN_RETIMING_KERNEL_REPLICA_REBUILD', + input_sha256=content_sha(parent),retimed_sha256=content_sha(retimed),output_sha256=content_sha(word), + pre_kernel_frame_changes=57,post_kernel_frame_changes=[112,42],entries=entries,entrance_rank=rank,donor_slots=donors,replicas=REPLICAS, + interface=interface,mutations_rejected=rejected),sort_keys=True)) diff --git a/research/e8-r740-replica32/code/replica_kernel.py b/research/e8-r740-replica32/code/replica_kernel.py new file mode 100644 index 0000000000..b61f1d98f2 --- /dev/null +++ b/research/e8-r740-replica32/code/replica_kernel.py @@ -0,0 +1,42 @@ +"""PR417 kernel with a checked replication count instead of the eight-replica +rank congruence. All local response and frame checks are retained verbatim. +Generalization by chafreaky with OpenAI Codex assistance; Apache-2.0. +""" +from stages import Lat, to_masks, occurrences, Framer, mask_of, json + +def kernel(c, sel, replicas=32): + L = Lat(c['lines']); masks = to_masks(c, L); v = c['v']; n = 2 * v + c['R']; FULL = (1 << v) - 1 + occ = occurrences(c, masks) + gm = {(ph, k): masks[g[0]] for ph in ('D', 'A', 'B', 'C') for k, g in enumerate(c[ph])} + first = {} + for h in range(2 * v, n): + assert masks[c['start'][h]] == 0 + first[h] = next(x if kind == 'p' else gm[x] for kind, x in occ[h][1:] if (x if kind == 'p' else gm[x]) != 0) + resp = {} + for f, t, srcs in c['D']: + assert masks[f] == 0 + for s in srcs: resp[s] = resp.get(s, 0) ^ (1 << (t - v)) + ret = set(c['ret']); pivots = {}; donor_at = {}; tot = 0 + for E_lines, p, D in sel: + E = L.close(mask_of(E_lines)); assert E == mask_of(E_lines) and E != 0 + assert p not in ret and p not in pivots and p not in donor_at and 2 * v <= p < n + x = resp.get(p, 0) + for d in D: + assert d not in ret and d not in pivots and 2 * v <= d < n + assert donor_at.setdefault(d, E) == E, 'donor serves one entrance' + x ^= resp.get(d, 0) + assert x == 0, ('response relation fails', p) + for h in [p] + D: assert E & ~first[h] == 0, ('entrance not inside first frame', h) + pivots[p] = E; tot += L.dim(E) + assert not set(pivots) & set(donor_at) + assert replicas > 0 and replicas % 8 == 0 + assert replicas * (8*c['R']-tot) % 64 == 0, 'residual coordinates must fill whole banks' + out = json.loads(json.dumps(c)); fm = Framer(out) + for p, E in pivots.items(): out['start'][p] = fm.fid(E) + out['D'] = [[f, t, [s for s in srcs if s not in pivots]] for f, t, srcs in c['D']] + byd = {} + for E_lines, p, D in sel: + for d in D: byd.setdefault((d, mask_of(E_lines)), []).append(p) + out['A'] = [[fm.fid(E), d, sorted(ps)] for (d, E), ps in sorted(byd.items())] + out['A'] + out['C'] = out['C'] + [[fm.fid(FULL), d, sorted(ps)] for (d, E), ps in sorted(byd.items())] + return out, len(sel), tot, len(byd) diff --git a/research/e8-r740-replica32/code/stages.py b/research/e8-r740-replica32/code/stages.py new file mode 100644 index 0000000000..9ef95d52f4 --- /dev/null +++ b/research/e8-r740-replica32/code/stages.py @@ -0,0 +1,143 @@ +"""Transcript stages on the E8 bit word (bitE8/1), applied from frozen selections, each bound to the exact input word. + +retime (our #329 descent2 / #287 concave retiming, ported to E8 frames): every selected gate g gets a new frame F with + close(LB_g + prev frames of its participants) <= F <= rootspan(AND of their next frames), where LB_g is the + x-support of the non-target operands (source-span rule); pinned: D gates (frame 0), y at frame 0 at the scatter, + retained totals at FULL at COPY, start and final frames. Checked on the joint retimed configuration. +kernel (our #320/#329 shared-donor response kernel; #272/#299/#319 lineage): entry = pivot p, entrance E, donors D with + resp(p) = XOR resp(D) over F2, where resp(h) = the targets whose frame-0 completion (D) gates read h; E inside the + first frame of p and of every donor. p starts at E and leaves the D gates; each donor climbs to E at the start of + A and pays d += (its pivots) at E; after C it pays d += (its pivots) again at FULL (F2: d -= p). + Exclusivity: pivots are never donors, a donor serves one entrance. Total entrance rank = 0 mod 8 (integral + B_4 width W; the residuals then tile width-72 banks with 9 replicas, checked separately). + +usage: stages.py retime|kernel IN.json.gz OUT.json.gz SELECTION.json +After applying, the full exact replay of e8core (legality, F2 on all columns, source spans) must pass and the output +must equal the frozen output content hash. (This package uses the kernel stage only: on PR #376's word our retiming +descent finds no move, before or after the kernel.) +Chafik Boukhalfa (chafreaky) with Anthropic Claude assistance; Apache-2.0.""" +import sys, os, json, hashlib +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from e8core import * + + +def content_sha(c): + return hashlib.sha256(json.dumps(c, sort_keys=True, separators=(',', ':')).encode()).hexdigest() + + +class Framer: + def __init__(self, c): + self.fl = c['frames']; self.key = {}; self.v = c['v'] + for k, fr in enumerate(self.fl): self.key.setdefault(sum(1 << i for i in fr), k) + def fid(self, m): + if m not in self.key: self.key[m] = len(self.fl); self.fl.append([i for i in range(self.v) if m >> i & 1]) + return self.key[m] + + +def mask_of(lines): return sum(1 << i for i in lines) + + +def occurrences(c, masks): + """per register: list of (kind, ref) with pins ('p', mask) and gates ('g', (phase, k)) in time order""" + v = c['v']; n = 2 * v + c['R']; FULL = (1 << v) - 1 + occ = [[('p', masks[c['start'][r]])] for r in range(n)] + for ph in ('D', 'A'): + for k, (f, d, s) in enumerate(c[ph]): + for x in [d] + s: occ[x].append(('g', (ph, k))) + for t in range(v): occ[v + t].append(('p', 0)) + for q in c['ret']: occ[q].append(('p', FULL)) + for ph in ('B', 'C'): + for k, (f, d, s) in enumerate(c[ph]): + for x in [d] + s: occ[x].append(('g', (ph, k))) + for r in range(n): occ[r].append(('p', masks[c['final'][r]])) + return occ + + +def lower_bounds(c, L): + v = c['v']; n = 2 * v + c['R']; sup = [1 << i if i < v else 0 for i in range(n)]; lb = {} + for ph in ('D', 'A', 'B', 'C'): + for k, (f, d, srcs) in enumerate(c[ph]): + need = 0 + for s in srcs: + sup[d] |= sup[s] + if s < v or s >= 2 * v: need |= sup[s] + if d >= 2 * v: need |= sup[d] + lb[(ph, k)] = L.close(need) if need else 0 + return lb + + +def retime(c, sel): + L = Lat(c['lines']); masks = to_masks(c, L); occ = occurrences(c, masks); lb = lower_bounds(c, L) + gm = {(ph, k): masks[g[0]] for ph in ('D', 'A', 'B', 'C') for k, g in enumerate(c[ph])} + pos = {} + for r, o in enumerate(occ): + for i, (kind, x) in enumerate(o): + if kind == 'g': pos.setdefault(x, []).append((r, i)) + def fr(r, i): + kind, x = occ[r][i]; return x if kind == 'p' else gm[x] + seen = set() + for ph, k, old_lines, new_lines in sel: + g = (ph, k); assert ph != 'D' and g not in seen; seen.add(g) + assert gm[g] == L.close(mask_of(old_lines)), ('selection not bound to this word', g) + F = L.close(mask_of(new_lines)); assert F == mask_of(new_lines), 'frame given as all its root lines' + gm[g] = F + for g in seen: # the joint retimed configuration: every moved gate inside its feasible interval + F = gm[g]; lo = lb[g]; hi = (1 << c['v']) - 1 + for r, i in pos[g]: lo |= fr(r, i - 1); hi &= fr(r, i + 1) + assert lo & ~F == 0 and F & ~hi == 0, ('outside the feasible interval', g) + out = json.loads(json.dumps(c)); fm = Framer(out) + for ph in ('D', 'A', 'B', 'C'): + out[ph] = [[fm.fid(gm[(ph, k)]), d, list(s)] for k, (f, d, s) in enumerate(c[ph])] + return out + + +def kernel(c, sel): + L = Lat(c['lines']); masks = to_masks(c, L); v = c['v']; n = 2 * v + c['R']; FULL = (1 << v) - 1 + occ = occurrences(c, masks) + gm = {(ph, k): masks[g[0]] for ph in ('D', 'A', 'B', 'C') for k, g in enumerate(c[ph])} + first = {} + for h in range(2 * v, n): + assert masks[c['start'][h]] == 0 + first[h] = next(x if kind == 'p' else gm[x] for kind, x in occ[h][1:] if (x if kind == 'p' else gm[x]) != 0) + resp = {} + for f, t, srcs in c['D']: + assert masks[f] == 0 + for s in srcs: resp[s] = resp.get(s, 0) ^ (1 << (t - v)) + ret = set(c['ret']); pivots = {}; donor_at = {}; tot = 0 + for E_lines, p, D in sel: + E = L.close(mask_of(E_lines)); assert E == mask_of(E_lines) and E != 0 + assert p not in ret and p not in pivots and p not in donor_at and 2 * v <= p < n + x = resp.get(p, 0) + for d in D: + assert d not in ret and d not in pivots and 2 * v <= d < n + assert donor_at.setdefault(d, E) == E, 'donor serves one entrance' + x ^= resp.get(d, 0) + assert x == 0, ('response relation fails', p) + for h in [p] + D: assert E & ~first[h] == 0, ('entrance not inside first frame', h) + pivots[p] = E; tot += L.dim(E) + assert not set(pivots) & set(donor_at) + assert tot % 8 == 0, 'total entrance rank 0 mod 8' + out = json.loads(json.dumps(c)); fm = Framer(out) + for p, E in pivots.items(): out['start'][p] = fm.fid(E) + out['D'] = [[f, t, [s for s in srcs if s not in pivots]] for f, t, srcs in c['D']] + byd = {} + for E_lines, p, D in sel: + for d in D: byd.setdefault((d, mask_of(E_lines)), []).append(p) + out['A'] = [[fm.fid(E), d, sorted(ps)] for (d, E), ps in sorted(byd.items())] + out['A'] + out['C'] = out['C'] + [[fm.fid(FULL), d, sorted(ps)] for (d, E), ps in sorted(byd.items())] + return out, len(sel), tot, len(byd) + + +if __name__ == '__main__': + st, inp, outp, selp = sys.argv[1:5] + c = load_word(inp); sel = json.load(open(selp)) + assert sel['input_sha256'] == content_sha(c), 'selection bound to a different input word' + if st == 'retime': + w = retime(c, sel['gates']); info = '%d gates retimed' % len(sel['gates']) + else: + w, ne, tot, nd = kernel(c, sel['entries']); info = '%d entries, total entrance rank %d, %d donor slots' % (ne, tot, nd) + r = replay(w, span_mode='z'); assert not r['viol'], r['viol'][:5] + assert content_sha(w) == sel['output_sha256'], 'output differs from the frozen stage output' + save_word(w, outp) + print(' stage %s: %s | exact replay PASS (legality, F2 on %d columns, source spans) | local histogram %s | output sha %s' + % (st, info, r['n'], dict(sorted(r['H'].items())), sel['output_sha256'][:16])) diff --git a/research/e8-r740-replica32/code/tile_m.py b/research/e8-r740-replica32/code/tile_m.py new file mode 100644 index 0000000000..cd5fd9b539 --- /dev/null +++ b/research/e8-r740-replica32/code/tile_m.py @@ -0,0 +1,93 @@ +"""Residual census (8 - sigma per helper) and an exact zero-padding bank tiling of width m = (2K+1)h with T replicas: +tile() and economy_tile() verbatim from our PR #329 bank_template.py (via code/tile.py of our dtst3 package). +usage: tile_m.py WORD.json.gz M [replicas] (replicas default: the least T with T x residual sum = 0 mod M that tiles)""" +import sys,os,collections +from collections import Counter +sys.path.insert(0,os.path.dirname(os.path.abspath(__file__))) +from e8core import * +def economy_tile(blocks, m): + """Exact zero-padding tiling used when the filler search of tile() runs out of filler blocks (the kernel pivots + and early restorations of the stage stack add many residual widths that do not divide m; the PR #299 analogue at + p = 12 was the (r^4, 24, 4^(24-r)) re-tiling). The fillers are the two most numerous widths dividing m (here the + full helper width h and the rank-4 entrance residual). Each other width w, in decreasing order, gets the bank + w^a F^c f^b (w*a + F*c + f*b = m) that spends the fewest narrow fillers f per w block (then the largest a), plus + at most one bank w^r F^c' f^b' for the remainder r = n mod a. The leftover fillers fill pure banks F^(m/F), + f^(m/f) and y residue banks F^j f^k. Every bank sums to m and every block is used exactly once (no padding).""" + from fractions import Fraction + blocks = {w: n for w, n in blocks.items() if n} + div = sorted((w for w in blocks if m % w == 0), key=lambda w: (-blocks[w], w)) + assert len(div) >= 2, ('economy tiling needs two filler widths', blocks) + F, f = sorted(div[:2], reverse=True) + + def fill(rest): + """(c, b) with F*c + f*b = rest, c maximal (fewest narrow fillers); None if impossible.""" + return next(((c, (rest - F*c)//f) for c in range(rest//F, -1, -1) if (rest - F*c) % f == 0), None) + + left = {F: blocks[F], f: blocks[f]}; out = [] + for w in sorted((x for x in blocks if x not in (F, f)), reverse=True): + n = blocks[w] + opts = [(Fraction(cb[1], a), -a, a, cb) for a in range(m//w, 0, -1) for cb in [fill(m - w*a)] if cb] + assert opts, ('no bank for width', w) + _, _, a, (c, b) = min(opts); q, r = divmod(n, a) + if q: out.append(((w,)*a + (F,)*c + (f,)*b, q)); left[F] -= q*c; left[f] -= q*b + if r: + cb = fill(m - w*r); assert cb, ('no remainder bank', w, r) + out.append(((w,)*r + (F,)*cb[0] + (f,)*cb[1], 1)); left[F] -= cb[0]; left[f] -= cb[1] + assert left[F] >= 0 and left[f] >= 0, ('fillers exhausted', left) + pF, pf = m//F, m//f + for y in range((pF*pf) + 1): + for j in range(1 if y else 0, pF if y else 1): + if (m - F*j) % f: continue + k = (m - F*j)//f; aF, af = left[F] - y*j, left[f] - y*k + if aF >= 0 and af >= 0 and aF % pF == 0 and af % pf == 0: + out += ([((F,)*j + (f,)*k, y)] if y else []) + ([((F,)*pF, aF//pF)] if aF else []) + ([((f,)*pf, af//pf)] if af else []) + return out + raise AssertionError(('no exact zero-padding tiling', blocks, m)) + + +def tile(blocks, m): + """Exact tiling of {width: number of blocks} into banks of total width m, as ((widths, banks), ...). + + A width dividing m fills pure banks. A width w not dividing m is mixed with a filler width f dividing m: + banks w^a f^b with a maximal (w*a + f*b = m), then at most one bank w^r f^t for the remainder r. Fillers + are tried in a fixed order (most blocks first) with backtracking until every pure width also divides out. + Fails (AssertionError) unless every block is used and every bank is full; there is no padding.""" + blocks = {w: n for w, n in blocks.items() if n} + assert all(0 < w <= m for w in blocks) + mixed = sorted(x for x in blocks if m % x) + + def search(i, left, out): + if i == len(mixed): + if any(left[w] % (m // w) for w in left): return None + return out + [(tuple([w]*(m // w)), left[w]//(m // w)) for w in sorted(left) if left[w]] + w = mixed[i]; n = blocks[w] + for f in sorted(left, key=lambda x: (-left[x], x)): + a = next((a for a in range(m // w, 0, -1) if (m - w*a) % f == 0), None) + if a is None: continue + b = (m - w*a)//f; q, r = divmod(n, a) + if r and (m - w*r) % f: continue + t = (m - w*r)//f if r else 0 + if q*b + t > left[f]: continue + rest = dict(left); rest[f] -= q*b + t + found = search(i + 1, rest, out + ([(tuple([w]*a + [f]*b), q)] if q else []) + ([(tuple([w]*r + [f]*t), 1)] if r else [])) + if found is not None: return found + return None + out = search(0, {w: n for w, n in blocks.items() if not m % w}, []) + if out is None: out = economy_tile(blocks, m) + assert all(sum(widths) == m and count > 0 for widths, count in out) + used = Counter() + for widths, count in out: + for x in widths: used[x] += count + assert used == Counter(blocks), 'every block used exactly once' + return tuple(out) +if __name__ == '__main__': + c = load_word(sys.argv[1]); m = int(sys.argv[2]) + L = Lat(c['lines']); M = to_masks(c, L); v = c['v']; n = 2 * v + c['R'] + res = Counter(8 - L.dim(M[c['start'][r]]) for r in range(2 * v, n)); tot = sum(k * x for k, x in res.items()) + reps = [int(sys.argv[3])] if len(sys.argv) > 3 else [t for t in range(1, 200) if t * tot % m == 0] + for T in reps: + try: pat = tile({r: T * k for r, k in res.items() if r > 0}, m); break + except AssertionError: pat = None + assert pat, 'no tiling' + print(' residual census', dict(sorted(res.items())), 'sum', tot) + print(' PASS exact width-%d tiling with %d replicas: %d banks' % (m, T, sum(k for _, k in pat)), pat) diff --git a/research/e8-r740-replica32/data/post-retiming.json b/research/e8-r740-replica32/data/post-retiming.json new file mode 100644 index 0000000000..f3306fa80d --- /dev/null +++ b/research/e8-r740-replica32/data/post-retiming.json @@ -0,0 +1,9998 @@ +[ + { + "source": "pair-retime-selection.json", + "input_sha256": "baf86c9d11d1819be0eb4349b606a6773d29790739b755dabee10bdbf771a78d", + "output_sha256": "653c24f51f8af2d267c573931edfd92a891cd5a3695d1f4a54279a3f9840cd1a", + "gates": [ + [ + "B", + 5, + [ + 0, + 1, + 2, + 3, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + [ + 0, + 1, + 2, + 3, + 32, + 35, + 36, + 39, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 6, + [ + 0, + 1, + 2, + 3, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + [ + 0, + 1, + 2, + 3, + 32, + 35, + 36, + 39, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 7, + [ + 0, + 1, + 2, + 3, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + [ + 0, + 1, + 2, + 3, + 32, + 35, + 36, + 39, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 8, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94 + ], + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 15, + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ], + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 64, + 67, + 68, + 71, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 16, + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ], + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 64, + 67, + 68, + 71, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 17, + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ], + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 64, + 67, + 68, + 71, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 18, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62 + ], + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 23, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91 + ] + ], + [ + "B", + 24, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91 + ] + ], + [ + "B", + 25, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91 + ] + ], + [ + "B", + 26, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ] + ], + [ + "B", + 31, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83 + ] + ], + [ + "B", + 32, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83 + ] + ], + [ + "B", + 33, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83 + ] + ], + [ + "B", + 34, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ] + ], + [ + "B", + 40, + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ], + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 64, + 66, + 69, + 71, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 41, + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ], + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 64, + 66, + 69, + 71, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 42, + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ], + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 64, + 66, + 69, + 71, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 43, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63 + ], + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 48, + [ + 0, + 3, + 4, + 7, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ] + ], + [ + "B", + 49, + [ + 0, + 3, + 4, + 7, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ] + ], + [ + "B", + 50, + [ + 0, + 3, + 4, + 7, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ] + ], + [ + "B", + 51, + [ + 0, + 3, + 4, + 7, + 58, + 59, + 60, + 61, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 58, + [ + 0, + 3, + 5, + 6, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 48, + 49, + 50, + 51, + 64, + 65, + 70, + 71, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 59, + [ + 0, + 3, + 5, + 6, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 48, + 49, + 50, + 51, + 64, + 65, + 70, + 71, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 60, + [ + 0, + 3, + 5, + 6, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 48, + 49, + 50, + 51, + 64, + 65, + 70, + 71, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 61, + [ + 0, + 3, + 5, + 6, + 57, + 59, + 61, + 63, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 66, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75 + ] + ], + [ + "B", + 67, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75 + ] + ], + [ + "B", + 68, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75 + ] + ], + [ + "B", + 69, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ] + ], + [ + "B", + 74, + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55 + ], + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 64, + 66, + 68, + 70, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 75, + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55 + ], + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 64, + 66, + 68, + 70, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 76, + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55 + ], + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 64, + 66, + 68, + 70, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 77, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 84, + [ + 1, + 3, + 4, + 6, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ] + ], + [ + "B", + 85, + [ + 1, + 3, + 4, + 6, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ] + ], + [ + "B", + 86, + [ + 1, + 3, + 4, + 6, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ] + ], + [ + "B", + 87, + [ + 1, + 3, + 4, + 6, + 57, + 59, + 60, + 62, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ] + ], + [ + "B", + 92, + [ + 1, + 3, + 5, + 7, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 40, + 41, + 42, + 43, + 64, + 65, + 68, + 69, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 93, + [ + 1, + 3, + 5, + 7, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 40, + 41, + 42, + 43, + 64, + 65, + 68, + 69, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 94, + [ + 1, + 3, + 5, + 7, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 40, + 41, + 42, + 43, + 64, + 65, + 68, + 69, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 95, + [ + 1, + 3, + 5, + 7, + 58, + 59, + 62, + 63, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 100, + [ + 2, + 3, + 4, + 5, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 32, + 33, + 34, + 35, + 64, + 65, + 66, + 67, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 101, + [ + 2, + 3, + 4, + 5, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 32, + 33, + 34, + 35, + 64, + 65, + 66, + 67, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 102, + [ + 2, + 3, + 4, + 5, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 32, + 33, + 34, + 35, + 64, + 65, + 66, + 67, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 103, + [ + 2, + 3, + 4, + 5, + 57, + 58, + 61, + 62, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 108, + [ + 2, + 3, + 6, + 7, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ] + ], + [ + "B", + 109, + [ + 2, + 3, + 6, + 7, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ] + ], + [ + "B", + 110, + [ + 2, + 3, + 6, + 7, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ] + ], + [ + "B", + 111, + [ + 2, + 3, + 6, + 7, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ] + ], + [ + "B", + 116, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + ], + [ + "B", + 117, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + ], + [ + "B", + 118, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + ], + [ + "B", + 119, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 122, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 35, + 36, + 39, + 56, + 57, + 58, + 59 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 35, + 36, + 39, + 56, + 57, + 58, + 59, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 96, + 99 + ] + ], + [ + "B", + 123, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 35, + 36, + 39, + 56, + 57, + 58, + 59 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 35, + 36, + 39, + 56, + 57, + 58, + 59, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 96, + 99 + ] + ], + [ + "B", + 126, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ] + ], + [ + "B", + 127, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ] + ], + [ + "B", + 130, + [ + 0, + 1, + 4, + 5, + 24, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 56, + 59, + 60, + 63 + ], + [ + 0, + 1, + 4, + 5, + 24, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 56, + 59, + 60, + 63, + 64, + 67, + 68, + 71, + 88, + 91, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 131, + [ + 0, + 1, + 4, + 5, + 24, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 56, + 59, + 60, + 63 + ], + [ + 0, + 1, + 4, + 5, + 24, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 56, + 59, + 60, + 63, + 64, + 67, + 68, + 71, + 88, + 91, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 134, + [ + 0, + 1, + 2, + 3, + 24, + 27, + 28, + 31, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 91, + 92, + 95 + ], + [ + 0, + 1, + 2, + 3, + 24, + 27, + 28, + 31, + 32, + 35, + 36, + 39, + 56, + 59, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 91, + 92, + 95, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 135, + [ + 0, + 1, + 2, + 3, + 24, + 27, + 28, + 31, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 91, + 92, + 95 + ], + [ + 0, + 1, + 2, + 3, + 24, + 27, + 28, + 31, + 32, + 35, + 36, + 39, + 56, + 59, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 91, + 92, + 95, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 138, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62 + ], + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 139, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62 + ], + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 142, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94 + ], + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 143, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94 + ], + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 146, + [ + 0, + 2, + 5, + 7, + 16, + 19, + 20, + 23, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 56, + 57, + 60, + 61 + ], + [ + 0, + 2, + 5, + 7, + 16, + 19, + 20, + 23, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 56, + 57, + 60, + 61, + 64, + 66, + 69, + 71, + 80, + 83, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 147, + [ + 0, + 2, + 5, + 7, + 16, + 19, + 20, + 23, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 56, + 57, + 60, + 61 + ], + [ + 0, + 2, + 5, + 7, + 16, + 19, + 20, + 23, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 56, + 57, + 60, + 61, + 64, + 66, + 69, + 71, + 80, + 83, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 150, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63 + ], + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 151, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63 + ], + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 154, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 40, + 43, + 44, + 47, + 56, + 58, + 61, + 63 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 40, + 43, + 44, + 47, + 56, + 58, + 61, + 63, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 104, + 107 + ] + ], + [ + "B", + 155, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 40, + 43, + 44, + 47, + 56, + 58, + 61, + 63 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 40, + 43, + 44, + 47, + 56, + 58, + 61, + 63, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 104, + 107 + ] + ], + [ + "B", + 158, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ] + ], + [ + "B", + 159, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ] + ], + [ + "B", + 162, + [ + 0, + 3, + 5, + 6, + 56, + 58, + 60, + 62, + 72, + 75, + 76, + 79, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 8, + 11, + 48, + 49, + 50, + 51, + 56, + 58, + 60, + 62, + 64, + 65, + 70, + 71, + 72, + 75, + 76, + 79, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 163, + [ + 0, + 3, + 5, + 6, + 56, + 58, + 60, + 62, + 72, + 75, + 76, + 79, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 8, + 11, + 48, + 49, + 50, + 51, + 56, + 58, + 60, + 62, + 64, + 65, + 70, + 71, + 72, + 75, + 76, + 79, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 166, + [ + 0, + 3, + 5, + 6, + 57, + 59, + 61, + 63, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 167, + [ + 0, + 3, + 5, + 6, + 57, + 59, + 61, + 63, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 170, + [ + 0, + 3, + 4, + 7, + 56, + 57, + 62, + 63, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 115, + 116, + 119 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 48, + 51, + 56, + 57, + 62, + 63, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 115, + 116, + 119 + ] + ], + [ + "B", + 171, + [ + 0, + 3, + 4, + 7, + 56, + 57, + 62, + 63, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 115, + 116, + 119 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 48, + 51, + 56, + 57, + 62, + 63, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 115, + 116, + 119 + ] + ], + [ + "B", + 174, + [ + 0, + 3, + 4, + 7, + 58, + 59, + 60, + 61, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 175, + [ + 0, + 3, + 4, + 7, + 58, + 59, + 60, + 61, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 178, + [ + 1, + 2, + 5, + 6, + 8, + 11, + 12, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 58, + 60, + 62 + ], + [ + 1, + 2, + 5, + 6, + 8, + 11, + 12, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 58, + 60, + 62, + 64, + 66, + 68, + 70, + 72, + 75, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 179, + [ + 1, + 2, + 5, + 6, + 8, + 11, + 12, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 58, + 60, + 62 + ], + [ + 1, + 2, + 5, + 6, + 8, + 11, + 12, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 58, + 60, + 62, + 64, + 66, + 68, + 70, + 72, + 75, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 182, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 183, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 186, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 48, + 51, + 52, + 55, + 56, + 57, + 62, + 63 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 48, + 51, + 52, + 55, + 56, + 57, + 62, + 63, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 112, + 115 + ] + ], + [ + "B", + 187, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 48, + 51, + 52, + 55, + 56, + 57, + 62, + 63 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 48, + 51, + 52, + 55, + 56, + 57, + 62, + 63, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 112, + 115 + ] + ], + [ + "B", + 190, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ] + ], + [ + "B", + 191, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ] + ], + [ + "B", + 194, + [ + 1, + 3, + 5, + 7, + 56, + 57, + 60, + 61, + 80, + 83, + 84, + 87, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 16, + 19, + 40, + 41, + 42, + 43, + 56, + 57, + 60, + 61, + 64, + 65, + 68, + 69, + 80, + 83, + 84, + 87, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 195, + [ + 1, + 3, + 5, + 7, + 56, + 57, + 60, + 61, + 80, + 83, + 84, + 87, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 16, + 19, + 40, + 41, + 42, + 43, + 56, + 57, + 60, + 61, + 64, + 65, + 68, + 69, + 80, + 83, + 84, + 87, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 198, + [ + 1, + 3, + 5, + 7, + 58, + 59, + 62, + 63, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 199, + [ + 1, + 3, + 5, + 7, + 58, + 59, + 62, + 63, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 202, + [ + 1, + 3, + 4, + 6, + 56, + 58, + 61, + 63, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 104, + 107, + 108, + 111 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 40, + 43, + 56, + 58, + 61, + 63, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 104, + 107, + 108, + 111 + ] + ], + [ + "B", + 203, + [ + 1, + 3, + 4, + 6, + 56, + 58, + 61, + 63, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 104, + 107, + 108, + 111 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 40, + 43, + 56, + 58, + 61, + 63, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 104, + 107, + 108, + 111 + ] + ], + [ + "B", + 206, + [ + 1, + 3, + 4, + 6, + 57, + 59, + 60, + 62, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ] + ], + [ + "B", + 207, + [ + 1, + 3, + 4, + 6, + 57, + 59, + 60, + 62, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ] + ], + [ + "B", + 210, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 96, + 97, + 98, + 99 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 67, + 88, + 89, + 90, + 91, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 211, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 96, + 97, + 98, + 99 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 67, + 88, + 89, + 90, + 91, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 214, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 215, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 218, + [ + 2, + 3, + 6, + 7, + 56, + 57, + 58, + 59, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 99, + 100, + 103 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 35, + 56, + 57, + 58, + 59, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 219, + [ + 2, + 3, + 6, + 7, + 56, + 57, + 58, + 59, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 99, + 100, + 103 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 35, + 56, + 57, + 58, + 59, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 222, + [ + 2, + 3, + 6, + 7, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ] + ], + [ + "B", + 223, + [ + 2, + 3, + 6, + 7, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ] + ], + [ + "B", + 226, + [ + 2, + 3, + 4, + 5, + 56, + 59, + 60, + 63, + 88, + 91, + 92, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 24, + 27, + 32, + 33, + 34, + 35, + 56, + 59, + 60, + 63, + 64, + 65, + 66, + 67, + 88, + 91, + 92, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 227, + [ + 2, + 3, + 4, + 5, + 56, + 59, + 60, + 63, + 88, + 91, + 92, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 24, + 27, + 32, + 33, + 34, + 35, + 56, + 59, + 60, + 63, + 64, + 65, + 66, + 67, + 88, + 91, + 92, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 230, + [ + 2, + 3, + 4, + 5, + 57, + 58, + 61, + 62, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 231, + [ + 2, + 3, + 4, + 5, + 57, + 58, + 61, + 62, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ] + ] + }, + { + "source": "window-retime-selection.json", + "input_sha256": "653c24f51f8af2d267c573931edfd92a891cd5a3695d1f4a54279a3f9840cd1a", + "output_sha256": "64d7d1e0c6ea7a3a8e91254c0dfd51b71637b49703ef4c1fce184fded5040bc9", + "gates": [ + [ + "B", + 8, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ], + [ + 0, + 1, + 2, + 3, + 8, + 11, + 12, + 15, + 16, + 19, + 20, + 23, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 41, + 42, + 45, + 46, + 49, + 50, + 53, + 54, + 57, + 58, + 60, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 75, + 76, + 79, + 80, + 83, + 84, + 87, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103, + 105, + 106, + 109, + 110, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 18, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ], + [ + 0, + 1, + 4, + 5, + 8, + 10, + 13, + 15, + 16, + 18, + 21, + 23, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 42, + 45, + 47, + 48, + 50, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 73, + 75, + 76, + 78, + 81, + 83, + 84, + 86, + 89, + 90, + 92, + 96, + 97, + 98, + 99, + 105, + 107, + 108, + 110, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 26, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ], + [ + 0, + 1, + 6, + 7, + 8, + 9, + 14, + 15, + 16, + 17, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 40, + 41, + 46, + 47, + 48, + 49, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 74, + 75, + 76, + 77, + 82, + 83, + 84, + 85, + 88, + 89, + 90, + 91, + 97, + 98, + 100, + 106, + 107, + 108, + 109, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 34, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ], + [ + 0, + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 29, + 31, + 32, + 34, + 37, + 39, + 41, + 42, + 45, + 46, + 48, + 49, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 73, + 75, + 76, + 78, + 80, + 81, + 82, + 83, + 89, + 91, + 92, + 94, + 97, + 99, + 100, + 102, + 105, + 106, + 108, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 43, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ], + [ + 0, + 2, + 5, + 7, + 8, + 9, + 12, + 13, + 17, + 18, + 21, + 22, + 24, + 25, + 30, + 31, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 50, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 74, + 75, + 76, + 77, + 81, + 82, + 84, + 90, + 91, + 92, + 93, + 98, + 99, + 100, + 101, + 104, + 105, + 106, + 107, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 51, + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 17, + 19, + 20, + 22, + 24, + 25, + 30, + 31, + 32, + 34, + 37, + 39, + 42, + 43, + 44, + 45, + 49, + 50, + 52, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 82, + 84, + 86, + 90, + 91, + 94, + 95, + 97, + 99, + 101, + 103, + 104, + 105, + 108, + 109, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 61, + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 12, + 18, + 19, + 20, + 21, + 24, + 26, + 29, + 31, + 32, + 33, + 38, + 39, + 41, + 43, + 44, + 46, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 80, + 81, + 84, + 85, + 89, + 91, + 93, + 95, + 98, + 99, + 102, + 103, + 104, + 106, + 108, + 110, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 69, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 20, + 22, + 24, + 25, + 28, + 29, + 32, + 34, + 36, + 38, + 40, + 41, + 44, + 45, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 81, + 83, + 84, + 86, + 90, + 91, + 92, + 93, + 97, + 99, + 100, + 102, + 106, + 107, + 108, + 109, + 113, + 114, + 116 + ] + ], + [ + "B", + 77, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 16, + 17, + 20, + 21, + 24, + 26, + 28, + 30, + 32, + 33, + 36, + 37, + 40, + 42, + 44, + 46, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 76, + 82, + 83, + 84, + 85, + 89, + 91, + 92, + 94, + 98, + 99, + 100, + 101, + 105, + 107, + 108, + 110, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 87, + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 9, + 11, + 12, + 14, + 16, + 17, + 18, + 19, + 24, + 26, + 28, + 30, + 32, + 34, + 36, + 38, + 41, + 42, + 44, + 50, + 51, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 72, + 74, + 76, + 78, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 89, + 91, + 93, + 95, + 97, + 99, + 101, + 103, + 105, + 106, + 109, + 110, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 95, + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 10, + 11, + 12, + 13, + 17, + 18, + 20, + 24, + 25, + 28, + 29, + 32, + 33, + 36, + 37, + 40, + 41, + 42, + 43, + 49, + 51, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 72, + 73, + 76, + 77, + 81, + 82, + 85, + 86, + 90, + 91, + 94, + 95, + 98, + 99, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 103, + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 9, + 11, + 13, + 15, + 16, + 18, + 20, + 22, + 25, + 26, + 28, + 32, + 33, + 34, + 35, + 40, + 42, + 44, + 46, + 49, + 51, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 72, + 74, + 76, + 78, + 81, + 83, + 85, + 87, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 105, + 107, + 109, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 111, + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 10, + 11, + 14, + 15, + 16, + 17, + 20, + 21, + 24, + 25, + 26, + 27, + 33, + 34, + 36, + 40, + 41, + 44, + 45, + 50, + 51, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 72, + 73, + 76, + 77, + 82, + 83, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102, + 106, + 107, + 110, + 111, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 119, + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 40, + 41, + 42, + 43, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 68, + 72, + 73, + 74, + 75, + 84, + 85, + 86, + 87, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 127, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ], + [ + 0, + 1, + 6, + 7, + 8, + 9, + 14, + 15, + 16, + 17, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 40, + 41, + 46, + 47, + 48, + 49, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 74, + 75, + 76, + 77, + 82, + 83, + 84, + 85, + 88, + 89, + 90, + 91, + 97, + 98, + 100, + 106, + 107, + 108, + 109, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 139, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ], + [ + 0, + 1, + 4, + 5, + 8, + 10, + 13, + 15, + 16, + 18, + 21, + 23, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 42, + 45, + 47, + 48, + 50, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 73, + 75, + 76, + 78, + 81, + 83, + 84, + 86, + 89, + 90, + 92, + 96, + 97, + 98, + 99, + 105, + 107, + 108, + 110, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 143, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ], + [ + 0, + 1, + 2, + 3, + 8, + 11, + 12, + 15, + 16, + 19, + 20, + 23, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 41, + 42, + 45, + 46, + 49, + 50, + 53, + 54, + 57, + 58, + 60, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 75, + 76, + 79, + 80, + 83, + 84, + 87, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103, + 105, + 106, + 109, + 110, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 151, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ], + [ + 0, + 2, + 5, + 7, + 8, + 9, + 12, + 13, + 17, + 18, + 21, + 22, + 24, + 25, + 30, + 31, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 50, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 74, + 75, + 76, + 77, + 81, + 82, + 84, + 90, + 91, + 92, + 93, + 98, + 99, + 100, + 101, + 104, + 105, + 106, + 107, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 159, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ], + [ + 0, + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 29, + 31, + 32, + 34, + 37, + 39, + 41, + 42, + 45, + 46, + 48, + 49, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 73, + 75, + 76, + 78, + 80, + 81, + 82, + 83, + 89, + 91, + 92, + 94, + 97, + 99, + 100, + 102, + 105, + 106, + 108, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 167, + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 12, + 18, + 19, + 20, + 21, + 24, + 26, + 29, + 31, + 32, + 33, + 38, + 39, + 41, + 43, + 44, + 46, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 80, + 81, + 84, + 85, + 89, + 91, + 93, + 95, + 98, + 99, + 102, + 103, + 104, + 106, + 108, + 110, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 175, + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 17, + 19, + 20, + 22, + 24, + 25, + 30, + 31, + 32, + 34, + 37, + 39, + 42, + 43, + 44, + 45, + 49, + 50, + 52, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 82, + 84, + 86, + 90, + 91, + 94, + 95, + 97, + 99, + 101, + 103, + 104, + 105, + 108, + 109, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 183, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 16, + 17, + 20, + 21, + 24, + 26, + 28, + 30, + 32, + 33, + 36, + 37, + 40, + 42, + 44, + 46, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 76, + 82, + 83, + 84, + 85, + 89, + 91, + 92, + 94, + 98, + 99, + 100, + 101, + 105, + 107, + 108, + 110, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 191, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 20, + 22, + 24, + 25, + 28, + 29, + 32, + 34, + 36, + 38, + 40, + 41, + 44, + 45, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 81, + 83, + 84, + 86, + 90, + 91, + 92, + 93, + 97, + 99, + 100, + 102, + 106, + 107, + 108, + 109, + 113, + 114, + 116 + ] + ], + [ + "B", + 199, + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 10, + 11, + 12, + 13, + 17, + 18, + 20, + 24, + 25, + 28, + 29, + 32, + 33, + 36, + 37, + 40, + 41, + 42, + 43, + 49, + 51, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 72, + 73, + 76, + 77, + 81, + 82, + 85, + 86, + 90, + 91, + 94, + 95, + 98, + 99, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 207, + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 9, + 11, + 12, + 14, + 16, + 17, + 18, + 19, + 24, + 26, + 28, + 30, + 32, + 34, + 36, + 38, + 41, + 42, + 44, + 50, + 51, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 72, + 74, + 76, + 78, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 89, + 91, + 93, + 95, + 97, + 99, + 101, + 103, + 105, + 106, + 109, + 110, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 215, + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 40, + 41, + 42, + 43, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 68, + 72, + 73, + 74, + 75, + 84, + 85, + 86, + 87, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 223, + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 10, + 11, + 14, + 15, + 16, + 17, + 20, + 21, + 24, + 25, + 26, + 27, + 33, + 34, + 36, + 40, + 41, + 44, + 45, + 50, + 51, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 72, + 73, + 76, + 77, + 82, + 83, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102, + 106, + 107, + 110, + 111, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 231, + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 9, + 11, + 13, + 15, + 16, + 18, + 20, + 22, + 25, + 26, + 28, + 32, + 33, + 34, + 35, + 40, + 42, + 44, + 46, + 49, + 51, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 72, + 74, + 76, + 78, + 81, + 83, + 85, + 87, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 105, + 107, + 109, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 239, + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 40, + 41, + 42, + 43, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 68, + 72, + 73, + 74, + 75, + 84, + 85, + 86, + 87, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 247, + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 10, + 11, + 14, + 15, + 16, + 17, + 20, + 21, + 24, + 25, + 26, + 27, + 33, + 34, + 36, + 40, + 41, + 44, + 45, + 50, + 51, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 72, + 73, + 76, + 77, + 82, + 83, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102, + 106, + 107, + 110, + 111, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 255, + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 9, + 11, + 13, + 15, + 16, + 18, + 20, + 22, + 25, + 26, + 28, + 32, + 33, + 34, + 35, + 40, + 42, + 44, + 46, + 49, + 51, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 72, + 74, + 76, + 78, + 81, + 83, + 85, + 87, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 105, + 107, + 109, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 263, + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 10, + 11, + 12, + 13, + 17, + 18, + 20, + 24, + 25, + 28, + 29, + 32, + 33, + 36, + 37, + 40, + 41, + 42, + 43, + 49, + 51, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 72, + 73, + 76, + 77, + 81, + 82, + 85, + 86, + 90, + 91, + 94, + 95, + 98, + 99, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 271, + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 9, + 11, + 12, + 14, + 16, + 17, + 18, + 19, + 24, + 26, + 28, + 30, + 32, + 34, + 36, + 38, + 41, + 42, + 44, + 50, + 51, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 72, + 74, + 76, + 78, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 89, + 91, + 93, + 95, + 97, + 99, + 101, + 103, + 105, + 106, + 109, + 110, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 279, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 16, + 17, + 20, + 21, + 24, + 26, + 28, + 30, + 32, + 33, + 36, + 37, + 40, + 42, + 44, + 46, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 76, + 82, + 83, + 84, + 85, + 89, + 91, + 92, + 94, + 98, + 99, + 100, + 101, + 105, + 107, + 108, + 110, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 287, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 20, + 22, + 24, + 25, + 28, + 29, + 32, + 34, + 36, + 38, + 40, + 41, + 44, + 45, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 81, + 83, + 84, + 86, + 90, + 91, + 92, + 93, + 97, + 99, + 100, + 102, + 106, + 107, + 108, + 109, + 113, + 114, + 116 + ] + ], + [ + "B", + 295, + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 12, + 18, + 19, + 20, + 21, + 24, + 26, + 29, + 31, + 32, + 33, + 38, + 39, + 41, + 43, + 44, + 46, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 80, + 81, + 84, + 85, + 89, + 91, + 93, + 95, + 98, + 99, + 102, + 103, + 104, + 106, + 108, + 110, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 303, + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 17, + 19, + 20, + 22, + 24, + 25, + 30, + 31, + 32, + 34, + 37, + 39, + 42, + 43, + 44, + 45, + 49, + 50, + 52, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 82, + 84, + 86, + 90, + 91, + 94, + 95, + 97, + 99, + 101, + 103, + 104, + 105, + 108, + 109, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 311, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ], + [ + 0, + 2, + 5, + 7, + 8, + 9, + 12, + 13, + 17, + 18, + 21, + 22, + 24, + 25, + 30, + 31, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 50, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 74, + 75, + 76, + 77, + 81, + 82, + 84, + 90, + 91, + 92, + 93, + 98, + 99, + 100, + 101, + 104, + 105, + 106, + 107, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 319, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ], + [ + 0, + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 29, + 31, + 32, + 34, + 37, + 39, + 41, + 42, + 45, + 46, + 48, + 49, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 73, + 75, + 76, + 78, + 80, + 81, + 82, + 83, + 89, + 91, + 92, + 94, + 97, + 99, + 100, + 102, + 105, + 106, + 108, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 327, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ], + [ + 0, + 1, + 6, + 7, + 8, + 9, + 14, + 15, + 16, + 17, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 40, + 41, + 46, + 47, + 48, + 49, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 74, + 75, + 76, + 77, + 82, + 83, + 84, + 85, + 88, + 89, + 90, + 91, + 97, + 98, + 100, + 106, + 107, + 108, + 109, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 335, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ], + [ + 0, + 1, + 4, + 5, + 8, + 10, + 13, + 15, + 16, + 18, + 21, + 23, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 42, + 45, + 47, + 48, + 50, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 73, + 75, + 76, + 78, + 81, + 83, + 84, + 86, + 89, + 90, + 92, + 96, + 97, + 98, + 99, + 105, + 107, + 108, + 110, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 343, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ], + [ + 0, + 1, + 2, + 3, + 8, + 11, + 12, + 15, + 16, + 19, + 20, + 23, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 41, + 42, + 45, + 46, + 49, + 50, + 53, + 54, + 57, + 58, + 60, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 75, + 76, + 79, + 80, + 83, + 84, + 87, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103, + 105, + 106, + 109, + 110, + 113, + 114, + 117, + 118 + ] + ] + ] + } +] diff --git a/research/e8-r740-replica32/data/residual-isometries.json b/research/e8-r740-replica32/data/residual-isometries.json new file mode 100644 index 0000000000..9b8b35cb15 --- /dev/null +++ b/research/e8-r740-replica32/data/residual-isometries.json @@ -0,0 +1,1974 @@ +[ + { + "frame": 0, + "entrance_rank": 0, + "denominator": 2, + "entrance_basis": [], + "residual_basis": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [] + }, + { + "frame": 2, + "entrance_rank": 1, + "denominator": 2, + "entrance_basis": [ + 0 + ], + "residual_basis": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [] + }, + { + "frame": 3, + "entrance_rank": 1, + "denominator": 2, + "entrance_basis": [ + 1 + ], + "residual_basis": [ + 0, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ] + ] + }, + { + "frame": 4, + "entrance_rank": 1, + "denominator": 2, + "entrance_basis": [ + 2 + ], + "residual_basis": [ + 0, + 1, + 3, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ] + ] + }, + { + "frame": 5, + "entrance_rank": 1, + "denominator": 2, + "entrance_basis": [ + 3 + ], + "residual_basis": [ + 0, + 1, + 2, + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ] + ] + }, + { + "frame": 6, + "entrance_rank": 1, + "denominator": 2, + "entrance_basis": [ + 4 + ], + "residual_basis": [ + 0, + 1, + 2, + 3, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ], + [ + "swap", + 3, + 4, + null + ] + ] + }, + { + "frame": 7, + "entrance_rank": 1, + "denominator": 2, + "entrance_basis": [ + 5 + ], + "residual_basis": [ + 0, + 1, + 2, + 3, + 4, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 5, + null + ] + ] + }, + { + "frame": 8, + "entrance_rank": 1, + "denominator": 2, + "entrance_basis": [ + 6 + ], + "residual_basis": [ + 0, + 1, + 2, + 3, + 4, + 5, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ] + ] + }, + { + "frame": 9, + "entrance_rank": 1, + "denominator": 2, + "entrance_basis": [ + 7 + ], + "residual_basis": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 1, + null + ], + [ + "swap", + 1, + 2, + null + ], + [ + "swap", + 2, + 3, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ], + [ + "swap", + 6, + 7, + null + ] + ] + }, + { + "frame": 458, + "entrance_rank": 4, + "denominator": 2, + "entrance_basis": [ + 0, + 1, + 2, + 3 + ], + "residual_basis": [ + 4, + 5, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [] + }, + { + "frame": 461, + "entrance_rank": 4, + "denominator": 2, + "entrance_basis": [ + 0, + 2, + 4, + 6 + ], + "residual_basis": [ + 1, + 3, + 5, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 1, + 4, + null + ], + [ + "swap", + 2, + 4, + null + ], + [ + "swap", + 3, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ] + ] + }, + { + "frame": 463, + "entrance_rank": 4, + "denominator": 2, + "entrance_basis": [ + 0, + 3, + 4, + 7 + ], + "residual_basis": [ + 1, + 2, + 5, + 6 + ], + "orthogonal_rows_numerator": [ + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 1, + 4, + null + ], + [ + "swap", + 2, + 5, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ], + [ + "swap", + 6, + 7, + null + ] + ] + }, + { + "frame": 465, + "entrance_rank": 4, + "denominator": 2, + "entrance_basis": [ + 1, + 2, + 4, + 7 + ], + "residual_basis": [ + 0, + 3, + 5, + 6 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 4, + null + ], + [ + "swap", + 1, + 4, + null + ], + [ + "swap", + 2, + 4, + null + ], + [ + "swap", + 3, + 5, + null + ], + [ + "swap", + 5, + 6, + null + ], + [ + "swap", + 6, + 7, + null + ] + ] + }, + { + "frame": 466, + "entrance_rank": 4, + "denominator": 2, + "entrance_basis": [ + 1, + 2, + 5, + 6 + ], + "residual_basis": [ + 0, + 3, + 4, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 4, + null + ], + [ + "swap", + 1, + 4, + null + ], + [ + "swap", + 2, + 4, + null + ], + [ + "swap", + 3, + 5, + null + ], + [ + "swap", + 4, + 6, + null + ], + [ + "swap", + 5, + 6, + null + ] + ] + }, + { + "frame": 468, + "entrance_rank": 4, + "denominator": 2, + "entrance_basis": [ + 1, + 3, + 5, + 7 + ], + "residual_basis": [ + 0, + 2, + 4, + 6 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 4, + null + ], + [ + "swap", + 1, + 4, + null + ], + [ + "swap", + 2, + 5, + null + ], + [ + "swap", + 3, + 4, + null + ], + [ + "swap", + 4, + 6, + null + ], + [ + "swap", + 6, + 7, + null + ] + ] + }, + { + "frame": 469, + "entrance_rank": 4, + "denominator": 2, + "entrance_basis": [ + 2, + 3, + 4, + 5 + ], + "residual_basis": [ + 0, + 1, + 6, + 7 + ], + "orthogonal_rows_numerator": [ + [ + 0, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 0, + 0 + ], + [ + 2, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2 + ] + ], + "gaussian_reduction": [ + [ + "swap", + 0, + 4, + null + ], + [ + "swap", + 1, + 5, + null + ], + [ + "swap", + 2, + 4, + null + ], + [ + "swap", + 3, + 5, + null + ] + ] + } +] diff --git a/research/e8-r740-replica32/data/retiming.json b/research/e8-r740-replica32/data/retiming.json new file mode 100644 index 0000000000..5769e8a928 --- /dev/null +++ b/research/e8-r740-replica32/data/retiming.json @@ -0,0 +1,723 @@ +{ + "input_sha256": "d6ec8811541d6ab59a3bbbaaa15bccc8918b3b43b23d9f593198cfe90826fd20", + "output_sha256": "fec026cda755e5ef93f7ed56923d1452da925cbe0051585e913e0837d9a70ffb", + "changes": [ + [ + "A", + 272, + [ + 64, + 67 + ], + [ + 64 + ] + ], + [ + "A", + 275, + [ + 65, + 66 + ], + [ + 65 + ] + ], + [ + "A", + 278, + [ + 68, + 71 + ], + [ + 68 + ] + ], + [ + "A", + 281, + [ + 69, + 70 + ], + [ + 69 + ] + ], + [ + "A", + 300, + [ + 32, + 35 + ], + [ + 32 + ] + ], + [ + "A", + 303, + [ + 33, + 34 + ], + [ + 33 + ] + ], + [ + "A", + 306, + [ + 36, + 39 + ], + [ + 36 + ] + ], + [ + "A", + 309, + [ + 37, + 38 + ], + [ + 37 + ] + ], + [ + "A", + 328, + [ + 24, + 27 + ], + [ + 24 + ] + ], + [ + "A", + 331, + [ + 25, + 26 + ], + [ + 25 + ] + ], + [ + "A", + 334, + [ + 28, + 31 + ], + [ + 28 + ] + ], + [ + "A", + 337, + [ + 29, + 30 + ], + [ + 29 + ] + ], + [ + "A", + 356, + [ + 16, + 19 + ], + [ + 16 + ] + ], + [ + "A", + 359, + [ + 17, + 18 + ], + [ + 17 + ] + ], + [ + "A", + 362, + [ + 20, + 23 + ], + [ + 20 + ] + ], + [ + "A", + 365, + [ + 21, + 22 + ], + [ + 21 + ] + ], + [ + "A", + 384, + [ + 40, + 43 + ], + [ + 40 + ] + ], + [ + "A", + 387, + [ + 41, + 42 + ], + [ + 41 + ] + ], + [ + "A", + 390, + [ + 44, + 47 + ], + [ + 44 + ] + ], + [ + "A", + 393, + [ + 45, + 46 + ], + [ + 45 + ] + ], + [ + "A", + 412, + [ + 72, + 75 + ], + [ + 72 + ] + ], + [ + "A", + 415, + [ + 73, + 74 + ], + [ + 73 + ] + ], + [ + "A", + 418, + [ + 76, + 79 + ], + [ + 76 + ] + ], + [ + "A", + 421, + [ + 77, + 78 + ], + [ + 77 + ] + ], + [ + "A", + 440, + [ + 112, + 115 + ], + [ + 112 + ] + ], + [ + "A", + 443, + [ + 113, + 114 + ], + [ + 113 + ] + ], + [ + "A", + 446, + [ + 116, + 119 + ], + [ + 116 + ] + ], + [ + "A", + 449, + [ + 117, + 118 + ], + [ + 117 + ] + ], + [ + "A", + 468, + [ + 8, + 11 + ], + [ + 8 + ] + ], + [ + "A", + 471, + [ + 9, + 10 + ], + [ + 9 + ] + ], + [ + "A", + 474, + [ + 12, + 15 + ], + [ + 12 + ] + ], + [ + "A", + 477, + [ + 13, + 14 + ], + [ + 13 + ] + ], + [ + "A", + 496, + [ + 48, + 51 + ], + [ + 48 + ] + ], + [ + "A", + 499, + [ + 49, + 50 + ], + [ + 49 + ] + ], + [ + "A", + 502, + [ + 52, + 55 + ], + [ + 52 + ] + ], + [ + "A", + 505, + [ + 53, + 54 + ], + [ + 53 + ] + ], + [ + "A", + 524, + [ + 80, + 83 + ], + [ + 80 + ] + ], + [ + "A", + 527, + [ + 81, + 82 + ], + [ + 81 + ] + ], + [ + "A", + 530, + [ + 84, + 87 + ], + [ + 84 + ] + ], + [ + "A", + 533, + [ + 85, + 86 + ], + [ + 85 + ] + ], + [ + "A", + 552, + [ + 104, + 107 + ], + [ + 104 + ] + ], + [ + "A", + 555, + [ + 105, + 106 + ], + [ + 105 + ] + ], + [ + "A", + 558, + [ + 108, + 111 + ], + [ + 108 + ] + ], + [ + "A", + 561, + [ + 109, + 110 + ], + [ + 109 + ] + ], + [ + "A", + 580, + [ + 96, + 99 + ], + [ + 96 + ] + ], + [ + "A", + 583, + [ + 97, + 98 + ], + [ + 97 + ] + ], + [ + "A", + 586, + [ + 100, + 103 + ], + [ + 100 + ] + ], + [ + "A", + 589, + [ + 101, + 102 + ], + [ + 101 + ] + ], + [ + "A", + 608, + [ + 88, + 91 + ], + [ + 88 + ] + ], + [ + "A", + 611, + [ + 89, + 90 + ], + [ + 89 + ] + ], + [ + "A", + 614, + [ + 92, + 95 + ], + [ + 92 + ] + ], + [ + "A", + 617, + [ + 93, + 94 + ], + [ + 93 + ] + ], + [ + "A", + 636, + [ + 56, + 59 + ], + [ + 56 + ] + ], + [ + "A", + 639, + [ + 57, + 58 + ], + [ + 57 + ] + ], + [ + "A", + 642, + [ + 60, + 63 + ], + [ + 60 + ] + ], + [ + "A", + 645, + [ + 61, + 62 + ], + [ + 61 + ] + ], + [ + "A", + 2035, + [ + 0, + 1, + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ], + [ + 0, + 1, + 2, + 3, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ] + ] +} diff --git a/research/e8-r740-replica32/data/selection.json b/research/e8-r740-replica32/data/selection.json new file mode 100644 index 0000000000..ef068005b1 --- /dev/null +++ b/research/e8-r740-replica32/data/selection.json @@ -0,0 +1,1291 @@ +{ + "input_sha256": "fec026cda755e5ef93f7ed56923d1452da925cbe0051585e913e0837d9a70ffb", + "output_sha256": "baf86c9d11d1819be0eb4349b606a6773d29790739b755dabee10bdbf771a78d", + "entries_count": 114, + "total_entrance_rank": 138, + "donor_slots": 103, + "replicas": 32, + "entries": [ + [ + [ + 3 + ], + 738, + [ + 263, + 736 + ] + ], + [ + [ + 2 + ], + 739, + [ + 256, + 737 + ] + ], + [ + [ + 1 + ], + 743, + [ + 248, + 742 + ] + ], + [ + [ + 0 + ], + 744, + [ + 244, + 745 + ] + ], + [ + [ + 0 + ], + 746, + [ + 242, + 747 + ] + ], + [ + [ + 4 + ], + 750, + [ + 812, + 840 + ] + ], + [ + [ + 4 + ], + 751, + [ + 779, + 835 + ] + ], + [ + [ + 4 + ], + 752, + [ + 268, + 812, + 840 + ] + ], + [ + [ + 4 + ], + 753, + [ + 269, + 779, + 835 + ] + ], + [ + [ + 1 + ], + 754, + [ + 249, + 755 + ] + ], + [ + [ + 4 + ], + 757, + [ + 266, + 756 + ] + ], + [ + [ + 0 + ], + 760, + [ + 242, + 761 + ] + ], + [ + [ + 0 + ], + 762, + [ + 763, + 776, + 777 + ] + ], + [ + [ + 7 + ], + 766, + [ + 286, + 764 + ] + ], + [ + [ + 6 + ], + 767, + [ + 281, + 765 + ] + ], + [ + [ + 1 + ], + 768, + [ + 248, + 742, + 861, + 888 + ] + ], + [ + [ + 1 + ], + 769, + [ + 742, + 861, + 888 + ] + ], + [ + [ + 1 + ], + 770, + [ + 755, + 873, + 886 + ] + ], + [ + [ + 1 + ], + 771, + [ + 249, + 755, + 873, + 886 + ] + ], + [ + [ + 0 + ], + 773, + [ + 242, + 772 + ] + ], + [ + [ + 4 + ], + 781, + [ + 269, + 779 + ] + ], + [ + [ + 2 + ], + 782, + [ + 257, + 783 + ] + ], + [ + [ + 4 + ], + 785, + [ + 268, + 784 + ] + ], + [ + [ + 0 + ], + 786, + [ + 803, + 817, + 832 + ] + ], + [ + [ + 0 + ], + 787, + [ + 241, + 803, + 817, + 832 + ] + ], + [ + [ + 0 + ], + 788, + [ + 748, + 830 + ] + ], + [ + [ + 0 + ], + 789, + [ + 749, + 830 + ] + ], + [ + [ + 0 + ], + 790, + [ + 763, + 776, + 805 + ] + ], + [ + [ + 0 + ], + 791, + [ + 763, + 777, + 805 + ] + ], + [ + [ + 7 + ], + 794, + [ + 285, + 792 + ] + ], + [ + [ + 7 + ], + 795, + [ + 287, + 793 + ] + ], + [ + [ + 2 + ], + 796, + [ + 783, + 838, + 853 + ] + ], + [ + [ + 2 + ], + 797, + [ + 257, + 783, + 838, + 853 + ] + ], + [ + [ + 2 + ], + 798, + [ + 256, + 799 + ] + ], + [ + [ + 0 + ], + 800, + [ + 749, + 819 + ] + ], + [ + [ + 0 + ], + 801, + [ + 748, + 819 + ] + ], + [ + [ + 0 + ], + 802, + [ + 241, + 803 + ] + ], + [ + [ + 0 + ], + 804, + [ + 776, + 777, + 805 + ] + ], + [ + [ + 4 + ], + 808, + [ + 266, + 806 + ] + ], + [ + [ + 4 + ], + 809, + [ + 269, + 807 + ] + ], + [ + [ + 3 + ], + 811, + [ + 263, + 810 + ] + ], + [ + [ + 4 + ], + 813, + [ + 268, + 812 + ] + ], + [ + [ + 0 + ], + 814, + [ + 763, + 805 + ] + ], + [ + [ + 0 + ], + 815, + [ + 763, + 776, + 777, + 805 + ] + ], + [ + [ + 0 + ], + 816, + [ + 241, + 817 + ] + ], + [ + [ + 0 + ], + 818, + [ + 748, + 749, + 819 + ] + ], + [ + [ + 6 + ], + 821, + [ + 281, + 765, + 851, + 905 + ] + ], + [ + [ + 6 + ], + 822, + [ + 278, + 820 + ] + ], + [ + [ + 6 + ], + 823, + [ + 765, + 851, + 905 + ] + ], + [ + [ + 3 + ], + 825, + [ + 263, + 824 + ] + ], + [ + [ + 0 + ], + 828, + [ + 777, + 805 + ] + ], + [ + [ + 0 + ], + 829, + [ + 776, + 805 + ] + ], + [ + [ + 0 + ], + 831, + [ + 748, + 749, + 830 + ] + ], + [ + [ + 0 + ], + 833, + [ + 241, + 832 + ] + ], + [ + [ + 7 + ], + 836, + [ + 283, + 834 + ] + ], + [ + [ + 4 + ], + 837, + [ + 269, + 835 + ] + ], + [ + [ + 2 + ], + 839, + [ + 257, + 838 + ] + ], + [ + [ + 4 + ], + 841, + [ + 268, + 840 + ] + ], + [ + [ + 1 + ], + 842, + [ + 251, + 843 + ] + ], + [ + [ + 4 + ], + 845, + [ + 778, + 780, + 844 + ] + ], + [ + [ + 1 + ], + 846, + [ + 249, + 873, + 886 + ] + ], + [ + [ + 1 + ], + 847, + [ + 873, + 886 + ] + ], + [ + [ + 6 + ], + 849, + [ + 281, + 851 + ] + ], + [ + [ + 2 + ], + 852, + [ + 257, + 853 + ] + ], + [ + [ + 2 + ], + 854, + [ + 737, + 799, + 909 + ] + ], + [ + [ + 2 + ], + 855, + [ + 256, + 737, + 799, + 909 + ] + ], + [ + [ + 1 + ], + 857, + [ + 251, + 856 + ] + ], + [ + [ + 1 + ], + 860, + [ + 248, + 861 + ] + ], + [ + [ + 4 + ], + 863, + [ + 779, + 807, + 835 + ] + ], + [ + [ + 4 + ], + 865, + [ + 269, + 779, + 807, + 835 + ] + ], + [ + [ + 3 + ], + 866, + [ + 736, + 810 + ] + ], + [ + [ + 3 + ], + 867, + [ + 263, + 736, + 810 + ] + ], + [ + [ + 4 + ], + 868, + [ + 784, + 812, + 840 + ] + ], + [ + [ + 4 + ], + 869, + [ + 268, + 784, + 812, + 840 + ] + ], + [ + [ + 3 + ], + 871, + [ + 261, + 870 + ] + ], + [ + [ + 1 + ], + 872, + [ + 249, + 873 + ] + ], + [ + [ + 4 + ], + 875, + [ + 266, + 874 + ] + ], + [ + [ + 7 + ], + 879, + [ + 287, + 877 + ] + ], + [ + [ + 3 + ], + 880, + [ + 736, + 824 + ] + ], + [ + [ + 3 + ], + 881, + [ + 263, + 736, + 824 + ] + ], + [ + [ + 1 + ], + 887, + [ + 249, + 886 + ] + ], + [ + [ + 1 + ], + 889, + [ + 248, + 888 + ] + ], + [ + [ + 4 + ], + 891, + [ + 779, + 807 + ] + ], + [ + [ + 4 + ], + 893, + [ + 269, + 779, + 807 + ] + ], + [ + [ + 3 + ], + 894, + [ + 810, + 824 + ] + ], + [ + [ + 3 + ], + 895, + [ + 263, + 810, + 824 + ] + ], + [ + [ + 3 + ], + 896, + [ + 870, + 910 + ] + ], + [ + [ + 3 + ], + 897, + [ + 261, + 870, + 910 + ] + ], + [ + [ + 4 + ], + 899, + [ + 778, + 780, + 898 + ] + ], + [ + [ + 4 + ], + 902, + [ + 756, + 806 + ] + ], + [ + [ + 4 + ], + 903, + [ + 266, + 756, + 806 + ] + ], + [ + [ + 6 + ], + 907, + [ + 281, + 905 + ] + ], + [ + [ + 2 + ], + 908, + [ + 256, + 909 + ] + ], + [ + [ + 3 + ], + 911, + [ + 261, + 910 + ] + ], + [ + [ + 6 + ], + 915, + [ + 278, + 914 + ] + ], + [ + [ + 6 + ], + 921, + [ + 280, + 919 + ] + ], + [ + [ + 4 + ], + 922, + [ + 784, + 812 + ] + ], + [ + [ + 4 + ], + 923, + [ + 268, + 784, + 812 + ] + ], + [ + [ + 7 + ], + 924, + [ + 285, + 925 + ] + ], + [ + [ + 4 + ], + 926, + [ + 844, + 898 + ] + ], + [ + [ + 4 + ], + 927, + [ + 778, + 780, + 844, + 898 + ] + ], + [ + [ + 6 + ], + 928, + [ + 278, + 929 + ] + ], + [ + [ + 4 + ], + 930, + [ + 756, + 806, + 874 + ] + ], + [ + [ + 4 + ], + 931, + [ + 266, + 756, + 806, + 874 + ] + ], + [ + [ + 0, + 3, + 4, + 7, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ], + 938, + [ + 933, + 934, + 937 + ] + ], + [ + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + 943, + [ + 944, + 951, + 953 + ] + ], + [ + [ + 0, + 1, + 2, + 3, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + 945, + [ + 940 + ] + ], + [ + [ + 0, + 1, + 2, + 3, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + 946, + [ + 939 + ] + ], + [ + [ + 2, + 3, + 4, + 5, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + 957, + [ + 958, + 964, + 965 + ] + ], + [ + [ + 1, + 3, + 5, + 7, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + 960, + [ + 959, + 966, + 967 + ] + ], + [ + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + 978, + [ + 974, + 975, + 979 + ] + ], + [ + [ + 5 + ], + 883, + [ + 274, + 882 + ] + ], + [ + [ + 5 + ], + 827, + [ + 274, + 826 + ] + ], + [ + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55 + ], + 972, + [ + 973, + 976, + 977 + ] + ] + ] +} diff --git a/research/e8-r740-replica32/data/upstream441/pair-retime-selection.json b/research/e8-r740-replica32/data/upstream441/pair-retime-selection.json new file mode 100644 index 0000000000..1b7b7f33ff --- /dev/null +++ b/research/e8-r740-replica32/data/upstream441/pair-retime-selection.json @@ -0,0 +1,6278 @@ +{ + "input_sha256": "bae58f0692326f180ba49642360fd55557f59a93a96a8fa62bf7babd55d2384e", + "output_sha256": "fc4d045fd68ba47e21d69b840a51128ff52739dca3c0f7b9255bd757e31737e7", + "moves": [ + { + "iteration": 0, + "gates": [ + 11473, + 11474 + ], + "old": 1080864571977105603, + "new": 717695740599131922222305771715, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11462, + 11574 + ], + "old": 8160191253976699249635404808396, + "new": 8160191254253400410767069544652, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11561, + 11562 + ], + "old": 1193064712879659926413702594800, + "new": 1193064713045680623141764727024, + "gain": 0.0009870240319838075 + }, + { + "iteration": 0, + "gates": [ + 11513, + 11514 + ], + "old": 1324035698927103573472051112892694633, + "new": 1324035698927107170591367610905921897, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11420, + 11542 + ], + "old": 4352166089900228502, + "new": 31153781151281373593838377865641878, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11470, + 11566 + ], + "old": 19089035405798938525424167158000, + "new": 19089035405909618989931100635376, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11428, + 11534 + ], + "old": 12321567105508992614, + "new": 77884452878052328921668033630463590, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11394, + 11502 + ], + "old": 14700029559209066661, + "new": 304236151311388386848705102610597, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11537, + 11538 + ], + "old": 14094296508832743318, + "new": 46730671726885866221560285785816982, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11359, + 11494 + ], + "old": 31567475705696935807574605839, + "new": 12153476340388572933841156571151, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11369, + 11490 + ], + "old": 7349875688796586035, + "new": 1190279350602594853281865924659, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11565, + 11589 + ], + "old": 19089035405798938525424167158000, + "new": 19089035405909618989931100635376, + "gain": 0.0015840426696875909 + }, + { + "iteration": 0, + "gates": [ + 11377, + 11478 + ], + "old": 17293823011467559107, + "new": 480011253072551867881164374211, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11446, + 11550 + ], + "old": 5172014572241624258547908635263146, + "new": 5172014572242565042512160497205418, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11541, + 11637 + ], + "old": 4352166089900228502, + "new": 31153781151281373593838377865641878, + "gain": 0.0015840426696875909 + }, + { + "iteration": 0, + "gates": [ + 11533, + 11629 + ], + "old": 12321567105508992614, + "new": 77884452878052328921668033630463590, + "gain": 0.0015840426696875909 + }, + { + "iteration": 0, + "gates": [ + 11545, + 11546 + ], + "old": 5172014633896830034082108742303914, + "new": 5172014633897770818046360604442794, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11412, + 11518 + ], + "old": 1324035698926862738906320254210670697, + "new": 1324035698926866336025636752223897193, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11468, + 11469 + ], + "old": 18374686479671623920, + "new": 18374686544347791600, + "gain": 0.0009611102648907632 + }, + { + "iteration": 0, + "gates": [ + 11577, + 11578 + ], + "old": 20250532647651096693756401811516, + "new": 20250532647927797854926620590140, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11489, + 11490 + ], + "old": 7349875688796586035, + "new": 1190279350602594853281865924659, + "gain": 0.001584042669688479 + }, + { + "iteration": 0, + "gates": [ + 11410, + 11411 + ], + "old": 1324035698926381045275276563951124585, + "new": 1324035698926384642394593061964349545, + "gain": 0.0009611102648907632 + }, + { + "iteration": 0, + "gates": [ + 11375, + 11376 + ], + "old": 4278190275, + "new": 4642277969672019312711303363, + "gain": 0.0009611102648907632 + }, + { + "iteration": 0, + "gates": [ + 11438, + 11558 + ], + "old": 2068806087848560870156522594762842, + "new": 2068806087849501654110878852644954, + "gain": 0.00030802761665604805 + }, + { + "iteration": 0, + "gates": [ + 11418, + 11419 + ], + "old": 65430, + "new": 72403470489309990158230, + "gain": 0.0009611102648907632 + }, + { + "iteration": 0, + "gates": [ + 11385, + 11510 + ], + "old": 6485295613616259157, + "new": 121694475758847514830896820584533, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11485, + 11486 + ], + "old": 47351211206585534313394077711, + "new": 12169260075889677705129089826831, + "gain": 0.0009870240319838075 + }, + { + "iteration": 0, + "gates": [ + 11509, + 11669 + ], + "old": 6485295613616259157, + "new": 121694475758847514830896820584533, + "gain": 0.0015840426696875909 + }, + { + "iteration": 0, + "gates": [ + 11493, + 11494 + ], + "old": 31567475705696935807574605839, + "new": 12153476340388572933841156571151, + "gain": 0.001584042669688479 + }, + { + "iteration": 0, + "gates": [ + 11521, + 11522 + ], + "old": 794421419357032844669528535296114841, + "new": 794421419357036441787156183449079705, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11505, + 11506 + ], + "old": 11889671241553870933, + "new": 182541704569807930478366512054357, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11529, + 11530 + ], + "old": 6196671612285131110, + "new": 77884452878066489896221149342243174, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11467, + 11468 + ], + "old": 18374686479671623920, + "new": 18374686544347791600, + "gain": 0.0012725764672882889 + }, + { + "iteration": 0, + "gates": [ + 11454, + 11582 + ], + "old": 20234748912146533157955503652924, + "new": 20234748912423234319125672099900, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11444, + 11445 + ], + "old": 5172014448931175958106549077934250, + "new": 5172014448932116742070800939483306, + "gain": 0.0009611102648907632 + }, + { + "iteration": 0, + "gates": [ + 11357, + 11358 + ], + "old": 4703919738795935662095, + "new": 12121908869386363391265290059791, + "gain": 0.0009611102648907632 + }, + { + "iteration": 0, + "gates": [ + 11569, + 11570 + ], + "old": 12200827542187967508247612489932, + "new": 12200827542464668669392162128076, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11426, + 11427 + ], + "old": 71776119061217382, + "new": 77884452878023982472979829311406182, + "gain": 0.0009611102648907632 + }, + { + "iteration": 0, + "gates": [ + 11402, + 11526 + ], + "old": 529614279571756625886698027385618585, + "new": 529614279571760223003481250608451481, + "gain": 0.0003080276166542717 + }, + { + "iteration": 0, + "gates": [ + 11481, + 11482 + ], + "old": 11024812985586548787, + "new": 1191207805635733825784830230579, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11549, + 11550 + ], + "old": 5172014572241624258547908635263146, + "new": 5172014572242565042512160497205418, + "gain": 0.0015840426696875909 + }, + { + "iteration": 0, + "gates": [ + 11501, + 11502 + ], + "old": 14700029559209066661, + "new": 304236151311388386848705102610597, + "gain": 0.001584042669688479 + }, + { + "iteration": 0, + "gates": [ + 11497, + 11498 + ], + "old": 3675217671409434789, + "new": 304236154938154820880704827097253, + "gain": 0.0009870240319846957 + }, + { + "iteration": 0, + "gates": [ + 11400, + 11401 + ], + "old": 1204203453131759529492633, + "new": 1207800568226132892061593, + "gain": 0.0009611102648907632 + }, + { + "iteration": 0, + "gates": [ + 11553, + 11554 + ], + "old": 3103208977634801466097385254944858, + "new": 3103208977635742250055040047710298, + "gain": 0.0009870240319846957 + }, + { + "iteration": 1, + "gates": [ + 11460, + 11461 + ], + "old": 78918677504442992524819169484, + "new": 78918677781144153630714101964, + "gain": 0.0009611102648907632 + }, + { + "iteration": 1, + "gates": [ + 11367, + 11368 + ], + "old": 1095216660531, + "new": 1188422440536316908275937312819, + "gain": 0.0009611102648907632 + }, + { + "iteration": 1, + "gates": [ + 11452, + 11453 + ], + "old": 20203181441137406086353707335740, + "new": 20203181441414107247523775119420, + "gain": 0.0009611102648907632 + }, + { + "iteration": 1, + "gates": [ + 11436, + 11437 + ], + "old": 308276084001730439550074970, + "new": 308277024785678198738190426, + "gain": 0.0009611102648907632 + }, + { + "iteration": 1, + "gates": [ + 11451, + 11452 + ], + "old": 20203181441137406086353707335740, + "new": 20203181441414107247523775119420, + "gain": 0.0012725764672882889 + }, + { + "iteration": 1, + "gates": [ + 11459, + 11460 + ], + "old": 78918677504442992524819169484, + "new": 78918677781144153630714101964, + "gain": 0.0012725764672900652 + }, + { + "iteration": 1, + "gates": [ + 11392, + 11393 + ], + "old": 280375465083045, + "new": 304236144057818769411746310389925, + "gain": 0.0009611102648907632 + }, + { + "iteration": 1, + "gates": [ + 11383, + 11384 + ], + "old": 16711765, + "new": 18136931006991599713321045, + "gain": 0.0009611102648907632 + } + ], + "gates": [ + [ + "B", + 5, + [ + 0, + 1, + 2, + 3, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + [ + 0, + 1, + 2, + 3, + 32, + 35, + 36, + 39, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 6, + [ + 0, + 1, + 2, + 3, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + [ + 0, + 1, + 2, + 3, + 32, + 35, + 36, + 39, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 7, + [ + 0, + 1, + 2, + 3, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71 + ], + [ + 0, + 1, + 2, + 3, + 32, + 35, + 36, + 39, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 8, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94 + ], + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 15, + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ], + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 64, + 67, + 68, + 71, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 16, + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ], + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 64, + 67, + 68, + 71, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 17, + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39 + ], + [ + 0, + 1, + 4, + 5, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 64, + 67, + 68, + 71, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 18, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62 + ], + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 23, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91 + ] + ], + [ + "B", + 24, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91 + ] + ], + [ + "B", + 25, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91 + ] + ], + [ + "B", + 26, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ] + ], + [ + "B", + 31, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83 + ] + ], + [ + "B", + 32, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83 + ] + ], + [ + "B", + 33, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83 + ] + ], + [ + "B", + 34, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ] + ], + [ + "B", + 40, + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ], + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 64, + 66, + 69, + 71, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 41, + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ], + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 64, + 66, + 69, + 71, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 42, + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47 + ], + [ + 0, + 2, + 5, + 7, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 64, + 66, + 69, + 71, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 43, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63 + ], + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 48, + [ + 0, + 3, + 4, + 7, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ] + ], + [ + "B", + 49, + [ + 0, + 3, + 4, + 7, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ] + ], + [ + "B", + 50, + [ + 0, + 3, + 4, + 7, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79 + ] + ], + [ + "B", + 51, + [ + 0, + 3, + 4, + 7, + 58, + 59, + 60, + 61, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 58, + [ + 0, + 3, + 5, + 6, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 48, + 49, + 50, + 51, + 64, + 65, + 70, + 71, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 59, + [ + 0, + 3, + 5, + 6, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 48, + 49, + 50, + 51, + 64, + 65, + 70, + 71, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 60, + [ + 0, + 3, + 5, + 6, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 48, + 49, + 50, + 51, + 64, + 65, + 70, + 71, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 61, + [ + 0, + 3, + 5, + 6, + 57, + 59, + 61, + 63, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 66, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75 + ] + ], + [ + "B", + 67, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75 + ] + ], + [ + "B", + 68, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75 + ] + ], + [ + "B", + 69, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ] + ], + [ + "B", + 74, + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55 + ], + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 64, + 66, + 68, + 70, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 75, + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55 + ], + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 64, + 66, + 68, + 70, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 76, + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55 + ], + [ + 1, + 2, + 5, + 6, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 64, + 66, + 68, + 70, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 77, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 84, + [ + 1, + 3, + 4, + 6, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ] + ], + [ + "B", + 85, + [ + 1, + 3, + 4, + 6, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ] + ], + [ + "B", + 86, + [ + 1, + 3, + 4, + 6, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87 + ] + ], + [ + "B", + 87, + [ + 1, + 3, + 4, + 6, + 57, + 59, + 60, + 62, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ] + ], + [ + "B", + 92, + [ + 1, + 3, + 5, + 7, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 40, + 41, + 42, + 43, + 64, + 65, + 68, + 69, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 93, + [ + 1, + 3, + 5, + 7, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 40, + 41, + 42, + 43, + 64, + 65, + 68, + 69, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 94, + [ + 1, + 3, + 5, + 7, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 40, + 41, + 42, + 43, + 64, + 65, + 68, + 69, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 95, + [ + 1, + 3, + 5, + 7, + 58, + 59, + 62, + 63, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 100, + [ + 2, + 3, + 4, + 5, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 32, + 33, + 34, + 35, + 64, + 65, + 66, + 67, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 101, + [ + 2, + 3, + 4, + 5, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 32, + 33, + 34, + 35, + 64, + 65, + 66, + 67, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 102, + [ + 2, + 3, + 4, + 5, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 32, + 33, + 34, + 35, + 64, + 65, + 66, + 67, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 103, + [ + 2, + 3, + 4, + 5, + 57, + 58, + 61, + 62, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 108, + [ + 2, + 3, + 6, + 7, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ] + ], + [ + "B", + 109, + [ + 2, + 3, + 6, + 7, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ] + ], + [ + "B", + 110, + [ + 2, + 3, + 6, + 7, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95 + ] + ], + [ + "B", + 111, + [ + 2, + 3, + 6, + 7, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ] + ], + [ + "B", + 116, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + ], + [ + "B", + 117, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + ], + [ + "B", + 118, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63 + ] + ], + [ + "B", + 119, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 122, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 35, + 36, + 39, + 56, + 57, + 58, + 59 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 35, + 36, + 39, + 56, + 57, + 58, + 59, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 96, + 99 + ] + ], + [ + "B", + 123, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 35, + 36, + 39, + 56, + 57, + 58, + 59 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 35, + 36, + 39, + 56, + 57, + 58, + 59, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 96, + 99 + ] + ], + [ + "B", + 126, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ] + ], + [ + "B", + 127, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63 + ], + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ] + ], + [ + "B", + 130, + [ + 0, + 1, + 4, + 5, + 24, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 56, + 59, + 60, + 63 + ], + [ + 0, + 1, + 4, + 5, + 24, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 56, + 59, + 60, + 63, + 64, + 67, + 68, + 71, + 88, + 91, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 131, + [ + 0, + 1, + 4, + 5, + 24, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 56, + 59, + 60, + 63 + ], + [ + 0, + 1, + 4, + 5, + 24, + 27, + 28, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 56, + 59, + 60, + 63, + 64, + 67, + 68, + 71, + 88, + 91, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 134, + [ + 0, + 1, + 2, + 3, + 24, + 27, + 28, + 31, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 91, + 92, + 95 + ], + [ + 0, + 1, + 2, + 3, + 24, + 27, + 28, + 31, + 32, + 35, + 36, + 39, + 56, + 59, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 91, + 92, + 95, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 135, + [ + 0, + 1, + 2, + 3, + 24, + 27, + 28, + 31, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 91, + 92, + 95 + ], + [ + 0, + 1, + 2, + 3, + 24, + 27, + 28, + 31, + 32, + 35, + 36, + 39, + 56, + 59, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 88, + 91, + 92, + 95, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 138, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62 + ], + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 139, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62 + ], + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 142, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94 + ], + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 143, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94 + ], + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 146, + [ + 0, + 2, + 5, + 7, + 16, + 19, + 20, + 23, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 56, + 57, + 60, + 61 + ], + [ + 0, + 2, + 5, + 7, + 16, + 19, + 20, + 23, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 56, + 57, + 60, + 61, + 64, + 66, + 69, + 71, + 80, + 83, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 147, + [ + 0, + 2, + 5, + 7, + 16, + 19, + 20, + 23, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 56, + 57, + 60, + 61 + ], + [ + 0, + 2, + 5, + 7, + 16, + 19, + 20, + 23, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 56, + 57, + 60, + 61, + 64, + 66, + 69, + 71, + 80, + 83, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 150, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63 + ], + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 151, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63 + ], + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ] + ], + [ + "B", + 154, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 40, + 43, + 44, + 47, + 56, + 58, + 61, + 63 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 40, + 43, + 44, + 47, + 56, + 58, + 61, + 63, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 104, + 107 + ] + ], + [ + "B", + 155, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 40, + 43, + 44, + 47, + 56, + 58, + 61, + 63 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 40, + 43, + 44, + 47, + 56, + 58, + 61, + 63, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 104, + 107 + ] + ], + [ + "B", + 158, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ] + ], + [ + "B", + 159, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62 + ], + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ] + ], + [ + "B", + 162, + [ + 0, + 3, + 5, + 6, + 56, + 58, + 60, + 62, + 72, + 75, + 76, + 79, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 8, + 11, + 48, + 49, + 50, + 51, + 56, + 58, + 60, + 62, + 64, + 65, + 70, + 71, + 72, + 75, + 76, + 79, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 163, + [ + 0, + 3, + 5, + 6, + 56, + 58, + 60, + 62, + 72, + 75, + 76, + 79, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 8, + 11, + 48, + 49, + 50, + 51, + 56, + 58, + 60, + 62, + 64, + 65, + 70, + 71, + 72, + 75, + 76, + 79, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 166, + [ + 0, + 3, + 5, + 6, + 57, + 59, + 61, + 63, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 167, + [ + 0, + 3, + 5, + 6, + 57, + 59, + 61, + 63, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 170, + [ + 0, + 3, + 4, + 7, + 56, + 57, + 62, + 63, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 115, + 116, + 119 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 48, + 51, + 56, + 57, + 62, + 63, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 115, + 116, + 119 + ] + ], + [ + "B", + 171, + [ + 0, + 3, + 4, + 7, + 56, + 57, + 62, + 63, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 115, + 116, + 119 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 48, + 51, + 56, + 57, + 62, + 63, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 112, + 115, + 116, + 119 + ] + ], + [ + "B", + 174, + [ + 0, + 3, + 4, + 7, + 58, + 59, + 60, + 61, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 175, + [ + 0, + 3, + 4, + 7, + 58, + 59, + 60, + 61, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 178, + [ + 1, + 2, + 5, + 6, + 8, + 11, + 12, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 58, + 60, + 62 + ], + [ + 1, + 2, + 5, + 6, + 8, + 11, + 12, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 58, + 60, + 62, + 64, + 66, + 68, + 70, + 72, + 75, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 179, + [ + 1, + 2, + 5, + 6, + 8, + 11, + 12, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 58, + 60, + 62 + ], + [ + 1, + 2, + 5, + 6, + 8, + 11, + 12, + 15, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 58, + 60, + 62, + 64, + 66, + 68, + 70, + 72, + 75, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 182, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 183, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 186, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 48, + 51, + 52, + 55, + 56, + 57, + 62, + 63 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 48, + 51, + 52, + 55, + 56, + 57, + 62, + 63, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 112, + 115 + ] + ], + [ + "B", + 187, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 48, + 51, + 52, + 55, + 56, + 57, + 62, + 63 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 48, + 51, + 52, + 55, + 56, + 57, + 62, + 63, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 112, + 115 + ] + ], + [ + "B", + 190, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ] + ], + [ + "B", + 191, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ] + ], + [ + "B", + 194, + [ + 1, + 3, + 5, + 7, + 56, + 57, + 60, + 61, + 80, + 83, + 84, + 87, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 16, + 19, + 40, + 41, + 42, + 43, + 56, + 57, + 60, + 61, + 64, + 65, + 68, + 69, + 80, + 83, + 84, + 87, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 195, + [ + 1, + 3, + 5, + 7, + 56, + 57, + 60, + 61, + 80, + 83, + 84, + 87, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 16, + 19, + 40, + 41, + 42, + 43, + 56, + 57, + 60, + 61, + 64, + 65, + 68, + 69, + 80, + 83, + 84, + 87, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 198, + [ + 1, + 3, + 5, + 7, + 58, + 59, + 62, + 63, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 199, + [ + 1, + 3, + 5, + 7, + 58, + 59, + 62, + 63, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ] + ], + [ + "B", + 202, + [ + 1, + 3, + 4, + 6, + 56, + 58, + 61, + 63, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 104, + 107, + 108, + 111 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 40, + 43, + 56, + 58, + 61, + 63, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 104, + 107, + 108, + 111 + ] + ], + [ + "B", + 203, + [ + 1, + 3, + 4, + 6, + 56, + 58, + 61, + 63, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 104, + 107, + 108, + 111 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 40, + 43, + 56, + 58, + 61, + 63, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 104, + 107, + 108, + 111 + ] + ], + [ + "B", + 206, + [ + 1, + 3, + 4, + 6, + 57, + 59, + 60, + 62, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ] + ], + [ + "B", + 207, + [ + 1, + 3, + 4, + 6, + 57, + 59, + 60, + 62, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ] + ], + [ + "B", + 210, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 96, + 97, + 98, + 99 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 67, + 88, + 89, + 90, + 91, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 211, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 96, + 97, + 98, + 99 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 67, + 88, + 89, + 90, + 91, + 96, + 97, + 98, + 99 + ] + ], + [ + "B", + 214, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 215, + [ + 4, + 5, + 6, + 7, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 218, + [ + 2, + 3, + 6, + 7, + 56, + 57, + 58, + 59, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 99, + 100, + 103 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 35, + 56, + 57, + 58, + 59, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 219, + [ + 2, + 3, + 6, + 7, + 56, + 57, + 58, + 59, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 99, + 100, + 103 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 35, + 56, + 57, + 58, + 59, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 99, + 100, + 103 + ] + ], + [ + "B", + 222, + [ + 2, + 3, + 6, + 7, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ] + ], + [ + "B", + 223, + [ + 2, + 3, + 6, + 7, + 60, + 61, + 62, + 63, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ] + ], + [ + "B", + 226, + [ + 2, + 3, + 4, + 5, + 56, + 59, + 60, + 63, + 88, + 91, + 92, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 24, + 27, + 32, + 33, + 34, + 35, + 56, + 59, + 60, + 63, + 64, + 65, + 66, + 67, + 88, + 91, + 92, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 227, + [ + 2, + 3, + 4, + 5, + 56, + 59, + 60, + 63, + 88, + 91, + 92, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 24, + 27, + 32, + 33, + 34, + 35, + 56, + 59, + 60, + 63, + 64, + 65, + 66, + 67, + 88, + 91, + 92, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 230, + [ + 2, + 3, + 4, + 5, + 57, + 58, + 61, + 62, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ], + [ + "B", + 231, + [ + 2, + 3, + 4, + 5, + 57, + 58, + 61, + 62, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ] + ] + ] +} \ No newline at end of file diff --git a/research/e8-r740-replica32/data/upstream441/window-retime-selection.json b/research/e8-r740-replica32/data/upstream441/window-retime-selection.json new file mode 100644 index 0000000000..d816fc0da6 --- /dev/null +++ b/research/e8-r740-replica32/data/upstream441/window-retime-selection.json @@ -0,0 +1,4409 @@ +{ + "input_sha256": "fc4d045fd68ba47e21d69b840a51128ff52739dca3c0f7b9255bd757e31737e7", + "output_sha256": "00d8aa8608e40b53fd8752399de06cb730cc55caaadc528f88379cb31b8460a6", + "moves": [ + { + "iteration": 0, + "gates": [ + 11394, + 11502, + 11662 + ], + "old": 304236151311388386848705102610597, + "new": 467615725697923475222285570175021989, + "gain": 0.00010882458330208067 + }, + { + "iteration": 0, + "gates": [ + 11446, + 11550, + 11614, + 11749 + ], + "old": 5172014572242565042512160497205418, + "new": 446533473228038667662826771012009130, + "gain": 0.00010882458330740974 + }, + { + "iteration": 0, + "gates": [ + 11402, + 11526, + 11654 + ], + "old": 529614279571760223003481250608451481, + "new": 530662214486874581358701244873052057, + "gain": 0.00010882458330563338 + }, + { + "iteration": 0, + "gates": [ + 11470, + 11566, + 11590, + 11845 + ], + "old": 19089035405909618989931100635376, + "new": 82771320508518052368924429394112752, + "gain": 0.00010882458330740974 + }, + { + "iteration": 0, + "gates": [ + 11412, + 11518, + 11646 + ], + "old": 1324035698926866336025636752223897193, + "new": 1325775918962436524365648919009171049, + "gain": 0.00010882458330563338 + }, + { + "iteration": 0, + "gates": [ + 11462, + 11574, + 11598, + 11781 + ], + "old": 8160191254253400410767069544652, + "new": 268952911782537111171439061732936908, + "gain": 0.00010882458330385703 + }, + { + "iteration": 0, + "gates": [ + 11454, + 11582, + 11606 + ], + "old": 20234748912423234319125672099900, + "new": 444813477562912346164957430720866876, + "gain": 0.00010882458330563338 + }, + { + "iteration": 0, + "gates": [ + 11359, + 11494, + 11694 + ], + "old": 12153476340388572933841156571151, + "new": 531695239012153450720948508243368207, + "gain": 0.00010882458330563338 + }, + { + "iteration": 0, + "gates": [ + 11438, + 11558, + 11622 + ], + "old": 2068806087849501654110878852644954, + "new": 266889467273606206443169154457360986, + "gain": 0.00010882458330563338 + }, + { + "iteration": 0, + "gates": [ + 11428, + 11534, + 11630 + ], + "old": 77884452878052328921668033630463590, + "new": 79714651358393826081832427880408678, + "gain": 0.00010882458330563338 + }, + { + "iteration": 0, + "gates": [ + 11420, + 11542, + 11638 + ], + "old": 31153781151281373593838377865641878, + "new": 115454624676587912712223763402719126, + "gain": 0.00010882458330208067 + }, + { + "iteration": 0, + "gates": [ + 11369, + 11490, + 11686 + ], + "old": 1190279350602594853281865924659, + "new": 469133329472802233437673988087457075, + "gain": 0.00010882458330563338 + }, + { + "iteration": 0, + "gates": [ + 11385, + 11510, + 11670, + 11925 + ], + "old": 121694475758847514830896820584533, + "new": 311991182930209112662697640099534165, + "gain": 0.00010882458330385703 + }, + { + "iteration": 0, + "gates": [ + 11377, + 11478, + 11678, + 11909 + ], + "old": 480011253072551867881164374211, + "new": 312756503822980949939487947131962307, + "gain": 0.00010882458330385703 + } + ], + "gates": [ + [ + "B", + 8, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ], + [ + 0, + 1, + 2, + 3, + 8, + 11, + 12, + 15, + 16, + 19, + 20, + 23, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 41, + 42, + 45, + 46, + 49, + 50, + 53, + 54, + 57, + 58, + 60, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 75, + 76, + 79, + 80, + 83, + 84, + 87, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103, + 105, + 106, + 109, + 110, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 18, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ], + [ + 0, + 1, + 4, + 5, + 8, + 10, + 13, + 15, + 16, + 18, + 21, + 23, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 42, + 45, + 47, + 48, + 50, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 73, + 75, + 76, + 78, + 81, + 83, + 84, + 86, + 89, + 90, + 92, + 96, + 97, + 98, + 99, + 105, + 107, + 108, + 110, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 26, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ], + [ + 0, + 1, + 6, + 7, + 8, + 9, + 14, + 15, + 16, + 17, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 40, + 41, + 46, + 47, + 48, + 49, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 74, + 75, + 76, + 77, + 82, + 83, + 84, + 85, + 88, + 89, + 90, + 91, + 97, + 98, + 100, + 106, + 107, + 108, + 109, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 34, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ], + [ + 0, + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 29, + 31, + 32, + 34, + 37, + 39, + 41, + 42, + 45, + 46, + 48, + 49, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 73, + 75, + 76, + 78, + 80, + 81, + 82, + 83, + 89, + 91, + 92, + 94, + 97, + 99, + 100, + 102, + 105, + 106, + 108, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 43, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ], + [ + 0, + 2, + 5, + 7, + 8, + 9, + 12, + 13, + 17, + 18, + 21, + 22, + 24, + 25, + 30, + 31, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 50, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 74, + 75, + 76, + 77, + 81, + 82, + 84, + 90, + 91, + 92, + 93, + 98, + 99, + 100, + 101, + 104, + 105, + 106, + 107, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 51, + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 17, + 19, + 20, + 22, + 24, + 25, + 30, + 31, + 32, + 34, + 37, + 39, + 42, + 43, + 44, + 45, + 49, + 50, + 52, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 82, + 84, + 86, + 90, + 91, + 94, + 95, + 97, + 99, + 101, + 103, + 104, + 105, + 108, + 109, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 61, + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 12, + 18, + 19, + 20, + 21, + 24, + 26, + 29, + 31, + 32, + 33, + 38, + 39, + 41, + 43, + 44, + 46, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 80, + 81, + 84, + 85, + 89, + 91, + 93, + 95, + 98, + 99, + 102, + 103, + 104, + 106, + 108, + 110, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 69, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 20, + 22, + 24, + 25, + 28, + 29, + 32, + 34, + 36, + 38, + 40, + 41, + 44, + 45, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 81, + 83, + 84, + 86, + 90, + 91, + 92, + 93, + 97, + 99, + 100, + 102, + 106, + 107, + 108, + 109, + 113, + 114, + 116 + ] + ], + [ + "B", + 77, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 16, + 17, + 20, + 21, + 24, + 26, + 28, + 30, + 32, + 33, + 36, + 37, + 40, + 42, + 44, + 46, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 76, + 82, + 83, + 84, + 85, + 89, + 91, + 92, + 94, + 98, + 99, + 100, + 101, + 105, + 107, + 108, + 110, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 87, + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 9, + 11, + 12, + 14, + 16, + 17, + 18, + 19, + 24, + 26, + 28, + 30, + 32, + 34, + 36, + 38, + 41, + 42, + 44, + 50, + 51, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 72, + 74, + 76, + 78, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 89, + 91, + 93, + 95, + 97, + 99, + 101, + 103, + 105, + 106, + 109, + 110, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 95, + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 10, + 11, + 12, + 13, + 17, + 18, + 20, + 24, + 25, + 28, + 29, + 32, + 33, + 36, + 37, + 40, + 41, + 42, + 43, + 49, + 51, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 72, + 73, + 76, + 77, + 81, + 82, + 85, + 86, + 90, + 91, + 94, + 95, + 98, + 99, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 103, + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 9, + 11, + 13, + 15, + 16, + 18, + 20, + 22, + 25, + 26, + 28, + 32, + 33, + 34, + 35, + 40, + 42, + 44, + 46, + 49, + 51, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 72, + 74, + 76, + 78, + 81, + 83, + 85, + 87, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 105, + 107, + 109, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 111, + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 10, + 11, + 14, + 15, + 16, + 17, + 20, + 21, + 24, + 25, + 26, + 27, + 33, + 34, + 36, + 40, + 41, + 44, + 45, + 50, + 51, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 72, + 73, + 76, + 77, + 82, + 83, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102, + 106, + 107, + 110, + 111, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 119, + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 40, + 41, + 42, + 43, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 68, + 72, + 73, + 74, + 75, + 84, + 85, + 86, + 87, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 127, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ], + [ + 0, + 1, + 6, + 7, + 8, + 9, + 14, + 15, + 16, + 17, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 40, + 41, + 46, + 47, + 48, + 49, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 74, + 75, + 76, + 77, + 82, + 83, + 84, + 85, + 88, + 89, + 90, + 91, + 97, + 98, + 100, + 106, + 107, + 108, + 109, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 139, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ], + [ + 0, + 1, + 4, + 5, + 8, + 10, + 13, + 15, + 16, + 18, + 21, + 23, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 42, + 45, + 47, + 48, + 50, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 73, + 75, + 76, + 78, + 81, + 83, + 84, + 86, + 89, + 90, + 92, + 96, + 97, + 98, + 99, + 105, + 107, + 108, + 110, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 143, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ], + [ + 0, + 1, + 2, + 3, + 8, + 11, + 12, + 15, + 16, + 19, + 20, + 23, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 41, + 42, + 45, + 46, + 49, + 50, + 53, + 54, + 57, + 58, + 60, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 75, + 76, + 79, + 80, + 83, + 84, + 87, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103, + 105, + 106, + 109, + 110, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 151, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ], + [ + 0, + 2, + 5, + 7, + 8, + 9, + 12, + 13, + 17, + 18, + 21, + 22, + 24, + 25, + 30, + 31, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 50, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 74, + 75, + 76, + 77, + 81, + 82, + 84, + 90, + 91, + 92, + 93, + 98, + 99, + 100, + 101, + 104, + 105, + 106, + 107, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 159, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ], + [ + 0, + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 29, + 31, + 32, + 34, + 37, + 39, + 41, + 42, + 45, + 46, + 48, + 49, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 73, + 75, + 76, + 78, + 80, + 81, + 82, + 83, + 89, + 91, + 92, + 94, + 97, + 99, + 100, + 102, + 105, + 106, + 108, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 167, + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 12, + 18, + 19, + 20, + 21, + 24, + 26, + 29, + 31, + 32, + 33, + 38, + 39, + 41, + 43, + 44, + 46, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 80, + 81, + 84, + 85, + 89, + 91, + 93, + 95, + 98, + 99, + 102, + 103, + 104, + 106, + 108, + 110, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 175, + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 17, + 19, + 20, + 22, + 24, + 25, + 30, + 31, + 32, + 34, + 37, + 39, + 42, + 43, + 44, + 45, + 49, + 50, + 52, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 82, + 84, + 86, + 90, + 91, + 94, + 95, + 97, + 99, + 101, + 103, + 104, + 105, + 108, + 109, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 183, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 16, + 17, + 20, + 21, + 24, + 26, + 28, + 30, + 32, + 33, + 36, + 37, + 40, + 42, + 44, + 46, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 76, + 82, + 83, + 84, + 85, + 89, + 91, + 92, + 94, + 98, + 99, + 100, + 101, + 105, + 107, + 108, + 110, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 191, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 20, + 22, + 24, + 25, + 28, + 29, + 32, + 34, + 36, + 38, + 40, + 41, + 44, + 45, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 81, + 83, + 84, + 86, + 90, + 91, + 92, + 93, + 97, + 99, + 100, + 102, + 106, + 107, + 108, + 109, + 113, + 114, + 116 + ] + ], + [ + "B", + 199, + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 10, + 11, + 12, + 13, + 17, + 18, + 20, + 24, + 25, + 28, + 29, + 32, + 33, + 36, + 37, + 40, + 41, + 42, + 43, + 49, + 51, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 72, + 73, + 76, + 77, + 81, + 82, + 85, + 86, + 90, + 91, + 94, + 95, + 98, + 99, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 207, + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 9, + 11, + 12, + 14, + 16, + 17, + 18, + 19, + 24, + 26, + 28, + 30, + 32, + 34, + 36, + 38, + 41, + 42, + 44, + 50, + 51, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 72, + 74, + 76, + 78, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 89, + 91, + 93, + 95, + 97, + 99, + 101, + 103, + 105, + 106, + 109, + 110, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 215, + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 40, + 41, + 42, + 43, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 68, + 72, + 73, + 74, + 75, + 84, + 85, + 86, + 87, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 223, + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 10, + 11, + 14, + 15, + 16, + 17, + 20, + 21, + 24, + 25, + 26, + 27, + 33, + 34, + 36, + 40, + 41, + 44, + 45, + 50, + 51, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 72, + 73, + 76, + 77, + 82, + 83, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102, + 106, + 107, + 110, + 111, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 231, + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 9, + 11, + 13, + 15, + 16, + 18, + 20, + 22, + 25, + 26, + 28, + 32, + 33, + 34, + 35, + 40, + 42, + 44, + 46, + 49, + 51, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 72, + 74, + 76, + 78, + 81, + 83, + 85, + 87, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 105, + 107, + 109, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 239, + [ + 4, + 5, + 6, + 7, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103 + ], + [ + 4, + 5, + 6, + 7, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 24, + 25, + 26, + 27, + 32, + 33, + 34, + 35, + 40, + 41, + 42, + 43, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 65, + 66, + 68, + 72, + 73, + 74, + 75, + 84, + 85, + 86, + 87, + 92, + 93, + 94, + 95, + 100, + 101, + 102, + 103, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 247, + [ + 2, + 3, + 6, + 7, + 24, + 25, + 26, + 27, + 33, + 34, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102 + ], + [ + 2, + 3, + 6, + 7, + 10, + 11, + 14, + 15, + 16, + 17, + 20, + 21, + 24, + 25, + 26, + 27, + 33, + 34, + 36, + 40, + 41, + 44, + 45, + 50, + 51, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 72, + 73, + 76, + 77, + 82, + 83, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 97, + 98, + 101, + 102, + 106, + 107, + 110, + 111, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 255, + [ + 2, + 3, + 4, + 5, + 25, + 26, + 32, + 33, + 34, + 35, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103 + ], + [ + 2, + 3, + 4, + 5, + 9, + 11, + 13, + 15, + 16, + 18, + 20, + 22, + 25, + 26, + 28, + 32, + 33, + 34, + 35, + 40, + 42, + 44, + 46, + 49, + 51, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 65, + 66, + 67, + 72, + 74, + 76, + 78, + 81, + 83, + 85, + 87, + 89, + 90, + 93, + 94, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 105, + 107, + 109, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 263, + [ + 1, + 3, + 5, + 7, + 17, + 18, + 40, + 41, + 42, + 43, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 81, + 82, + 85, + 86, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111 + ], + [ + 1, + 3, + 5, + 7, + 10, + 11, + 12, + 13, + 17, + 18, + 20, + 24, + 25, + 28, + 29, + 32, + 33, + 36, + 37, + 40, + 41, + 42, + 43, + 49, + 51, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 65, + 68, + 69, + 72, + 73, + 76, + 77, + 81, + 82, + 85, + 86, + 90, + 91, + 94, + 95, + 98, + 99, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 114, + 116, + 118 + ] + ], + [ + "B", + 271, + [ + 1, + 3, + 4, + 6, + 16, + 17, + 18, + 19, + 41, + 42, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 105, + 106, + 109, + 110 + ], + [ + 1, + 3, + 4, + 6, + 9, + 11, + 12, + 14, + 16, + 17, + 18, + 19, + 24, + 26, + 28, + 30, + 32, + 34, + 36, + 38, + 41, + 42, + 44, + 50, + 51, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 65, + 68, + 69, + 72, + 74, + 76, + 78, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 89, + 91, + 93, + 95, + 97, + 99, + 101, + 103, + 105, + 106, + 109, + 110, + 112, + 113, + 116, + 117 + ] + ], + [ + "B", + 279, + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 112, + 113, + 114, + 115 + ], + [ + 1, + 2, + 5, + 6, + 9, + 10, + 13, + 14, + 16, + 17, + 20, + 21, + 24, + 26, + 28, + 30, + 32, + 33, + 36, + 37, + 40, + 42, + 44, + 46, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 57, + 59, + 61, + 63, + 64, + 66, + 68, + 70, + 73, + 74, + 76, + 82, + 83, + 84, + 85, + 89, + 91, + 92, + 94, + 98, + 99, + 100, + 101, + 105, + 107, + 108, + 110, + 112, + 113, + 114, + 115 + ] + ], + [ + "B", + 287, + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 113, + 114 + ], + [ + 1, + 2, + 4, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 18, + 20, + 22, + 24, + 25, + 28, + 29, + 32, + 34, + 36, + 38, + 40, + 41, + 44, + 45, + 49, + 50, + 53, + 54, + 58, + 59, + 60, + 61, + 64, + 66, + 68, + 70, + 72, + 73, + 74, + 75, + 81, + 83, + 84, + 86, + 90, + 91, + 92, + 93, + 97, + 99, + 100, + 102, + 106, + 107, + 108, + 109, + 113, + 114, + 116 + ] + ], + [ + "B", + 295, + [ + 0, + 3, + 5, + 6, + 9, + 10, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ], + [ + 0, + 3, + 5, + 6, + 9, + 10, + 12, + 18, + 19, + 20, + 21, + 24, + 26, + 29, + 31, + 32, + 33, + 38, + 39, + 41, + 43, + 44, + 46, + 48, + 49, + 50, + 51, + 57, + 59, + 61, + 63, + 64, + 65, + 70, + 71, + 73, + 74, + 77, + 78, + 80, + 81, + 84, + 85, + 89, + 91, + 93, + 95, + 98, + 99, + 102, + 103, + 104, + 106, + 108, + 110, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119 + ] + ], + [ + "B", + 303, + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 49, + 50, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 113, + 114, + 117, + 118 + ], + [ + 0, + 3, + 4, + 7, + 8, + 9, + 10, + 11, + 17, + 19, + 20, + 22, + 24, + 25, + 30, + 31, + 32, + 34, + 37, + 39, + 42, + 43, + 44, + 45, + 49, + 50, + 52, + 58, + 59, + 60, + 61, + 64, + 65, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 82, + 84, + 86, + 90, + 91, + 94, + 95, + 97, + 99, + 101, + 103, + 104, + 105, + 108, + 109, + 113, + 114, + 117, + 118 + ] + ], + [ + "B", + 311, + [ + 0, + 2, + 5, + 7, + 17, + 18, + 21, + 22, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 81, + 82, + 104, + 105, + 106, + 107 + ], + [ + 0, + 2, + 5, + 7, + 8, + 9, + 12, + 13, + 17, + 18, + 21, + 22, + 24, + 25, + 30, + 31, + 32, + 33, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 50, + 52, + 54, + 58, + 59, + 62, + 63, + 64, + 66, + 69, + 71, + 74, + 75, + 76, + 77, + 81, + 82, + 84, + 90, + 91, + 92, + 93, + 98, + 99, + 100, + 101, + 104, + 105, + 106, + 107, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 319, + [ + 0, + 2, + 4, + 6, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 41, + 42, + 45, + 46, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 80, + 81, + 82, + 83, + 105, + 106 + ], + [ + 0, + 2, + 4, + 6, + 8, + 10, + 12, + 14, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 26, + 29, + 31, + 32, + 34, + 37, + 39, + 41, + 42, + 45, + 46, + 48, + 49, + 52, + 53, + 57, + 59, + 60, + 62, + 64, + 66, + 69, + 71, + 73, + 75, + 76, + 78, + 80, + 81, + 82, + 83, + 89, + 91, + 92, + 94, + 97, + 99, + 100, + 102, + 105, + 106, + 108, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 327, + [ + 0, + 1, + 6, + 7, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 88, + 89, + 90, + 91, + 97, + 98 + ], + [ + 0, + 1, + 6, + 7, + 8, + 9, + 14, + 15, + 16, + 17, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 33, + 34, + 37, + 38, + 40, + 41, + 46, + 47, + 48, + 49, + 54, + 55, + 60, + 61, + 62, + 63, + 64, + 67, + 68, + 71, + 74, + 75, + 76, + 77, + 82, + 83, + 84, + 85, + 88, + 89, + 90, + 91, + 97, + 98, + 100, + 106, + 107, + 108, + 109, + 114, + 115, + 116, + 117 + ] + ], + [ + "B", + 335, + [ + 0, + 1, + 4, + 5, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 89, + 90, + 96, + 97, + 98, + 99 + ], + [ + 0, + 1, + 4, + 5, + 8, + 10, + 13, + 15, + 16, + 18, + 21, + 23, + 25, + 26, + 29, + 30, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 42, + 45, + 47, + 48, + 50, + 53, + 55, + 57, + 58, + 61, + 62, + 64, + 67, + 68, + 71, + 73, + 75, + 76, + 78, + 81, + 83, + 84, + 86, + 89, + 90, + 92, + 96, + 97, + 98, + 99, + 105, + 107, + 108, + 110, + 113, + 115, + 116, + 118 + ] + ], + [ + "B", + 343, + [ + 0, + 1, + 2, + 3, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 57, + 58, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103 + ], + [ + 0, + 1, + 2, + 3, + 8, + 11, + 12, + 15, + 16, + 19, + 20, + 23, + 25, + 26, + 29, + 30, + 32, + 35, + 36, + 39, + 41, + 42, + 45, + 46, + 49, + 50, + 53, + 54, + 57, + 58, + 60, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 75, + 76, + 79, + 80, + 83, + 84, + 87, + 89, + 90, + 93, + 94, + 96, + 99, + 100, + 103, + 105, + 106, + 109, + 110, + 113, + 114, + 117, + 118 + ] + ] + ] +} \ No newline at end of file diff --git a/research/e8-r740-replica32/data/word.json.gz b/research/e8-r740-replica32/data/word.json.gz new file mode 100644 index 0000000000..85390b07e4 Binary files /dev/null and b/research/e8-r740-replica32/data/word.json.gz differ diff --git a/research/e8-r740-replica32/parent436/EXPECTED.json b/research/e8-r740-replica32/parent436/EXPECTED.json new file mode 100644 index 0000000000..7f5f7f3f9d --- /dev/null +++ b/research/e8-r740-replica32/parent436/EXPECTED.json @@ -0,0 +1,45 @@ +{ + "note": "Exact values that verify.sh must reproduce. Rationals are on the 10^-18 grid of the hub's pricing; each c is the largest grid point admitted by both PR #315 moment engines (with the 1e-16 fallback), and the next grid point is rejected.", + "word": { + "R": 740, + "content_sha256": "d6ec8811541d6ab59a3bbbaaa15bccc8918b3b43b23d9f593198cfe90826fd20", + "local_histogram": {"1": 2355, "2": 884, "3": 489, "4": 425, "5": 62, "8": 9} + }, + "pr433": { + "bit_lower": "282564789736676592463/250000000000000000000000", + "kappa": "1128983115440183/1000000000000000000" + }, + "nine": { + "c": "565129579473353/500000000000000000", + "controls": { + "pr376": "1084538480613107/1000000000000000000", + "pr426": "1116714040089377/1000000000000000000" + }, + "kappa": { + "pr431": "1056975315151441/1000000000000000000", + "pr425": "524002754014103/500000000000000000", + "pr386": "998243154231047/1000000000000000000" + } + }, + "b4": { + "c": "1064525457834209/1000000000000000000", + "controls": { + "pr370": "249162322049641/250000000000000000", + "pr376": "255384852701747/250000000000000000", + "pr417": "1044063934627389/1000000000000000000" + }, + "kappa": { + "pr424": "1018509848057013/1000000000000000000", + "pr410": "508781072593909/500000000000000000", + "pr409": "508625250464133/500000000000000000", + "pr407": "7941615395831/7812500000000000" + } + }, + "b3": { + "c": "1058066102700151/1000000000000000000", + "controls": { + "pr376": "8128527708459/8000000000000000", + "pr426": "104575879789097/100000000000000000" + } + } +} diff --git a/research/e8-r740-replica32/parent436/LICENSE b/research/e8-r740-replica32/parent436/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/e8-r740-replica32/parent436/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/e8-r740-replica32/parent436/MANIFEST.sha256 b/research/e8-r740-replica32/parent436/MANIFEST.sha256 new file mode 100644 index 0000000000..399beb5da4 --- /dev/null +++ b/research/e8-r740-replica32/parent436/MANIFEST.sha256 @@ -0,0 +1,87 @@ +a9655e303cb2c40ce024443b27c0a810ffc24f1ee1e5b07eb19241fad399b5e2 EXPECTED.json +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE +eb9cb7eab03977930484fee70d0aea066803917a6304b1ad2644cfcc6bf2acd4 NOTICE.md +d737a3b77de97bdf67d2a140465be5b8886af6aa57516f78ad8f2839f3dae8cc README.md +352a68f0898535311c63cac879a52b686246ba80844f1a3cc2f3c3f6b1046b4d SOURCE-pr370.json +1608c15638f874243c3ad00bd6a08b30f0e9608de83002273819365ab300b0e7 SOURCE-pr376.json +c457c422d54645ad841c8528bf2efa6c253d1c134ee86c875b9b7d76d4f9520c SOURCE-pr381.json +bba849ed0a1af4d45a76ec734d5f0d07806da2b161f1b5ad8ea63cf2d64b5aa4 SOURCE-pr386.json +d9b7e606f09b840ed9fe10dc8c8250b4cab9bbe5d0cacb62864ca8366a28b2b1 SOURCE-pr417.json +a2c5e2f0e03b0dbcba4ca18282a4ff390a6a395f14411410cfff42d5281d0289 SOURCE-pr425.json +f884cc42793a3afd249ebee20985f61422e7b5baf7c1fcab5b990e1959f31697 SOURCE-pr426.json +71cd86e64217fc4db0199ae8e5ef65cb0cc2ed593e15f03bc1501d4b32fdeb66 SOURCE-pr431.json +f1181aa9f30dcc2e5df7e94738fa0c0cabe5f56b31c8eb843fa0a257da79ed91 SOURCE-pr433.json +cc47efc71334d7d41d6475c5dfc8080a278d3b694b335c6a9873dad4632d1f7e code/b4/kappa_b4.py +e68a81ef7981a90d613752003cd5cab5351e260f909b094f1668d8a4dfe480df code/bit/checkers/certify_bit_k.py +d1297f9052be4f2496e1ff2a77e4db2c0cdbd7d460d489b4c03e50bf317238ce code/bit/checkers/columns_h.cpp +1c344d18fcd494eeca93e259f10cafae7705780e6592f6dcb35b34752dab9bc2 code/bit/checkers/columns_k.cpp +d55d2b865d1c3d35e343e1a38c592b9172ed8e2596d1107e34d92e2a80c7d03f code/bit/checkers/cost.py +7e67dc75e63a11e38ac6d6615656c7cf6982e5a33dd404d04b967bf474cad02e code/bit/checkers/finite_k.py +646b7e8773d9c99376cb00627f109a97319e6d72b439ff513c39035c28c3f70f code/bit/checkers/geometry_k.py +223a5a07731fc315a90a3e48177796babc155c1d9985c7ae5017eff6af2a0608 code/bit/checkers/gram_frames.py +aaf127c04cb31c406e5b04a63f1ae89369fccde6d8fa7cdda1ed4f32dfc5de63 code/bit/checkers/json.hpp +6c1ef2b24e57781d6951c172a1024fc4300e6fd392c9d6672079a7806ab663b3 code/bit/checkers/legality_h.cpp +64255088821f601ede2c3006f08cb97c39a4fa10dbbeb93a8a71fcfa0e1d8d77 code/bit/checkers/tile_k.py +8a5999601f917dbb492bb9ae9a344611f18cc7cedc53dc3c76496a369e530eb3 code/bit/export_records.py +11bf9620ca9db16d52d9fe806b814fc9ec9a89c4d7645354d1861d96f6e805ad code/bit/independent/checkword.py +0ff65aace5da4b57d96235bf830f8f11969322e75134d498aeb70e9753ec6b0d code/bit/independent/mutate.py +b0e75d6550412a7be4017695e6b237392b611bb852ad8ff309d6682c9f166a4e code/bit/mutate_records.py +60fea6a9d6617a3f87376d3fda040642e9cb70e7c179015e03ede8d289f30357 code/bit/producer/compile.py +0e23d4282ceb75768e82631da016aaff9818aec53c7d75a6b2a28ee1b1160dc3 code/bit/producer/compile2.py +4f8a6843e83bc4f7055d7337f33dbe12ce499051f46bee1b81bbf6b34c652574 code/bit/producer/e8lib.py +ba71f77dd3e3c1c54f361c066cebe9faadbc78db46376046e7af625bf1de8c24 code/bit/producer/frames.py +0daf87599e9e48646b985ad87351c56c1b73cfc99cdf9eca081483846ddbfa90 code/bit/producer/fullword.py +359040fb432fd392472af6b8f5dca0234dd6c2be744a791df27ba62bc5da5175 code/bit/producer/ham1.py +fdf0af785ce697bd7f80b4e75f7163735f3b599d9dc42f652f0ffdbdf18ea8bf code/bit/producer/ham2.py +1256c54debe0a551da8e24896ab73ef0bd4a5233ff8e6fedf21a9e6301d6e6f3 code/bit/producer/params-r865.json +46c858e60ba0a117bf8227b864abf55e85ebee2d56a0dce64472b706499ac405 code/bit/producer/price.py +67f714e10a846e9cc62996342f825cd715055031e0b12591abdafd225717e195 code/bit/receipts_k.py +6c288f6f234b528c1a7c0a4adfb724e91e0fe6b18c8dffad96af3f973de1829a code/bit/regression/stage_cohort.py +5fe7174cd3a6580a74e4c1bf8fa7b426e8673f1c285603bf3076d4e758d70731 code/complex/code/bridged.py +48ac1d66a406ed72dd9192a19118776ba253f5c90e96185f5c1b98bb670a6361 code/nine/audit_g.py +97a5f7e9bf2202d170da17d5d17d876903641d7d24433115c27ea95b9fe65ccd code/nine/certify_g.py +b6722d990fba39ef41b3d658326bdde97c25b749a454bda2509fdffeabd31a86 code/nine/cited.py +27dd61574f1f6921238ff9f57c6fd536e6f0a0983138bc5c99aeb141d3ccc195 code/nine/compose433.py +36eeda3184bd009e89462b65c8725d10860c444f8da8f1f87e5f6e50120011ca code/nine/geometry.py +ff8d6be2432b79584dc2f2d2bdcd3cefede0d0730d1eecb0a6859dd527f5fce4 code/nine/global_word_g.py +bf97418a9aec7c3f55d04d4754e626f17f44aa2059ffd8acd7b315dcf9e89110 code/nine/regress386.py +aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098 code/pricing/base_two_moment.py +81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482 code/pricing/moment.py +c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c code/pricing/outer.py +98cd03bc9582e7bd0ab194c191ea8eea940539e510051443ab9fd3e572a364ab code/pricing/prime_witnesses.py +e28fd87d0e34a6f6f6f1fddb6c4891deac220662c954de855d7aa5a7f9cceca4 code/provenance.py +89df84f78064de12cd11f0f5f63aa9cad2385f5d18d2e4ade7409a5ae0435721 code/reuse/controls.py +901c61f0a8082fc87012f91372aafbb2a1b464be685426e32e77cc9f0e393958 code/reuse/ecost.py +972740a54e487b12aebc09f2fab5f2878835727cb4ad82fb1aa26a0f2d34f517 code/reuse/regen.py +d8530464a6e00e0a509cf8b392cae70579c8d0f636a0dc86677f5dee0863d34d code/reuse/retime.py +b802483c024d23c92df30f1a2d93838280e39dfa0bd7129b879d6cc0b84c80a4 code/reuse/reuse.py +ac49a9a7da44a1e8fbf468c6d8901b5712705d3caa9dd3e0cb89f056f0e67b2a code/tail/apply376.py +6811203fb7df1ac8a9eee3fbeca722de98dbc99077921fe77e0d452c760f0ffc code/tail/bootstrap.py +1cb286196c1530d06f50f0997febc5993b388f33464e295611b920ba30a24eeb code/tail/e8core.py +aee70c242a2f1d225528fabe2002e1564d1dc884797c07d28a831c7878ee9098 code/tail/engines/base_two_moment.py +81cbc864e106418fc7854322746f72180cb8110ff39f74450a3b8d55a82c1482 code/tail/engines/moment.py +c1ebb52163a7219504c728a5c2b098bf1e50bf20148a2879c5a74c3cadc7c03c code/tail/engines/outer.py +f8daa4982d865748fa9a3095b2cf4290f34e2c085d6d35673fd7171cab95623c data/bit/bitE8-r740.json.gz +1fb726ea3818fe0837cceb0dd22a71a0814f064e5e781628104610d6468e0e55 data/bit/bitE8-r865.json.gz +e7bb324150a5342076c9a268f69b83c65f817a7cfc1d14fda9558a9f7e486f0b data/bit/reuse-ledger.json +161663bf22c8e6a62e2dce194b326016c11e551f31691140ef34355e9b2e4e92 data/complex-b-433.json +1bdd6a649615ddb6bf7cdf24abd7bb1bbd6cc9284e2aa44f796786310d3e1a3b data/complex-b-b4.json +2815ca568c88edde758c31e756d0d07aa08233243f365bc111383d7f0c1c757a data/complex-b-nine.json +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 data/controls/LICENSE-pr426 +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 data/controls/pr376/LICENSE-pr376 +a83d4880579fb1f8cffb701d1d685c157b7fa14ef9d6642e42ff1e4f5a1b8c5c data/controls/pr376/frame-selection.json +0b300bab47cf0d69cbc7965bf01c2a27c96b97677ee651334470d8c968b603f1 data/controls/pr376/reuse-selection.json +59625785de14c3df03abe009cdc67c7918b8fcfa8dc5f468c3d363af0494cbb7 data/controls/pr386/AUDIT.json +6043a7486790ac8ca04dc67ddf5b57076e7c880b66eb456127c6cd933c77764a data/controls/pr386/COMBINED.json +55af2a11552c04f5a87268bc2d1798246297874e9e87b50e49773e91cc495c2d data/controls/pr386/GLOBAL.json +acc2b138ce16be1ff12570d3ec1634fe28cccaf259de797be0f62628fb37cccb data/controls/pr417-bitE8-nine-kernel.json.gz +46ea33ad1979cd14a2b686e8742792739312a07ab72945517c3809b647b31c42 data/controls/pr425/FINAL.json +bd3b84244528767b85d8d7fe423b155630b5c659e21e51563674b1dcb6305ad7 data/controls/pr426-bit-candidate.json.gz +2b77c882ac524adbbacc9775ee172c854ecd4027e36db59ed15a7d1b6b9e1ce5 data/controls/pr431/VALIDATION-LOCAL.json +f71580f22193726fb582eae604807ff70a7302265e001d9484a718e63bbe14c4 data/controls/pr433/CERTIFICATE.json +871fc75ce6fea2638f68553bcfe771d09297e987d59c123338227e29415851d1 data/params/params-r740.json +d840952ed60b4b460da83b04c4c8be3622b9bef04b62961c0d496c445f8b84d1 discovery/README.md +57de04a8ea7e2df8b783e02c454bb102edab48206db0a41a1f28d50e7f164441 discovery/search_params.py +420094be2af295eed03a983dd66debbbe9cfb78d8252859f4498a615a0074b99 portable-include/bits/stdc++.h +b9f87c1ec529679c19b8421a7a69b377b54b89949cfc5e1b1ed8c134bfab8917 requirements.txt +19bf483b109163b0ccc941f459e70c2e37d20c9c04e69e7c8eb98f329577b26c verify.sh diff --git a/research/e8-r740-replica32/parent436/NOTICE.md b/research/e8-r740-replica32/parent436/NOTICE.md new file mode 100644 index 0000000000..2c01026b8b --- /dev/null +++ b/research/e8-r740-replica32/parent436/NOTICE.md @@ -0,0 +1,51 @@ +# Notice + +Apache-2.0 (`LICENSE`). Prepared by eumemic with substantial Anthropic Claude assistance. + +## New in this package + +- `code/reuse/`: the elimination-reuse stage (`reuse.py`), the frame retiming (`retime.py`), their integer cost tables (`ecost.py`), the regeneration driver (`regen.py`) and the elimination-reuse negative controls (`controls.py`). +- `data/params/params-r740.json`: our parameters for PR #370's producer. `discovery/` holds the search that nominated them. +- `data/bit/bitE8-r740.json.gz` (the word) and `data/bit/reuse-ledger.json` (its inserted elimination gates). +- `code/nine/global_word_g.py`, `audit_g.py`, `certify_g.py`: generalisations of PR #386's `global_word.py`, `audit.py` and `certify.py` to any bitE8/1 word whose helpers start at frame 0 and end at the full frame. `regress386.py` checks them against PR #386's own receipts. `cited.py` binds the cited complex savings to the PRs' receipts. `compose433.py` ports PR #433's bit pricing, finite invoice and tail. +- `code/b4/kappa_b4.py`, `code/provenance.py`, `verify.sh`, `EXPECTED.json`, `data/complex-b-*.json`, `.github/workflows/e8-bit-elimination-reuse.yml`. + +## Vendored, byte-identical (git blob ids in `SOURCE-pr*.json`, checked by `code/provenance.py`) + +- **PR #370 (Dylan Crow / utcorvusvolat-dotcom, with Anthropic Claude assistance), commit b7fe9cd:** + - the producer `code/bit/producer/`; + - the independent checker and its controls `code/bit/independent/`; + - the record exporter and the record-level controls; + - PR #266's official cohort checkers as generalised there (`legality_h.cpp`, `columns_h.cpp`, NCOPY); + - `gram_frames.py`, `stage_cohort.py`; + - PR #315's engines (`code/pricing/`, DreamingOfClouds); + - nlohmann/json (`json.hpp`, MIT licence in its header); + - the E8 bit word `data/bit/bitE8-r865.json.gz`; + - `LICENSE`. +- **PR #381 (DaysSky, assisted with Claude), commit 00765b2:** the B_K checkers `columns_k.cpp`, `geometry_k.py`, `tile_k.py`, `certify_bit_k.py`, `finite_k.py`, `cost.py`, `receipts_k.py`, and PR #363's `bridged.py` (DaysSky). +- **PR #386 (Zhihao Chen / jacklightChen, with OpenAI Codex assistance), commit dd11cf8:** + - `geometry.py` (compressed nine-stage bit geometry, unchanged); + - the portable `bits/stdc++.h`; + - the validation receipts `GLOBAL.json`, `AUDIT.json` and `COMBINED.json`, used only as regression references. +- **PR #417 (Chafik Boukhalfa / chafreaky, with Anthropic Claude assistance), commit 3f681fb:** + - `bootstrap.py` (their reimplementation of rohanarun's PR #392 refined pricing tail), `e8core.py` and its copies of PR #315's engines; + - `apply376.py`; + - the final kernel word, used as a B_4 control. +- **PR #376 (applecrusher, with OpenAI Codex assistance), commit 92328da:** `frame-selection.json`, `reuse-selection.json` and `LICENSE-pr376`, as vendored in PR #417. +- **PR #426 (ai-nanachi, with OpenAI Codex assistance), commit 88d5525:** the R767 bit word, used only as a priced comparison and B_3 control, and `LICENSE-pr426`. +- **PR #425 (Zhihao Chen / jacklightChen, with OpenAI Codex assistance), commit e11ccea:** the validation receipt `FINAL.json`, which states the cited b and κ. +- **PR #431 (Rohan Arun / rohanarun, with OpenAI Codex assistance; draft), commit db4f465:** the validation receipt `VALIDATION-LOCAL.json`, which states the cited b and κ. +- **PR #433 (icekylinx, with OpenAI Codex assistance), commit 6d92445:** `CERTIFICATE.json`, which states the cited complex b, the R758 bit c and κ. `code/nine/compose433.py` is our port of #433's `code/bit_price.py` and `code/combined.py` arithmetic. No #433 code is vendored or run. + +## Cited, not rebuilt + +Complex coarse savings in `data/complex-b-nine.json` and `data/complex-b-b4.json`, each with its PR, commit and receipt (git blob): + +- compressed nine-stage layout: + - PR #433 (icekylinx; `data/complex-b-433.json`, bound to its certificate by `compose433.py`); + - PR #386 (#377's component), PR #425 (jacklightChen) and PR #431 (rohanarun, draft), bound to their receipts by `code/nine/cited.py`. +- B_4: PR #424, #407 (chafreaky), #410 (eumemic) and #409 (rohanarun). + +No complex construction is rebuilt here. + +The E8 label family follows Jacob Sussman's introduction of E8 for the complex supplier. diff --git a/research/e8-r740-replica32/parent436/README.md b/research/e8-r740-replica32/parent436/README.md new file mode 100644 index 0000000000..5ddb576f02 --- /dev/null +++ b/research/e8-r740-replica32/parent436/README.md @@ -0,0 +1,182 @@ +κ = 1128983115440183/10¹⁸ (conditional; bit-bound) with PR #433's complex supplier + +# An E8 bit word with 740 helpers: dead helper slots reused through F₂ relations + +This package is a bit-side supplier: an E8 bit word in PR #370's format (h = 8, v = 120, 9 retained totals) with **R = 740 helpers**. For comparison, #370 has 865, #376 has 822, #426 has 767 and #433 has 758. In the compressed nine-stage layout of PR #386 (m = 64), which #425, #431 and #433 use, its coarse saving is + +**c = 282564789736676592463/(2.5·10²³) ≈ 1.130259158946706·10⁻³** + +on PR #433's 10⁻²⁴ grid. On #386's 10⁻¹⁸ grid it is 565129579473353/(5·10¹⁷). + +PR #433 (icekylinx) pairs its split-centre complex supplier, b = 1183986549206329/10¹⁸ ≈ 1.183987·10⁻³, with a 758-helper bit word, c = 1.122122700265139·10⁻³. #433's bit side binds, at κ = 1.120864952258278·10⁻³. With this word in place of R758, through #433's own bit engine, finite invoice and six-level tail: + +**κ = 1128983115440183/10¹⁸ ≈ 1.128983115440183·10⁻³**, bit-bound, **+0.7243 % over #433**. + +The bit c is +0.7251 % over #433's R758. As controls, the same code reproduces #433's bit c from #433's stated R758 profile, and #433's κ from #433's (c, b), exactly. The complex side still has 4.75 % of headroom over this c. + +## Bit coarse savings + +| bit word | R | compressed nine-stage (#386 layout, m = 64) | B₄ unsplit (#381 layout, m = 72) | B₃ unsplit (m = 56) | +| --- | ---: | ---: | ---: | ---: | +| PR #370 (`bitE8-r865`) | 865 | **1057833103534317/10¹⁸** (= #386, #425, #431) | **249162322049641/(2.5·10¹⁷)** (= #381) | 9.912261·10⁻⁴ | +| PR #376 (R822) | 822 | 1084538480613107/10¹⁸ | **255384852701747/(2.5·10¹⁷)** (= #390 … #424) | **8128527708459/(8·10¹⁵)** (= #376, #389 baseline) | +| PR #417 (R822 + shared-donor kernel) | 822 | — (entrance residuals do not fill #386's rank-8 slots) | **1044063934627389/10¹⁸** (= #417) | 1.037508·10⁻³ | +| PR #426 (R767, clean-reset reuse) | 767 | 1116714040089377/10¹⁸ | 1.051689·10⁻³ | **104575879789097/10¹⁷** (= #426) | +| PR #433 (R758: #426 + source-basis totals) | 758 | **561061350132569610283/(5·10²³)** (= #433, 10⁻²⁴ grid) | — | — | +| **this word** | **740** | **282564789736676592463/(2.5·10²³) ≈ 1.130259·10⁻³** | **1064525457834209/10¹⁸ ≈ 1.064525·10⁻³** | **1058066102700151/10¹⁸ ≈ 1.058066·10⁻³** | + +Compressed nine-stage values are on #386's 10⁻¹⁸ grid, except #433's and this word's, which are on #433's 10⁻²⁴ grid. On the 10⁻¹⁸ grid this word is 565129579473353/(5·10¹⁷). + +Bold entries in the control rows are the values the cited PRs publish. `verify.sh` reproduces each exactly with the same code that prices this word. Most come from the PR's own word. #433's R758 value comes from the R758 profile stated in #433, because the package does not ship that word. The other entries are computed here and are not published by those PRs. + +This word compared with the best published bit c in each layout: + +| layout | best published bit c | this word | +| --- | --- | ---: | +| compressed nine-stage | #433's R758 | +0.725 % | +| B₄ | #417 | +1.960 % | +| B₃ | #426 | +1.177 % | + +Against #426's R767 word priced in the same layouts, this word is +1.213 % (compressed nine-stage) and +1.221 % (B₄). The five-stage saving (PR #370's independent checker) is 9.63227·10⁻⁴. + +## κ with cited complex suppliers + +| complex supplier (cited, not rebuilt) | layout and tail | b | κ with this word | κ as published | +| --- | --- | ---: | ---: | ---: | +| **PR #433 (icekylinx)** | compressed nine-stage; #433's tail | 1183986549206329/10¹⁸ | **1128983115440183/10¹⁸** (bit-bound) | 560432476129139/(5·10¹⁷) (bit-bound, R758) | +| PR #431 (rohanarun, draft) | compressed nine-stage; #386's tail | 529046848168159/(5·10¹⁷) | 1056975315151441/10¹⁸ (complex-bound) | 1056715272872389/10¹⁸ at db4f465 (bit-bound, #370 word); 1056975315151441/10¹⁸ at 71c5988 (with #376's retimed bit word) | +| PR #425 (jacklightChen) | compressed nine-stage; #386's tail | 52455248902029/(5·10¹⁶) | 524002754014103/(5·10¹⁷) | same | +| PR #386 (#377's component) | compressed nine-stage; #386's tail | 999240641319551/10¹⁸ | 998243154231047/10¹⁸ | same | +| PR #424 (chafreaky) | B₄; #392's refined tail | 254887067002137341481/(2.5·10²³) | 1018509848057013/10¹⁸ | same | +| PR #410, #409, #407 | B₄; #392's refined tail | as cited by #417 | as published | same | + +All κ values are on the 10⁻¹⁸ grid and satisfy PR #315's 47 strict outer inequalities. The next grid point is rejected. The three tails: + +- **#433's tail** (`compose433.py`, ported from #433's `bit_price.py` and `combined.py`): + - c is the 10⁻²⁴-grid lower endpoint of PR #315's `certify`, with the 10⁻¹⁶ bad-branch allowance, and is checked by the second engine; + - η = β = 10⁻¹⁸, seed min(c, (1 − β)b) − 10⁻²⁴, six bootstrap levels; + - zero η, zero β and unit β are rejected as well; + - the finite invoice charges the prefix at the next multiple of 64 bits: here 123 bits, charged 128. +- **#386's tail** (#386, #425, #431): three bootstrap steps, η = 10⁻¹², β = 10⁻⁹. The seed is strictly below (1 − β) times both suppliers (#431's policy). +- **B₄:** #392's refined tail, as reimplemented in PR #417's `bootstrap.refine`. + +With #431's complex supplier the complex side binds. Every bit word above #431's b gives that κ, including #376's and #426's words in this layout. #431's later head uses #376's retimed word. The PR #370 word reproduces #431's κ at db4f465, and #425's and #386's κ, exactly. + +## The word + +1. **PR #370's producer, unchanged, with new parameters.** `data/params/params-r740.json` differs from #370's `params-r865.json` in 67 of 520 entries. It was found by a local search with the reuse pass in the objective (`discovery/`). The producer gives a word with R = 863. +2. **Elimination reuse** (`code/reuse/reuse.py`). + - A helper is dead after its last gate in phases A and B. It still holds a leftover x-content: an F₂ sum of source lines, at its last frame. + - Before a later helper is born at frame F, the pass looks for an F₂ relation content(r₀) = Σ_{q∈S} content(q) among dead slots whose frames lie inside F. It emits r₀ += S at the join G of their frames (G ⊆ F). r₀ then holds no x-content and hosts the new helper. + - The relation is found by Gaussian elimination over F₂. The cheapest relation with |S| ≤ 3 replaces it when one exists, scored by the extra climbing of r₀ and of the eliminators. + - The 9 retained totals take dead slots too. The slot's leftover x-lines are read from the sources at the full frame. + - The dirt compensation D and the cleanup C are rebuilt as in #370's `fullword.py`. + - **114 helper slots and 9 totals are reused: R 863 → 740.** + - **Prior and concurrent work.** + - #376 reused helper lifetimes by aliasing: 43 reuses. + - #426 (ai-nanachi, posted first) uses the same mechanism as this pass. It zeroes a retired helper's x-content with exact two- or three-parent "clean resets" before reusing the slot, rebuilds D and C, and keeps the totals protected. It makes 55 resets on #376's R822 word (R767). + - This pass was developed independently. It differs in four ways: it searches every dead slot inside the birth frame by elimination, uses cost-scored relations with up to three eliminators, puts the totals on dead slots as well, and starts from a re-parameterised #370 producer word (R863). + - **#433's source-basis trick does not apply here.** The trick computes the nine retained sums in source rows, which removes #426's nine dedicated total helpers (R767 → 758). In this word the totals already sit on slots of earlier helpers, and no helper is born after them, so the trick would remove no register. +3. **Retiming** (`code/reuse/retime.py`, the idea of #389). Each gate moves to its lowest or highest legal frame when that lowers Σ r ln(64/r) over its registers' adjacent steps: 37 gate moves. + +All search choices use integer costs computed with Python's correctly rounded `decimal` logarithm, so the word is the same on every platform. One invocation's local histogram is {1: 2355, 2: 884, 3: 489, 4: 425, 5: 62, 8: 9}: 4,224 blocks, of which 9 are copies. Gates D/A/B/C: 120/1873/472/1873; 944 frames. + +## Verify + + BOOST_INCLUDE=/usr/include bash research/e8-bit-elimination-reuse/verify.sh /fresh/output/dir + bash research/e8-bit-elimination-reuse/verify.sh --quick /fresh/output/dir + +Requirements: Python 3.11+ with numpy, mpmath and sympy (`requirements.txt`); a C++17 compiler (`CXX`); Boost headers (`BOOST_INCLUDE`). `--quick` skips the regressions on #370's word, the comparison words in the compressed nine-stage layout, and the B₃ rows. The workflow `.github/workflows/e8-bit-elimination-reuse.yml` runs both modes on Python 3.12 and 3.14. + +0. **Manifest and provenance.** `MANIFEST.sha256`. The git blob id of all 52 vendored files is checked against `SOURCE-pr*.json`: #370, #376, #381, #386, #417, #425, #426, #431 and #433. +1. **The word from pinned inputs.** + - Control: #370's producer regenerates #370's word from its own parameters. + - `regen.py` rebuilds this word from our parameters (producer → reuse → retiming). It must equal the shipped word, and the reuse ledger must match. + - #376's R822 word is rebuilt from #370's word and #376's two witnesses with #417's `apply376.py`, as a control word. +2. **One invocation, exact.** + - #370's independent checker: the 120 E8 root lines; nested frames; common gate frames; F₂ on all 980 columns, dirty helpers included; Gram determinants on 935 used frames (prime 2 only); the five-stage root. + - #370's 6 word-level controls, rejected. + - 6 elimination-reuse controls, rejected by the same checker: drop an elimination gate, drop one eliminator, drop one x-line read of a total's undo, lower an elimination below an eliminator's frame, remove all 123 elimination gates, move a total's undo gate to frame 0. +3. **Official checkers.** + - PR #266's cohort legality, as generalised in #370 (NCOPY = 9): 19,527 records, 15,294 common-frame ADDs. + - Five-stage formal columns: 1,220 columns, prefix payload 64 bits < 104. + - #381's B₄ formal columns: all 1,700 physical columns over F₂ through 9 invocations, 18 twin bridges and the terminal exchange. All 18 omitted-bridge controls are rejected. + - #370's 6 record-level controls are rejected, including the unmodified copy count NCOPY = 8. +4. **Nondegeneracy.** `gram_frames.py`: all 944 frames positive definite under the E8 form. Prime witnesses are valid; the only prime is 2. +5. **Retained totals.** 9 COPY/ERASE episodes at the full frame (rank 8). +6. **Compressed nine-stage layout (#386).** + - #386's `geometry.py`, unchanged: 120 port routes, 1,080 route checks, at most 77 route factors with denominators {1, 2, 4}, and the bank slots. It is bound to this word by the equality of the 120 label vectors. + - `global_word_g.py`, our generalisation of #386's `global_word.py`: + - both reflected local streams replay all 980 columns; + - the scalar replay over 9 stages covers 7,620 independent columns; + - 72 local invocations, 1,405,944 emitted events and 53,280 bank assignments (6,660 banks of 8 whole rank-8 slots, no padding); + - live stock 64v + 9R = 14,340; + - deficit 2,496 = 8(8v − 9·72); + - max child 42 of 64, so two-level halving; + - prefix bound 2¹⁸·776⁵·17,724⁴ of 123 bits, under #386's 192-bit allowance. + - `audit_g.py`: 944 exact rational projectors and 3,263 nested pairs. #386's 8 template mutations are rejected. + - `cited.py`: each cited complex b, and that PR's own κ, must equal the fields of the PR's receipt. The receipts are #386's `COMBINED.json`, #425's `FINAL.json` and #431's `VALIDATION-LOCAL.json`, vendored and pinned by blob id. + - `certify_g.py`: both PR #315 engines with the 10⁻¹⁶ fallback admit c and reject c + 10⁻¹⁸. The finite coefficient has 123 bits; the two-level coefficient has 282 bits, below 2⁵¹²; the row coefficient is 18,355 < 20,161. κ is then computed with each cited complex b. + - `compose433.py`: PR #433's bit engine, finite invoice and six-level tail, ported from #433's `bit_price.py` and `combined.py`. + - Controls: #433's stated R758 profile prices to #433's bit c, and #433's (c, b) gives #433's κ. Both are bound to #433's `CERTIFICATE.json`, which is vendored and pinned. + - Then this word's c, invoice and κ with #433's complex b: next grid point, zero η, zero β and unit β are rejected. + - **Regression:** on #370's word the same three scripts reproduce #386's `GLOBAL.json`, `AUDIT.json` and the bit, finite and κ fields of `COMBINED.json`, field for field. They also reproduce #425's and #431's κ. + - **Comparison:** the same chain prices #376's word (rebuilt in step 1) and #426's word in this layout. Each gives the same κ with #431, since each has c > b. +7. **B₄ (#381's layout, unsplit).** + - #381's `geometry_k.py` on this word: PR234 routes on 9 blocks, idle gap ranks equal to `bridged.py`, the 9-window entrance completion, max child 50 (halving degree 2). + - `tile_k.py`: 740 banks of 9 rank-8 residuals with T = 9 replicas. + - `certify_bit_k.py` prices this word and the #370, #376 and #417 controls. + - `receipts_k.py` and `finite_k.py`: the finite bill at m = 72. The coefficient has 48 bits, below 2⁸⁰; the payload prefix is 64 bits; the internal row coefficient is 10,370. + - `kappa_b4.py` computes κ with the cited B₄ suppliers. + - **Regression:** `columns_k` at K = 2 gives the five-stage `columns_h` receipt. +8. **B₃ (informational).** Formal columns at K = 3 (1,460 columns), banks with T = 7, and prices with the #376 and #426 controls. +9. **Summary** against `EXPECTED.json`. + +Locally, the C++ checkers were built against a 128-bit, overflow-checked stand-in for `boost::multiprecision::cpp_int`, because the preparing machine has no Boost. CI compiles them against libboost-dev. + +## Retained assumptions and open obligations + +- **Everything PR #370 admits:** + - 9 retained totals at h = 8; + - PR234's banks for a non-paired-cube family; + - the inherited all-size weighted bit compiler, prime/tape/precision and analytic interfaces. +- **The compressed nine-stage layout is PR #386's:** + - its window, bank and route arguments (PROOF.txt there); + - two-level halving (max child 42 of 64); + - its finite charges. + Our scripts check this word against those arguments' finite conditions; they add no new argument. +- **B₄ is PR #381's:** halving degree two on the bit side (#375, #381); no Lean proof of B_K. +- **The complex suppliers are cited by pinned reference and not rebuilt:** + - the headline κ depends on #433's split-centre complex supplier (its PROOF.md), which builds on #425's written scalar-interface extension; + - #433's complex b, its six-level tail (#392's refined form, η = β = 10⁻¹⁸) and all its obligations remain #433's. + - #431 (a draft) and the other cited suppliers are listed only for comparison. +- **#433's bit finite charge is adopted for the headline:** the prefix is charged at the next multiple of 64 bits (here 123 bits, charged 128, inside #386's 192-bit allowance), and the two-level coefficient is below 2⁵¹² (here 282 bits). +- This is a conditional finite construction, not a formal verification of the multiplication theorem. No Lean proof is claimed. +- **Not measured:** stacking #417's shared-donor kernel on this word. It applies to B_K banks. It does not apply to #386's whole-block banks, whose slots need rank-8 residuals. + +## Credits + +- **Dylan Crow (utcorvusvolat-dotcom), PR #370:** the E8 bit word format, the producer whose output we reuse, the independent checker and the generalised official checkers. +- **applecrusher, PR #376:** helper-lifetime reuse, which the elimination reuse generalises. +- **ai-nanachi:** + - PR #389: the frame-retiming idea; + - PR #426: clean-reset reuse, the same slot-reuse mechanism, published first (developed independently here), and its R767 word as a comparison. +- **icekylinx, PR #433:** + - the split-centre complex supplier that the headline κ uses; + - its bit engine, finite invoice and six-level tail, ported here; + - the R758 comparison. +- **DaysSky:** + - PR #381: the B₄ layout and checkers; + - PR #375: halving degree two; + - PR #363: B_K and `bridged.py`. +- **Zhihao Chen (jacklightChen):** + - PR #386: the compressed nine-stage bit layout and its checkers, generalised here; + - PR #425: the mutable-basis complex word. +- **Chafik Boukhalfa (chafreaky), PR #417:** the B₄ pricing tail port, the #376 rebuild and the kernel-word control. +- **Rohan Arun (rohanarun):** + - PR #431: a cited complex supplier and the two-supplier seed policy; + - PR #392: the refined pricing tail. +- **Jacob Sussman:** the E8 family and the bridged word. +- **PR #266 and PR #315 (DreamingOfClouds) lineage:** the official checkers, the moment engines and the outer assembly. + +Prepared by eumemic with substantial Anthropic Claude assistance. Apache-2.0 (`LICENSE`); see `NOTICE.md`. diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr370.json b/research/e8-r740-replica32/parent436/SOURCE-pr370.json new file mode 100644 index 0000000000..db86b22e15 --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr370.json @@ -0,0 +1,105 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/370", + "head_repository": "utcorvusvolat-dotcom/e8-bit-kappa-8.7548e-4", + "commit": "b7fe9cdf2da009c947ff6b334c562bc190b30373", + "note": "PR #370 (Dylan Crow / utcorvusvolat-dotcom): E8 bit word, producer, independent checker, generalised official checkers, PR #315 engines as vendored there. Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "LICENSE": { + "source_path": "research/e8-bit/LICENSE", + "blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64" + }, + "code/bit/producer/compile.py": { + "source_path": "research/e8-bit/code/bit/producer/compile.py", + "blob": "86b12507ef86308336833a208a989d56072096d1" + }, + "code/bit/producer/compile2.py": { + "source_path": "research/e8-bit/code/bit/producer/compile2.py", + "blob": "a7bdfdfbe417c793b2a8c515f5432bdd10472259" + }, + "code/bit/producer/e8lib.py": { + "source_path": "research/e8-bit/code/bit/producer/e8lib.py", + "blob": "8464b956f6a5aa5061695990a14b7a385d370c2e" + }, + "code/bit/producer/frames.py": { + "source_path": "research/e8-bit/code/bit/producer/frames.py", + "blob": "b28c3b2413b9767e7ffe0a8b2db93836f3455494" + }, + "code/bit/producer/fullword.py": { + "source_path": "research/e8-bit/code/bit/producer/fullword.py", + "blob": "104f01b7803481b623809bc8a57682d28f09b5c3" + }, + "code/bit/producer/ham1.py": { + "source_path": "research/e8-bit/code/bit/producer/ham1.py", + "blob": "8086649a5f71c16698db7059bbada7187d781b56" + }, + "code/bit/producer/ham2.py": { + "source_path": "research/e8-bit/code/bit/producer/ham2.py", + "blob": "842f76b245a1bfb4150c53a853f6f472511f5a2f" + }, + "code/bit/producer/price.py": { + "source_path": "research/e8-bit/code/bit/producer/price.py", + "blob": "9014d97d519eea1f8c96e4bfc75afa0febd5903f" + }, + "code/bit/producer/params-r865.json": { + "source_path": "research/e8-bit/code/bit/producer/params-r865.json", + "blob": "110b4d94d884f03d4d37be22672ab27d836f1275" + }, + "code/bit/independent/checkword.py": { + "source_path": "research/e8-bit/code/bit/independent/checkword.py", + "blob": "da4e0fe05067184d4dab1e130ae1384c1fa983f5" + }, + "code/bit/independent/mutate.py": { + "source_path": "research/e8-bit/code/bit/independent/mutate.py", + "blob": "eba592fd468e0d7e7e5100fe99da6eb548c5906b" + }, + "code/bit/checkers/legality_h.cpp": { + "source_path": "research/e8-bit/code/bit/checkers/legality_h.cpp", + "blob": "cb1233c7e96b1aa8bbf4d2e4165d75ab0dca64b9" + }, + "code/bit/checkers/columns_h.cpp": { + "source_path": "research/e8-bit/code/bit/checkers/columns_h.cpp", + "blob": "00c5a3a5d81d083582f60f33dd2e7bea5049c37f" + }, + "code/bit/checkers/json.hpp": { + "source_path": "research/e8-bit/code/bit/checkers/json.hpp", + "blob": "82d69f7c5d044c9887c96b90c97f5639083ecd14" + }, + "code/bit/checkers/gram_frames.py": { + "source_path": "research/e8-bit/code/bit/checkers/gram_frames.py", + "blob": "b740d47295c02692260d7cc01874a49fe48f78ab" + }, + "code/bit/export_records.py": { + "source_path": "research/e8-bit/code/bit/export_records.py", + "blob": "3632d370486a02f5456f7643ced03f8c925b2350" + }, + "code/bit/mutate_records.py": { + "source_path": "research/e8-bit/code/bit/mutate_records.py", + "blob": "6794516f665d36eac189894e350a5ad01113cb4c" + }, + "code/bit/regression/stage_cohort.py": { + "source_path": "research/e8-bit/code/bit/regression/stage_cohort.py", + "blob": "f6d7afe3e623208c4207b6a683a1e3e49249e31c" + }, + "code/pricing/moment.py": { + "source_path": "research/e8-bit/code/pricing/moment.py", + "blob": "7d697cb45203fe72d97037403d6da41f71f3b7fd" + }, + "code/pricing/base_two_moment.py": { + "source_path": "research/e8-bit/code/pricing/base_two_moment.py", + "blob": "14a90fa0e788217856f070382c9e61bd7c603c61" + }, + "code/pricing/outer.py": { + "source_path": "research/e8-bit/code/pricing/outer.py", + "blob": "43007488ad2c43187c77cc6798beff8b1cd76ad2" + }, + "code/pricing/prime_witnesses.py": { + "source_path": "research/e8-bit/code/pricing/prime_witnesses.py", + "blob": "7f16d930302ae879c562dd58e085d9747fcac077" + }, + "data/bit/bitE8-r865.json.gz": { + "source_path": "research/e8-bit/data/bit/bitE8-r865.json.gz", + "blob": "8bec1751f7e33c3a1e4673ef5dbc34d6f205321e" + } + } +} diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr376.json b/research/e8-r740-replica32/parent436/SOURCE-pr376.json new file mode 100644 index 0000000000..818f17fb6a --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr376.json @@ -0,0 +1,21 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/376", + "head_repository": "applecrusher/integer-mult-bounds", + "commit": "92328da595bc688146c79ab8308f0d2012bb491e", + "note": "PR #376 (applecrusher): frame and helper-reuse witnesses of the R822 word (here as vendored by PR #417, byte-identical). Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "data/controls/pr376/frame-selection.json": { + "source_path": "research/e8-bit-helper-reuse/frame-selection.json", + "blob": "647b34368f3f0c7d228c70fa335af872e7946beb" + }, + "data/controls/pr376/reuse-selection.json": { + "source_path": "research/e8-bit-helper-reuse/reuse-selection.json", + "blob": "a6954dc65f28137ad16d015b42c40dbbde0bd66f" + }, + "data/controls/pr376/LICENSE-pr376": { + "source_path": "research/e8-bit-helper-reuse/LICENSE", + "blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64" + } + } +} diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr381.json b/research/e8-r740-replica32/parent436/SOURCE-pr381.json new file mode 100644 index 0000000000..042a26c7c2 --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr381.json @@ -0,0 +1,41 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/381", + "head_repository": "DaysSky/integer-mult-bounds", + "commit": "00765b291d0f924f337298eb1e2930cb0878b95e", + "note": "PR #381 (DaysSky): B_K checkers (formal columns, PR234 geometry, banks, price, finite bill) and PR #363's bridged.py. Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "code/bit/checkers/columns_k.cpp": { + "source_path": "research/e8-nine-stage-kappa/code/bit/checkers/columns_k.cpp", + "blob": "42bb232fbec4de703e70cc13dc2f39a3b43a3a01" + }, + "code/bit/checkers/geometry_k.py": { + "source_path": "research/e8-nine-stage-kappa/code/bit/checkers/geometry_k.py", + "blob": "2a052980816d9b56b33c5e41132bb7f86286462b" + }, + "code/bit/checkers/tile_k.py": { + "source_path": "research/e8-nine-stage-kappa/code/bit/checkers/tile_k.py", + "blob": "a4635e6681c2f1521b44f24364cc457d304cb077" + }, + "code/bit/checkers/certify_bit_k.py": { + "source_path": "research/e8-nine-stage-kappa/code/bit/checkers/certify_bit_k.py", + "blob": "37ce2ee2b412b3b97a397159f48b912ef893b014" + }, + "code/bit/checkers/finite_k.py": { + "source_path": "research/e8-nine-stage-kappa/code/bit/checkers/finite_k.py", + "blob": "8781815ee6ee663edc0e0afdf1380186594ec913" + }, + "code/bit/checkers/cost.py": { + "source_path": "research/e8-nine-stage-kappa/code/bit/checkers/cost.py", + "blob": "677584c1c6b0e959c19f58521b68d4b3e847f97e" + }, + "code/bit/receipts_k.py": { + "source_path": "research/e8-nine-stage-kappa/code/bit/receipts_k.py", + "blob": "428261488b4af028fd04df4f84eead1dad79a389" + }, + "code/complex/code/bridged.py": { + "source_path": "research/e8-nine-stage-kappa/code/complex/code/bridged.py", + "blob": "626a28614b07066528fd5f189d87cffa5015ac60" + } + } +} diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr386.json b/research/e8-r740-replica32/parent436/SOURCE-pr386.json new file mode 100644 index 0000000000..ac24e5d262 --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr386.json @@ -0,0 +1,29 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/386", + "head_repository": "jacklightChen/integer-mult-bounds", + "commit": "dd11cf8069554f0333afde398f12a56c3a7c29dd", + "note": "PR #386 (Zhihao Chen / jacklightChen): compressed nine-stage bit geometry (unchanged), portable header, and the validation receipts used as regression references. Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "code/nine/geometry.py": { + "source_path": "research/e8-bit-complex-nine/geometry.py", + "blob": "91594e0223e8fac49162b5aef834ffaa8e94a254" + }, + "portable-include/bits/stdc++.h": { + "source_path": "research/e8-bit-complex-nine/portable-include/bits/stdc++.h", + "blob": "fc5664e929d9a81d9b4926bee049a93330be86ec" + }, + "data/controls/pr386/GLOBAL.json": { + "source_path": "research/e8-bit-complex-nine-validation/GLOBAL.json", + "blob": "21bc6dcc7bbefedcd3064485d0e82c95e585044c" + }, + "data/controls/pr386/AUDIT.json": { + "source_path": "research/e8-bit-complex-nine-validation/AUDIT.json", + "blob": "698e827ae87ae9db47fd30cf69537176276cff4e" + }, + "data/controls/pr386/COMBINED.json": { + "source_path": "research/e8-bit-complex-nine-validation/COMBINED.json", + "blob": "8d6e3f22667fa0f6fa1a5495223e87f90a4cd103" + } + } +} diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr417.json b/research/e8-r740-replica32/parent436/SOURCE-pr417.json new file mode 100644 index 0000000000..33f0ae053c --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr417.json @@ -0,0 +1,49 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/417", + "head_repository": "chafreaky/integer-mult-bounds", + "commit": "3f681fb571036ca4a267570318260b0d083f7b9d", + "note": "PR #417 (Chafik Boukhalfa / chafreaky): refined pricing tail (bootstrap.refine), its engine module and PR #315 engine copies, PR #376 rebuild (apply376.py), the vendored PR #376 witnesses, and the final kernel word used as a B_4 control. Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "code/tail/e8core.py": { + "source_path": "research/e8-kernel-bit-nine/code/e8core.py", + "blob": "78983b368715e89fe8524a6dd2c13585d2b5394e" + }, + "code/tail/bootstrap.py": { + "source_path": "research/e8-kernel-bit-nine/code/bootstrap.py", + "blob": "1bc17e768259c342fb8b94b919bfeaea10304153" + }, + "code/tail/apply376.py": { + "source_path": "research/e8-kernel-bit-nine/code/apply376.py", + "blob": "c401a84d8f549e0752464ab8313ce648bb4d14fa" + }, + "code/tail/engines/moment.py": { + "source_path": "research/e8-kernel-bit-nine/code/engines/moment.py", + "blob": "7d697cb45203fe72d97037403d6da41f71f3b7fd" + }, + "code/tail/engines/base_two_moment.py": { + "source_path": "research/e8-kernel-bit-nine/code/engines/base_two_moment.py", + "blob": "14a90fa0e788217856f070382c9e61bd7c603c61" + }, + "code/tail/engines/outer.py": { + "source_path": "research/e8-kernel-bit-nine/code/engines/outer.py", + "blob": "43007488ad2c43187c77cc6798beff8b1cd76ad2" + }, + "data/controls/pr376/frame-selection.json": { + "source_path": "research/e8-kernel-bit-nine/data/pr376/frame-selection.json", + "blob": "647b34368f3f0c7d228c70fa335af872e7946beb" + }, + "data/controls/pr376/reuse-selection.json": { + "source_path": "research/e8-kernel-bit-nine/data/pr376/reuse-selection.json", + "blob": "a6954dc65f28137ad16d015b42c40dbbde0bd66f" + }, + "data/controls/pr376/LICENSE-pr376": { + "source_path": "research/e8-kernel-bit-nine/data/pr376/LICENSE-pr376", + "blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64" + }, + "data/controls/pr417-bitE8-nine-kernel.json.gz": { + "source_path": "research/e8-kernel-bit-nine/data/final/bitE8-nine-kernel.json.gz", + "blob": "572172b8148538d1937b9f7fa7f3939755008a8c" + } + } +} diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr425.json b/research/e8-r740-replica32/parent436/SOURCE-pr425.json new file mode 100644 index 0000000000..8d9c976b02 --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr425.json @@ -0,0 +1,13 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/425", + "head_repository": "jacklightChen/integer-mult-bounds", + "commit": "e11ccea1d092beb1b01b4ee4ce49da478234254c", + "note": "PR #425 (Zhihao Chen / jacklightChen): the fresh validation receipt that states the cited complex coarse saving b and kappa. Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "data/controls/pr425/FINAL.json": { + "source_path": "research/hamming-mutable-basis-complex-validation/FINAL.json", + "blob": "1e9c8784c3cb719acb5274126141fe360af253fa" + } + } +} diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr426.json b/research/e8-r740-replica32/parent436/SOURCE-pr426.json new file mode 100644 index 0000000000..7c72390e09 --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr426.json @@ -0,0 +1,17 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/426", + "head_repository": "ai-nanachi/integer-mult-bounds", + "commit": "88d552526893cd15325948bb1487e9a4d4bf32f6", + "note": "PR #426 (ai-nanachi): R767 bit word (clean-reset reuse), used only as a priced comparison and B_3 control. Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "data/controls/pr426-bit-candidate.json.gz": { + "source_path": "research/e8-clean-reuse-extension/data/bit-candidate.json.gz", + "blob": "807cea53ebe1322721463ee2319bcd52b9714f24" + }, + "data/controls/LICENSE-pr426": { + "source_path": "research/e8-clean-reuse-extension/LICENSE", + "blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64" + } + } +} diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr431.json b/research/e8-r740-replica32/parent436/SOURCE-pr431.json new file mode 100644 index 0000000000..00f1075773 --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr431.json @@ -0,0 +1,13 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/431", + "head_repository": "rohanarun/integer-mult-bounds", + "commit": "db4f46579b95bec6e2a0c59e3e1ee2b6584dbab3", + "note": "PR #431 (Rohan Arun / rohanarun, draft): the local validation receipt that states the cited complex coarse saving b and kappa. Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "data/controls/pr431/VALIDATION-LOCAL.json": { + "source_path": "research/hamming-frame-retiming/VALIDATION-LOCAL.json", + "blob": "0f0a80418d7f3e521c980ef0354fc3945eae1795" + } + } +} diff --git a/research/e8-r740-replica32/parent436/SOURCE-pr433.json b/research/e8-r740-replica32/parent436/SOURCE-pr433.json new file mode 100644 index 0000000000..910a7c3490 --- /dev/null +++ b/research/e8-r740-replica32/parent436/SOURCE-pr433.json @@ -0,0 +1,13 @@ +{ + "schema": "source-pins/1", + "source": "https://github.com/CrocSwap/integer-mult-bounds/pull/433", + "head_repository": "icekylinx/integer-mult-bounds", + "commit": "6d9244518175caf9e0089f92486959bc2c317273", + "note": "PR #433 (icekylinx): the certificate that states the cited complex lower bound, the R758 bit lower bound and kappa of the split-centre composition. Every file listed has, in this package, the git blob id it has at the commit above (git ls-tree -r -- ).", + "identical": { + "data/controls/pr433/CERTIFICATE.json": { + "source_path": "research/split-centres-global/CERTIFICATE.json", + "blob": "7e807079c1ec4907306035c84be1ba2fb1d69d79" + } + } +} diff --git a/research/e8-r740-replica32/parent436/code/b4/kappa_b4.py b/research/e8-r740-replica32/parent436/code/b4/kappa_b4.py new file mode 100644 index 0000000000..402a510e15 --- /dev/null +++ b/research/e8-r740-replica32/parent436/code/b4/kappa_b4.py @@ -0,0 +1,31 @@ +"""kappa with cited complex savings when the bit side is this word in B_4 (or B_3). + +The bit coarse saving c is read from certify_bit_k.py's receipt (PR #381's checker, unchanged). For every cited +complex supplier b, kappa is computed by PR #417's bootstrap.refine (chafreaky's reimplementation of rohanarun's PR #392 +refined pricing tail: six fixed bootstrap levels, PR #315's outer assembly, 47 strict constraints, next grid point and +invalid parameters rejected) and must equal the value cited with b. Since c > b for every cited supplier, the result is +complex-bound and does not depend on c; it is recomputed with the best previously published bit c as a control. +usage: kappa_b4.py KAPPA.json (certify_bit_k receipt) CONTROL_C COMPLEX_B.json OUT.json +Prepared by eumemic with Anthropic Claude assistance; Apache-2.0.""" +import json +import os +import sys +from fractions import Fraction as Q + +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), "..", "tail")) +from bootstrap import refine # noqa: E402 (PR #417, unchanged) + +rec = json.load(open(sys.argv[1])) +c = Q(rec["bit_coarse"]) +c0 = Q(sys.argv[2]) +out = dict(K=rec["K"], m=rec["m"], bit_coarse=str(c), control_bit_coarse=str(c0), kappa={}) +for s in json.load(open(sys.argv[3]))["suppliers"]: + b = Q(s["b"]) + k, rej = refine(b, c) + k0, _ = refine(b, c0) + assert c > b and c0 > b and k == k0 == Q(s["kappa"]), (s["name"], str(k), s["kappa"]) + out["kappa"][s["name"]] = dict(b=str(b), kappa=str(k), kappa_float=float(k), binding="complex", rejected=rej, + bit_headroom_percent=100 * float(c / b - 1), source=s["source"]) + print(" with %s b = %.12e: kappa = %s = %.15e (complex-bound, equal to the cited value and unchanged with the" + " control bit c; bit headroom c/b - 1 = %.3f%%)" % (s["name"], float(b), k, float(k), 100 * float(c / b - 1))) +json.dump(out, open(sys.argv[4], "w"), indent=1) diff --git a/research/e8-r740-replica32/parent436/code/bit/checkers/certify_bit_k.py b/research/e8-r740-replica32/parent436/code/bit/checkers/certify_bit_k.py new file mode 100644 index 0000000000..37ce2ee2b4 --- /dev/null +++ b/research/e8-r740-replica32/parent436/code/bit/checkers/certify_bit_k.py @@ -0,0 +1,59 @@ +"""Generalized (Dylan Crow, with Anthropic Claude assistance): h, the normalization T and the output path are arguments; +h = 20, T = 12 is the original. Bridged word B_K (DaysSky, assisted with Claude): the one-level histogram is +(2K+1) x the local histogram + 2v x the idle blocks of PR #363's bridged.check(K, h) (split below m/2 for K > 2), +W = 2Kv + resid/h, m = (2K+1) h; K = 2 is certify_bit_g.py. With a seventh argument 'unsplit' the idle climbs are +not split and the least halving degree t (m^t > 2 max child^t) replaces the half-shrink guard. +usage: certify_bit_k.py WORDDIR B K H T OUT.json [unsplit] +Exact bit coarse saving + outer assembly for a PR249-format local word, using PR #315's engines +(moment.py, base_two_moment.py, outer.py) and its math_check.run logic, with a given complex coarse b.""" +import sys, json, importlib.util, os +from fractions import Fraction as Q +from collections import Counter +sys.path.insert(0,os.path.dirname(os.path.abspath(__file__))) +import cost as C +sys.path.insert(0,os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','..','complex','code')) +import bridged +P=os.environ.get('PR315',os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','..','pricing'))+'/' +def load(n): + s=importlib.util.spec_from_file_location(n,P+n+'.py'); m=importlib.util.module_from_spec(s); s.loader.exec_module(m); return m +moment=load('moment'); other=load('base_two_moment'); outer=load('outer') +d=sys.argv[1]; b=Q(sys.argv[2]); KP=int(sys.argv[3]); HH=int(sys.argv[4]); T=int(sys.argv[5]); OUT=sys.argv[6]; S=2*KP+1 +s,fr,dim,rec=C.load_snapshot(d) +H,resid,v=C.local_profile(rec,s,dim,h=HH); m=S*HH +UNSPLIT=len(sys.argv)>7 and sys.argv[7]=='unsplit' +lay=bridged.check(KP,HH,split=(m-1)//2 if (KP>2 and not UNSPLIT) else None) +prof=Counter({j:S*c for j,c in H.items()}) +for r in lay['blocks_per_role_pair']: prof[r]+=2*v +norm={int(k):int(c)*T for k,c in prof.items() if c}; Wn=Q(2*KP*v*HH+resid,HH)*T; assert Wn.denominator==1; Wn=int(Wn) +t_half=1 +while m**t_half<=2*max(norm)**t_half: t_half+=1 +assert UNSPLIT or t_half==1, 'half-shrink guard' +mass=sum(k*c for k,c in norm.items()); print('normalized W',Wn,'calls',sum(norm.values()),'mass',mass,'deficit',m*Wn-mass,'maxchild',max(norm)) +root=moment.certify(dict(norm),m,Wn,True); c=Q(int(Q(root['lower'])*10**18),10**18) +bm=moment.moment(norm,m,Wn,c,True); nextbm=moment.moment(norm,m,Wn,c+Q(1,10**18),True); assert bm[1]<1cap-grid, 'complex-bound saving not tight against the cap' +chain=[Q(384599,10**10)] +for _ in range(3): + a=(1-sv)*sv+sv*chain[-1]; assert chain[-1]0 +try: + outer.assembly(bit,b,bridge,k+Q(1,10**18),eta=eta,beta=beta); raise SystemExit('ADJACENT ADMITTED') +except AssertionError: pass +if binding=='complex': + try: outer.assembly(cap,b,bridge,k,eta=eta,beta=beta) + except AssertionError as e: assert 'leaf_saving_above_bit' in str(e); print('complex leaf cap itself rejected (leaf_saving_above_bit), as in PR #315 math_check') + else: raise SystemExit('complex leaf cap admitted') +print('complex b =',b,float(b),'| binding:',binding) +print('KAPPA =',k,'=',format(float(k),'.12e'),'| 47 strict constraints positive, adjacent grid point rejected') +json.dump(dict(word=d,K=KP,stages=S,halving_degree=t_half,idle_blocks_per_role_pair=lay['blocks_per_role_pair'],h=HH,T=T,maxchild=max(norm),bit_moment_interval=[str(x) for x in bm],normalized_histogram=norm,W=Wn,m=m,bit_coarse=str(c),complex_coarse=str(b),binding=binding,kappa=str(k),kappa_float=float(k)),open(OUT,'w'),indent=1) diff --git a/research/e8-r740-replica32/parent436/code/bit/checkers/columns_h.cpp b/research/e8-r740-replica32/parent436/code/bit/checkers/columns_h.cpp new file mode 100644 index 0000000000..00c5a3a5d8 --- /dev/null +++ b/research/e8-r740-replica32/parent436/code/bit/checkers/columns_h.cpp @@ -0,0 +1,48 @@ +// Generalization (Dylan Crow, with Anthropic Claude assistance): the copied-centre count is the macro NCOPY, defaulting to +// HDIM, so the unmodified PR #346/#352 build (no -DNCOPY) is exactly the original checker. The E8 bit word has 9 +// retained totals at h = 8 (-DNCOPY=9). +#ifndef NCOPY +#define NCOPY HDIM +#endif +#include "json.hpp" +#include +#include +using boost::multiprecision::cpp_int; +#include +#include +#include +#include +#include +#include +#include +using J=nlohmann::json; +struct E{int kind,dst,src,c;}; +void need(bool x,const char*s){if(!x)throw std::runtime_error(s);} +int main(int argc,char**argv){try{ +need(argc==3,"usage RAW6_RECORDS OUTPUT");std::string pre=argv[1];int v=VPORTS,r=RHELP,loc=2*v+r,global=4*v+r,temp=global; +struct Raw{int op,a,b,c,f,z;};std::ifstream f(pre,std::ios::binary|std::ios::ate);size_t sz=f.tellg();need(sz%sizeof(Raw)==0,"stream alignment");std::vectorp(sz/sizeof(Raw));f.seekg(0);f.read((char*)p.data(),sz);std::vectore;std::mapH;for(auto q:p){if(q.op==0){if(q.f)H[q.f]++;}else if(q.op==1)e.push_back({0,q.a,q.b,q.c});else if(q.op==2){H[q.z]++;e.push_back({1,loc,q.a,0});}else if(q.op==3)e.push_back({2,loc,q.a,0});else need(false,"opcode");} +J prefix=J::array();cpp_int largestF=0,largestB=0;for(int rev=0;rev<2;rev++){std::vectornorms(loc+1,1);cpp_int maxrow=1;bool isopen=false;for(size_t z=0;zmaxrow)maxrow=norms[q.dst];}else if(k==1){need(!isopen,"boundcopy");norms[loc]=norms[q.src];isopen=true;}else {need(isopen,"bounderase");norms[loc]=0;isopen=false;}}need(!isopen,"prefix copy closure");if(rev)largestB=maxrow;else largestF=maxrow;prefix.push_back({{"reverse",bool(rev)},{"cancellation_free_signed_row_l1_upper",maxrow.convert_to()},{"bits",boost::multiprecision::msb(maxrow)+1}});} +cpp_int payload=64*largestF*largestF*largestF*largestB*largestB;need(payload<(cpp_int(1)<<104),"payloadfiniteprefix2^104"); +long long copies=0,adds=0,odd=0;bool open=false;int center=-1;long long reverseCopies=0; +for(auto q:e){need(q.kind>=0&&q.kind<=2,"kind");need(q.dst>=0&&q.dst<=loc,"local dst");if(q.kind==0){need(q.src>=0&&q.src<=loc&&q.dst!=q.src,"source distinct");need(q.dst!=loc,"copy immutable");need(q.src!=loc||open,"temp not open");if(open)need(q.dst!=center,"source changes inside copied-center block");adds++;odd+=q.c&1;} +else if(q.kind==1){need(!open&&q.dst==loc&&q.src>=0&&q.srca((size_t)(global+1)*words);auto row=[&](int i){return a.data()+(size_t)i*words;};for(int i=0;i=v&&i<2*v&&w==(size_t)(i-v)/64)want^=1ull<<((i-v)%64);need(x[w]==want,"local defining-decoder full formal column");}}} +if(stage==1||stage==2||stage==4){int b=stage==1?0:stage==2?1:2;for(auto q:bridges[b])for(int i=0;i(std::chrono::steady_clock::now()-t0).count()<<"s\n";} +for(int bank=0;bank<4;bank+=2)for(int i=0;i()},{"payload_prefix_bits",boost::multiprecision::msb(payload)+1},{"new_Q_categories",{28,29}},{"local_raw_H",H},{"negative_controls",controls},{"seconds",std::chrono::duration(std::chrono::steady_clock::now()-t0).count()}};std::ofstream(argv[2])< +#include +using boost::multiprecision::cpp_int; +#include +#include +#include +#include +#include +#include +#include +using J=nlohmann::json; +struct E{int kind,dst,src,c;}; +void need(bool x,const char*s){if(!x)throw std::runtime_error(s);} +int main(int argc,char**argv){try{ +need(argc==3,"usage RAW6_RECORDS OUTPUT");std::string pre=argv[1];int v=VPORTS,r=RHELP,loc=2*v+r,global=2*KPAIRS*v+r,temp=global;const int S=2*KPAIRS+1; +struct Raw{int op,a,b,c,f,z;};std::ifstream f(pre,std::ios::binary|std::ios::ate);size_t sz=f.tellg();need(sz%sizeof(Raw)==0,"stream alignment");std::vectorp(sz/sizeof(Raw));f.seekg(0);f.read((char*)p.data(),sz);std::vectore;std::mapH;for(auto q:p){if(q.op==0){if(q.f)H[q.f]++;}else if(q.op==1)e.push_back({0,q.a,q.b,q.c});else if(q.op==2){H[q.z]++;e.push_back({1,loc,q.a,0});}else if(q.op==3)e.push_back({2,loc,q.a,0});else need(false,"opcode");} +J prefix=J::array();cpp_int largestF=0,largestB=0;for(int rev=0;rev<2;rev++){std::vectornorms(loc+1,1);cpp_int maxrow=1;bool isopen=false;for(size_t z=0;zmaxrow)maxrow=norms[q.dst];}else if(k==1){need(!isopen,"boundcopy");norms[loc]=norms[q.src];isopen=true;}else {need(isopen,"bounderase");norms[loc]=0;isopen=false;}}need(!isopen,"prefix copy closure");if(rev)largestB=maxrow;else largestF=maxrow;prefix.push_back({{"reverse",bool(rev)},{"cancellation_free_signed_row_l1_upper",maxrow.convert_to()},{"bits",boost::multiprecision::msb(maxrow)+1}});} +cpp_int payload=64*largestF*largestF*largestF*largestB*largestB;need(payload<(cpp_int(1)<<104),"payloadfiniteprefix2^104"); +long long copies=0,adds=0,odd=0;bool open=false;int center=-1;long long reverseCopies=0; +for(auto q:e){need(q.kind>=0&&q.kind<=2,"kind");need(q.dst>=0&&q.dst<=loc,"local dst");if(q.kind==0){need(q.src>=0&&q.src<=loc&&q.dst!=q.src,"source distinct");need(q.dst!=loc,"copy immutable");need(q.src!=loc||open,"temp not open");if(open)need(q.dst!=center,"source changes inside copied-center block");adds++;odd+=q.c&1;} +else if(q.kind==1){need(!open&&q.dst==loc&&q.src>=0&&q.src>active;std::vectorbackward;std::vector>>after(S); +auto X=[](int p){return 2*(p-1);};auto Y=[](int p){return 2*(p-1)+1;}; +for(int t=0;t=3&&t%2==1);backward.push_back(b);active.push_back(b?std::array{Y(p),X(p)}:std::array{X(p),Y(p)});} +for(int q=2;q<=KPAIRS;q++){after[2*q-3].push_back({X(q-1),X(q),1});after[2*q-3].push_back({Y(q),Y(q-1),-1}); + after[2*q-2].push_back({Y(q),Y(q-1),1});after[2*q-2].push_back({X(q-1),X(q),-1});} +for(int p=KPAIRS;p>=2;p--){after[S-1].push_back({Y(p-1),Y(p),-1});after[S-1].push_back({X(p),X(p-1),1});} +int nbridges=0;for(auto&a:after)nbridges+=a.size();need(nbridges==6*(KPAIRS-1),"twin bridge count"); +size_t words=(global+63)/64;std::vectora((size_t)(global+1)*words);auto row=[&](int i){return a.data()+(size_t)i*words;};for(int i=0;i=v&&i<2*v&&w==(size_t)(i-v)/64)want^=1ull<<((i-v)%64);need(x[w]==want,"local defining-decoder full formal column");}}} +for(auto q:after[stage])for(int i=0;i(std::chrono::steady_clock::now()-t0).count()<<"s\n";} +for(int bank=0;bank<2*KPAIRS;bank+=2)for(int i=0;ib(2*KPAIRS);for(int z=0;z<2*KPAIRS;z++)b[z]=1u<()},{"payload_prefix_bits",boost::multiprecision::msb(payload)+1},{"new_Q_categories",{28,29}},{"local_raw_H",H},{"negative_controls",controls},{"seconds",std::chrono::duration(std::chrono::steady_clock::now()-t0).count()}};std::ofstream(argv[2])< 0: H[int(r[4])] += 1 + copies = rec[rec[:, 0] == 2] + for r in copies: + if r[5] > 0: H[int(r[5])] += 1 + init = s['initial'] + resid = sum(h - dim[init[str(r)]] for r in range(2 * v, n)) + return H, resid, v + +def five_stage(H, resid, v, h=24, stages=5): + m = stages * h + prof = collections.Counter() + for j, c in H.items(): prof[j] += stages * c + for j in (2*h - 2, h - 1, 2*h + 2, 4): prof[j] += 2 * v + W = mpf(4 * v) + mpf(resid) / h + mass = sum(j * c for j, c in prof.items()) + return prof, W, m, W * m - mass + +def solve_moment(prof, W, m, bad=mpf('1e-16')): + calls = sum(prof.values()) + items = [(mpf(j) / m, c) for j, c in prof.items()] + def mu(sv): + t = 1 - sv + return (sum(c * x ** t for x, c in items) + bad * 32 * m * m * calls * (mpf(1) / m) ** t) / W - 1 + return findroot(mu, mpf('0.0007')) + +def evaluate(rec, s, dim, h=24): + H, resid, v = local_profile(rec, s, dim, h) + prof, W, m, deficit = five_stage(H, resid, v, h) + sv = solve_moment(prof, W, m) + return dict(saving=sv, kappa_approx=sv / (1 + sv), W=W, deficit=deficit, m=m, + calls=sum(prof.values()), local=dict(sorted(H.items())), resid=resid) + +if __name__ == '__main__': + import sys + s, fr, dim, rec = load_snapshot(sys.argv[1]) + r = evaluate(rec, s, dim) + print({k: (float(v) if hasattr(v, 'real') and not isinstance(v, dict) else v) for k, v in r.items() if k != 'local'}) diff --git a/research/e8-r740-replica32/parent436/code/bit/checkers/finite_k.py b/research/e8-r740-replica32/parent436/code/bit/checkers/finite_k.py new file mode 100644 index 0000000000..8781815ee6 --- /dev/null +++ b/research/e8-r740-replica32/parent436/code/bit/checkers/finite_k.py @@ -0,0 +1,154 @@ +"""Finite bill for the banked five-stage bit word, generalized from the source527/p10 finite_check.run (Dylan Crow, with +Anthropic Claude assistance). The arithmetic is the original line by line; the changes are explicit parameters: + * h, m = 5h, v, R, replicas T, literal stock, literal paid histogram, weighted/unit additions and the forward and + inverse cancellation-free row bounds are inputs (from this package's receipts); + * NCOPY, the copied-centre temporaries per invocation and 5*NCOPY copy/erase episodes per replica (the original + writes h for both, since the paired cube has h centres; the E8 word has 9 retained totals at h = 8); + * the 2h-dimensional rational route template: [[p*, k*], [k*, p*]] for the reference port line q* of the label + family under its form (original: a triple line under G = I - J/9, denominators 1,2,3,6; E8: a root line under + /2), recomputed and factored into elementary operations, exact inverse replay, omitted factor rejected; + * K, the conservative extra bank-selector calls, by the original formula 2*5*T*((live-1) + R*m*factors) with + factors = maxops + (m-1) + m (maxops of the actual charts; an ungauged word has only the identity chart, 0 ops). +Bridged word B_K (DaysSky, assisted with Claude): x['Kpairs'] (default 2) gives S = 2K + 1 invocations, m = S h, +S invocations' additions plus 6(K-1)v twin-bridge additions, route families 2S(2v + R) + 2Kv (each invocation routes +its 2v data and R helper roles in and out; the terminal exchange moves the 2Kv data roles), S*NCOPY*T copy/erase +episodes and the selector bill 2*S*T*(...) (receipts_k.py). K = 2 gives exactly finite_g.py's 5, 6v, 20v + 10R + 4v +and 5*NCOPY*T; the p = 10 regression path is five-stage and unchanged. +usage: python3 finite_k.py e8 RECEIPTS.json OUT.json | python3 finite_k.py regression P10_RECEIPT_DIR""" +from fractions import Fraction as Q +from collections import Counter +from hashlib import sha256 +import json, sys, os, importlib.util, gzip +HERE=os.path.dirname(os.path.abspath(__file__)) +def ceilq(x): return -((-x.numerator)//x.denominator) +def cutoff_log2(delta,C): + assert 0=1 + return max(1,ceilq(36/delta**2),ceilq(2*(4+(C-1).bit_length())/delta)) +def mm(A,B): return [[sum(A[i][k]*B[k][j] for k in range(len(B))) for j in range(len(B[0]))] for i in range(len(A))] +def route_template(h,q,form,g=None,ginv=None): + """[[g p* g^-1, g k*], [k* g^-1, p*]] with p* = q q^T G/; G given by form(x,y) on coordinate vectors + (bilinear); g = I (the original's reference port) unless a port isometry is given.""" + I=lambda n:[[Q(i==j)for j in range(n)]for i in range(n)] + Gq=[sum(form(i,j)*q[j] for j in range(h)) for i in range(h)]; nq=sum(q[i]*Gq[i] for i in range(h)) + P=[[Q(q[i])*Gq[j]/nq for j in range(h)]for i in range(h)] + K=[[Q(i==j)-P[i][j]for j in range(h)]for i in range(h)] + if g is None: TL,TR,BL=P,K,K + else: TL,TR,BL=mm(mm(g,P),ginv),mm(g,K),mm(K,ginv) + rho=[TL[i]+TR[i]for i in range(h)]+[BL[i]+P[i]for i in range(h)] + a=[r[:]for r in rho];factors=[] + for j in range(2*h): + p=next(i for i in range(j,2*h)if a[i][j]) + if p!=j:a[j],a[p]=a[p],a[j];factors.append(('swap',j,p,None)) + if a[j][j]!=1: + c=1/a[j][j];a[j]=[c*x for x in a[j]];factors.append(('scale',j,None,c)) + for i in range(2*h): + if i!=j and a[i][j]: + c=-a[i][j];a[i]=[x+c*y for x,y in zip(a[i],a[j])];factors.append(('add',i,j,c)) + assert a==I(2*h) + def replay(omit=None): + a=I(2*h) + for z in reversed(range(len(factors))): + if z==omit:continue + kind,i,j,c=factors[z] + if kind=='swap':a[i],a[j]=a[j],a[i] + elif kind=='scale':a[i]=[x/c for x in a[i]] + else:a[i]=[x-c*y for x,y in zip(a[i],a[j])] + return a + assert replay()==rho + omit=next((i for i,f in enumerate(factors)if f[0]=='add'),0) # original: the first addition; a route without additions: the first factor + assert factors and replay(omit)!=rho + counts=dict(Counter(f[0]for f in factors));denoms=sorted({c.denominator for kind,i,j,c in factors if c is not None}) + serialization=[[kind,i,j,None if c is None else str(c)]for kind,i,j,c in factors] + return dict(factors=len(factors),factor_counts=counts,denominators=denoms, + factor_program_sha256=sha256(json.dumps(serialization,separators=(',',':')).encode()).hexdigest(), + exact_inverse_reconstruction=True,missing_addition_rejected=True) +def bill(x): + """x: dict with h,m,v,R,T,stock,literal(hist),ncopy,weighted,unit,fwd_row,inv_row,K,coarse,moment_module,route.""" + h,m,v,R,T,stock,ncopy=x['h'],x['m'],x['v'],x['R'],x['T'],x['stock'],x['ncopy'] + literal=Counter(x['literal']);E=sum(literal.values());mass=sum(r*c for r,c in literal.items()) + KP=x.get('Kpairs',2);S=2*KP+1 + assert m==S*h and 00 and delta1>0 + chain=[Q(384599,10**10)];gaps=[] + for j in range(3): + old=chain[-1];a=(1-c)*c+c*old;ds=dict(atom=c-a,borrowing=1-a-c,remainder=1-a-c*(1-old),stock=1-c);assert old0 + delta=min(ds.values());L=cutoff_log2(delta,coefficient);assert Q(L)*delta**2>=36 and Q(L)*delta>=2*(4+(coefficient-1).bit_length()) + gaps.append(dict(stage=j+1,minimum_gap=str(delta),cutoff_log2_at_charged_coefficient=str(L)));chain.append(a) + controls=[] + for name,test in [('zero cutoff gap',lambda:cutoff_log2(Q(0),coefficient)),('negative constant',lambda:cutoff_log2(Q(1,2),0))]: + try:test() + except AssertionError:controls.append(name) + else:raise AssertionError('bad finite cutoff accepted') + return dict(coefficient=coefficient,coefficient_bits=coefficient.bit_length(),low_matrix_power=d,strict_upper='q^'+str(d+1), + positive_rank_children=E,rank_mass=mass,weighted_additions=weighted,unit_expanded_additions=unit,route_families=J, + copy_erase_episodes=S*ncopy*T,payload_prefix_upper=payload,payload_prefix_bits=payload.bit_length(), + delta_tau_lower=str(delta_tau),delta_linear=str(delta1),bootstrap_chain=list(map(str,chain)),gaps=gaps, + row_reserve=dict(internal_coefficient=t*(d+1),external_complex_coefficient=20161,**({'halving_degree':t} if t>1 else {})),route=x['route'],rejected_controls=controls) +def load_moment(): + s=importlib.util.spec_from_file_location('m',os.path.join(HERE,'..','..','pricing','moment.py'));m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +def hist(x): return Counter({int(k):v for k,v in x.items() if v}) +if __name__=='__main__': + mod=load_moment() + if sys.argv[1]=='regression': + d=sys.argv[2]; raw=json.load(open(d+'/raw.json')); sc=json.load(open(d+'/scalar.json')); bk=json.load(open(d+'/banks.json'))['banks'] + ma=json.load(open(d+'/math.json'))['mathematics']; fin=json.load(open(d+'/finite.json')); gl=json.load(open(d+'/global_result.json')) + h=raw['h'];m=5*h;H=hist(raw['five_stage_profile']['histogram']) + for a,cnt in hist(raw.get('completion_rank_histogram',raw['auxiliary_entrance_rank_histogram'])).items(): + H[5*a]-=cnt + if not H[5*a]: del H[5*a] + T=bk['physical_replicas']; literal=Counter({r:T*c for r,c in H.items()}) + q=[int(i<3) for i in range(h)]; form=lambda i,j: Q(int(i==j))-Q(1,9) + x=dict(h=h,m=m,v=raw['v'],R=raw['physical_R'],T=T,stock=bk['literal_stock'],literal=literal,ncopy=h,deficit=4*raw['v']-5*h*(h-2), + weighted=sc['forward']['weighted_additions'],unit=sc['forward']['literal_unit_additions'],fwd_row=sc['forward']['max_intermediate_row_l1'], + inv_row=sc['inverse']['max_intermediate_row_l1'],K=bk['conservative_extra_selector_calls'],coarse=ma['bit_coarse'],moment_module=mod, + route=route_template(h,q,form)) + r=bill(x) + assert r['coefficient']==fin['q_power_bound']['coefficient'],(r['coefficient'],fin['q_power_bound']) + assert r['bootstrap_chain']==fin['bootstrap']['chain'] and r['delta_tau_lower']==fin['moment']['delta_tau_lower'] and r['delta_linear']==fin['moment']['delta_linear'] + assert r['route']['factor_counts']==fin['rational_route']['factor_counts'] and r['route']['factor_program_sha256']==fin['rational_route']['factor_program_sha256'] + assert r['route']['denominators']==[1,2,3,6] + print('PASS regression: on the p = 10 receipts in',d,'the generalized bill reproduces the coefficient',r['coefficient'], + ', the moment gaps, the bootstrap chain and the 40-dimensional route program (sha',r['route']['factor_program_sha256'][:12]+'...)') + else: + x=json.load(open(sys.argv[2])) + q=x['qstar']; form=lambda i,j: Q(int(i==j),2) # E8 form /2 in Construction-A coordinates + x['route']=route_template(x['h'],q,form); x['moment_module']=mod; x['literal']=hist(x['literal']) + # every port: route conjugated by its W(E8) reflection word (the original's coordinate permutations are free + # relabelings; here the isometry is a rational program and is charged as part of the port route) + w=json.load(gzip.open(x['word'],'rt')); Lw=w['lines']; h=x['h'] + ip=lambda a,b: Q(sum(u*t for u,t in zip(a,b)),2) + def refl(r): + return [[Q(int(i==j))-Q(r[i]*r[j],2)*2/ip(r,r) for j in range(h)] for i in range(h)] + isom={0:[[Q(int(i==j)) for j in range(h)] for i in range(h)]}; fr=[0] + while fr: + nx=[] + for a_ in fr: + for b_ in range(len(Lw)): + if b_ in isom or abs(ip(Lw[a_],Lw[b_]))!=1: continue + d_=[u-t for u,t in zip(Lw[a_],Lw[b_])] if ip(Lw[a_],Lw[b_])==1 else [u+t for u,t in zip(Lw[a_],Lw[b_])] + isom[b_]=mm(refl(d_),isom[a_]); nx.append(b_) + fr=nx + assert len(isom)==len(Lw) and Lw[0]==q + ports=[]; allden=set(); maxf=0 + for t,g in isom.items(): + ginv=[[g[j][i]*1 for j in range(h)] for i in range(h)] # G = I/2 is scalar, so g^-1 = g^T + assert mm(g,ginv)==[[Q(int(i==j)) for j in range(h)] for i in range(h)] + gq=[sum(g[i][j]*q[j] for j in range(h)) for i in range(h)]; assert gq==Lw[t] or gq==[-u for u in Lw[t]] + r_=route_template(h,q,form,g,ginv); allden|=set(r_['denominators']); maxf=max(maxf,r_['factors']) + assert all(d_&(d_-1)==0 for d_ in allden), allden # powers of two: units modulo every odd prime q + x['route']['all_ports']=dict(ports=len(isom),max_factors=maxf,denominators=sorted(allden)) + r=bill(x); r.pop('route') if False else None + json.dump({k:(v if not isinstance(v,Counter) else dict(v)) for k,v in r.items()},open(sys.argv[3],'w'),indent=1,default=str) + print('PASS finite bill (E8, K = %d, m = %d): coefficient %d (%d bits) < 2^80, q-power bound %s, payload prefix %d bits < 104, delta_tau %s, reference route %s; all %d port routes exact elementary programs, at most %d factors, denominators %s (powers of two: units modulo every odd q)'%( + x.get('Kpairs',2),x['m'],r['coefficient'],r['coefficient_bits'],r['strict_upper'],r['payload_prefix_bits'],r['delta_tau_lower'][:14],r['route']['factor_counts'],r['route']['all_ports']['ports'],r['route']['all_ports']['max_factors'],r['route']['all_ports']['denominators'])) diff --git a/research/e8-r740-replica32/parent436/code/bit/checkers/geometry_k.py b/research/e8-r740-replica32/parent436/code/bit/checkers/geometry_k.py new file mode 100644 index 0000000000..2a05298081 --- /dev/null +++ b/research/e8-r740-replica32/parent436/code/bit/checkers/geometry_k.py @@ -0,0 +1,163 @@ +"""PR234's route and idle geometry for the bridged word B_K (DaysSky, assisted with Claude), generalizing PR #370's +geometry_g.py (five stages) to 2K + 1 stages. Every formula is geometry_g.py's; only the number of blocks and the idle +chronology change. + + H^S with S = 2K + 1 blocks, ambient form G (+) ... (+) G; p* = q* q*^T G / , k* = I - p* + route rho(i,t) [[g p* g^-1, g k*], [k* g^-1, p*]] on blocks (0, i), identity elsewhere; rho(0,t) = I (i < S) + stage projector P (+) K (+) ... (+) K (K = k* on blocks 1..i) + data(i,kind) rho(i,t) * stage_projector(i, frame(kind)) * rho(i,t), kinds P (port line), K, H, 0 +Checks for every port t: rho^2 = I; data(i-1,H) = data(i,P) and data(i-1,K) = data(i,0) for i = 1..S-1; the idle +boundary pairs of B_K (PR #363's bridged.py chronology), each commuting with a*b = a and an idempotent gap whose rank +equals bridged.check(K, h)'s idle climb: + pair q = 2..K, X: (p, data(2q-3,H)) and (data(2q-2,P), data(2q-1,P)); Y: (0, data(2q-3,K)) and (data(2q-2,0), data(2q-1,0)) + pair 1, final: (data(2,H), I) and (data(2,K), I - p); pair q, final: (data(2q,H), I) and (data(2q,K), I - p) +For K = 2 this is geometry_g.py's list of eight pairs, in the same order. Every gap of rank above floor((m - 1)/2) +gets an explicit intermediate frame Q = b - D, D a sum of mutually orthogonal E8 root projectors r r^T G/ in a +diagonal block where the gap is block-diagonal (dyadic entries only, so the prime-witness set stays {2}): +a Q = Q a = a, Q b = b Q = Q, Q^2 = Q, ranks (split, rest), so the paid children obey the half-shrink guard +2 max child < m. Entrance census (every helper starts at frame 0): the S tau-conjugates of +(I_h - P_sigma) (+) 0 are pairwise orthogonal and sum to I - completion(sigma); a duplicated window is rejected. +With the third argument 'unsplit' no climb is split: the idle children are the whole climbs, and the least halving +degree t (m^t > 2 max child^t) is reported instead of the half-shrink guard. +usage: python3 geometry_k.py K WORD.json[.gz] [unsplit]""" +import sys, os, json, gzip, time +import sympy as sp +sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', '..', 'complex', 'code')) +import bridged +def eye(n): return sp.eye(n) +class Geo: + def __init__(self, h, G, qstar, S): + self.h = h; self.S = S; self.M = S * h; self.G = G; self.q = qstar + nq = (qstar.T * G * qstar)[0]; assert nq != 0 + self.pstar = qstar * (qstar.T * G) / nq; self.kstar = eye(h) - self.pstar + self.GG = sp.diag(*([G] * S)) + def frame_projector(self, B): + if B.rows == 0: return sp.zeros(self.h) + return B.T * (B * self.G * B.T).inv() * B * self.G + def rho(self, stage, g, ginv): + h, M = self.h, self.M; I = eye(M) + if stage == 0: return I + I[:h, :h] = g * self.pstar * ginv; I[stage*h:(stage+1)*h, stage*h:(stage+1)*h] = self.pstar + I[:h, stage*h:(stage+1)*h] = g * self.kstar; I[stage*h:(stage+1)*h, :h] = self.kstar * ginv + return I + def tau(self, stage): + I = eye(self.M) + if stage: + for j in range(self.h): I.row_swap(j, stage * self.h + j) + return I + def stage_projector(self, stage, P): + A = sp.zeros(self.M); A[:self.h, :self.h] = P + for j in range(1, stage + 1): A[j*self.h:(j+1)*self.h, j*self.h:(j+1)*self.h] = self.kstar + return A + def intermediate(self, a, b, split, lines): + """Q = b - D with D a sum of mutually G-orthogonal root projectors r r^T G/ (dyadic) inside diagonal blocks + on which the gap b - a is block-diagonal; rank(Q - a) = split.""" + h, M = self.h, self.M; gap = b - a; need = int(gap.trace()) - split; D = sp.zeros(M); got = 0 + proj = [r * (r.T * self.G) / (r.T * self.G * r)[0] for r in lines] + for j in range(self.S - 1, 0, -1): + blk = slice(j * h, (j + 1) * h) + off = gap.copy(); off[blk, blk] = sp.zeros(h) + if not (off[blk, :].is_zero_matrix and off[:, blk].is_zero_matrix): continue + Gj = gap[blk, blk]; chosen = [] + for e in proj: + if got == need: break + if Gj * e == e and all(e * f == sp.zeros(h) for f in chosen): + chosen.append(e); D[blk, blk] = D[blk, blk] + e; got += 1 + if got == need: break + assert got == need, ('no dyadic intermediate frame', need, got) + Q = b - D + assert D * D == D and D * a == a * D == sp.zeros(M) and b * D == D * b == D and Q * Q == Q + assert a * Q == Q * a == a and Q * b == b * Q == Q + assert int((Q - a).trace()) == split and int((b - Q).trace()) == need + assert all(sp.Rational(x).q & (sp.Rational(x).q - 1) == 0 for x in Q), 'intermediate frame not dyadic' + return Q + def check_port(self, K, qt, g, ginv, split, lines): + h, M, S = self.h, self.M, self.S; I = eye(M); Z = sp.zeros(M) + assert g * ginv == eye(h) and g.T * self.G * g == self.G, 'port map is not a G-isometry' + assert g * self.q == qt or g * self.q == -qt, 'port map does not send q* to the port line' + routes = [self.rho(i, g, ginv) for i in range(S)] + assert all(r * r == I for r in routes) + P = self.frame_projector(qt.T); assert P * P == P and P.trace() == 1 + Ph = {'P': P, 'K': eye(h) - P, 'H': eye(h), '0': sp.zeros(h)} + cache = {} + def data(i, kind): + if (i, kind) not in cache: cache[i, kind] = routes[i] * self.stage_projector(i, Ph[kind]) * routes[i] + return cache[i, kind] + for i in range(1, S): + assert data(i-1, 'H') == data(i, 'P'); assert data(i-1, 'K') == data(i, '0') + p = data(0, 'P'); pairs = [] + for q in range(2, K + 1): + pairs += [(p, data(2*q-3, 'H')), (Z, data(2*q-3, 'K')), (data(2*q-2, 'P'), data(2*q-1, 'P')), (data(2*q-2, '0'), data(2*q-1, '0'))] + pairs += [(data(2, 'H'), I), (data(2, 'K'), I - p)] + for q in range(2, K + 1): + pairs += [(data(2*q, 'H'), I), (data(2*q, 'K'), I - p)] + ranks = []; children = [] + for a, b in pairs: + assert a * b == b * a == a; gap = b - a; assert gap * gap == gap; r = int(gap.trace()); ranks.append(r) + if r > split: + Q = self.intermediate(a, b, split, lines); children += [split, r - split] + else: + children.append(r) + assert p * (I - p) == Z and p + (I - p) == I + return ranks, children + def check_entrance(self, Psigma): + h, M, S = self.h, self.M, self.S; Z = sp.zeros(M) + completion = sp.diag(*([Psigma] * S)); residual = eye(M) - completion + assert completion * completion == completion and completion.trace() == S * Psigma.trace() + actual = [] + for i in range(S): + t = self.tau(i); local = sp.zeros(M); local[:h, :h] = eye(h) - Psigma; actual.append(t * local * t) + assert sum(actual, Z) == residual + assert all(a * b == Z for i, a in enumerate(actual) for j, b in enumerate(actual) if i != j) + assert sum(actual[:S-1] + [actual[S-2]], Z) != residual + return True +def expected(K, h): + """idle climbs of bridged.check in the order of check_port's pair list (X and Y of each climb)""" + idle = bridged.check(K, h)['per_pair_idle']; out = [] + for q in range(2, K + 1): + a, b, _ = idle[q]; out += [a, a, b, b] + out += [idle[1][0]] * 2 + for q in range(2, K + 1): out += [idle[q][2]] * 2 + return out +def main(K, word, unsplit=False): + c = json.load(gzip.open(word, 'rt') if word.endswith('.gz') else open(word)) + assert c['form'] == '/2' and c['h'] == 8 + h = 8; S = 2 * K + 1; m = S * h; split = m if unsplit else (m - 1) // 2 + G = eye(h) / 2; L = [sp.Matrix(x) for x in c['lines']]; v = len(L) + ip = lambda a, b: (a.T * G * b)[0] + def refl(r): return eye(h) - r * (r.T * G) * 2 / ip(r, r) + star = 0; geo = Geo(h, G, L[star], S) + isom = {star: (eye(h), [])}; frontier = [star] + while frontier: + nxt = [] + for a in frontier: + for r in range(v): + if r == a: continue + if abs(ip(L[a], L[r])) == 1: + d = L[a] - L[r] if ip(L[a], L[r]) == 1 else L[a] + L[r] + if r not in isom: + isom[r] = (refl(d) * isom[a][0], isom[a][1] + [d]); nxt.append(r) + frontier = nxt + assert len(isom) == v + want = expected(K, h); idle = None; kids = None; t0 = time.time() + for t in range(v): + g, w_ = isom[t] + ranks, children = geo.check_port(K, L[t], g, g.inv(), split, L) + if idle is None: idle, kids = ranks, children + assert ranks == idle == want, (ranks, want) + assert children == kids and (unsplit or 2 * max(children) < m) + if t % 30 == 0: print(' port %d/%d checked (%d reflections) %.0fs' % (t + 1, v, len(w_), time.time() - t0), flush=True) + nreg = 2 * v + c['R']; starts = {c['start'][r] for r in range(2 * v, nreg)} + assert starts == {c['start'][v]} and len(c['frames'][c['start'][v]]) == 0 + geo.check_entrance(sp.zeros(h)) + lay = bridged.check(K, h, split=None if (unsplit or K <= 2) else split)['blocks_per_role_pair'] + t = 1 + while m ** t <= 2 * max(kids) ** t: t += 1 + assert sorted(kids) == sorted(lay * 2), (kids, lay) # X and Y of every role pair: PR #363's priced idle blocks + print('PASS E8 geometry in B_%d (%d stages, m = %d): all %d ports (W(E8) reflection words), routes involutive, %d stage boundaries chained,' + ' idle gap ranks %s (= bridged.py), paid idle children %s (%s); entrance census {0: %d helpers}:' + ' %d-window completion exact, duplicate window rejected' % (K, S, m, v, S - 1, idle, kids, + 'unsplit, halving degree %d' % t if unsplit else 'explicit dyadic intermediate frames, 2 x %d < %d' % (max(kids), m), c['R'], S)) + if unsplit: print(' unsplit: largest idle child %d of m = %d, least halving degree t = %d (%d^%d > 2 * %d^%d)' % (max(kids), m, t, m, t, max(kids), t)) +if __name__ == '__main__': + main(int(sys.argv[1]), sys.argv[2], len(sys.argv) > 3 and sys.argv[3] == 'unsplit') diff --git a/research/e8-r740-replica32/parent436/code/bit/checkers/gram_frames.py b/research/e8-r740-replica32/parent436/code/bit/checkers/gram_frames.py new file mode 100644 index 0000000000..b740d47295 --- /dev/null +++ b/research/e8-r740-replica32/parent436/code/bit/checkers/gram_frames.py @@ -0,0 +1,54 @@ +"""Exact nondegeneracy and PR #315's prime-witness rule for every frame of a PR249-format word, with the ambient Gram +matrix as a parameter. Generalizes PR #346's exactnd_h.py and prime_new.py (Dylan Crow, with Anthropic Claude assistance). + --gram triple9 : the paired-cube form G = I - J/9, integer Gram 9 B G B^t = 9 B B^t - s s^t (exactnd_h/prime_new, verbatim) + --gram e8ham : the E8 form /2 in Construction-A (Hamming) coordinates, integer Gram 2 B G B^t = B B^t +Checks per frame: rank(B) = dim, A.B = 0 and |A| + dim = h (when A given), det(integer Gram) != 0 (exact Bareiss), and +the prime witness: |det| = residual * prod p^e over PR #315's allowed primes with 0 < residual < 2^80. With --new BASE +only frames absent from BASE are checked (prime_new.py's scope); otherwise every frame. +usage: python3 gram_frames.py WORDDIR --gram {triple9,e8ham} --h H [--new BASEDIR] [--positive]""" +import json, sys, argparse, importlib.util, os, collections +ap=argparse.ArgumentParser(); ap.add_argument('word'); ap.add_argument('--gram',required=True); ap.add_argument('--h',type=int,required=True) +ap.add_argument('--new'); ap.add_argument('--positive',action='store_true'); a=ap.parse_args() +HERE=os.path.dirname(os.path.abspath(__file__)) +s=importlib.util.spec_from_file_location('pw',os.path.join(HERE,'..','..','pricing','prime_witnesses.py')); pw=importlib.util.module_from_spec(s); s.loader.exec_module(pw) +def validate_record(row, dimension, determinant, allowed_primes): # PR #315 prime_check.validate_record, verbatim logic + assert type(row['dimension']) is int and type(row['determinant']) is int and type(row['residual']) is int, 'exact integer witness fields' + assert row['dimension'] == dimension and row['determinant'] == determinant != 0, 'exact determinant mismatch or singular basis' + assert 0 < row['residual'] < 2**80, 'retained prime lower bound' + product = row['residual'] + for prime, exponent in row['factors'].items(): + q = int(prime); assert q in allowed_primes and type(exponent) is int and exponent > 0, 'factor shape'; product *= q**exponent + assert product == abs(determinant), 'factor identity' +def gram(B): + if a.gram=='triple9': + s_=list(map(sum,B)); return [[9*sum(x*y for x,y in zip(B[i],B[j]))-s_[i]*s_[j] for j in range(len(B))] for i in range(len(B))] + if a.gram=='e8ham': + return [[sum(x*y for x,y in zip(B[i],B[j])) for j in range(len(B))] for i in range(len(B))] + raise SystemExit('unknown gram') +def rank_int(B): + M=[r[:] for r in B]; r=0 + for c in range(len(M[0]) if M else 0): + p=next((i for i in range(r,len(M)) if M[i][c]!=0),None) + if p is None: continue + M[r],M[p]=M[p],M[r] + for i in range(len(M)): + if i!=r and M[i][c]!=0: x,y=M[r][c],M[i][c]; M[i]=[u*x-w*y for u,w in zip(M[i],M[r])] + r+=1 + return r +fr=json.load(open(a.word+'/frames.json'))['frames'] +old=json.load(open(a.new+'/frames.json'))['frames'] if a.new else {} +keys=[k for k in fr if k not in old] +stats=collections.Counter(); primes=set(); bits=0; nonpos=0 +for k in keys: + B=fr[k]['B']; A=fr[k].get('A',[]); d=len(B); assert fr[k]['dim']==d + assert d==0 or rank_int(B)==d,('basis rank',k) + if A: assert all(sum(x*y for x,y in zip(r,b))==0 for r in A for b in B) and len(A)+d==a.h,('annihilator',k) + M=gram(B) if d else []; det=pw.det(M); assert det!=0,('degenerate frame',k) + if a.positive: # positive-definite ambient form: every leading principal minor positive + for j in range(1,d+1): + if pw.det([r[:j] for r in M[:j]])<=0: nonpos+=1; break + powers,residual=pw.factor_witness(det); row=dict(dimension=d,determinant=det,residual=residual,factors={p:e for p,e in powers.items() if e}) + validate_record(row,d,det,pw.PRIMES); primes.update(map(int,row['factors'])); bits=max(bits,abs(det).bit_length()); stats[d]+=1 +assert nonpos==0 +print('PASS %s Gram: %d frames checked, all nondegenerate%s; prime witnesses valid; max determinant bits %d; primes %s; by dim %s'%( + a.gram,sum(stats.values()),' and positive definite' if a.positive else '',bits,sorted(primes),dict(sorted(stats.items())))) diff --git a/research/e8-r740-replica32/parent436/code/bit/checkers/json.hpp b/research/e8-r740-replica32/parent436/code/bit/checkers/json.hpp new file mode 100644 index 0000000000..82d69f7c5d --- /dev/null +++ b/research/e8-r740-replica32/parent436/code/bit/checkers/json.hpp @@ -0,0 +1,25526 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_DIAGNOSTIC_POSITIONS + #define JSON_DIAGNOSTIC_POSITIONS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_DIAGNOSTIC_POSITIONS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#ifdef JSON_HAS_CPP_17 + #include // optional +#endif +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // declval, pair +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-FileCopyrightText: 2016 - 2021 Evan Nemerson +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) + #define JSON_HAS_CPP_23 + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201103L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifndef JSON_HAS_STATIC_RTTI + #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 + #define JSON_HAS_STATIC_RTTI 1 + #else + #define JSON_HAS_STATIC_RTTI 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_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, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +// inspired from https://stackoverflow.com/a/26745591 +// allows calling any std function as if (e.g., with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template +static void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // size_t + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // numeric_limits +#include // char_traits +#include // tuple +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // random_access_iterator_tag + +// #include + +// #include + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include // int64_t, uint64_t + #include // map + #include // allocator + #include // string + #include // vector + + // #include + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +///////////////// +// char_traits // +///////////////// + +// Primary template of char_traits calls std char_traits +template +struct char_traits : std::char_traits +{}; + +// Explicitly define char traits for unsigned char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = unsigned char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +// Explicitly define char traits for signed char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = signed char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& +is_complete_type < +detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template