diff --git a/docs/ci-verification.md b/docs/ci-verification.md index 63ba3e9aa8..52b62d0481 100644 --- a/docs/ci-verification.md +++ b/docs/ci-verification.md @@ -1,8 +1,25 @@ # CI verification -## Current selected-family replay: #6030 +## Current selected-family replay: #7000 with #7001 The [selected record](../certificates/selected-result.json) binds conditional +κ = 0.00363005817 to the [application review](research/pr-intake-evidence/pr7000-application/PROOF-REVIEW.md), +[validation receipts](research/pr-intake-evidence/pr7000-application/VALIDATION.json), +and [explicit source closure](../certificates/frontier7000-source.json). +`make frontier7000-verify` follows that exact-source selected replay. The review +reuses eleven authenticated preceding executions and records seven fresh serial +application, scalar and complete native-catalogue executions. The earlier +monolithic timeout is retained separately and is not completed coverage. +Consult the receipts for exact commands, source heads and limits. + +The five inherited framework assumptions remain. No complete uniform word, +literal multiplier execution, independent human proof or formal-kernel proof +is asserted. Routine research submissions do not need to rerun this +selected-family replay. The sections below preserve historical checkpoints. + +## Historical selected-family replay: #6030 + +The [historical checkpoint](../certificates/checkpoints/frontier6030.json) binds conditional κ = 0.003125804 to the [proof review](research/pr-intake-evidence/pr6030-audit/PROOF-REVIEW.md), [validation receipts](research/pr-intake-evidence/pr6030-audit/VALIDATION.json), and [explicit source closure](../certificates/frontier6030-source.json). diff --git a/research/historical-selected-replay-gap/README.md b/research/historical-selected-replay-gap/README.md index 55d8cc3b49..36d9a873ca 100644 --- a/research/historical-selected-replay-gap/README.md +++ b/research/historical-selected-replay-gap/README.md @@ -69,7 +69,11 @@ python3 -B scripts/research_package.py --package research/historical-selected-re The direct command prints `PASS_HISTORICAL_SELECTED_REPLAY_GAP`. A registered replay prints `PASS_REGISTERED_RESEARCH_PACKAGE`. Both require Git history -containing the two inspected commits. +containing the two inspected commits and the source and manifest objects at +`2485805a6d47f36ea83ddde6327d453ac82d44dc`. The verifier uses a temporary +sparse checkout of that commit, checks the declared source digests there, and +uses its planner and manifest inventory. The recorded rejections and selection +therefore remain reproducible after later changes to the live Makefile or CI guide. ## Open next questions diff --git a/research/historical-selected-replay-gap/SOURCES.json b/research/historical-selected-replay-gap/SOURCES.json index c1010eec95..62bb8b3950 100644 --- a/research/historical-selected-replay-gap/SOURCES.json +++ b/research/historical-selected-replay-gap/SOURCES.json @@ -4,13 +4,13 @@ "files": [ { "path": "Makefile", - "usage": "input", + "usage": "provenance", "git_blob": "0d683a06b9e7ee162496108ce9a7c5d2ee94fccf", "sha256": "4f2d4f2dcd15139ec82658a975f85ed300897385f85799218539f4c8d60567da" }, { "path": "certificates/partial-swap-network.json", - "usage": "input", + "usage": "provenance", "git_blob": "eccafa830c16170c36faf93045ddf1f638f7bcd4", "sha256": "4c0b9d37e1034b2076e30a70f8e514416298c462d9ee98bc87fe6556b14df786" }, @@ -22,7 +22,7 @@ }, { "path": "docs/ci-verification.md", - "usage": "input", + "usage": "provenance", "git_blob": "63ba3e9aa8bdc5e942b56e34244b92b16f854085", "sha256": "c7d3027e9ad8bcbff68f07aa9576b30fb2f3c76c44d876d40c7fdbf4a3e2228a" }, @@ -34,163 +34,163 @@ }, { "path": "research/clifford-state-performance/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "6f98a0061a5104dfab82c9e806f819b41811f684", "sha256": "396d0f08df24952248140d5c65c51b8c902ef1c580892ff7ea182890530f67ee" }, { "path": "research/community-batch1047-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "5e0f92af463ec12c5e1dcc3effd44081a88af647", "sha256": "07a9daeaf2bda308a92e9a4684f13d5fc766c7772d74801fceb7f4599fdab226" }, { "path": "research/community-batch1099-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "9e13266bf85e627f1b7dc225e9530ea69fd2c7f0", "sha256": "421e1211fb1897c45621dc6801c276e53f2e6f335583c9c9049e535f87c0a3b1" }, { "path": "research/community-batch932-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "cc4d03eb59b9ab3f952735f7e88ff18c2d15d7af", "sha256": "184629cac91a5cfaca50330a88596008b824221433867dcf8117539c913c284a" }, { "path": "research/community-batch970-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "8b9f4111badf7de5d97684799560b55110e9da79", "sha256": "23188ed920e38a54006cb883e181585620821c63bf7e8b5e05d32719417cc37e" }, { "path": "research/community-frontier741-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "a5300d4e7a5381a3f443fc54c768ca6f0f236d68", "sha256": "3c820fb30e1b4d9bcfc6a7ab524375e5b2abd66b940af2c509146104f0bcd79c" }, { "path": "research/community-frontier890-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "d7ff6d777b01d69b6ce84caf25d3b7e4a4d2f211", "sha256": "6b185a9902652f893f3ebd8ada92d2f11b6de6533a9a4d11718a8a4496101128" }, { "path": "research/community-hyperplane599-audit/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "546f37d326d10a99910ae8f908e71ef768524d98", "sha256": "65099d764bfcc39bda5e4d9966783611b094c3522dbdd1435cd498d657a8ef8e" }, { "path": "research/community-k492-audit/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "e538481e4cb16ed936d3195f2dfb5b5a9ca0a76b", "sha256": "2c0f4fa5bc150d05658af2e7c54c4d2c337dd52b7efd3d69530ae73bcbdf452a" }, { "path": "research/community-reconciliation92-audit/MANIFEST.json", - "usage": "input", + "usage": "provenance", "git_blob": "2a2e93685173d5f13cbb5abe740f5d90352e0228", "sha256": "5f501f3c118131e7d069f30ad77186eb2ad6961f9680a0ef105f4514ed41808a" }, { "path": "research/partial-swap-digest/baseline.py", - "usage": "input", + "usage": "provenance", "git_blob": "a2f0190704db83bd8ef48e46e723c49b925804fe", "sha256": "81e9af92cdf38243a540cdcff2062778e449467848d444da37a9553c12ca4c34" }, { "path": "research/r420-two-sided-basis/SOURCES.json", - "usage": "input", + "usage": "provenance", "git_blob": "5d718e11e62f4bcadecf1e02d6b61f87dbe190b0", "sha256": "d9810b0d139c5a1211fd2c1f0d142187cc1fca30026e1e7bc4f9ecfacf1596d1" }, { "path": "research/skip-clones/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "8d1bb3b9c8189e35e5d8bfdfa632d7473e8be0d5", "sha256": "0b68e63e35a97ce6b0cdb6e291b88ebaa8f2dd4afb70b2498f10ee89428258dc" }, { "path": "research/split-skip/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "2ab610b6ea2edd2865fda793ef2168b0c76afb4f", "sha256": "7c2b4646a3ecfef6f881da5c43e4bd0fa9a4d1b00548b8ab458d897e16735134" }, { "path": "scripts/historical-ci-inputs/Makefile", - "usage": "input", + "usage": "provenance", "git_blob": "aff68409021c9d401a6f8013b9dfd7dbcc30f2a8", "sha256": "ea8830dd79da493e2d75baf753d733ff7efbcf2b4794afe41fae0ac8f3055646" }, { "path": "scripts/historical-ci-inputs/ledger-batch932-run_isolated_tests.py", - "usage": "input", + "usage": "provenance", "git_blob": "65db599ab0b1dea0312c4ca048e0bd0f44c3736f", "sha256": "96ea543e6c707424afe247e77bd86c82152f90fc76a0773c4232145da5cdf8d1" }, { "path": "scripts/historical-ci-inputs/ledger-batch932-test_isolated_test_runner.py", - "usage": "input", + "usage": "provenance", "git_blob": "34820a8f24678f918f4d0e7a35380d8013fc3495", "sha256": "628391b6abfbc8674ceec1751867a4392f2cc0b5b66886243e139af86cf355ac" }, { "path": "scripts/historical-ci-inputs/ledger-batch970-verify_selected_result.py", - "usage": "input", + "usage": "provenance", "git_blob": "c755b76e0d44ba4917aa94440ebe54daefce5b2a", "sha256": "d7fd929726b326aeeaf0a3996475adec88eee9aac09ae0bebeeaa0bc1fc8f199" }, { "path": "scripts/historical-ci-inputs/ledger-frontier741-ci-verification.md", - "usage": "input", + "usage": "provenance", "git_blob": "7f3c012504187917a728b9fe87043f0fc8cd006a", "sha256": "a854022e0e1d5d4db4d60e586be3ea56005013ef14a1fc06d02bc06e8529c4b0" }, { "path": "scripts/historical-ci-inputs/partial-swap-context.json", - "usage": "input", + "usage": "provenance", "git_blob": "ad65114886bf34a4fd27e79f3be502389e689faa", "sha256": "833a9642f33aeab2ffea17ec9c6b82e0a953f90192b2c82e10bef21538dccba9" }, { "path": "scripts/historical-ci-inputs/partial-swap-network.json", - "usage": "input", + "usage": "provenance", "git_blob": "52075f2463f60af5e16571347f24274fce73a1ea", "sha256": "f3c4be597b2f2136da4ae2cc80c7454f63c90aa01f84e5b8131cee4dd55de815" }, { "path": "scripts/partial_swap/shared.py", - "usage": "input", + "usage": "provenance", "git_blob": "44a0e454c70f9c4b98e258b8443612e6a119904b", "sha256": "5a0646a50b9f3e8ea55168620a78e8853b0ab810517cefc8cfb8696aedee278a" }, { "path": "scripts/replay_historical_check.py", - "usage": "input", + "usage": "provenance", "git_blob": "1e92fff2782970ef71378f594f2350d245a4db26", "sha256": "5467619c78183d3adc82b0cb55af28e5c1a01fca2b0588677816244b53e2bafd" }, { "path": "scripts/research_package.py", - "usage": "input", + "usage": "provenance", "git_blob": "091b4c8f58bac9a9580d76025b887dc5c873d05f", "sha256": "e1256016e7f51827d04fa2179255989f639ae1d97afaa9c16265f85a0c6abd70" }, { "path": "scripts/run_isolated_tests.py", - "usage": "input", + "usage": "provenance", "git_blob": "a96ab35b315ce492e7fbbfd6c5ae211aa066b541", "sha256": "49eb56dd0fc0d8d8ffdb209970a7adf2176223580646f575d5c22e59543b381c" }, { "path": "scripts/verify_selected_result.py", - "usage": "input", + "usage": "provenance", "git_blob": "6882a4700e410dec569b51ae2eaf1a19cc019195", "sha256": "d6b305eac5b9bdb8172c469ad30a1655a60fa0aceac8b1bf610e1b73f51babd8" }, { "path": "tests/test_isolated_test_runner.py", - "usage": "input", + "usage": "provenance", "git_blob": "343b24abf6719b81805eba5a84c74e57634c8288", "sha256": "3a5470d0b139828b90e19bf9583ddeafcd69f8e34f2824664eb3a2958a52e34d" } diff --git a/research/historical-selected-replay-gap/VERIFY.json b/research/historical-selected-replay-gap/VERIFY.json index 98553e72ed..ab7efa3471 100644 --- a/research/historical-selected-replay-gap/VERIFY.json +++ b/research/historical-selected-replay-gap/VERIFY.json @@ -4,36 +4,7 @@ "python": "3.12", "requirements": [], "inputs": [ - "Makefile", - "certificates/partial-swap-network.json", - "docs/ci-verification.md", - "research/clifford-state-performance/SOURCE.json", - "research/community-batch1047-audit/CONTENT-COVERAGE.json", - "research/community-batch1099-audit/CONTENT-COVERAGE.json", - "research/community-batch932-audit/CONTENT-COVERAGE.json", - "research/community-batch970-audit/CONTENT-COVERAGE.json", - "research/community-frontier741-audit/CONTENT-COVERAGE.json", - "research/community-frontier890-audit/CONTENT-COVERAGE.json", - "research/community-hyperplane599-audit/SOURCE.json", - "research/community-k492-audit/SOURCE.json", - "research/community-reconciliation92-audit/MANIFEST.json", - "research/partial-swap-digest/baseline.py", - "research/r420-two-sided-basis/SOURCES.json", - "research/skip-clones/SOURCE.json", - "research/split-skip/SOURCE.json", - "scripts/historical-ci-inputs/Makefile", - "scripts/historical-ci-inputs/ledger-batch932-run_isolated_tests.py", - "scripts/historical-ci-inputs/ledger-batch932-test_isolated_test_runner.py", - "scripts/historical-ci-inputs/ledger-batch970-verify_selected_result.py", - "scripts/historical-ci-inputs/ledger-frontier741-ci-verification.md", - "scripts/historical-ci-inputs/partial-swap-context.json", - "scripts/historical-ci-inputs/partial-swap-network.json", - "scripts/partial_swap/shared.py", - "scripts/replay_historical_check.py", - "scripts/research_package.py", - "scripts/run_isolated_tests.py", - "scripts/verify_selected_result.py", - "tests/test_isolated_test_runner.py" + "scripts/research_package.py" ], "commands": [ { diff --git a/research/historical-selected-replay-gap/verify.py b/research/historical-selected-replay-gap/verify.py index 83b995941a..9d266c5a4e 100644 --- a/research/historical-selected-replay-gap/verify.py +++ b/research/historical-selected-replay-gap/verify.py @@ -6,8 +6,10 @@ """ import hashlib import importlib.util +import json import subprocess import sys +import tempfile from pathlib import Path ROOT = Path(__file__).resolve().parents[2] @@ -61,31 +63,47 @@ def require(ok, message): raise SystemExit(message) -def load_checker(): - path = ROOT / "scripts/replay_historical_check.py" - spec = importlib.util.spec_from_file_location("historical_selected_replay_gap_checker", path) +def load_module(path): + spec = importlib.util.spec_from_file_location(path.stem, path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module +def checkout_snapshot(snapshot, sources, runner, env): + paths = [runner.canonical_relative_path(row["path"]) for row in sources["files"]] + git = ["git", "-c", "maintenance.auto=false", "-c", "gc.auto=0", + "-c", "core.autocrlf=false"] + subprocess.run([*git, "clone", "--quiet", "--shared", "--no-tags", "--no-checkout", + "--", str(ROOT), str(snapshot)], cwd=ROOT, env=env, check=True) + subprocess.run([*git, "update-ref", "--no-deref", "HEAD", INSPECTED], + cwd=snapshot, env=env, check=True) + # The pinned planner reads omitted manifests from the sparse HEAD/index. + patterns = "".join(f"/{path.as_posix()}\n" for path in paths) + subprocess.run([*git, "sparse-checkout", "set", "--no-cone", "--stdin"], + cwd=snapshot, env=env, input=patterns.encode("utf-8"), check=True) + subprocess.run([*git, "read-tree", "-mu", "HEAD"], cwd=snapshot, env=env, check=True) + for path, row in zip(paths, sources["files"], strict=True): + require(hashlib.sha256((snapshot / path).read_bytes()).hexdigest() == row["sha256"], + "historical checkout source digest changed: " + path.as_posix()) + + def entries(checker): for name, config in checker.CONFIG.items(): for entry in [config, *config.get("additional_inputs", [])]: yield name, entry -def reject(checker, entry): +def reject(root, checker, entry): try: - checker.authenticated_input(ROOT, entry) + checker.authenticated_input(root, entry) except ValueError as exc: return str(exc) raise SystemExit("historical input was admitted: " + entry["path"]) -def main(): - require(not sys.flags.optimize, "assertions must stay enabled") - checker = load_checker() +def check_snapshot(root, env): + checker = load_module(root / "scripts/replay_historical_check.py") selected = [entry for name, entry in entries(checker) if name == "tooling-ledger" and entry["path"] == SELECTED_PATH] require(len(selected) == 1, "selected-result checker overlay is not unique") @@ -94,7 +112,7 @@ def main(): require(entry["accepted_live_sha256"] == [SELECTED_ACCEPTED], "accepted selected-checker successors changed") frozen = (checker.INPUTS / entry["input"]).read_bytes() - live = (ROOT / SELECTED_PATH).read_bytes() + live = (root / SELECTED_PATH).read_bytes() require(hashlib.sha256(frozen).hexdigest() == SELECTED_PIN, "frozen selected checker bytes changed") require(hashlib.sha256(live).hexdigest() == SELECTED_LIVE, "live selected checker digest changed") require(SELECTED_LIVE not in (SELECTED_PIN, SELECTED_ACCEPTED), "live checker was already admitted") @@ -102,7 +120,7 @@ def main(): # live successor, not a broken comparison. require(SELECTED_PIN in (SELECTED_PIN, *entry["accepted_live_sha256"]), "pin membership control failed") - require(reject(checker, entry) == REJECTIONS[SELECTED_PATH][1], + require(reject(root, checker, entry) == REJECTIONS[SELECTED_PATH][1], "selected checker rejection text changed") counts = {path: 0 for path in REJECTIONS} @@ -110,7 +128,7 @@ def main(): for _name, item in entries(checker): if item["path"] not in REJECTIONS: continue - message = reject(checker, item) + message = reject(root, checker, item) counts[item["path"]] += 1 messages.setdefault(item["path"], message) for path, (count, message) in REJECTIONS.items(): @@ -118,20 +136,31 @@ def main(): require(messages[path] == message, "rejection text changed for " + path) require(sum(counts.values()) == 19, "rejection total changed") ci = [item for _name, item in entries(checker) if item["path"] == CI_PATH] - require(len(ci) == 1 and hashlib.sha256((ROOT / CI_PATH).read_bytes()).hexdigest() == CI_LIVE, + require(len(ci) == 1 and hashlib.sha256((root / CI_PATH).read_bytes()).hexdigest() == CI_LIVE, "selected CI note digest changed") diff = subprocess.check_output( - ["git", "diff", "--name-only", PARENT, INSPECTED], cwd=ROOT, text=True) + ["git", "diff", "--name-only", PARENT, INSPECTED], cwd=root, env=env, text=True) changed = sorted(name for name in diff.splitlines() if name) require(changed == CHANGED, "inspected commit diff changed") - sys.path.insert(0, str(ROOT / "scripts")) - from research_package import plan_details - details = plan_details(ROOT, set(changed)) + planner = load_module(root / "scripts/research_package.py") + details = planner.plan_details(root, set(changed)) require([row["package"] for row in details] == PLAN_PACKAGES, "helper plan selection changed") matched = {name for row in details for names in row["causes"].values() for name in names} require(sorted(set(changed) - matched) == UNMATCHED, "unmatched plan paths changed") - require(plan_details(ROOT, set()) == [], "empty change set selected a package") + require(planner.plan_details(root, set()) == [], "empty change set selected a package") + + +def main(): + require(not sys.flags.optimize, "assertions must stay enabled") + sources = json.loads(Path(__file__).with_name("SOURCES.json").read_bytes()) + require(sources["base_commit"] == INSPECTED, "historical checkout base changed") + runner = load_module(ROOT / "scripts/research_package.py") + env = runner.git_source_env() + with tempfile.TemporaryDirectory(prefix="historical-selected-replay-") as temporary: + snapshot = Path(temporary) / "snapshot" + checkout_snapshot(snapshot, sources, runner, env) + check_snapshot(snapshot, env) print("PASS_HISTORICAL_SELECTED_REPLAY_GAP") print("selected_checker_live=" + SELECTED_LIVE) print("rejections=19 distinct_paths=7 plan_packages=9") diff --git a/research/p104-three-four-type-b-phase-transfers/LOCAL-PINS.json b/research/p104-three-four-type-b-phase-transfers/LOCAL-PINS.json new file mode 100644 index 0000000000..cee2ac4acd --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/LOCAL-PINS.json @@ -0,0 +1,15 @@ +{ + "engines/four_edits.py": "140c10fb4365bb5e254df5f9b0a7d89ad54b901ceaf36d528e2ff4baa4bd3c80", + "engines/multiple_edits.py": "c5ae3e8b5d1ff476dc710d7c2a099c362b39d8ef2b79e7486dcd9d8284afec91", + "engines/quote.py": "e14317c0a7888c922ee2d04efdf840828aa2ee698b418e1645e01c2ebb76cd6b", + "engines/reflection_gate.py": "d1e4e76df59eed37cadba639c6a6d5f65143850b2691117a9e7ad071cbd1849e", + "inputs/7113-CALLER.json.gz": "7e8038559cd158f6e32ef6d1a3bf15ab6a8ecc2239af32ab1699511ac28e26d9", + "inputs/7334-ADMITTED.json": "c95300e9bca27e44a25c82d794f88cbf70757c142806b0e4c590ea29feb81a13", + "inputs/7334-READBACK.json": "337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82", + "inputs/R59-PRICE.json": "b73057381860987c6de1666205e91a0e3d116a8299d8aa425682f5960609c21f", + "inputs/derivative_check.py": "348c8b2de72f1f112cb1337eca9d29ca96c85a7ad903beecafb1a2a1221f408e", + "inputs/pricing.py": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182", + "inputs/screen.py": "cdf54b266ac31fd0efe544badbb9840598d4c63c4d3cd363f60ae9a74cc4b256", + "inputs/two_phase.py": "ad3b5efd85a56c6c60c747cf45cbd1b7174ab9a714142ab069648261bcbf6631", + "receipts/SHA256.json": "c3eb35d7c9f54dca339e2780f0d633fa009a8e14bae643cad9064ec387be3d00" +} diff --git a/research/p104-three-four-type-b-phase-transfers/NOTICE b/research/p104-three-four-type-b-phase-transfers/NOTICE new file mode 100644 index 0000000000..ec6c88b7ab --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/NOTICE @@ -0,0 +1,6 @@ +Apache-2.0. + +The signed caller is from #7113, comparator from #7334, and directed +tariff from #7298. The phase inventory and endpoint engines build on +#7323, #7317 and #7315. The derivative helper is from #7342. +OpenAI Codex and subagents materially assisted. diff --git a/research/p104-three-four-type-b-phase-transfers/PROOF.md b/research/p104-three-four-type-b-phase-transfers/PROOF.md new file mode 100644 index 0000000000..9414f95eb6 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/PROOF.md @@ -0,0 +1,17 @@ +# Fixed-clock Type B endpoint obstruction + +## Exact keys and signed invoice + +There are four Type B `IDLE_ODD` singleton sources at clocks 1339, 1340, 2970 and 2971. The 26 eligible `IDLE_ONE` receivers have four masks of each size 2 through 7 and two of size 8. Choose m distinct sources and m distinct receivers. The changed word is determined by these sets regardless of any matching between them. Thus m=3 gives `C(4,3) C(26,3) = 10,400` keys, and m=4 gives `C(4,4) C(26,4) = 14,950` keys. The replay rebuilds the census from the exact caller and reconciles these keys to the 83 and 203 attained price classes, respectively. No disjoint-mask filter is used. + +Let `H_r=r^(1−κ)`. Each selected mask of size s yields gross moment credit `8(H9+H_(8s)−H8−H_(8s+1))` on the complete signed bill. The factor eight counts the Type B ports, with no extra factor for native copies. The base moment retains all 17 copies. The two paid ranks are replaced by two paid ranks with the same sum. Productive ranks and empty-root credit stay fixed. Concavity of `r^(1−κ)` for `0<κ<1` makes the increment from r to r+1 decrease with r, so the largest receiver masks maximize the optimistic credit. The best triple uses sizes (7,8,8), the best quadruple (7,7,8,8). The quadruple consumes all four available donors. The directed price uses the same complete #7334 invoice at both endpoints of the incumbent bracket, and bounds the derivative through the retained BIT cap. Charging even one additional paid rank-one position makes the whole optimistic envelope fail throughout that interval. + +## Specialization and independent witnesses + +At q=−1 and unit body, each change multiplies the original idle by the coordinate sign flip `E_r = I−2 e_r e_rᵀ`. It commutes with the idle at that clock. Write F for the unchanged prefix before the event. Conjugating the sign flip into the prefix input frame gives the reflection `F⁻¹ E_r F`. The changed relative endpoint is the product of these reflections in reverse chronological order. The unchanged endpoint is invertible, so a nonidentity relative product proves a changed endpoint. + +The first replay evaluates that exact relative product over the prime field with modulus 65521. The signed decoder checks denominator units, and the prefix routine uses invertible updates and checks each reflection pairing. A nonzero residue on the fixed vector (1,2,…,36) witnesses failure over the rationals. Any zero dense result would require a basis check. All 25,350 dense results are nonzero. + +The independent replay reconstructs the original specialized endpoint on all 36 basis columns using rational arithmetic. For each flip, the endpoint change is propagated as a causal impulse through the unchanged suffix. At a flipped clock the injected component equals −2 times the incoming current component after the original idle. This current value includes every earlier injected response propagated to that clock. Scaling the finite row, response and endpoint coefficients by a checked common denominator evaluates the entire recurrence exactly with integers and rational output witnesses. On the fixed vector (1²,2²,…,36²), every one of the 25,350 cases has a nonzero output difference. A dense equality would have required a full basis check. The reconciliation checks the same clock sets and typed prices and a valid nonzero witness in each method. The two witnesses use different vectors and need only agree on exclusion. + +A full signed endpoint identity must hold under the tested substitution. Under the retained physical realization, the central transform at width two has a −1 eigenline from the tensor of two i eigenlines, and the commuting disjoint body blocks admit their +1 eigenvectors. The specialization is therefore also a valid necessary test of the stated signed layout. The scope exhausts here. Nonunit body, full Laurent and physical provider gates would test survivors, and none remain. Changed clocks, masks, owner assignments or J/provider interfaces lie outside the exclusion. diff --git a/research/p104-three-four-type-b-phase-transfers/PROVENANCE.json b/research/p104-three-four-type-b-phase-transfers/PROVENANCE.json new file mode 100644 index 0000000000..7ea52aa82f --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/PROVENANCE.json @@ -0,0 +1,61 @@ +{ + "files": { + "engines/four_edits.py": { + "commit": "e19556382c7162edbee3fe37d06dd1e6a8a2f8c1", + "git_blob": "7272d777eeaf851435e899726736d2798e001097", + "path": "research/p104-two-type-b-phase-transfers/engines/four_edits.py", + "sha256": "140c10fb4365bb5e254df5f9b0a7d89ad54b901ceaf36d528e2ff4baa4bd3c80", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/e19556382c7162edbee3fe37d06dd1e6a8a2f8c1/research/p104-two-type-b-phase-transfers/engines/four_edits.py", + "uncompress": false + }, + "inputs/7113-CALLER.json.gz": { + "commit": "07a76c5e2738882c0cb322278e56f6cae3c9885d", + "git_blob": "9451ceaf6e8e037894680b549f3ef41c21b260d7", + "path": "research/signed-caller-8x9/expected/ODD-TYPE-AB-CALLER.json", + "sha256": "255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/07a76c5e2738882c0cb322278e56f6cae3c9885d/research/signed-caller-8x9/expected/ODD-TYPE-AB-CALLER.json", + "uncompress": true + }, + "inputs/derivative_check.py": { + "commit": "b567f9a4f5699c5e447100c38b5745526b15b770", + "git_blob": "ce5cdf377926b14bf77245083e51701a34fd683f", + "path": "research/p104-type-a-query-fixed-cut/engines/price/derivative_check.py", + "sha256": "348c8b2de72f1f112cb1337eca9d29ca96c85a7ad903beecafb1a2a1221f408e", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/b567f9a4f5699c5e447100c38b5745526b15b770/research/p104-type-a-query-fixed-cut/engines/price/derivative_check.py", + "uncompress": false + }, + "inputs/pricing.py": { + "commit": "c522451caf287bb3c16eaece72be4c263315dca4", + "git_blob": "40ec194017bda1d524bba4f07b188c53281419d0", + "path": "research/adjacent-owned-add-exchange-bound/pricing.py", + "sha256": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/c522451caf287bb3c16eaece72be4c263315dca4/research/adjacent-owned-add-exchange-bound/pricing.py", + "uncompress": false + }, + "inputs/screen.py": { + "commit": "c2d17f4fb4d3afb979bf8c1dc487d1a632c4f6b8", + "git_blob": "8ccb073f0bc7220957ec7655e1b353317fa62a43", + "path": "research/p104-even-idle-projector-bound/engines/singleton.py", + "sha256": "cdf54b266ac31fd0efe544badbb9840598d4c63c4d3cd363f60ae9a74cc4b256", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/c2d17f4fb4d3afb979bf8c1dc487d1a632c4f6b8/research/p104-even-idle-projector-bound/engines/singleton.py", + "uncompress": false + }, + "inputs/two_phase.py": { + "commit": "e19556382c7162edbee3fe37d06dd1e6a8a2f8c1", + "git_blob": "b7ec038c45a8b877f5cca937dd859e3caa0afe87", + "path": "research/p104-two-type-b-phase-transfers/engines/two_phase.py", + "sha256": "ad3b5efd85a56c6c60c747cf45cbd1b7174ab9a714142ab069648261bcbf6631", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/e19556382c7162edbee3fe37d06dd1e6a8a2f8c1/research/p104-two-type-b-phase-transfers/engines/two_phase.py", + "uncompress": false + } + }, + "generated": { + "inputs/R59-PRICE.json": { + "commit": "e19556382c7162edbee3fe37d06dd1e6a8a2f8c1", + "package": "research/p104-two-type-b-phase-transfers", + "receipt_sha256": "b73057381860987c6de1666205e91a0e3d116a8299d8aa425682f5960609c21f", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/e19556382c7162edbee3fe37d06dd1e6a8a2f8c1/research/p104-two-type-b-phase-transfers/receipts/SHA256.json" + } + }, + "schema_version": 1 +} diff --git a/research/p104-three-four-type-b-phase-transfers/README.md b/research/p104-three-four-type-b-phase-transfers/README.md new file mode 100644 index 0000000000..2be27dbd33 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/README.md @@ -0,0 +1,35 @@ +# Three and four simultaneous Type B phase transfers + +**NO VERIFIED GAIN. Exact conditional κ change 0%.** All 10,400 triple and 14,950 quadruple choices change the signed Type B endpoint on the exact [#7113 caller](https://github.com/CrocSwap/integer-mult-bounds/pull/7113) at `07a76c5e2738882c0cb322278e56f6cae3c9885d`. Two exact methods give a nonzero witness for every case at q=−1 with all body variables set to one. The complete scope is exhausted with zero survivors and zero unresolved keys. + +Choose exactly three or four of four original signed singleton idles and the same number of 26 original even idles with mask sizes 2–8. Demote the former and promote the latter. All literal clocks, owner roles, body masks, 17 J blocks and other events stay fixed. Overlapping masks are included. Different pairings of the same selected donor and receiver sets yield the same word. [Proof and exact scope](PROOF.md) + +## Price before support + +The independently reproduced comparator is [#7334](https://github.com/CrocSwap/integer-mult-bounds/pull/7334) at `aaeec8c0acf01e99a5f331ef363a698d9c084ace`, conditional κ = 0.00364665195644. Its complete signed invoice has 110,519 paid and 22,461 productive positions, signed rank surplus 1,424 and zero empty credit. Each selected receiver of size m trades paid ranks (9,8m) for (8,8m+1) across eight Type B ports. Both position counts and both rank masses stay fixed. + +The directed optimistic upper is about 0.17095747230019032 raw for three transfers and 0.22541521474570153 raw for four at the incumbent raw crossing. The replay emits the exact rational bounds. They share the same four donor clocks, so the larger bound is the whole-stock upper. It grants every ancillary cost free. One extra raw paid rank-one position makes the best complete margin negative from the incumbent bracket's lower endpoint through the retained BIT cap. At fixed κ 0.0040075385047236 the optimistic all-four complete margin is at most −139.519571366627 raw. The exact endpoint exclusion lowers the compatible saving to zero. + +## Reproduce + +Use CPython 3.12 with assertions and the standard library. From a clean checkout: + +~~~sh +python3.12 -B scripts/research_package.py --package research/p104-three-four-type-b-phase-transfers +~~~ + +From the package directory or a Git-free copy: + +~~~sh +python3.12 -I -B replay.py --out fresh-receipts +~~~ + +The replay authenticates the exact source bytes, generates the complete price and 25,350 keys before either endpoint check, reproduces every modular and independent rational witness, and verifies the exact per-key agreement. It regenerates five plaintext receipts using the [pinned hashes](receipts/SHA256.json), and rejects a changed caller. No earlier run, checkout or download is required. [Verification and provenance](VERIFICATION.md) + +## Open next questions + +A changed surrounding interval or one changed clock could alter the endpoint obstruction. Start by specifying one exact changed signed interval and pricing every changed paid call, route and owner before an all-phase endpoint test. An additional paid rank-one call already exceeds this fixed-stock upper. Any surviving multi-stage signed idle requires all-width compiler binding at the same volume, exact ownership and restoration, and precision and tape verification. + +## Attribution + +[#7323](https://github.com/CrocSwap/integer-mult-bounds/pull/7323) supplied the exact two-transfer inventory and the modular and rational methods. [#7317](https://github.com/CrocSwap/integer-mult-bounds/pull/7317) excluded single transfers and established the earlier phase-transfer price. [#7315](https://github.com/CrocSwap/integer-mult-bounds/pull/7315) supplied the signed Type B decoder. [#7113](https://github.com/CrocSwap/integer-mult-bounds/pull/7113) supplied the caller, [#7334](https://github.com/CrocSwap/integer-mult-bounds/pull/7334) the complete comparison, [#7298](https://github.com/CrocSwap/integer-mult-bounds/pull/7298) directed arithmetic, and [#7342](https://github.com/CrocSwap/integer-mult-bounds/pull/7342) the directed derivative helper. OpenAI Codex and subagents materially assisted. diff --git a/research/p104-three-four-type-b-phase-transfers/SOURCES.json b/research/p104-three-four-type-b-phase-transfers/SOURCES.json new file mode 100644 index 0000000000..e8c2f265cd --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/SOURCES.json @@ -0,0 +1,18 @@ +{ + "base_commit": "e54523517d0f03e58352e647c403a5af3e525a57", + "files": [ + { + "git_blob": "75d77b328ea02ded535e7f23aee5b1e55d0bb1a8", + "path": "certificates/selected-result.json", + "sha256": "154c3d30455d778fd3343b6b4851f0fa4665f0f7625b0adb3675e2bafbbf6bf1", + "usage": "provenance" + }, + { + "git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec", + "path": "docs/research/agent-task-catalog.json", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81", + "usage": "provenance" + } + ], + "schema_version": 1 +} diff --git a/research/p104-three-four-type-b-phase-transfers/TASK.json b/research/p104-three-four-type-b-phase-transfers/TASK.json new file mode 100644 index 0000000000..0939888695 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/TASK.json @@ -0,0 +1,84 @@ +{ + "actual_scope": "Three or four simultaneous fixed-clock Type B phase transfers on exact #7113; four original signed singleton donors and 26 larger even receiver idles, all original masks and J blocks fixed.", + "ai_assistance": "OpenAI Codex and subagents materially assisted proof, implementation, independent audit and packaging.", + "author": "P104 Type B phase transfer research", + "base_commit": "e54523517d0f03e58352e647c403a5af3e525a57", + "bottleneck_link": "The directed complete signed #7334 moment permits only a small rank redistribution and no new paid child.", + "budget_minutes": 8, + "evidence": "Two exact source-bound methods exhaust 10,400 triple and 14,950 quadruple keys at q=-1 with unit body. Every key has a nonzero modular and rational dense witness.", + "open_questions": [ + { + "blocked_by": "Every unchanged-mask, original-clock triple or quadruple fails at unit body. An additional paid rank-one position consumes the whole relaxation.", + "first_step": "Specify one changed clock or surrounding coframed interval and price its full induced ranks and routes before computing its signed endpoint.", + "question": "Can one changed signed interval support a funded phase transfer?", + "why_it_matters": "This changes the exact endpoint hypothesis while retaining a potential reduction in the binding complex bill." + } + ], + "original_card": { + "acceptance_gate": "A source-bound arbitrary-input identity and legal producer/consumer boundary with the complete paid and productive target invoice, including restoration, ownership, native alignment and extra charges. Price under the actual current model; historical ceiling.py assumptions must be established before use. A favorable optimistic relaxation keeps a route open but is not a completed supplier. A scoped local result remains useful; expansion requires the family-level budget gate.", + "allowed_variations": [ + "One exact source head, helper/cut region or quantified proposition and changed hypothesis; check live handoffs first. Different seeds are not different scopes." + ], + "bottleneck_link": "Judge the actual current supplier contract and complete signed target/paid bill; frozen-profile ceilings require an applicability proof.", + "existing_checks": [ + { + "evidence": "research/qq16-caller-install/README.md", + "remaining": "Complete matched physical protocol bill, or changed source-compatible demand/circuit; no affordable supplier yet.", + "scope": "PR #4166: author-checked installed producer/service/return/bridge connection; native-component comparison loses.", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129", + "source_commit": "0b082d22a0e9a442d264ab0633e35ef26c790630", + "status": "author-checked" + }, + { + "evidence": "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md", + "remaining": "The next experiment must identify uncovered source-specific work. Successor archive intake does not transfer this admission.", + "scope": "Selected PR5599: complete helper-subspace construction and independent caller replay; five framework assumptions remain.", + "selected_record_sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5", + "source_commit": "09dd0965711ca7eeb169057a420abab1c9052137", + "status": "reviewed" + } + ], + "first_experiment": "Choose an exact caller and a new demand/interface hypothesis. Read the scoped #5617/#5631/#5649/#5747 and #5720/#5745 objections before rebuilding an excluded schedule. Compare the complete matched source/consumer protocols including all retained helper outputs. For an active-mode injection, first check #5745: its canonical delivery claim repays the eight removed centre jobs. Audit that exact claim or change its channel/feedback hypothesis; do not repeat the same free-injection search. Stop if the full favorable budget fails or the required restored output is unobservable.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_selected_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read revision 8, the selected review and live exact-source handoffs. Then follow this card's bounded first_experiment.", + "scope": "Source-bound orientation only, not a supplier replay or theorem proof." + }, + "id": "joint-query-controller", + "methods": [ + "Construct and independently check one source-bound instance of the stated first experiment.", + "Seek an exact counterexample or target-specific complete-budget obstruction to that same proposed change." + ], + "overlap_terms": [ + "query demand", + "active mode", + "5720", + "5745", + "5747", + "caller" + ], + "question": "Can a changed query demand or caller remove real work while satisfying native chronology and restoration?", + "scope_change_triggers": [ + "Changing source head, helper/cut domain, operation alphabet or caller boundary without recording the new scope.", + "Treating an archived proposal or local numerical pass as complete supplier admission." + ], + "starting_points": [ + "docs/research/current-priorities.md", + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md" + ] + }, + "outcome": "negative-result", + "priority_revision": 8, + "schema_version": 1, + "scope_change_reason": "Extends #7323 from exactly two transfers to all exact triple and quadruple choices while refreshing the complete invoice to #7334.", + "scope_status": "changed", + "stop_rule": "Authenticate price and all keys first. Exhaust 25,350 cases or 35 seconds per gate, then stop when no unit-body endpoint survives.", + "task_id": "joint-query-controller" +} diff --git a/research/p104-three-four-type-b-phase-transfers/VERIFICATION.md b/research/p104-three-four-type-b-phase-transfers/VERIFICATION.md new file mode 100644 index 0000000000..de02b59d10 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/VERIFICATION.md @@ -0,0 +1,32 @@ +# Verification and source pins + +[PROVENANCE.json](PROVENANCE.json) binds the source commits, exact Git blobs +and SHA-256 values for the caller, price helpers and predecessor engines. +The exact caller's uncompressed bytes are SHA-256 +`255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc`. +The preceding two-transfer price is a generated receipt pinned by #7323's +public hash manifest. The #7334 independent admission and full signed +invoice readback are included as immutable campaign receipts. The package +reproduces the new exclusions and uses that prior admitted comparator. + +[LOCAL-PINS.json](LOCAL-PINS.json) pins the package inputs, engines and +receipt manifest by path. [receipts/SHA256.json](receipts/SHA256.json) +pins the deterministic plaintext outputs. Use `--out fresh-receipts` +to materialize `PRICE.json`, `KEYS.json`, `MODULAR.json`, `EXACT.json` +and `COMPARE.json` without prior temporary state or network access. + +Both original science runners used CPython 3.12.14 with assertions. +The primary gate took 0.29 s and the independent exact gate took 0.49 s. +The independent moved-root gate took 0.42 s and reproduced its exact +receipt. Both were bounded by 35 runner seconds with 32 seconds +cooperative. The independent engine retains genuine cancellation controls +at four, six and eight clocks and compares mutated dense probes to literal +rational recurrence. The modular engine checks cancellation, a changed +reflection, and the required basis fallback after a passing dense probe. +The package rejects a caller with an added byte before reporting any +exact endpoint receipt. + +No nonunit-body, full Laurent, changed native, compiler, precision, tape +or outer candidate replay was required after all keys failed the first +necessary gate. The five inherited assumptions and the selected record +are separate from the finite endpoint exclusion. diff --git a/research/p104-three-four-type-b-phase-transfers/VERIFY.json b/research/p104-three-four-type-b-phase-transfers/VERIFY.json new file mode 100644 index 0000000000..ca057fc005 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/VERIFY.json @@ -0,0 +1,14 @@ +{ + "commands": [ + { + "argv": ["{python}", "-I", "-B", "{package}/replay.py"], + "checks": "Regenerate the complete signed price and all 25,350 keys. Reproduce every modular and independent exact rational exclusion, check per-key agreement, and reject changed caller bytes.", + "timeout_seconds": 90 + } + ], + "inputs": [], + "python": "3.12", + "requirements": [], + "schema_version": 1, + "status": "ready" +} diff --git a/research/p104-three-four-type-b-phase-transfers/engines/four_edits.py b/research/p104-three-four-type-b-phase-transfers/engines/four_edits.py new file mode 100644 index 0000000000..7272d777ee --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/engines/four_edits.py @@ -0,0 +1,242 @@ +"""Independent exact four-edit endpoint gate at q=-1 and body=1.""" +from argparse import ArgumentParser +from fractions import Fraction +from hashlib import sha256 +from itertools import combinations, product +import json +from math import lcm +from pathlib import Path +from time import monotonic + +CALLER_HEAD = '07a76c5e2738882c0cb322278e56f6cae3c9885d' +COMPARATOR = '9d0119eb12fbd9fa534b48cd37b68e7099757b91' +CALLER_SHA = '255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc' +ADMISSION_SHA = '41b8a189dffeb768e5843446cdc469f9cc2f0aa038d0a593cf2be43aa009a9a3' +CASE_LIMIT = 1950 +SECONDS = 27 + + +def no_duplicates(rows): + value = dict(rows) + if len(value) != len(rows): + raise ValueError('duplicate input key') + return value + + +def authenticated_json(path, expected): + raw = path.read_bytes() + if sha256(raw).hexdigest() != expected: + raise ValueError('changed input: ' + path.name) + return json.loads(raw, object_pairs_hook=no_duplicates) + + +def unit_vector(n, i): + value = [Fraction(0)] * n + value[i] = Fraction(1) + return value + + +def signed(power): + return 1 if power % 2 == 0 else -1 + + +def decode(event, offset): + if event[0] == 'J': + a, b, left, right = event[3] + return ('shears', a - offset, b - offset, -Fraction(left), -Fraction(right)) + if event[0] != 'B': + return None + op, field, *args = event[1:] + role = field - offset + if op == 'ADD': + return ('add', role, args[0] - offset, Fraction(args[1])) + if op == 'QUERY': + return ('add', role, args[0] - offset, signed(args[1])) + if op == 'SWAP': + return ('swap', role, args[0] - offset) + if op == 'SCALE': + return ('scale', role, Fraction(args[0])) + if op == 'IDLE_ODD': + return ('scale', role, signed(args[1])) + assert op in ('IDLE_ONE', 'LAMBDA') + return None + + +def update(vector, gate): + if gate is None: + return + opcode, a, b, *extra = gate + if opcode == 'add': + vector[a] += extra[0] * vector[b] + elif opcode == 'scale': + vector[a] *= b + elif opcode == 'swap': + vector[a], vector[b] = vector[b], vector[a] + else: + assert opcode == 'shears' + left, right = extra + vector[a] += left * vector[b] + vector[b] += right * vector[a] + + +def old_trajectories(gates, sites, n, old_diagonal=None): + # Keep literal chronological forwards separate from per-case edit evaluation. + rows = {clock: [] for clock in sites} + for col in range(n): + vector = unit_vector(n, col) + for clock, gate in enumerate(gates): + update(vector, gate) + if clock in sites: + rows[clock].append(vector[sites[clock]]) + if old_diagonal is not None: + expected = unit_vector(n, col) + expected[col] *= old_diagonal[col] + assert vector == expected, ('old endpoint column', col) + + gains, ends = {}, {} + for origin, role in sites.items(): + vector = unit_vector(n, role) + for clock in range(origin + 1, len(gates)): + update(vector, gates[clock]) + if clock in sites: + gains[origin, clock] = vector[sites[clock]] + ends[origin] = vector + + denominator = lcm(*(x.denominator for row in rows.values() for x in row), + *(x.denominator for x in gains.values()), + *(x.denominator for row in ends.values() for x in row)) + rows = {k: tuple(int(v * denominator) for v in row) for k, row in rows.items()} + gains = {k: int(v * denominator) for k, v in gains.items()} + ends = {k: tuple(int(v * denominator) for v in row) for k, row in ends.items()} + return denominator, rows, gains, ends + + +def differences(data, clocks, col): + d, rows, gains, ends = data + powers = [d ** i for i in range(len(clocks) + 2)] + injected = [] + for j, clock in enumerate(clocks): + arrived = rows[clock][col] * powers[j] + for i, previous in enumerate(clocks[:j]): + arrived += injected[i] * gains[previous, clock] * powers[j - i - 1] + injected.append(-2 * arrived) + if not any(injected): + return + weights = [v * powers[len(clocks) - i - 1] for i, v in enumerate(injected)] + denominator = powers[len(clocks) + 1] + for row, endpoint in enumerate(zip(*(ends[c] for c in clocks))): + numerator = sum(a * b for a, b in zip(weights, endpoint)) + if numerator: + yield row, Fraction(numerator, denominator) + + +def first_difference(data, clocks, n): + for col in range(n): + for row, value in differences(data, clocks, col): + return col, row, value + return None + + +def direct(gates, sites, clocks, col, n): + old = unit_vector(n, col) + changed = old.copy() + for clock, gate in enumerate(gates): + update(old, gate) + update(changed, gate) + if clock in clocks: + changed[sites[clock]] *= -1 + return {i: value - before for i, (before, value) in enumerate(zip(old, changed)) if value != before} + + +def controls(): + gates = [('scale', 0, -1), None, ('scale', 0, -1), None] + sites = {0: 0, 1: 1, 2: 0, 3: 1} + data = old_trajectories(gates, sites, 2, (1, 1)) + assert first_difference(data, (0, 1), 2) == (0, 0, Fraction(-2)) + assert first_difference(data, (2, 3), 2) == (0, 0, Fraction(-2)) + assert first_difference(data, (0, 1, 2, 3), 2) is None + gates = [('scale', 0, -1), ('shears', 0, 1, Fraction(-1, 2), Fraction(1, 3)), None, + ('swap', 0, 2), ('scale', 1, -1), ('add', 0, 2, Fraction(-3, 5)), None] + sites = {0: 0, 2: 1, 4: 1, 6: 2} + data = old_trajectories(gates, sites, 3) + edits = [(0,), (0, 2), (0, 2, 4, 6)] + for clocks, col in product(edits, range(3)): + assert dict(differences(data, clocks, col)) == direct(gates, sites, clocks, col, 3) + return {'two_individually_failing_pairs_cancel': True, 'fractional_noncommuting_direct_columns': 9} + + +def run(caller, control_result, price, price_sha, started): + assert caller['stages'] == 17 + block = caller['types']['B'] + offset, n = block['offset'], block['roles'] + assert (offset, n, len(block['ports'])) == (36, 36, 8) + old, new = {}, {} + for clock, event in enumerate(caller['events']): + if event[:2] == ['B', 'IDLE_ODD']: + assert len(event[3]) == 1 and event[4:] == [-1] + old[clock] = (event[2] - offset, event[3]) + elif event[:2] == ['B', 'IDLE_ONE'] and len(event[3]) > 1: + new[clock] = (event[2] - offset, event[3]) + assert len(old) == 4 and len(new) == 26 + stock = old | new + assert all(0 <= role < n and len(set(mask)) == len(mask) and all(1 <= s <= 17 for s in mask) + for role, mask in stock.values()) + cases = sorted(tuple(sorted(odd + even)) for odd in combinations(old, 2) for even in combinations(new, 2)) + assert len(cases) == len(set(cases)) == CASE_LIMIT + priced = [] + for item in price['keys']: + assert len(item['odd']) == len(item['even']) == 2 + assert all(clock in old for clock in item['odd']) and all(clock in new for clock in item['even']) + shape = sorted(len(new[clock][1]) for clock in item['even']) + assert item['price'] == ','.join(map(str, shape)) and item['price'] in price['prices'] + priced.append(tuple(sorted(item['odd'] + item['even']))) + assert sorted(priced) == cases, 'price scope differs from literal caller' + gates = [decode(event, offset) for event in caller['events']] + data = old_trajectories(gates, {c: x[0] for c, x in stock.items()}, n, + [signed(x[0]) for x in block['diagonal']]) + records = [] + for key in cases: + if monotonic() - started >= SECONDS: + break + mismatch = first_difference(data, key, n) + if mismatch is None: + records.append({'key': key, 'first_difference': None}) + else: + col, row, value = mismatch + records.append({'key': key, 'first_difference': [col + offset, row + offset, str(value)]}) + unvisited = cases[len(records):] + return {'status': 'HIT_TIME_CAP' if unvisited else 'EXHAUSTED', 'cases': CASE_LIMIT, + 'comparator_head': COMPARATOR, 'caller_head': CALLER_HEAD, 'caller_sha256': CALLER_SHA, + 'admission_sha256': ADMISSION_SHA, 'price_sha256': price_sha, 'controls': control_result, + 'odd_clocks': sorted(old), 'even_clocks': sorted(new), 'old_endpoint_columns': n, + 'common_denominator': data[0], 'records': records, 'tested': len(records), + 'survivors': [r['key'] for r in records if r['first_difference'] is None], 'unvisited': unvisited} + + +def main(): + started = monotonic() + parser = ArgumentParser(description=__doc__) + parser.add_argument('--inputs', type=Path, default=Path('inputs')) + parser.add_argument('--price', type=Path) + parser.add_argument('--price-sha') + parser.add_argument('--controls-only', action='store_true') + args = parser.parse_args() + assert __debug__ + control_result = controls() + if args.controls_only: + print(json.dumps(control_result, sort_keys=True)) + return + if args.price is None or args.price_sha is None: + parser.error('authenticate the price-before-decoding receipt first') + price = authenticated_json(args.price, args.price_sha) + assert price['head'] == COMPARATOR and price['caller_head'] == CALLER_HEAD and price['copies'] == 17 + assert price['input_sha256']['inputs/7113/CALLER.json'] == CALLER_SHA + admission = authenticated_json(args.inputs / 'ADMITTED.json', ADMISSION_SHA) + assert admission['status'] == 'independently_reproduced_comparable' + assert admission['head'] == COMPARATOR and admission['caller_sha256'] == CALLER_SHA + caller = authenticated_json(args.inputs / 'CALLER.json', CALLER_SHA) + print(json.dumps(run(caller, control_result, price, args.price_sha, started), indent=2, sort_keys=True)) + + +if __name__ == '__main__': + main() diff --git a/research/p104-three-four-type-b-phase-transfers/engines/multiple_edits.py b/research/p104-three-four-type-b-phase-transfers/engines/multiple_edits.py new file mode 100644 index 0000000000..58f0879a87 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/engines/multiple_edits.py @@ -0,0 +1,162 @@ +"""Exact integer-scaled causal impulse replay on the frozen R84 keys.""" +from argparse import ArgumentParser +from collections import Counter +from fractions import Fraction as Q +from hashlib import sha256 +from itertools import combinations +from json import dumps, loads +from pathlib import Path +from runpy import run_path +from time import monotonic + +HERE = Path(__file__).resolve().parent +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +PINS = { + "price": "6bf60b702f2d8b879fe0fca3c6c93dc5a580ae264f19eb87d27d0268d29b63bf", + "keys": "2bb549fc7738efb4a159181094c771218903099be624a85474599683b73acde2", + "admission": "c95300e9bca27e44a25c82d794f88cbf70757c142806b0e4c590ea29feb81a13", + "caller": "255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc", + "engine": "140c10fb4365bb5e254df5f9b0a7d89ad54b901ceaf36d528e2ff4baa4bd3c80", +} +CAP, SECONDS, COOPERATIVE = 25350, 35, 32 + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def read(path, key): + raw = path.read_bytes() + need(sha256(raw).hexdigest() == PINS[key], f"changed input {key}") + return raw + + +def stock(caller, offset): + odd, even = {}, {} + for clock, e in enumerate(caller["events"]): + if e[:2] == ["B", "IDLE_ODD"]: + need(len(e[3]) == 1 and e[4:] == [-1], "invalid signed singleton") + odd[clock] = [e[2] - offset, e[3]] + elif e[:2] == ["B", "IDLE_ONE"] and len(e[3]) > 1: + even[clock] = [e[2] - offset, e[3]] + return odd, even + + +def prepared(data, n): + d, rows, gains, ends = data + dense = tuple((j + 1) ** 2 for j in range(n)) + observations = {c: sum(x * y for x, y in zip(row, dense, strict=True)) for c, row in rows.items()} + return dense, observations, tuple(d ** k for k in range(10)) + + +def dense_difference(data, clocks, observations, powers): + _, _, gains, ends = data + injections = [] + for j, c in enumerate(clocks): + arrived = observations[c] * powers[j] + for i, previous in enumerate(clocks[:j]): + arrived += injections[i] * gains[previous, c] * powers[j - i - 1] + injections.append(-2 * arrived) + if not any(injections): + return None + weights = [a * powers[len(clocks) - i - 1] for i, a in enumerate(injections)] + denominator = powers[len(clocks) + 1] + for row, endpoint in enumerate(zip(*(ends[c] for c in clocks), strict=True)): + value = sum(a * b for a, b in zip(weights, endpoint, strict=True)) + if value: + return row, Q(value, denominator) + return None + + +def controls(engine): + inherited = engine["controls"]() + for n in (6, 8): + clocks = tuple(range(n)) + roles = ([0, 1, 0, 1] + [2, 2] * 2)[:n] + gates = [None] * n + data = engine["old_trajectories"](gates, dict(enumerate(roles)), 3) + dense, obs, powers = prepared(data, 3) + need(dense_difference(data, clocks, obs, powers) is None and + engine["first_difference"](data, clocks, 3) is None, "extended cancellation rejected") + bad = roles[:-1] + [1] + data = engine["old_trajectories"](gates, dict(enumerate(bad)), 3) + dense, obs, powers = prepared(data, 3) + got = dense_difference(data, clocks, obs, powers) + need(got is not None and engine["first_difference"](data, clocks, 3) is not None, + "corrupt extended cancellation accepted") + row, value = got + direct = sum(dense[j] * engine["direct"](gates, dict(enumerate(bad)), clocks, j, 3).get(row, 0) + for j in range(3)) + need(direct == value, "dense integer scaling differs from literal recurrence") + return inherited | {"six_and_eight_clock_simultaneous_cancellation": True, + "dense_direct_bad_controls": 2} + + +def main(args): + read(HERE / "four_edits.py", "engine") + engine = run_path(str(HERE / "four_edits.py")) + tests = controls(engine) + if args.controls_only: + return {"controls": tests} + started = monotonic() + price = loads(read(args.price, "price")) + keys = loads(read(args.keys, "keys")) + admission = loads(read(args.admission, "admission")) + need(price["head"] == admission["head"] == HEAD and admission["exit"] == 0 and + price["keys_sha256"] == PINS["keys"] and price["caller_sha256"] == PINS["caller"], + "wrong price or admission") + need(price["limits"]["first_keys"] == CAP and price["limits"]["first_runner_seconds"] == SECONDS, + "wrong frozen scope cap") + caller = loads(read(args.caller, "caller")) + block = caller["types"]["B"] + offset, n = block["offset"], block["roles"] + need((caller["stages"], offset, n, len(block["ports"])) == (17, 36, 36, 8), "wrong Type B signature") + odd, even = stock(caller, offset) + need({str(k): v for k, v in odd.items()} == price["odd_jobs"] and + {str(k): v for k, v in even.items()} == price["even_jobs"], "literal phase inventory differs") + reconstructed = [ + {"odd": list(o), "even": list(e), "price": ",".join(map(str, sorted(len(even[c][1]) for c in e)))} + for m in (3, 4) for o in combinations(sorted(odd), m) for e in combinations(sorted(even), m) + ] + need(keys == reconstructed and len(keys) == CAP, "literal keys differ from sealed price") + site_roles = {t: v[0] for t, v in (odd | even).items()} + gates = [engine["decode"](event, offset) for event in caller["events"]] + diagonal = [engine["signed"](row[0]) for row in block["diagonal"]] + data = engine["old_trajectories"](gates, site_roles, n, diagonal) + dense, obs, powers = prepared(data, n) + outcomes = [] + for spec in keys: + if len(outcomes) >= CAP or monotonic() - started >= COOPERATIVE: + break + clocks = tuple(sorted(spec["odd"] + spec["even"])) + match = dense_difference(data, clocks, obs, powers) + if match: + row, value = match + result = {"status": "excluded", "dense_witness": [row + offset, str(value)]} + else: + witness = engine["first_difference"](data, clocks, n) + if witness is None: + result = {"status": "specialization_survives", "basis_columns": n} + else: + col, row, value = witness + result = {"status": "excluded", "basis_witness": [col + offset, row + offset, str(value)]} + outcomes.append({"key": clocks, "price": spec["price"], **result}) + unvisited = keys[len(outcomes):] + return {"status": "CAPPED" if unvisited else "EXHAUSTED", "head": HEAD, "input_sha256": PINS, + "case_cap": CAP, "runner_cap_seconds": SECONDS, "cooperative_seconds": COOPERATIVE, + "controls": tests, "old_endpoint_columns": n, "dense_probe": dense, "common_denominator": data[0], + "tested": len(outcomes), "outcomes": outcomes, "unvisited": unvisited, + "survivors": [r["key"] for r in outcomes if r["status"] == "specialization_survives"], + "counts": dict(Counter(row["status"] for row in outcomes))} + + +if __name__ == "__main__": + p = ArgumentParser() + p.add_argument("--controls-only", action="store_true") + for name in ("price", "keys", "admission", "caller"): + p.add_argument("--" + name, type=Path) + args = p.parse_args() + need(args.controls_only or all(getattr(args, key) for key in ("price", "keys", "admission", "caller")), + "all pinned inputs required") + print(dumps(main(args), sort_keys=True, separators=(",", ":"))) diff --git a/research/p104-three-four-type-b-phase-transfers/engines/quote.py b/research/p104-three-four-type-b-phase-transfers/engines/quote.py new file mode 100644 index 0000000000..91866580a7 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/engines/quote.py @@ -0,0 +1,172 @@ +"""Predecode rank-multiset price and exact 3+3/4+4 Type B stock.""" +from argparse import ArgumentParser +from collections import Counter +from fractions import Fraction as Q +from hashlib import sha256 +from itertools import combinations +from json import dumps, loads +from pathlib import Path +from runpy import run_path + +ROOT = Path(__file__).resolve().parent / "inputs" +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +CALLER_HEAD = "07a76c5e2738882c0cb322278e56f6cae3c9885d" +TARGET = Q("0.0040075385047236") +PINS = { + "R59-PRICE.json": "b73057381860987c6de1666205e91a0e3d116a8299d8aa425682f5960609c21f", + "7113-CALLER.json": "255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc", + "pricing.py": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182", + "7334-ADMITTED.json": "c95300e9bca27e44a25c82d794f88cbf70757c142806b0e4c590ea29feb81a13", + "7334-READBACK.json": "337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82", + "derivative_check.py": "348c8b2de72f1f112cb1337eca9d29ca96c85a7ad903beecafb1a2a1221f408e", +} + + +def unique(rows): + value = dict(rows) + if len(rows) != len(value): + raise ValueError("duplicate JSON input key") + return value + + +def authenticated(): + files = {} + for name, expected in PINS.items(): + raw = (ROOT / name).read_bytes() + if sha256(raw).hexdigest() != expected: + raise ValueError("changed input " + name) + files[name] = raw + return files + + +def ranks(data): + return Counter({int(k): n for k, n in data.items()}) + + +def delta_for(multiset): + change = Counter() + for m in multiset: + change.update({9: 8, 8 * m: 8, 8: -8, 8 * m + 1: -8}) + assert sum(change.values()) == sum(r * v for r, v in change.items()) == 0 + return change + + +def combine(old, delta): + result = old.copy() + result.update(delta) + return result + + +def interval(values): + return list(map(str, values)) + + +def main(args): + files = authenticated() + old = loads(files["R59-PRICE.json"], object_pairs_hook=unique) + admission = loads(files["7334-ADMITTED.json"], object_pairs_hook=unique) + readback = loads(files["7334-READBACK.json"], object_pairs_hook=unique) + assert admission["head"] == readback["head"] == HEAD and admission["exit"] == 0 + assert admission["caller"] == readback["caller_head"] == old["caller_head"] == CALLER_HEAD + assert admission["caller_sha256"] == old["input_sha256"]["inputs/7113/CALLER.json"] == PINS["7113-CALLER.json"] + assert readback["copies"] == old["copies"] == 17 and readback["empty_root_credits"] == 0 + assert old["complete_targets"] == readback["targets"] + odd = {int(k): v for k, v in old["odd_jobs"].items()} + even = {int(k): v for k, v in old["even_jobs"].items()} + assert sorted(odd) == [1339, 1340, 2970, 2971] and all(len(v[1]) == 1 for v in odd.values()) + assert len(even) == 26 and not odd.keys() & even.keys() + assert Counter(len(v[1]) for v in even.values()) == {2: 4, 3: 4, 4: 4, 5: 4, 6: 4, 7: 4, 8: 2} + + paid, productive = ranks(readback["paid"]), ranks(readback["targets"]) + net = productive.copy() + net.subtract(paid) + assert sum(paid.values()) == 110519 and sum(productive.values()) == 22461 + assert sum(r * n for r, n in net.items()) == 1424 + lo, hi = map(Q, admission["crossing"]) + assert (lo, hi) == tuple(map(Q, readback["new_raw_interval"])) + bit = Q(readback["bit_premise"]) + assert lo < hi < bit < TARGET + tariff = run_path(str(ROOT / "pricing.py")) + cost = tariff["cost"] + current = cost(net, hi) + assert current[1] < 0 + probe = hi + Q(1, 10**9) + + keys = [] + multiset_classes = {} + by_count = {} + for n, cases, classes in ((3, 10400, 83), (4, 14950, 203)): + marks = [] + stock = Counter() + for evens in combinations(sorted(even), n): + m = tuple(sorted(len(even[t][1]) for t in evens)) + kind = ",".join(map(str, m)) + marks.append((evens, kind)) + stock[m] += 1 + assert len(stock) == classes + groups = list(combinations(sorted(odd), n)) + for odds in groups: + for evens, kind in marks: + keys.append({"odd": odds, "even": evens, "price": kind}) + assert len(groups) * len(marks) == cases + for m, count in sorted(stock.items()): + delta = delta_for(m) + candidate = combine(net, delta) + new_paid = paid.copy() + new_paid.subtract(delta) + assert sum(new_paid.values()) == 110519 and all(v >= 0 for v in new_paid.values()) + credit, margin = cost(delta, hi), cost(candidate, hi) + assert 0 < credit[0] <= credit[1] < 1 and margin[0] > 0 + multiset_classes[",".join(map(str, m))] = { + "mask_sizes": m, "receiver_combinations": count, "keys": len(groups) * count, + "paid_delta": {r: -v for r, v in delta.items() if v}, "credit": interval(credit), + "complete_margin_at_crossing_upper": interval(margin), + "complete_margin_at_probe": interval(cost(candidate, probe)), + "added_paid_rank_one_upper_at_crossing": str(margin[1] - 1), + } + best = tuple(sorted((len(v[1]) for v in even.values()), reverse=True)[:n][::-1]) + best_delta = delta_for(best) + new = combine(net, best_delta) + charged = new.copy() + charged[1] -= 1 + derivative = run_path(str(ROOT / "derivative_check.py"))["derivative"](charged, lo, bit, tariff) + charged_lower = cost(charged, lo) + assert derivative[1] < 0 and charged_lower[1] < 0 + worst_at_target = cost(new, TARGET) + assert worst_at_target[1] < 0 + best_name = ",".join(map(str, best)) + assert Q(multiset_classes[best_name]["credit"][1]) == max( + Q(r["credit"][1]) for r in multiset_classes.values() if len(r["mask_sizes"]) == n) + by_count[n] = { + "keys": cases, "classes": classes, "maximum_multiset": best, + "compatible_gross_upper": multiset_classes[best_name]["credit"][1], + "one_extra_rank_one_at_crossing_lower": interval(charged_lower), + "maximum_complete_derivative_through_BIT": interval(derivative), + "maximum_target_credit": interval(cost(best_delta, TARGET)), + "maximum_target_margin": interval(worst_at_target), + } + assert len(keys) == 25350 and len(multiset_classes) == 286 + key_bytes = (dumps(keys, sort_keys=True, separators=(",", ":")) + "\n").encode() + with args.keys_out.open("xb") as out: + out.write(key_bytes) + print(dumps({ + "head": HEAD, "caller_head": CALLER_HEAD, "caller_sha256": PINS["7113-CALLER.json"], + "input_sha256": PINS, "keys_sha256": sha256(key_bytes).hexdigest(), "keys": len(keys), + "odd_jobs": odd, "even_jobs": even, "prices_by_mask_multiset": multiset_classes, + "stock_by_number_of_transfers": by_count, "complete_paid": paid, "complete_targets": productive, + "signed_surplus": 1424, "copies": 17, "ports": 8, "empty_root_credit": 0, + "crossing": [str(lo), str(hi)], "old_complete_margin": interval(current), + "price_only_probe": str(probe), "old_probe_margin": interval(cost(net, probe)), + "retained_BIT": str(bit), "fixed_moonshot": str(TARGET), "old_target_margin": interval(cost(net, TARGET)), + "whole_compatible_upper": by_count[4]["compatible_gross_upper"], + "limits": {"first_keys": 25350, "first_runner_seconds": 35, "first_cooperative_seconds": 32, + "nonunit_keys": 16, "nonunit_runner_seconds": 25, "formal_keys": 2, + "formal_runner_seconds": 60, "physical_keys": 1, "physical_runner_seconds": 90}, + "scope": "Only exactly 3 or 4 simultaneous fixed-clock transfers, no altered body masks, J blocks or owner roles. Price assumes no additional paid child and no ancillary costs. Caller authenticated without decode." + }, sort_keys=True, indent=2)) + + +if __name__ == "__main__": + parser = ArgumentParser() + parser.add_argument("--keys-out", type=Path, required=True) + main(parser.parse_args()) diff --git a/research/p104-three-four-type-b-phase-transfers/engines/reflection_gate.py b/research/p104-three-four-type-b-phase-transfers/engines/reflection_gate.py new file mode 100644 index 0000000000..926e8f47c0 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/engines/reflection_gate.py @@ -0,0 +1,92 @@ +"""Modular signed reflection products for three/four Type B phase transfers.""" +from collections import Counter +from hashlib import sha256 +import json +from pathlib import Path +from runpy import run_path +import sys +from time import monotonic + +HEAD="aaeec8c0acf01e99a5f331ef363a698d9c084ace" +PRICE="6bf60b702f2d8b879fe0fca3c6c93dc5a580ae264f19eb87d27d0268d29b63bf" +KEYS="2bb549fc7738efb4a159181094c771218903099be624a85474599683b73acde2" +PINS={"inputs/CALLER.json":"255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc", + "inputs/two_phase.py":"ad3b5efd85a56c6c60c747cf45cbd1b7174ab9a714142ab069648261bcbf6631", + "inputs/screen.py":"cdf54b266ac31fd0efe544badbb9840598d4c63c4d3cd363f60ae9a74cc4b256"} +P=65521 + + +def checked(path,want): + b=path.read_bytes() + if sha256(b).hexdigest()!=want: + raise ValueError(f"changed dependency {path.name}") + return b + + +def sparse(v): + return [(i,x) for i,x in enumerate(v) if x] + + +def witness(refl,clocks,vec): + v=vec.copy() + for k in clocks: + col,row=refl[k] + t=-2*sum(a*v[i] for i,a in row)%P + if t: + for i,a in col: + v[i]=(v[i]+t*a)%P + return next(([i,(x-y)%P] for i,(x,y) in enumerate(zip(v,vec)) if x!=y),None) + + +def controls(): + ref={0:([(0,1)],[(0,1)]),1:([(0,1)],[(0,1)]),2:([(1,1)],[(1,1)])} + assert witness(ref,[0,1],[3,4]) is None + assert witness(ref,[0,2],[3,4])==[0,P-6] + assert witness(ref,[2],[3,0]) is None and witness(ref,[2],[0,1])==[1,P-2] + return ["two cancel", "changed reflection", "probe pass needs all columns"] + + +def main(): + root=Path(sys.argv[1]) + price=json.loads(checked(root/"price/PRICE.json",PRICE)) + keys=json.loads(checked(root/"price/KEYS.json",KEYS)) + assert price["head"]==HEAD and price["keys_sha256"]==KEYS + assert len(keys)==25350 + raw={k:checked(root/k,v) for k,v in PINS.items()} + caller=json.loads(raw["inputs/CALLER.json"]) + prior=run_path(str(root/"inputs/two_phase.py")) + decoder=run_path(str(root/"inputs/screen.py")) + site=prior["check_stock"](caller,price) + dense=list(range(1,37)) + checks=controls() + deadline=monotonic()+32 + refl={k:tuple(map(sparse,v)) for k,v in prior["prefixes"](caller,site,decoder,[1]*17).items()} + done,hits=[],[] + for index,key in enumerate(keys): + if monotonic()>=deadline: + break + clocks=sorted(key["odd"]+key["even"]) + assert len(clocks)==2*len(key["odd"]) and len(set(clocks))==len(clocks) + bad=witness(refl,clocks,dense) + if bad: + done.append([index,"dense",*bad]) + continue + for j in range(36): + basis=[int(i==j) for i in range(36)] + bad=witness(refl,clocks,basis) + if bad: + done.append([index,j,*bad]) + break + else: + done.append([index,"provisional"]) + hits.append(index) + tested=Counter(len(keys[i]["odd"]) for i,*_ in done) + print(json.dumps(dict(head=HEAD,price_sha256=PRICE,keys_sha256=KEYS,inputs=PINS, + q=-1,prime=P,body="all one",dense_probe=dense,controls=checks, + case_cap=25350,seconds_cap=32,status="EXHAUSTED" if len(done)==len(keys) else "CAPPED", + tested_by_transfer_count=tested,records=done,provisional=hits, + unvisited_index_interval=[len(done),len(keys)]),separators=(",",":"),sort_keys=True)) + + +if __name__=="__main__": + main() diff --git a/research/p104-three-four-type-b-phase-transfers/inputs/7113-CALLER.json.gz b/research/p104-three-four-type-b-phase-transfers/inputs/7113-CALLER.json.gz new file mode 100644 index 0000000000..2479c3a615 Binary files /dev/null and b/research/p104-three-four-type-b-phase-transfers/inputs/7113-CALLER.json.gz differ diff --git a/research/p104-three-four-type-b-phase-transfers/inputs/7334-ADMITTED.json b/research/p104-three-four-type-b-phase-transfers/inputs/7334-ADMITTED.json new file mode 100644 index 0000000000..464c89e45c --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/inputs/7334-ADMITTED.json @@ -0,0 +1,58 @@ +{ + "assumptions": [ + "native_all_columns", + "owned_erasure", + "compiler", + "precision_tape", + "analytic_recovery" + ], + "base": "e54523517d0f03e58352e647c403a5af3e525a57", + "caller": "07a76c5e2738882c0cb322278e56f6cae3c9885d", + "caller_sha256": "255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc", + "crossing": [ + "0.00364665195644044790699554028334161", + "0.00364665195644044790699554028334162" + ], + "end": "2026-11-11T23:04:43Z", + "exit": 0, + "head": "aaeec8c0acf01e99a5f331ef363a698d9c084ace", + "hosted_at_admission": "plan and historical success; candidate replay in progress", + "inputs": { + "EARLY-RESULT.json": "ad1ca9b2e2febbf80d9bf8b6ceef14ff90fcc29ef9358310e551628eb1706649", + "INPUTS.json": "abedac59097a1c35c27d91cbdb07207bc562a64743bc406d13c94a8bc970592d", + "NATIVE-RESULT.json": "c6d1b00a83185ab0062397b363258b1f3f6685d755e9c1d4f7d3e7e511240812", + "PROPOSED-CLAIM.json": "6e31241944c123d2bd4aa8bc94d833b44b3d889bd6d9aafc579108f416b45f03", + "RESULT.json": "7f2d587c59f063b01f1e8b320084a7f0943f2f05d65e3e0f5e80448c6c8e8194", + "SOURCES.json": "ac7b4473035af648d6073e78b6c39675e706e8194b346bb55ed62a0adc81d593", + "VERIFY.json": "ede7dd2dd3733b9a73f72af9dd7edfe819b49b859c5c76e227ec82cb9c220513", + "WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a" + }, + "kappa": "0.00364665195644", + "ours": "0", + "peer_gain": "0.000000430519994", + "prior_kappa": "0.003646221436446", + "receipt": { + "peer-prep/IDENTITIES.json": "f4d3f6ca2d87f8cd68c01ac9f77b69bd5a796f92bd567cea8afe3ac7c72e8e4b", + "peer-prep/STATIC.json": "500cc563b7dac8b1de1faf1dee9b820e73152dfddc15a650cd1191edd39e8c79", + "peer-price/RANK-STOCK.json": "4a7841699dd17688f6aada5c902a2a91e94558b2b1b4460c46b0e55aa95b3f9f", + "peer-price/READBACK.json": "337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82", + "peer/COMMAND.txt": "714bfab024155d8216f3ef99f3ee7627ddc35ab341c486ac6bd53c476b757130", + "peer/COMMIT.stdout": "597470d8132a3812deb3624a859546c0c13d52b094fd6fc61e7416941130bd70", + "peer/END-UTC.txt": "9c46923c616c14da5b8ed503e1652021d7bd409a10ec91a78a03263013fba08a", + "peer/METADATA.stdout": "5873404cb4424dca918a00d503569f3c29a3190fd029a007e1afb2006399f647", + "peer/RUN.exit": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "peer/RUN.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "peer/RUN.stdout": "d589626c7581fbb9928bc615364cfee49deb62dfc0a39a903417ca62be89cf8c", + "peer/START-UTC.txt": "5b78fd6d42a2b42206891318c08e6014de57d7ca46b0201cd11a166f452210f7" + }, + "source_history": "exact anchored base and recursive package provenance, sparse shallow stock wrapper not executed", + "stages": { + "caller": "PASS_HELPER_319_FUSED_CALLER 91166298911/25000000000000", + "early": "PASS_HELPER_319_EXACT_NATIVE_AND_SIGNED_PRICE 0.00364665195644", + "frontier": "PASS_HELPER_319_FUSED_FRONTIER_PROPOSAL 91166298911/25000000000000", + "native": "PASS_HELPER_319_FUSED_NATIVE 3646017316711/1000000000000000" + }, + "start": "2026-11-11T22:54:48Z", + "status": "independently_reproduced_comparable", + "tree": "fa98712a459b20c10240450097c87de433f8a750" +} diff --git a/research/p104-three-four-type-b-phase-transfers/inputs/7334-READBACK.json b/research/p104-three-four-type-b-phase-transfers/inputs/7334-READBACK.json new file mode 100644 index 0000000000..625b508eea --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/inputs/7334-READBACK.json @@ -0,0 +1,188 @@ +{ + "assumptions": [ + "native_all_columns", + "owned_erasure", + "compiler", + "precision_tape", + "analytic_recovery" + ], + "bit_admitted": "12039/3125000", + "bit_claim_headroom": "3000951089/25000000000000", + "bit_premise": "376669/100000000", + "caller_head": "07a76c5e2738882c0cb322278e56f6cae3c9885d", + "claim": "91166298911/25000000000000", + "context_c": 2430, + "context_headroom": 1666, + "copies": 17, + "directed_bounds": { + "new_at_claim": [ + "347195197206460540909548691538238227127/2000000000000000000000000000000000000000000000000", + "1735975986032302704547743457691191192207/10000000000000000000000000000000000000000000000000" + ], + "new_at_old_crossing_upper": [ + "333717954993733063339209580360321337006028706669/2000000000000000000000000000000000000000000000000", + "1668589774968665316696047901801606685030143589709/10000000000000000000000000000000000000000000000000" + ], + "new_at_raw_lower": [ + "8890529086421014119/10000000000000000000000000000000000000000000000000", + "8890529086421080299/10000000000000000000000000000000000000000000000000" + ], + "new_at_raw_upper": [ + "-29866980917152322049/10000000000000000000000000000000000000000000000000", + "-29866980917152266101/10000000000000000000000000000000000000000000000000" + ], + "new_at_tested": [ + "1464673416007288863003441470091977383033/10000000000000000000000000000000000000000000000000", + "1464673416007288863003441470091977438357/10000000000000000000000000000000000000000000000000" + ], + "old_at_claim": [ + "-1668785950738799647054310634446839861363893886031/10000000000000000000000000000000000000000000000000", + "-66751438029551985882172425377873594454555753177/400000000000000000000000000000000000000000000000" + ], + "old_at_old_crossing_upper": [ + "-357270001119021587349/10000000000000000000000000000000000000000000000000", + "-357270001119021530951/10000000000000000000000000000000000000000000000000" + ] + }, + "empty_root_credits": 0, + "exact_gain": "215259997/500000000000000", + "exact_relative_percent": "21525999700/1823110718223", + "head": "aaeec8c0acf01e99a5f331ef363a698d9c084ace", + "incumbent": "1823110718223/500000000000000", + "main_boundaries": 104, + "native_grid": [ + 1125, + 25 + ], + "native_ingredient_claim": "3646017316711/1000000000000000", + "new_raw_interval": [ + "364665195644044790699554028334161/100000000000000000000000000000000000", + "182332597822022395349777014167081/50000000000000000000000000000000000" + ], + "old_raw_upper": "36462214364462343366888845568981/10000000000000000000000000000000000", + "ordinary": 782715464, + "ordinary_delta": 52088, + "ordinary_headroom": 217284536, + "outer_functional": 4, + "outer_strict": 54, + "outer_strict_slack": "299635334804355997/10000000000000000000000000000000000", + "owned_lifetimes": 73, + "owned_peak": 50, + "paid": { + "1": 68384, + "2": 14501, + "3": 14093, + "4": 3791, + "5": 5865, + "6": 238, + "7": 170, + "8": 741, + "9": 32, + "16": 416, + "24": 416, + "32": 416, + "40": 416, + "48": 416, + "56": 416, + "64": 208 + }, + "paid_delta": { + "1": -17, + "5": -17, + "6": 17 + }, + "paid_positions": 110519, + "parent": "9d0119eb12fbd9fa534b48cd37b68e7099757b91", + "path_pins": { + "dependencies/7298/pricing.py": { + "sha256": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182" + }, + "dependencies/7314/NATIVE-RESULT.json": { + "sha256": "336f463da5afe5b60bfd3b9f0ce8aeea5a5feb1f854613bf4218ba0b28b3371b" + }, + "dependencies/7314/PROPOSED-CLAIM.json": { + "sha256": "41a08c4b7d0b2de4af22bc778948a143027eb3065fff47b0400b6ded1cc52778" + }, + "dependencies/7314/RESULT.json": { + "sha256": "432191ca572c9221935787ebe392699e3a1ef4512b0bf4fbc704657321cc87ca" + }, + "dependencies/round65/price.json": { + "sha256": "25205ad2cf4230bd2b2b704eec9f96ec4a5486fd575b5599861b28ffdd15b00b" + }, + "receipts/EARLY-RESULT.json": { + "git_blob": "675d6cf2374f3384019dfd53b2bdffd845005f13", + "sha256": "ad1ca9b2e2febbf80d9bf8b6ceef14ff90fcc29ef9358310e551628eb1706649" + }, + "receipts/INPUTS.json": { + "git_blob": "95c53f4594287a72d9b586f10ee136d0a1686984", + "sha256": "abedac59097a1c35c27d91cbdb07207bc562a64743bc406d13c94a8bc970592d" + }, + "receipts/NATIVE-RESULT.json": { + "git_blob": "eb101307d4d0399efed96d88cf6d4c01ec9c7369", + "sha256": "c6d1b00a83185ab0062397b363258b1f3f6685d755e9c1d4f7d3e7e511240812" + }, + "receipts/PROOF.md": { + "git_blob": "7644e5571d583183ee93b686612b5ec4555f6911", + "sha256": "560de573bfd4563c16ca3c7308fa729b4188fabe802d8830f343c3873f75b59d" + }, + "receipts/PROPOSED-CLAIM.json": { + "git_blob": "6b491894580741e3e2c11a453722a0302db7b5d6", + "sha256": "6e31241944c123d2bd4aa8bc94d833b44b3d889bd6d9aafc579108f416b45f03" + }, + "receipts/README.md": { + "git_blob": "b3a055f4e0d334ce2e7df3310caaa0849eb3eba1", + "sha256": "b4db0eb83ab6a2f7151bed2da955a487f4816ec9d1976eccc21e54c2725490b0" + }, + "receipts/REFERENCE.json": { + "git_blob": "8859e243cc39546bcb1e257d95c19a658c455dc7", + "sha256": "3e66e054b803551f18b8670da0b2990a7d0eeb689dfc45b56dbcba295551da70" + }, + "receipts/REPLAY.txt": { + "git_blob": "0b8d8048c18740060f4b7f6d380a5f3a0f30ee53", + "sha256": "230984f4b8206ae4d0c0f18fbba86ff43a1a9623f8ed337cf1285360f9a67c0c" + }, + "receipts/RESULT.json": { + "git_blob": "3034a490f5b0656ae71495c99493c4ab1ac1f5c6", + "sha256": "7f2d587c59f063b01f1e8b320084a7f0943f2f05d65e3e0f5e80448c6c8e8194" + }, + "receipts/SOURCES.json": { + "git_blob": "6b97e903a6df8de437068a0e2907823885928053", + "sha256": "ac7b4473035af648d6073e78b6c39675e706e8194b346bb55ed62a0adc81d593" + }, + "receipts/VERIFY.json": { + "git_blob": "cc98ee2a5c5a79e670094a6f55c7cacda8fd330c", + "sha256": "ede7dd2dd3733b9a73f72af9dd7edfe819b49b859c5c76e227ec82cb9c220513" + }, + "receipts/construct.py": { + "git_blob": "89e923bd738dfc404ca76b7ae36f13844ac4bfbb", + "sha256": "ecb39578063d7f09153a85370a3b9bb7cbf8b36ff9891033a1cce7a2fe7f7fda" + } + }, + "physical_maps": 3037, + "productive_fields": 22461, + "rank_surplus": 1424, + "raw_strict_separation": "43051999421357030665572644351/100000000000000000000000000000000000", + "scope": "Exact receipt and directed-price readback. No native or caller execution in this audit.", + "source_archive_sha256": "0589953b3886d96eacf3bda3d38d8d574bb739fba1056af7f32f56047b6061e2", + "targets": { + "1": 306, + "2": 357, + "3": 799, + "4": 3825, + "5": 1360, + "6": 731, + "7": 323, + "8": 544, + "9": 10888, + "17": 416, + "25": 416, + "33": 416, + "41": 416, + "49": 416, + "57": 416, + "65": 416, + "73": 208, + "137": 208 + }, + "tested": "364665195644007/100000000000000000" +} diff --git a/research/p104-three-four-type-b-phase-transfers/inputs/R59-PRICE.json b/research/p104-three-four-type-b-phase-transfers/inputs/R59-PRICE.json new file mode 100644 index 0000000000..9682014ac4 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/inputs/R59-PRICE.json @@ -0,0 +1,22405 @@ +{ + "caller_head": "07a76c5e2738882c0cb322278e56f6cae3c9885d", + "complete_paid": { + "1": 68401, + "16": 416, + "2": 14501, + "24": 416, + "3": 14093, + "32": 416, + "4": 3791, + "40": 416, + "48": 416, + "5": 5882, + "56": 416, + "6": 221, + "64": 208, + "7": 170, + "8": 741, + "9": 32 + }, + "complete_targets": { + "1": 306, + "137": 208, + "17": 416, + "2": 357, + "25": 416, + "3": 799, + "33": 416, + "4": 3825, + "41": 416, + "49": 416, + "5": 1360, + "57": 416, + "6": 731, + "65": 416, + "7": 323, + "73": 208, + "8": 544, + "9": 10888 + }, + "copies": 17, + "crossing_upper": "36462214364462343366888845568981/10000000000000000000000000000000000", + "even_jobs": { + "1855": [ + 0, + [ + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + ], + "1869": [ + 2, + [ + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ] + ], + "1887": [ + 0, + [ + 3, + 4, + 5, + 6, + 7, + 8 + ] + ], + "1940": [ + 0, + [ + 3, + 4, + 5, + 6, + 7, + 8 + ] + ], + "1997": [ + 0, + [ + 4, + 5, + 6, + 7, + 8 + ] + ], + "2027": [ + 2, + [ + 4, + 5, + 6, + 7, + 8 + ] + ], + "2061": [ + 0, + [ + 5, + 6, + 7, + 8 + ] + ], + "2099": [ + 2, + [ + 5, + 6, + 7, + 8 + ] + ], + "2141": [ + 0, + [ + 6, + 7, + 8 + ] + ], + "2187": [ + 2, + [ + 6, + 7, + 8 + ] + ], + "2237": [ + 0, + [ + 7, + 8 + ] + ], + "2291": [ + 2, + [ + 7, + 8 + ] + ], + "2324": [ + 0, + [ + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9 + ] + ], + "2337": [ + 1, + [ + 16, + 15, + 14, + 13, + 12, + 11, + 10, + 9 + ] + ], + "2355": [ + 0, + [ + 15, + 14, + 13, + 12, + 11, + 10, + 9 + ] + ], + "2377": [ + 16, + [ + 15, + 14, + 13, + 12, + 11, + 10, + 9 + ] + ], + "2403": [ + 0, + [ + 14, + 13, + 12, + 11, + 10, + 9 + ] + ], + "2433": [ + 16, + [ + 14, + 13, + 12, + 11, + 10, + 9 + ] + ], + "2467": [ + 0, + [ + 13, + 12, + 11, + 10, + 9 + ] + ], + "2505": [ + 16, + [ + 13, + 12, + 11, + 10, + 9 + ] + ], + "2547": [ + 0, + [ + 12, + 11, + 10, + 9 + ] + ], + "2593": [ + 16, + [ + 12, + 11, + 10, + 9 + ] + ], + "2643": [ + 0, + [ + 11, + 10, + 9 + ] + ], + "2697": [ + 16, + [ + 11, + 10, + 9 + ] + ], + "2750": [ + 0, + [ + 10, + 9 + ] + ], + "2804": [ + 0, + [ + 10, + 9 + ] + ] + }, + "head": "9d0119eb12fbd9fa534b48cd37b68e7099757b91", + "input_sha256": { + "admission/ADMITTED.json": "41b8a189dffeb768e5843446cdc469f9cc2f0aa038d0a593cf2be43aa009a9a3", + "inputs/7113/CALLER.json": "255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc", + "inputs/7298/pricing.py": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182", + "inputs/7314/EARLY-RESULT.json": "b5043855411432b24336ecc443cba9ebfae6392e2045ddd01c87cfe2c51f5f08", + "inputs/r52/screen.py": "cdf54b266ac31fd0efe544badbb9840598d4c63c4d3cd363f60ae9a74cc4b256", + "inputs/r56/PRICE.json": "6f3510db09e18278c0f18d8e0cbe1242fc48e999dafc87cb04cc87e240b93819" + }, + "keys": [ + { + "even": [ + 1855, + 1869 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 1887 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1940 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1997 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2027 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2061 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2099 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2141 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 1887 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1940 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1997 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2027 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2061 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2099 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2141 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 1887, + 1940 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 1997 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2027 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2061 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2099 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2141 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 1997 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2027 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2061 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2099 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2141 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 1997, + 2027 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2061 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2099 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2141 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2061 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2099 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2141 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2061, + 2099 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2141 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2141 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2141, + 2187 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2237 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2291 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2324 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,2" + }, + { + "even": [ + 2324, + 2337 + ], + "odd": [ + 1339, + 1340 + ], + "price": "8,8" + }, + { + "even": [ + 2324, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,8" + }, + { + "even": [ + 2324, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2355 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,8" + }, + { + "even": [ + 2355, + 2377 + ], + "odd": [ + 1339, + 1340 + ], + "price": "7,7" + }, + { + "even": [ + 2355, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 2355, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2403 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,7" + }, + { + "even": [ + 2403, + 2433 + ], + "odd": [ + 1339, + 1340 + ], + "price": "6,6" + }, + { + "even": [ + 2403, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 2403, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2467 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,6" + }, + { + "even": [ + 2467, + 2505 + ], + "odd": [ + 1339, + 1340 + ], + "price": "5,5" + }, + { + "even": [ + 2467, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2467, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2547 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,5" + }, + { + "even": [ + 2547, + 2593 + ], + "odd": [ + 1339, + 1340 + ], + "price": "4,4" + }, + { + "even": [ + 2547, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2547, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2643 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,4" + }, + { + "even": [ + 2643, + 2697 + ], + "odd": [ + 1339, + 1340 + ], + "price": "3,3" + }, + { + "even": [ + 2643, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2643, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2750 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,3" + }, + { + "even": [ + 2750, + 2804 + ], + "odd": [ + 1339, + 1340 + ], + "price": "2,2" + }, + { + "even": [ + 1855, + 1869 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 1887 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1940 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1997 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2027 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2061 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2099 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2141 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 1887 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1940 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1997 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2027 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2061 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2099 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2141 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1887, + 1940 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 1997 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2027 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2061 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2099 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2141 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 1997 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2027 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2061 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2099 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2141 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1997, + 2027 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2061 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2099 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2141 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2061 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2099 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2141 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2061, + 2099 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2141 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2141 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2141, + 2187 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2237 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2291 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2324 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2324, + 2337 + ], + "odd": [ + 1339, + 2970 + ], + "price": "8,8" + }, + { + "even": [ + 2324, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2324, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2355 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2355, + 2377 + ], + "odd": [ + 1339, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 2355, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2355, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2403 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2403, + 2433 + ], + "odd": [ + 1339, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 2403, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2403, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2467 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2467, + 2505 + ], + "odd": [ + 1339, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 2467, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2467, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2547 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2547, + 2593 + ], + "odd": [ + 1339, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2547, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2547, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2643 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2643, + 2697 + ], + "odd": [ + 1339, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2643, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2643, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2750 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2750, + 2804 + ], + "odd": [ + 1339, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 1855, + 1869 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 1887 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1940 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1997 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2027 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2061 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2099 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2141 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 1887 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1940 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1997 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2027 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2061 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2099 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2141 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1887, + 1940 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 1997 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2027 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2061 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2099 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2141 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 1997 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2027 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2061 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2099 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2141 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1997, + 2027 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2061 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2099 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2141 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2061 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2099 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2141 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2061, + 2099 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2141 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2141 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2141, + 2187 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2237 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2291 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2324 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2324, + 2337 + ], + "odd": [ + 1339, + 2971 + ], + "price": "8,8" + }, + { + "even": [ + 2324, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2324, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2355 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2355, + 2377 + ], + "odd": [ + 1339, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 2355, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2355, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2403 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2403, + 2433 + ], + "odd": [ + 1339, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 2403, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2403, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2467 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2467, + 2505 + ], + "odd": [ + 1339, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2467, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2467, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2547 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2547, + 2593 + ], + "odd": [ + 1339, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2547, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2547, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2643 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2643, + 2697 + ], + "odd": [ + 1339, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2643, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2643, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2750 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2750, + 2804 + ], + "odd": [ + 1339, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 1855, + 1869 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 1887 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1940 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1997 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2027 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2061 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2099 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2141 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 1887 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1940 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1997 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2027 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2061 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2099 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2141 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 1887, + 1940 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 1997 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2027 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2061 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2099 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2141 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 1997 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2027 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2061 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2099 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2141 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 1997, + 2027 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2061 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2099 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2141 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2061 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2099 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2141 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2061, + 2099 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2141 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2141 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2141, + 2187 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2237 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2291 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2324 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 2324, + 2337 + ], + "odd": [ + 1340, + 2970 + ], + "price": "8,8" + }, + { + "even": [ + 2324, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2324, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2355 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,8" + }, + { + "even": [ + 2355, + 2377 + ], + "odd": [ + 1340, + 2970 + ], + "price": "7,7" + }, + { + "even": [ + 2355, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2355, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2403 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,7" + }, + { + "even": [ + 2403, + 2433 + ], + "odd": [ + 1340, + 2970 + ], + "price": "6,6" + }, + { + "even": [ + 2403, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2403, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2467 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,6" + }, + { + "even": [ + 2467, + 2505 + ], + "odd": [ + 1340, + 2970 + ], + "price": "5,5" + }, + { + "even": [ + 2467, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2467, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2547 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,5" + }, + { + "even": [ + 2547, + 2593 + ], + "odd": [ + 1340, + 2970 + ], + "price": "4,4" + }, + { + "even": [ + 2547, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2547, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2643 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,4" + }, + { + "even": [ + 2643, + 2697 + ], + "odd": [ + 1340, + 2970 + ], + "price": "3,3" + }, + { + "even": [ + 2643, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2643, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2750 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,3" + }, + { + "even": [ + 2750, + 2804 + ], + "odd": [ + 1340, + 2970 + ], + "price": "2,2" + }, + { + "even": [ + 1855, + 1869 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 1887 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1940 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1997 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2027 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2061 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2099 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2141 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 1887 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1940 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1997 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2027 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2061 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2099 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2141 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1887, + 1940 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 1997 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2027 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2061 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2099 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2141 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 1997 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2027 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2061 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2099 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2141 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1997, + 2027 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2061 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2099 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2141 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2061 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2099 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2141 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2061, + 2099 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2141 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2141 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2141, + 2187 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2237 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2291 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2324 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2324, + 2337 + ], + "odd": [ + 1340, + 2971 + ], + "price": "8,8" + }, + { + "even": [ + 2324, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2324, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2355 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2355, + 2377 + ], + "odd": [ + 1340, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 2355, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2355, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2403 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2403, + 2433 + ], + "odd": [ + 1340, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 2403, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2403, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2467 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2467, + 2505 + ], + "odd": [ + 1340, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2467, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2467, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2547 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2547, + 2593 + ], + "odd": [ + 1340, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2547, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2547, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2643 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2643, + 2697 + ], + "odd": [ + 1340, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2643, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2643, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2750 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2750, + 2804 + ], + "odd": [ + 1340, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 1855, + 1869 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 1887 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1940 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 1997 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2027 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2061 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2099 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2141 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1855, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1855, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1855, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1855, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1855, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1855, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1855, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 1887 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1940 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 1997 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2027 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2061 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2099 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2141 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 1869, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 1869, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1869, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1869, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 1869, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 1869, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1869, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 1887, + 1940 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 1997 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2027 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2061 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2099 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2141 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1887, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1887, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1887, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1887, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1887, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1887, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1887, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 1997 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2027 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2061 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2099 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2141 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 1940, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 1940, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 1940, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1940, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 1940, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 1940, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1940, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 1997, + 2027 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2061 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2099 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2141 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 1997, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 1997, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 1997, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 1997, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 1997, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 1997, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 1997, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2061 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2099 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2141 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2027, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2027, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2027, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2027, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2027, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2027, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2027, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2061, + 2099 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2141 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2061, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2061, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2061, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2061, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2061, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2061, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2061, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2141 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2099, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2099, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2099, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2099, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2099, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2099, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2099, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2141, + 2187 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2141, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2141, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2141, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2141, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2141, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2141, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2141, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2237 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2187, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2187, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2187, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2187, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2187, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2187, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2187, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2291 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2237, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2237, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2237, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2237, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2237, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2237, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2237, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2324 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2291, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2291, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2291, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2291, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2291, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2291, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2291, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,2" + }, + { + "even": [ + 2324, + 2337 + ], + "odd": [ + 2970, + 2971 + ], + "price": "8,8" + }, + { + "even": [ + 2324, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2324, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2324, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2324, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2324, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2324, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2324, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2355 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,8" + }, + { + "even": [ + 2337, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,8" + }, + { + "even": [ + 2337, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,8" + }, + { + "even": [ + 2337, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,8" + }, + { + "even": [ + 2337, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,8" + }, + { + "even": [ + 2337, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2337, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,8" + }, + { + "even": [ + 2355, + 2377 + ], + "odd": [ + 2970, + 2971 + ], + "price": "7,7" + }, + { + "even": [ + 2355, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2355, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2355, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2355, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2355, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2355, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2403 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,7" + }, + { + "even": [ + 2377, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,7" + }, + { + "even": [ + 2377, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,7" + }, + { + "even": [ + 2377, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,7" + }, + { + "even": [ + 2377, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2377, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,7" + }, + { + "even": [ + 2403, + 2433 + ], + "odd": [ + 2970, + 2971 + ], + "price": "6,6" + }, + { + "even": [ + 2403, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2403, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2403, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2403, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2403, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2467 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,6" + }, + { + "even": [ + 2433, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,6" + }, + { + "even": [ + 2433, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,6" + }, + { + "even": [ + 2433, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2433, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,6" + }, + { + "even": [ + 2467, + 2505 + ], + "odd": [ + 2970, + 2971 + ], + "price": "5,5" + }, + { + "even": [ + 2467, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2467, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2467, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2467, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2547 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,5" + }, + { + "even": [ + 2505, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,5" + }, + { + "even": [ + 2505, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2505, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,5" + }, + { + "even": [ + 2547, + 2593 + ], + "odd": [ + 2970, + 2971 + ], + "price": "4,4" + }, + { + "even": [ + 2547, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2547, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2547, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2643 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,4" + }, + { + "even": [ + 2593, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2593, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,4" + }, + { + "even": [ + 2643, + 2697 + ], + "odd": [ + 2970, + 2971 + ], + "price": "3,3" + }, + { + "even": [ + 2643, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2643, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2750 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2697, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,3" + }, + { + "even": [ + 2750, + 2804 + ], + "odd": [ + 2970, + 2971 + ], + "price": "2,2" + } + ], + "limits": { + "binding_seconds": 90, + "cases": 1950, + "formal_cases": 3, + "formal_seconds": 45, + "independent_seconds": 30, + "nonunit_seconds": 25, + "primary_seconds": 25 + }, + "odd_jobs": { + "1339": [ + 32, + [ + 8 + ] + ], + "1340": [ + 33, + [ + 8 + ] + ], + "2970": [ + 34, + [ + 9 + ] + ], + "2971": [ + 35, + [ + 9 + ] + ] + }, + "old_margin": [ + "-357270001119021587349/10000000000000000000000000000000000000000000000000", + "-357270001119021530951/10000000000000000000000000000000000000000000000000" + ], + "prices": { + "2,2": { + "credit": [ + "1493510102583362475831583702669783752503183497/39062500000000000000000000000000000000000000000", + "5974040410333449903326334810679135010012733989/156250000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-1923532282747731841237422914494761072095641322417/2000000000000000000000000000000000000000000000000", + "-9617661413738659206187114572473805360478206555687/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "76467717252268158762577085505238927904358677583/2000000000000000000000000000000000000000000000000", + "382338586261340793812885427526194639521793444313/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "16": 16, + "17": -16 + } + }, + "2,3": { + "credit": [ + "3100023873130204479428501393272244405417597857/62500000000000000000000000000000000000000000000", + "15500119365651022397142506966361222027087989287/312500000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9503996180299167283291439777433710896252205930197/10000000000000000000000000000000000000000000000000", + "-9503996180299167283291439777433710896252205873799/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "496003819700832716708560222566289103747794069803/10000000000000000000000000000000000000000000000000", + "496003819700832716708560222566289103747794126201/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "16": 8, + "17": -8, + "24": 8, + "25": -8 + } + }, + "2,4": { + "credit": [ + "72142753230761317270543254174597876668007082503/1250000000000000000000000000000000000000000000000", + "4508922076922582329408953385912367291750442657/78125000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-1884571594830781892367130793392097397554992985457/2000000000000000000000000000000000000000000000000", + "-1884571594830781892367130793392097397554992974179/2000000000000000000000000000000000000000000000000" + ], + "margin": [ + "115428405169218107632869206607902602445007014543/2000000000000000000000000000000000000000000000000", + "115428405169218107632869206607902602445007025821/2000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "16": 8, + "17": -8, + "32": 8, + "33": -8 + } + }, + "2,5": { + "credit": [ + "2501060683784052738168755004112272596198492037/39062500000000000000000000000000000000000000000", + "40016970940544843810700080065796361539175872597/625000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9359728464951282499028798719304528216492207625829/10000000000000000000000000000000000000000000000000", + "-9359728464951282499028798719304528216492207569447/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "640271535048717500971201280695471783507792374171/10000000000000000000000000000000000000000000000000", + "640271535048717500971201280695471783507792430553/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "16": 8, + "17": -8, + "40": 8, + "41": -8 + } + }, + "2,6": { + "credit": [ + "1729861770987848002720692993990265601809368761/25000000000000000000000000000000000000000000000", + "43246544274696200068017324849756640045234219031/625000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-1861611058320972159782344560552232752079054816577/2000000000000000000000000000000000000000000000000", + "-9308055291604860798911722802761163760395274026519/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "138388941679027840217655439447767247920945183423/2000000000000000000000000000000000000000000000000", + "691944708395139201088277197238836239604725973481/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "16": 8, + "17": -8, + "48": 8, + "49": -8 + } + }, + "2,7": { + "credit": [ + "1149505287378788784345170377155293194711509071/15625000000000000000000000000000000000000000000", + "91960422990303102747613630172423455576920725691/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9264316616077575178019090958977882356503655781853/10000000000000000000000000000000000000000000000000", + "-9264316616077575178019090958977882356503655725479/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "735683383922424821980909041022117643496344218147/10000000000000000000000000000000000000000000000000", + "735683383922424821980909041022117643496344274521/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "16": 8, + "17": -8, + "56": 8, + "57": -8 + } + }, + "2,8": { + "credit": [ + "96700026889789078560412530241256201253330994577/1250000000000000000000000000000000000000000000000", + "96700026889789078560412530241256201253330994589/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9226399784881687371516699758427220391092373630669/10000000000000000000000000000000000000000000000000", + "-9226399784881687371516699758427220391092373574303/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "773600215118312628483300241572779608907626369331/10000000000000000000000000000000000000000000000000", + "773600215118312628483300241572779608907626425697/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "16": 8, + "17": -8, + "64": 8, + "65": -8 + } + }, + "3,3": { + "credit": [ + "9526078955317572493816172155682087017075255297/156250000000000000000000000000000000000000000000", + "4763039477658786246908086077841043508537627649/78125000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9390330946859675360395764982393616432026205248309/10000000000000000000000000000000000000000000000000", + "-9390330946859675360395764982393616432026205191911/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "609669053140324639604235017606383567973794751691/10000000000000000000000000000000000000000000000000", + "609669053140324639604235017606383567973794808089/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "24": 16, + "25": -16 + } + }, + "3,4": { + "credit": [ + "86350907410697807632502603554609684696257167739/1250000000000000000000000000000000000000000000000", + "21587726852674451908125650888652421174064291937/312500000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9309192740714417538939979171920392523548964245397/10000000000000000000000000000000000000000000000000", + "-9309192740714417538939979171920392523548964189007/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "690807259285582461060020828079607476451035754603/10000000000000000000000000000000000000000000000000", + "690807259285582461060020828079607476451035810993/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "24": 8, + "25": -8, + "32": 8, + "33": -8 + } + }, + "3,5": { + "credit": [ + "4712104803051308899167975475580226555330091521/62500000000000000000000000000000000000000000000", + "9424209606102617798335950951160453110660183043/125000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9246063231511790576133123924264433752266206943941/10000000000000000000000000000000000000000000000000", + "-9246063231511790576133123924264433752266206887559/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "753936768488209423866876075735566247733793056059/10000000000000000000000000000000000000000000000000", + "753936768488209423866876075735566247733793112441/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "24": 8, + "25": -8, + "40": 8, + "41": -8 + } + }, + "3,6": { + "credit": [ + "50350621364664445248996999539762544059359261643/625000000000000000000000000000000000000000000000", + "50350621364664445248996999539762544059359261649/625000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9194390058165368876016048007721069296169273400997/10000000000000000000000000000000000000000000000000", + "-9194390058165368876016048007721069296169273344631/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "805609941834631123983951992278930703830726599003/10000000000000000000000000000000000000000000000000", + "805609941834631123983951992278930703830726655369/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "24": 8, + "25": -8, + "48": 8, + "49": -8 + } + }, + "3,7": { + "credit": [ + "26542144292559898277393244888108815901292702729/312500000000000000000000000000000000000000000000", + "106168577170239593109572979552435263605170810927/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-1830130276527616651024683232787557578455531019993/2000000000000000000000000000000000000000000000000", + "-9150651382638083255123416163937787892277655043591/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "169869723472383348975316767212442421544468980007/2000000000000000000000000000000000000000000000000", + "849348617361916744876583836062212107722344956409/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "24": 8, + "25": -8, + "56": 8, + "57": -8 + } + }, + "3,8": { + "credit": [ + "110908181069725568922371879621268009281581079813/1250000000000000000000000000000000000000000000000", + "4436327242789022756894875184850720371263243193/50000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9112734551442195448621024963387125926866372948781/10000000000000000000000000000000000000000000000000", + "-1822546910288439089724204992677425185373274578483/2000000000000000000000000000000000000000000000000" + ], + "margin": [ + "887265448557804551378975036612874073133627051219/10000000000000000000000000000000000000000000000000", + "177453089711560910275795007322574814626725421517/2000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "24": 8, + "25": -8, + "64": 8, + "65": -8 + } + }, + "4,4": { + "credit": [ + "48246591589427517657237914931881336627956146551/625000000000000000000000000000000000000000000000", + "12061647897356879414309478732970334156989036639/156250000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-1845610906913831943496838672289433723014344648497/2000000000000000000000000000000000000000000000000", + "-9228054534569159717484193361447168615071723186103/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "154389093086168056503161327710566276985655351503/2000000000000000000000000000000000000000000000000", + "771945465430840282515806638552831384928276813897/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "32": 16, + "33": -16 + } + }, + "4,5": { + "credit": [ + "104384371829183405665332735820757519666256955783/1250000000000000000000000000000000000000000000000", + "52192185914591702832666367910378759833128477897/625000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9164925025366532754677338113791209843788965941029/10000000000000000000000000000000000000000000000000", + "-1832985005073306550935467622758241968757793176931/2000000000000000000000000000000000000000000000000" + ], + "margin": [ + "835074974633467245322661886208790156211034058971/10000000000000000000000000000000000000000000000000", + "167014994926693449064532377241758031242206823069/2000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "32": 8, + "33": -8, + "40": 8, + "41": -8 + } + }, + "4,6": { + "credit": [ + "110843518497486118179967225388678076678373648649/1250000000000000000000000000000000000000000000000", + "55421759248743059089983612694339038339186824331/625000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-1822650370404022210912052439449569077538406479617/2000000000000000000000000000000000000000000000000", + "-9113251852020111054560262197247845387692032341727/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "177349629595977789087947560550430922461593520383/2000000000000000000000000000000000000000000000000", + "886748147979888945439737802752154612307967658273/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "32": 8, + "33": -8, + "48": 8, + "49": -8 + } + }, + "4,7": { + "credit": [ + "116310852938396820791546205861588252164825936279/1250000000000000000000000000000000000000000000000", + "116310852938396820791546205861588252164825936291/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9069513176492825433667630353464563983800414097053/10000000000000000000000000000000000000000000000000", + "-9069513176492825433667630353464563983800414040687/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "930486823507174566332369646535436016199585902947/10000000000000000000000000000000000000000000000000", + "930486823507174566332369646535436016199585959313/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "32": 8, + "33": -8, + "56": 8, + "57": -8 + } + }, + "4,8": { + "credit": [ + "15131307104735349575543138241302624730154525647/156250000000000000000000000000000000000000000000", + "121050456837882796604345105930420997841236205189/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9031596345296937627165239152913902018389131945869/10000000000000000000000000000000000000000000000000", + "-9031596345296937627165239152913902018389131889511/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "968403654703062372834760847086097981610868054131/10000000000000000000000000000000000000000000000000", + "968403654703062372834760847086097981610868110489/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "32": 8, + "33": -8, + "64": 8, + "65": -8 + } + }, + "5,5": { + "credit": [ + "3508611264984743000505926305554761439893800577/39062500000000000000000000000000000000000000000", + "28068890119877944004047410444438091519150404619/312500000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9101795516163905791870482866135251072506208639573/10000000000000000000000000000000000000000000000000", + "-9101795516163905791870482866135251072506208583207/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "898204483836094208129517133864748927493791360427/10000000000000000000000000000000000000000000000000", + "898204483836094208129517133864748927493791416793/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "40": 16, + "41": -16 + } + }, + "5,6": { + "credit": [ + "11873470714781448853082413134567292308871831133/125000000000000000000000000000000000000000000000", + "7420919196738405533176508209104557693044894459/78125000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9050122342817484091753406949591886616409275096629/10000000000000000000000000000000000000000000000000", + "-9050122342817484091753406949591886616409275040279/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "949877657182515908246593050408113383590724903371/10000000000000000000000000000000000000000000000000", + "949877657182515908246593050408113383590724959721/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "40": 8, + "41": -8, + "48": 8, + "49": -8 + } + }, + "5,7": { + "credit": [ + "1552525519859064889280038897732288732189632487/15625000000000000000000000000000000000000000000", + "124202041588725191142403111818583098575170598973/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-9006383667290198470860775105808605212517656795597/10000000000000000000000000000000000000000000000000", + "-9006383667290198470860775105808605212517656739239/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "993616332709801529139224894191394787482343204403/10000000000000000000000000000000000000000000000000", + "993616332709801529139224894191394787482343260761/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "40": 8, + "41": -8, + "56": 8, + "57": -8 + } + }, + "5,8": { + "credit": [ + "128941645488211166955202011887415844251580867857/1250000000000000000000000000000000000000000000000", + "128941645488211166955202011887415844251580867871/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-8968466836094310664358383905257943247106374644413/10000000000000000000000000000000000000000000000000", + "-8968466836094310664358383905257943247106374588063/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "1031533163905689335641616094742056752893625355587/10000000000000000000000000000000000000000000000000", + "1031533163905689335641616094742056752893625411937/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "40": 8, + "41": -8, + "64": 8, + "65": -8 + } + }, + "6,6": { + "credit": [ + "31298463454029300261364655228398370025208751049/312500000000000000000000000000000000000000000000", + "31298463454029300261364655228398370025208751053/312500000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-1799689833894212478327266206609704432062468310737/2000000000000000000000000000000000000000000000000", + "-8998449169471062391636331033048522160312341497351/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "200310166105787521672733793390295567937531689263/2000000000000000000000000000000000000000000000000", + "1001550830528937608363668966951477839687658502649/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "48": 16, + "49": -16 + } + }, + "6,7": { + "credit": [ + "65330594128513951828518800693251827793643645913/625000000000000000000000000000000000000000000000", + "130661188257027903657037601386503655587287291841/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-8954710493943776770743699189265240756420723252653/10000000000000000000000000000000000000000000000000", + "-8954710493943776770743699189265240756420723196311/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "1045289506056223229256300810734759243579276747347/10000000000000000000000000000000000000000000000000", + "1045289506056223229256300810734759243579276803689/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "48": 8, + "49": -8, + "56": 8, + "57": -8 + } + }, + "6,8": { + "credit": [ + "135400792156513879469836501455336401263697560723/1250000000000000000000000000000000000000000000000", + "135400792156513879469836501455336401263697560739/1250000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-8916793662747888964241307988714578791009441101469/10000000000000000000000000000000000000000000000000", + "-1783358732549577792848261597742915758201888209027/2000000000000000000000000000000000000000000000000" + ], + "margin": [ + "1083206337252111035758692011285421208990558898531/10000000000000000000000000000000000000000000000000", + "216641267450422207151738402257084241798111790973/2000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "48": 8, + "49": -8, + "64": 8, + "65": -8 + } + }, + "7,7": { + "credit": [ + "2127008167155290722947134091553341110527180929/19531250000000000000000000000000000000000000000", + "13612852269793860626861658185941383107373957947/125000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-8910971818416491149851067345481959352529104951621/10000000000000000000000000000000000000000000000000", + "-8910971818416491149851067345481959352529104895271/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "1089028181583508850148932654518040647470895048379/10000000000000000000000000000000000000000000000000", + "1089028181583508850148932654518040647470895104729/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "56": 16, + "57": -16 + } + }, + "7,8": { + "credit": [ + "140868126597424582081415481928246576750149848353/1250000000000000000000000000000000000000000000000", + "8804257912339036380088467620515411046884365523/78125000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-8873054987220603343348676144931297387117822800437/10000000000000000000000000000000000000000000000000", + "-1774610997444120668669735228986259477423564548819/2000000000000000000000000000000000000000000000000" + ], + "margin": [ + "1126945012779396656651323855068702612882177199563/10000000000000000000000000000000000000000000000000", + "225389002555879331330264771013740522576435451181/2000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "56": 8, + "57": -8, + "64": 8, + "65": -8 + } + }, + "8,8": { + "credit": [ + "582430921987642231576857527988317289706240469/5000000000000000000000000000000000000000000000", + "72803865248455278947107190998539661213280058633/625000000000000000000000000000000000000000000000" + ], + "extra_paid_rank_one_margin": [ + "-8835138156024715536846284944380635421706540649253/10000000000000000000000000000000000000000000000000", + "-8835138156024715536846284944380635421706540592919/10000000000000000000000000000000000000000000000000" + ], + "margin": [ + "1164861843975284463153715055619364578293459350747/10000000000000000000000000000000000000000000000000", + "1164861843975284463153715055619364578293459407081/10000000000000000000000000000000000000000000000000" + ], + "net_delta": { + "8": -16, + "9": 16, + "64": 16, + "65": -16 + } + } + }, + "scope": "exactly two simultaneous transfers", + "whole_optimistic_upper": "72803865248455278947107190998539661213280058633/625000000000000000000000000000000000000000000000" +} diff --git a/research/p104-three-four-type-b-phase-transfers/inputs/derivative_check.py b/research/p104-three-four-type-b-phase-transfers/inputs/derivative_check.py new file mode 100644 index 0000000000..ce5cdf3779 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/inputs/derivative_check.py @@ -0,0 +1,67 @@ +"""Check decrease of the complete priced moments through the retained BIT cap.""" +from collections import Counter +from fractions import Fraction as Q +from hashlib import sha256 +from json import dumps,loads +from pathlib import Path +from runpy import run_path + +ROOT = Path(__file__).resolve().parent +PINS = { + 'PRICE.json':'52e05b80069ce01cad3b8e5f3cf9123e930de36987bd398dd43f103953a4674a', + 'inputs/pricing.py':'f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182', + 'inputs/7334-READBACK.json':'337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82', +} + + +def derivative(histogram,low,high,tariff): + log,power = tariff['log_bounds'],tariff['power_bounds'] + ln2_low,ln2_high = log(Q(2)) + lower = upper = Q(0) + for rank,count in histogram.items(): + shift = rank.bit_length()-1 + a,b = log(Q(rank,1< 1: + na,a = heappop(heap) + nb,b = heappop(heap) + selected.append(sorted((groups[a].pop(),groups[b].pop()))) + if na < -1: + heappush(heap,(na+1,a)) + if nb < -1: + heappush(heap,(nb+1,b)) + counts = Counter(j[2] for j in jobs) + upper = min(len(jobs)//2,len(jobs)-max(counts.values(),default=0)) + assert len(selected) == upper and len({x for pair in selected for x in pair}) == 2*upper + return selected,counts + + +def price(roots): + files = authenticate(roots) + base = "round30/complex/source/inputs/" + word,caller,early = (unpack(files[base+name]) for name in ("WORD.json.gz","CALLER.json","EARLY-RESULT.json")) + old = runpy.run_path(str(roots["7298"]/"verify.py")) + audit = old["complex_scan"](word,caller,early) + assert json.loads(json.dumps(audit)) == unpack(files["7298/RESULT.json"])["complex"] + binding = next(raw for key,raw in files.items() if key.startswith("7113/")) + assert b"rank = 8*len(selected)" in binding + assert (caller["stages"],caller["types"]["B"]["offset"],caller["types"]["B"]["roles"]) == (17,36,36) + ports = len(caller["types"]["B"]["ports"]) + assert ports == 8 + jobs = [(i,e[2]-36,e[3][0]) for i,e in enumerate(caller["events"]) + if e[:2] == ["B","IDLE_ONE"] and len(e[3]) == 1] + assert len(jobs) == 34 and all(0 <= r < N and 1 <= stage <= 17 for _,r,stage in jobs) + cases = [(s[0],t[0]) for s,t in combinations(jobs,2) if s[2] != t[2]] + assert len(cases) == 544 + matching,counts = maximum_matching(jobs) + assert set(map(tuple,matching)) <= set(cases) + kappa = Q(audit["probe"]) + paid = Counter({int(k):v for k,v in early["invoice"]["P"].items()}) + targets = Counter({int(k):v for k,v in early["invoice"]["T"].items()}) + assert (sum(paid.values()),sum(targets.values()),audit["copies"]) == (110536,22461,17) + net = targets.copy() + net.subtract(paid) + delta = {8:2*ports,16:-ports} + changed = net.copy() + changed.update(delta) + cost = old["PRICING"]["cost"] + old_margin,new_margin,credit = cost(net,kappa),cost(changed,kappa),cost(delta,kappa) + assert old_margin[1] < 0 < new_margin[0] and credit[0] > 0 + h8 = old["PRICING"]["power_bounds"](8,kappa) + h16 = old["PRICING"]["power_bounds"](16,kappa) + report = { + "head":HEAD, "caller_head":CALLER_HEAD, "inputs":PINS, "crossing_upper":str(kappa), + "native_copies":audit["copies"], "type_b_ports":ports, "old_complete_paid":paid, + "old_complete_targets":targets, "old_complete_margin":list(map(str,old_margin)), + "one_pair_paid_old_minus_new":delta, "one_pair_complete_margin":list(map(str,new_margin)), + "one_pair_moment_credit":list(map(str,credit)), + "break_even_volume_factor":list(map(str,(2*h8[0]/h16[1],2*h8[1]/h16[0]))), + "whole_compatible_optimistic_upper":str(len(matching)*credit[1]), + "maximum_disjoint_pairs":len(matching), "illustrative_matching":matching, + "stage_counts":counts,"jobs":jobs,"pair_keys":cases, + "new_work_assumed_free_in_price":True, + "predeclared_followup":{"nonunit_body_vectors":BODIES,"nonunit_hard_seconds":25, + "structural_hard_seconds":45,"structural_max_cases":3}, + } + return report,caller + + +def field_scalar(raw): + q = Q(raw) + if q.denominator % MOD == 0: + raise ValueError("Nonunit modular denominator") + return q.numerator*pow(q.denominator,-1,MOD)%MOD + + +def compile_gates(caller,q,body): + gates = [] + for i,event in enumerate(caller["events"]): + kind,op,*args = event + if kind == "J": + s,t,a,b = args[1] + a,b = field_scalar(a),field_scalar(b) + m = body[op-1] + h = (m,m*a*q%MOD,m*b*q%MOD,m*(1+a*b)%MOD) + assert (h[0]*h[3]-h[1]*h[2])%MOD + gates.append((i,"J",s-36,t-36,h)) + elif kind == "B": + d = args[0]-36 + assert 0 <= d < N + if op == "ADD": + gates.append((i,op,d,args[1]-36,field_scalar(args[2]))) + elif op == "QUERY": + gates.append((i,"ADD",d,args[1]-36,pow(q,args[2]%4,MOD))) + elif op == "SWAP": + gates.append((i,op,d,args[1]-36,0)) + elif op == "SCALE": + value = field_scalar(args[1]) + assert value + gates.append((i,op,d,d,value)) + elif op in ("IDLE_ONE","IDLE_ODD"): + value = pow(q,args[2]%4,MOD) if op == "IDLE_ODD" else 1 + for stage in args[1]: + value = value*body[stage-1]%MOD + assert value + if value != 1: + gates.append((i,"SCALE",d,d,value)) + elif op != "LAMBDA": + raise ValueError(op) + return [g[0] for g in gates],gates + + +def transport(gates,initial,row,mod=None,dimension=N): + vec = [0]*dimension + vec[initial] = 1 + mixed = False + for _,op,d,s,c in reversed(gates) if row else gates: + if op == "ADD": + to,frm = (s,d) if row else (d,s) + vec[to] += c*vec[frm] + if mod: + vec[to] %= mod + elif op == "SCALE": + vec[d] *= c + if mod: + vec[d] %= mod + elif op == "SWAP": + vec[d],vec[s] = vec[s],vec[d] + elif op == "J": + a,b,x,y = c + if row: + b,x = x,b + u,v = vec[d],vec[s] + vec[d],vec[s] = (a*u+b*v)%mod,(x*u+y*v)%mod + else: + raise ValueError(op) + if mod is None and sum(bool(x) for x in vec) > 1: + mixed = True + assert any(vec) + return vec,mixed + + +def outside(vec,axis): + return next(([i,v] for i,v in enumerate(vec) if i != axis and v),None) + + +def controls(): + gates = [(0,"ADD",1,0,1),(1,"SCALE",0,0,2),(2,"ADD",1,0,-1)] + assert outside(transport(gates,0,False,MOD,2)[0],0) == [1,MOD-1] + gates[1] = (1,"SCALE",0,0,1) + assert outside(transport(gates,0,False,MOD,2)[0],0) is None + assert outside(transport(gates,0,True,MOD,2)[0],0) is None + assert transport(gates,0,False,None,2)[1] + read = [(0,"ADD",0,1,1)] + assert outside(transport(read,0,True,MOD,2)[0],0) == [1,1] + assert outside(transport(read,0,False,MOD,2)[0],0) is None + match,_ = maximum_matching([(i,0,s) for i,s in enumerate([1,1,1,1,2,3])]) + assert len(match) == 2 + caller = {"events":[["B","IDLE_ONE",36,[1]],["B","ADD",37,36,"1"], + ["B","ADD",37,36,"-1"],["B","IDLE_ONE",36,[2]]]} + assert structural(caller,0,3,0,0) == ("formal_projector_transport",True,None) + caller["events"][2] = ["B","ADD",37,36,"1"] + assert structural(caller,0,3,0,0) == ("unresolved_endpoint",True,3) + return ["body_one_false_positive","genuine_nondiagonal_transient","outside_read_only", + "distinct_mask_matching_does_not_double_spend"] + + +def modular_stage(caller,jobs,cases,bodies,deadline): + compiled = [(v,q,*compile_gates(caller,q,body)) + for v,body in enumerate(bodies) for q in (1,MOD-1)] + records = [] + for left,right in cases: + if monotonic() >= deadline: + break + source,target = jobs[left],jobs[right] + witness = None + for v,q,clocks,gates in compiled: + interval = gates[bisect_right(clocks,left):bisect_left(clocks,right)] + write,_ = transport(interval,source,False,MOD) + read,_ = transport(interval,target,True,MOD) + bad_col,bad_row = outside(write,target),outside(read,source) + if bad_col or bad_row: + witness = {"vector_index":v,"q":1 if q == 1 else -1, + "outside_write":bad_col,"outside_read":bad_row} + break + records.append({"key":[left,right],"witness":witness}) + return records + + +def structural(caller,left,right,source,target): + r = source + block = [] + mixed = False + + def flush(axis): + vec,m1 = transport(block,axis,False) + nz = [i for i,v in enumerate(vec) if v] + if len(nz) != 1: + return None,True + end = nz[0] + dual,m2 = transport(block,end,True) + return (None if outside(dual,axis) else end),m1 or m2 + + for clock,event in enumerate(caller["events"][left+1:right],left+1): + kind,op,*args = event + if kind == "B" and op in ("ADD","SCALE","SWAP"): + d = args[0]-36 + if op == "ADD": + block.append((clock,op,d,args[1]-36,Q(args[2]))) + elif op == "SCALE": + block.append((clock,op,d,d,Q(args[1]))) + else: + block.append((clock,op,d,args[1]-36,0)) + continue + if kind not in ("B","J"): + continue + r,inner = flush(r) + mixed |= inner + block.clear() + if r is None: + return "unresolved_constant_block",mixed,clock + if kind == "J" and r in {args[1][0]-36,args[1][1]-36}: + return "unresolved_active_j",True,clock + if kind == "B" and op == "QUERY" and r in {args[0]-36,args[1]-36}: + return "unresolved_query",True,clock + r,inner = flush(r) + mixed |= inner + if r != target: + return "unresolved_endpoint",mixed,right + return ("formal_projector_transport" if mixed else "diagonal_path_overlap_pending"),mixed,None + + +def previous(out,name,price_sha): + value = json.loads((out/name).read_text()) + assert value["price_sha256"] == price_sha + return value + + +def main(args,start): + roots = {"round30":args.round30,"7298":args.predecessor,"7113":args.caller_root} + pre,caller = price(roots) + out = args.out + if args.stage in ("price","body1"): + price_sha = save(out,"PRICE.json",pre) + else: + frozen = (out/"PRICE.json").read_bytes() + assert unpack(frozen) == json.loads(json.dumps(pre)) + price_sha = sha256(frozen).hexdigest() + if args.stage == "price": + return + jobs = {j[0]:j[1] for j in pre["jobs"]} + cases = pre["pair_keys"] + checks = controls() + assert all(MOD%d for d in range(2,isqrt(MOD)+1)) + prior_unvisited = [] + if args.stage != "body1": + first = previous(out,"BODY1.json",price_sha) + cases = first["survivors"] + prior_unvisited = first["unvisited"] + if args.stage == "structural": + second = previous(out,"NONUNIT.json",price_sha) + cases = second["survivors"] + prior_unvisited = second["unvisited"] + deadline = start+CAP[args.stage] + if args.stage in ("body1","nonunit"): + bodies = ((1,)*17,) if args.stage == "body1" else BODIES + rows = modular_stage(caller,jobs,cases,bodies,deadline) + survivors = [r["key"] for r in rows if r["witness"] is None] + save(out,("BODY1.json" if args.stage == "body1" else "NONUNIT.json"),{ + "stage":args.stage,"price_sha256":price_sha,"prime":MOD,"body_vectors":bodies, + "scope":len(cases),"visited":len(rows),"exclusions":len(rows)-len(survivors), + "survivors":survivors,"unvisited":[*prior_unvisited,*cases[len(rows):]], + "records":rows,"controls":checks, + }) + return + rows = [] + for a,b in cases[:3]: + if monotonic() >= deadline: + break + status,mixed,at = structural(caller,a,b,jobs[a],jobs[b]) + rows.append({"key":[a,b],"status":status,"nondiagonal_transient":mixed,"stop_clock":at}) + save(out,"STRUCTURAL.json",{ + "price_sha256":price_sha,"scope":len(cases),"visited":len(rows),"hard_seconds":45, + "unvisited":[*prior_unvisited,*cases[len(rows):]], + "support_survivors":[r["key"] for r in rows if r["status"] == "formal_projector_transport"], + "unresolved":[r["key"] for r in rows if r["status"] != "formal_projector_transport"], + "records":rows,"controls":checks, + }) + + +if __name__ == "__main__": + start = monotonic() + if not __debug__: + raise RuntimeError("Assertions required") + parser = ArgumentParser(description=__doc__) + for flag in ("round30","predecessor","caller-root","out"): + parser.add_argument("--"+flag,type=lambda x:Path(x).resolve(),required=True) + parser.add_argument("--stage",choices=("price","body1","nonunit","structural"),default="body1") + args = parser.parse_args() + args.out.mkdir(parents=True,exist_ok=True) + main(args,start) diff --git a/research/p104-three-four-type-b-phase-transfers/inputs/two_phase.py b/research/p104-three-four-type-b-phase-transfers/inputs/two_phase.py new file mode 100644 index 0000000000..b7ec038c45 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/inputs/two_phase.py @@ -0,0 +1,259 @@ +"""Directed price and bounded two-transfer endpoint test on Type B.""" + +from argparse import ArgumentParser +from collections import Counter +from fractions import Fraction +from functools import cache +from hashlib import sha256 +from itertools import combinations +from json import dumps, loads +from math import isqrt +from pathlib import Path +from runpy import run_path +from time import monotonic + +HEAD = '9d0119eb12fbd9fa534b48cd37b68e7099757b91' +CALLER_HEAD = '07a76c5e2738882c0cb322278e56f6cae3c9885d' +ADMISSION = '41b8a189dffeb768e5843446cdc469f9cc2f0aa038d0a593cf2be43aa009a9a3' +PINS = { + 'admission/ADMITTED.json': ADMISSION, + 'inputs/7113/CALLER.json': '255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc', + 'inputs/7298/pricing.py': 'f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182', + 'inputs/7314/EARLY-RESULT.json': 'b5043855411432b24336ecc443cba9ebfae6392e2045ddd01c87cfe2c51f5f08', + 'inputs/r52/screen.py': 'cdf54b266ac31fd0efe544badbb9840598d4c63c4d3cd363f60ae9a74cc4b256', + 'inputs/r56/PRICE.json': '6f3510db09e18278c0f18d8e0cbe1242fc48e999dafc87cb04cc87e240b93819', +} + + +def unique(items): + out = dict(items) + if len(out) != len(items): + raise ValueError('Duplicate JSON key') + return out + + +def decode(data): + return loads(data, object_pairs_hook=unique) + + +def authenticated(root): + files = {} + for path,digest in PINS.items(): + raw = (root/path).read_bytes() + if sha256(raw).hexdigest() != digest: + raise ValueError(f'Changed input {path}') + files[path] = raw + a = decode(files['admission/ADMITTED.json']) + assert a['head'] == HEAD and a['caller_sha256'] == PINS['inputs/7113/CALLER.json'] + assert a['status'] == 'independently_reproduced_comparable' + assert set(a['stages']) == {'early','native','caller','frontier'} + for row in [*a['stages'].values(), a['source_history']['evidence']]: + assert sha256((root/'admission'/row['path']).read_bytes()).hexdigest() == row['sha256'] + return files + + +def inventory(r56): + odd = {int(k):v for k,v in r56['odd_jobs'].items()} + even = {int(k):v for k,v in r56['even_jobs'].items()} + assert len(odd) == 4 and len(even) == 26 and not set(odd) & set(even) + assert [k for k,v in even.items() if len(v[1]) == 8] == [2324,2337] + return odd, even + + +def price(root, files): + r56 = decode(files['inputs/r56/PRICE.json']) + inv = decode(files['inputs/7314/EARLY-RESULT.json'])['invoice'] + assert r56['comparator_admission']['head'] == HEAD and r56['caller_head'] == CALLER_HEAD + assert r56['complete_paid'] == inv['P'] and r56['complete_targets'] == inv['T'] + assert (sum(inv['P'].values()),sum(inv['T'].values()),inv['S'],inv['empty_root_credits']) == (110536,22461,1424,0) + net = Counter({int(k):v for k,v in inv['T'].items()}) + net.subtract({int(k):v for k,v in inv['P'].items()}) + directed = run_path(str(root/'inputs/7298/pricing.py'))['cost'] + crossing = Fraction(r56['crossing_upper']) + assert crossing == Fraction('0.0036462214364462343366888845568981') + old = directed(net,crossing) + assert old[1] < 0 + assert r56['type_b_ports'] == 8 and r56['copies'] == 17 + odd, even = inventory(r56) + rank_prices = {} + keys = [] + for o in combinations(sorted(odd),2): + for e in combinations(sorted(even),2): + m,n = sorted(len(even[i][1]) for i in e) + key = f'{m},{n}' + if key not in rank_prices: + delta = Counter() + for length in (m,n): + delta.update({9:8,8*length:8,8:-8,8*length+1:-8}) + assert sum(delta.values()) == sum(k*v for k,v in delta.items()) == 0 + changed = net.copy() + changed.update(delta) + credit = directed(delta,crossing) + margin = directed(changed,crossing) + changed[1] -= 1 + extra = directed(changed,crossing) + assert credit[0] > 0 and margin[0] > 0 > extra[1] + rank_prices[key] = {'net_delta':dict(delta),'credit':list(map(str,credit)), + 'margin':list(map(str,margin)), + 'extra_paid_rank_one_margin':list(map(str,extra))} + keys.append({'odd':list(o),'even':list(e),'price':key}) + upper = max(Fraction(row['credit'][1]) for row in rank_prices.values()) + assert upper == Fraction(rank_prices['8,8']['credit'][1]) + assert upper == Fraction('72803865248455278947107190998539661213280058633/625000000000000000000000000000000000000000000000') + assert len(keys) == 1950 + return {'head':HEAD,'caller_head':CALLER_HEAD,'input_sha256':PINS,'crossing_upper':str(crossing), + 'old_margin':list(map(str,old)),'complete_paid':inv['P'],'complete_targets':inv['T'], + 'copies':17,'odd_jobs':odd,'even_jobs':even,'prices':rank_prices,'keys':keys, + 'whole_optimistic_upper':str(upper),'scope':'exactly two simultaneous transfers', + 'limits':{'cases':1950,'primary_seconds':25,'independent_seconds':30, + 'nonunit_seconds':25,'formal_cases':3,'formal_seconds':45,'binding_seconds':90}} + + +def check_stock(caller, frozen): + b = caller['types']['B'] + assert (caller['stages'],b['offset'],b['roles'],len(b['ports'])) == (17,36,36,8) + odd,even = inventory(frozen) + got_odd,got_even = {},{} + for i,e in enumerate(caller['events']): + if e[:2] == ['B','IDLE_ODD']: + assert e[4:] == [-1] and len(e[3]) == 1 + got_odd[i] = [e[2]-36,e[3]] + if e[:2] == ['B','IDLE_ONE'] and len(e[3]) > 1: + got_even[i] = [e[2]-36,e[3]] + assert got_odd == odd and got_even == even + return {clock:v[0] for clock,v in (odd|even).items()} + + +def dot(a,b,p): + return sum(x*y for x,y in zip(a,b,strict=True)) % p + + +def linear(a,b,s,t,p): + return [(s*x+t*y)%p for x,y in zip(a,b,strict=True)] + + +def prefixes(caller, site, decoder, body): + p = decoder['MOD'] + n = 36 + assert p == 65521 and all(p%i for i in range(2,isqrt(p)+1)) + assert len(body) == 17 and all(v%p for v in body) + clocks, gates = decoder['compile_gates'](caller,p-1,body) + gate = dict(zip(clocks,gates,strict=True)) + rows = [[int(i==j) for i in range(n)] for j in range(n)] + cols = [row.copy() for row in rows] + out = {} + for clock in sorted(set(gate)|set(site)): + if clock in site: + role = site[clock] + u,v = tuple(cols[role]),tuple(rows[role]) + assert dot(v,u,p) == 1 + out[clock] = (u,v) + if clock not in gate: + continue + _,op,i,j,c = gate[clock] + if op == 'SWAP': + rows[i],rows[j] = rows[j],rows[i] + cols[i],cols[j] = cols[j],cols[i] + elif op == 'ADD': + rows[i] = linear(rows[i],rows[j],1,c,p) + cols[j] = linear(cols[j],cols[i],1,-c,p) + elif op == 'SCALE': + inv = pow(c,-1,p) + rows[i] = [c*x%p for x in rows[i]] + cols[i] = [inv*x%p for x in cols[i]] + else: + assert op == 'J' + a,b,c,d = c + inv = pow((a*d-b*c)%p,-1,p) + x,y = rows[i],rows[j] + rows[i],rows[j] = linear(x,y,a,b,p),linear(x,y,c,d,p) + x,y = cols[i],cols[j] + cols[i],cols[j] = linear(x,y,inv*d,-inv*c,p),linear(x,y,-inv*b,inv*a,p) + wanted = caller['types']['B']['diagonal'] + for j,diag in enumerate(wanted): + coefficient = pow(p-1,diag[0]%4,p) + for power,value in zip(diag[2:],body,strict=True): + coefficient = coefficient*pow(value,power,p)%p + assert rows[j] == [int(i==j)*coefficient for i in range(n)] + assert all(dot(row,col,p) == int(i==j) for i,row in enumerate(rows) for j,col in enumerate(cols)) + assert len(out) == 30 + return out + + +def defect(left,right,p): + u,v = left + x,y = right + t = 4*dot(v,x,p) + return tuple((-2*a*b-2*c*d+t*a*d)%p for a,c in zip(u,x,strict=True) + for b,d in zip(v,y,strict=True)) + + +def project(line,p): + divisor = pow(dot(line,line,p),-1,p) + return line,tuple(x*divisor%p for x in line) + + +def controls(p): + a,b,c,d = [project(v,p) for v in [(1,0),(0,1),(3,4),(-4,3)]] + assert a != b and c != d + assert defect(d,c,p) == defect(a,b,p) + assert defect(a,c,p) != defect(a,b,p) + return ['different_orthogonal_bases_cancel_jointly','one_replaced_reflection_fails'] + + +def support(root, files, frozen, stage, previous=None): + caller = decode(files['inputs/7113/CALLER.json']) + site = check_stock(caller,frozen) + decoder = run_path(str(root/'inputs/r52/screen.py')) + p = decoder['MOD'] + check = controls(p) + start = monotonic() + bodies = [(1,)*17] if stage == 'body-one' else list(decoder['BODIES']) + matrices = [prefixes(caller,site,decoder,body) for body in bodies] + + @cache + def pair(i,a,b): + table = matrices[i] + return defect(table[a],table[b],p) + + keys = frozen['keys'] if previous is None else previous['survivors'] + rows = [] + for key in keys: + if monotonic() >= start+22: + break + a,b,c,d = sorted(key['odd']+key['even']) + verdict = None + for i in range(len(bodies)): + first, second = pair(i,d,c),pair(i,a,b) + if first != second: + k = next(k for k,(x,y) in enumerate(zip(first,second,strict=True)) if x!=y) + verdict = {'body_index':i,'row':k//36,'column':k%36,'left':first[k],'right':second[k]} + break + rows.append({'key':key,'chronological':[a,b,c,d],'mismatch':verdict}) + return {'head':HEAD,'caller_head':CALLER_HEAD,'mode':stage,'prime':p,'controls':check, + 'body_values':bodies,'visited':len(rows),'results':rows,'site_count':len(site), + 'cached_ordered_pairs':pair.cache_info().currsize, + 'unvisited':([] if previous is None else previous['unvisited'])+keys[len(rows):], + 'survivors':[row['key'] for row in rows if row['mismatch'] is None]} + + +if __name__ == '__main__': + parser = ArgumentParser(description=__doc__) + parser.add_argument('root',type=Path) + parser.add_argument('stage',choices=['price','body-one','nonunit']) + parser.add_argument('--price-sha') + args = parser.parse_args() + files = authenticated(args.root) + frozen = price(args.root,files) + if args.stage == 'price': + result = frozen + else: + raw = (args.root/'PRICE.json').read_bytes() + assert sha256(raw).hexdigest() == args.price_sha + assert decode(raw) == decode(dumps(frozen)) + previous = None if args.stage == 'body-one' else decode((args.root/'BODY1.json').read_bytes()) + if previous is not None: + assert previous['price_sha256'] == args.price_sha and previous['mode'] == 'body-one' + result = support(args.root,files,frozen,args.stage,previous) + result['price_sha256'] = args.price_sha + print(dumps(result,sort_keys=True,indent=2)) diff --git a/research/p104-three-four-type-b-phase-transfers/receipts/SHA256.json b/research/p104-three-four-type-b-phase-transfers/receipts/SHA256.json new file mode 100644 index 0000000000..bbf0dcfcf5 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/receipts/SHA256.json @@ -0,0 +1,7 @@ +{ + "COMPARE.json": "269aa570772b17b22023afa16a5bd5073b6dd9af1a4459d3f58cb47fe3c0e474", + "EXACT.json": "94caa07880124394fe98ea926c43c92fc088a6c2665fed5fa6c0b92d7547a61b", + "KEYS.json": "2bb549fc7738efb4a159181094c771218903099be624a85474599683b73acde2", + "MODULAR.json": "6006fc8f0c8398ca431c89d1140eeb22703184c91a3fc7ddc199cf0944e7a8a5", + "PRICE.json": "6bf60b702f2d8b879fe0fca3c6c93dc5a580ae264f19eb87d27d0268d29b63bf" +} diff --git a/research/p104-three-four-type-b-phase-transfers/replay.py b/research/p104-three-four-type-b-phase-transfers/replay.py new file mode 100644 index 0000000000..3d216efe17 --- /dev/null +++ b/research/p104-three-four-type-b-phase-transfers/replay.py @@ -0,0 +1,154 @@ +"""Rebuild directed prices and reconcile both exact Type B endpoint exclusions.""" + +from argparse import ArgumentParser +from collections import Counter +from fractions import Fraction +from gzip import decompress +from hashlib import sha1, sha256 +from json import dumps, loads +from pathlib import Path +from shutil import copyfile +from subprocess import run +from sys import executable +from tempfile import TemporaryDirectory + +HERE = Path(__file__).resolve().parent +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +CAP = 25350 + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def unique(pairs): + value = dict(pairs) + require(len(value) == len(pairs), "duplicate JSON key") + return value + + +def read(raw): + return loads(raw, object_pairs_hook=unique) + + +def verify_sources(): + local_pins = read((HERE / "LOCAL-PINS.json").read_bytes()) + for relative, pin in local_pins.items(): + path = (HERE / relative).resolve() + require(path.is_relative_to(HERE) and sha256(path.read_bytes()).hexdigest() == pin, + f"changed local dependency {relative}") + public = read((HERE / "PROVENANCE.json").read_bytes())["files"] + for relative, source in public.items(): + require(relative in local_pins, f"untracked provenance path {relative}") + raw = (HERE / relative).read_bytes() + if source["uncompress"]: + raw = decompress(raw) + blob = sha1(b"blob " + str(len(raw)).encode() + b"\0" + raw).hexdigest() + require(sha256(raw).hexdigest() == source["sha256"] and blob == source["git_blob"], + f"changed public source {relative}") + + +def reconcile(price, keys, modular, exact, pins): + require(price["head"] == modular["head"] == exact["head"] == HEAD, + "changed comparator") + require(price["keys_sha256"] == modular["keys_sha256"] == exact["input_sha256"]["keys"] == pins["KEYS.json"] + and modular["price_sha256"] == exact["input_sha256"]["price"] == pins["PRICE.json"], "changed price or keys") + require(modular["status"] == exact["status"] == "EXHAUSTED" + and modular["unvisited_index_interval"] == [CAP, CAP] and not exact["unvisited"] + and not modular["provisional"] and not exact["survivors"], "incomplete replay") + require(modular["case_cap"] == exact["case_cap"] == exact["tested"] == len(keys) == CAP + and exact["old_endpoint_columns"] == 36, "incomplete arbitrary-input gate") + require(modular["q"] == -1 and modular["body"] == "all one" and modular["prime"] == 65521 + and exact["common_denominator"] > 0, "changed specialization") + require(sum(price["complete_paid"].values()) == 110519 + and sum(price["complete_targets"].values()) == 22461 + and price["signed_surplus"] == 1424 and price["empty_root_credit"] == 0, "changed complete price") + counts = Counter() + for index, (key, residue, rational) in enumerate(zip(keys, modular["records"], exact["outcomes"], strict=True)): + clocks = sorted(key["odd"] + key["even"]) + m = len(key["odd"]) + require(len(clocks) == 2*m == len(set(clocks)) and m in (3,4), "duplicate or wrong clocks") + require(clocks == rational["key"] and rational["price"] == key["price"] + and rational["status"] == "excluded", f"changed rational key {index}") + i, probe, row, value = residue + require(i == index and probe == "dense" and 0 <= row < 36 and 0 < value < 65521, + f"invalid modular witness {index}") + row, value = rational["dense_witness"] + require(36 <= row < 72 and Fraction(value), f"invalid rational witness {index}") + counts[m] += 1 + require(dict(counts) == {3: 10400, 4: 14950} + and modular["tested_by_transfer_count"] == {"3":10400, "4":14950} + and exact["counts"] == {"excluded":CAP}, "wrong exhausted coverage") + return (dumps({ + "head": HEAD, "tested": CAP, "exactly_three": counts[3], "exactly_four": counts[4], + "specialization": {"q": -1, "body": "all one"}, + "dense_witnesses_each": CAP, "survivors": 0, "unvisited": 0, + "input_sha256": {k:pins[k] for k in ("PRICE.json","KEYS.json","MODULAR.json","EXACT.json")}, + "compatible_gross_upper": "0", + }, sort_keys=True, indent=2) + "\n").encode() + + +def replay(output): + require(__debug__, "assertions must be enabled") + verify_sources() + pins = read((HERE / "receipts/SHA256.json").read_bytes()) + output.mkdir(parents=True, exist_ok=False) + + def accept(name, raw): + require(sha256(raw).hexdigest() == pins[name], f"changed generated receipt {name}") + (output / name).write_bytes(raw) + return raw + + with TemporaryDirectory(prefix="three-four-type-b-phases-") as directory: + root = Path(directory) + literal = root / "inputs" + price_root = root / "price" + price_inputs = price_root / "inputs" + literal.mkdir() + price_inputs.mkdir(parents=True) + caller = decompress((HERE / "inputs/7113-CALLER.json.gz").read_bytes()) + (literal / "CALLER.json").write_bytes(caller) + (price_inputs / "7113-CALLER.json").write_bytes(caller) + for name in ("7334-ADMITTED.json","7334-READBACK.json","R59-PRICE.json","pricing.py","derivative_check.py"): + copyfile(HERE / "inputs" / name, price_inputs / name) + for name in ("screen.py", "two_phase.py"): + copyfile(HERE / "inputs" / name, literal / name) + quote_engine = price_root / "quote.py" + copyfile(HERE / "engines/quote.py", quote_engine) + + def stage(script, *args, timeout): + return run([executable, "-I", "-B", str(script), *map(str, args)], cwd=root, + check=True, capture_output=True, timeout=timeout).stdout + + price_path, keys_path = price_root / "PRICE.json", price_root / "KEYS.json" + price_raw = accept("PRICE.json", stage(quote_engine, "--keys-out", keys_path, timeout=25)) + price_path.write_bytes(price_raw) + keys_raw = accept("KEYS.json", keys_path.read_bytes()) + modular_raw = accept("MODULAR.json", stage(HERE / "engines/reflection_gate.py", root, timeout=35)) + exact_script = HERE / "engines/multiple_edits.py" + exact_args = ["--price", price_path, "--keys", keys_path, "--admission", + price_inputs / "7334-ADMITTED.json", "--caller", price_inputs / "7113-CALLER.json"] + exact_raw = accept("EXACT.json", stage(exact_script, *exact_args, timeout=35)) + accept("COMPARE.json", reconcile(*map(read, (price_raw,keys_raw,modular_raw,exact_raw)), pins)) + (price_inputs / "7113-CALLER.json").write_bytes(caller + b"\n") + rejected = run([executable, "-I", "-B", str(exact_script), *map(str, exact_args)], + cwd=root, capture_output=True, timeout=10) + require(rejected.returncode == 1 and not rejected.stdout and b"changed input caller" in rejected.stderr, + "changed caller was accepted") + print("PASS_TYPE_B_PHASE_TRANSFERS triples=10400 quadruples=14950 excluded=25350 unresolved=0 kappa_change=0") + + +def main(): + parser = ArgumentParser(description=__doc__) + parser.add_argument("--out", type=Path) + args = parser.parse_args() + if args.out: + replay(args.out.resolve()) + else: + with TemporaryDirectory(prefix="three-four-type-b-receipts-") as directory: + replay(Path(directory) / "out") + + +if __name__ == "__main__": + main()