From 51ba88c007cfbcc3d9cf22dd321f5224be3a5bb1 Mon Sep 17 00:00:00 2001 From: Chris R Date: Mon, 19 Oct 2026 16:31:03 +1100 Subject: [PATCH] research: audit P104 encoded-source return at the inverse-shear caller Add the fixed-location return tariff, source-preserving fused schedules, retimed PR3894 comparison and scoped complete-coverage stopping bill. Preserve frozen source inputs and the selected frontier. --- .../PREDECESSORS.json | 83 ++++ .../PROGRAMS.json.gz | Bin 0 -> 88439 bytes .../p104-role-exchange-caller-audit/PROOF.md | 216 +++++++++ .../p104-role-exchange-caller-audit/README.md | 235 ++++++++++ .../RESULT.json | 1 + .../SOURCES.json | 42 ++ .../p104-role-exchange-caller-audit/TASK.json | 141 ++++++ .../VALIDATION.json | 47 ++ .../VERIFY.json | 45 ++ .../independent.py | 167 +++++++ .../inputs/3882-geometry.json | 9 + .../inputs/3882-proof.md | 69 +++ .../inputs/3882-readme.md | 84 ++++ .../inputs/3882-result.json | 32 ++ .../inputs/3894-correction.json | 116 +++++ .../inputs/3894-readme.md | 108 +++++ .../inputs/3894-result.json | 72 +++ .../test_verify.py | 153 +++++++ .../p104-role-exchange-caller-audit/verify.py | 422 ++++++++++++++++++ 19 files changed, 2042 insertions(+) create mode 100644 research/p104-role-exchange-caller-audit/PREDECESSORS.json create mode 100644 research/p104-role-exchange-caller-audit/PROGRAMS.json.gz create mode 100644 research/p104-role-exchange-caller-audit/PROOF.md create mode 100644 research/p104-role-exchange-caller-audit/README.md create mode 100644 research/p104-role-exchange-caller-audit/RESULT.json create mode 100644 research/p104-role-exchange-caller-audit/SOURCES.json create mode 100644 research/p104-role-exchange-caller-audit/TASK.json create mode 100644 research/p104-role-exchange-caller-audit/VALIDATION.json create mode 100644 research/p104-role-exchange-caller-audit/VERIFY.json create mode 100644 research/p104-role-exchange-caller-audit/independent.py create mode 100644 research/p104-role-exchange-caller-audit/inputs/3882-geometry.json create mode 100644 research/p104-role-exchange-caller-audit/inputs/3882-proof.md create mode 100644 research/p104-role-exchange-caller-audit/inputs/3882-readme.md create mode 100644 research/p104-role-exchange-caller-audit/inputs/3882-result.json create mode 100644 research/p104-role-exchange-caller-audit/inputs/3894-correction.json create mode 100644 research/p104-role-exchange-caller-audit/inputs/3894-readme.md create mode 100644 research/p104-role-exchange-caller-audit/inputs/3894-result.json create mode 100644 research/p104-role-exchange-caller-audit/test_verify.py create mode 100644 research/p104-role-exchange-caller-audit/verify.py diff --git a/research/p104-role-exchange-caller-audit/PREDECESSORS.json b/research/p104-role-exchange-caller-audit/PREDECESSORS.json new file mode 100644 index 000000000..03966caea --- /dev/null +++ b/research/p104-role-exchange-caller-audit/PREDECESSORS.json @@ -0,0 +1,83 @@ +{ + "schema_version": 1, + "files": [ + { + "path": "research/p104-role-exchange-caller-audit/inputs/3882-geometry.json", + "git_blob": "ba6d82f8a84edb71c131f16df7e94249ce480f2e", + "sha256": "8212331ef435650469b6fca71448bcc2915a0cab46562acc41c5fc2a3dfa56c7", + "origin": { + "repo": "Clear1nsight/integer-mult-bounds", + "ref": "9d56eeedbed5e3e9bbbc8c189d66f14cf15b6067", + "path": "research/p104-role-exchange-residue/geometry.json", + "sha": "ba6d82f8a84edb71c131f16df7e94249ce480f2e" + } + }, + { + "path": "research/p104-role-exchange-caller-audit/inputs/3882-result.json", + "git_blob": "aea655ec6c566c8c8492bc3da0f2e3745280882b", + "sha256": "33eaae6c77c10bed705d76b7950e7f8a6d5e09cd5727eadcde6f853c37be3f2b", + "origin": { + "repo": "Clear1nsight/integer-mult-bounds", + "ref": "9d56eeedbed5e3e9bbbc8c189d66f14cf15b6067", + "path": "research/p104-role-exchange-residue/RESULT.json", + "sha": "aea655ec6c566c8c8492bc3da0f2e3745280882b" + } + }, + { + "path": "research/p104-role-exchange-caller-audit/inputs/3882-proof.md", + "git_blob": "3bac5b4b2efbb33e978e93ee4a95340f3122c072", + "sha256": "fa0fc7842247df2f8522b6185b538f7570b7a864891fd7196e36d2be0734a6a2", + "origin": { + "repo": "Clear1nsight/integer-mult-bounds", + "ref": "9d56eeedbed5e3e9bbbc8c189d66f14cf15b6067", + "path": "research/p104-role-exchange-residue/PROOF.md", + "sha": "3bac5b4b2efbb33e978e93ee4a95340f3122c072" + } + }, + { + "path": "research/p104-role-exchange-caller-audit/inputs/3882-readme.md", + "git_blob": "432e94639861e6dc1731c6fa43951d641d4e1521", + "sha256": "d27d04a6a3143a52710a53aeb2d8e9804af9631b89ff933a2b1f11eeaa3994df", + "origin": { + "repo": "Clear1nsight/integer-mult-bounds", + "ref": "9d56eeedbed5e3e9bbbc8c189d66f14cf15b6067", + "path": "research/p104-role-exchange-residue/README.md", + "sha": "432e94639861e6dc1731c6fa43951d641d4e1521" + } + }, + { + "path": "research/p104-role-exchange-caller-audit/inputs/3894-correction.json", + "git_blob": "2e24adfeaedc0f16aa4b4f9821b422f19ada4e72", + "sha256": "cbe13b628f3f27610b01539ea6a4745134af62139d2e721a856bdc4b8815f8a0", + "origin": { + "repo": "1337isnot1337/integer-mult-bounds", + "ref": "13b397e36d43f2a91b9e6d42b3ca67f0ec50cea7", + "path": "research/p104-fullframe-endcut-correction/CORRECTION.json", + "sha": "2e24adfeaedc0f16aa4b4f9821b422f19ada4e72" + } + }, + { + "path": "research/p104-role-exchange-caller-audit/inputs/3894-result.json", + "git_blob": "2fd6145efacea828a37a7c1a2b36426b50df2c6a", + "sha256": "7651fbf84b72711e7568c2066a4c594c057460315d0d72858e042fc0f91e6f2c", + "origin": { + "repo": "1337isnot1337/integer-mult-bounds", + "ref": "13b397e36d43f2a91b9e6d42b3ca67f0ec50cea7", + "path": "research/p104-fullframe-endcut-correction/RESULT.json", + "sha": "2fd6145efacea828a37a7c1a2b36426b50df2c6a" + } + }, + { + "path": "research/p104-role-exchange-caller-audit/inputs/3894-readme.md", + "git_blob": "890f0a22ecb1675ae3755484ab23a6230a7f4f02", + "sha256": "85a7415cbca0d1680cc7fbed6f344a7d06b6e508ce0e8e99bc487556c38ca3f2", + "origin": { + "repo": "1337isnot1337/integer-mult-bounds", + "ref": "13b397e36d43f2a91b9e6d42b3ca67f0ec50cea7", + "path": "research/p104-fullframe-endcut-correction/README.md", + "sha": "890f0a22ecb1675ae3755484ab23a6230a7f4f02" + } + } + ], + "notice": "Exact source bytes retained with source-specific origin, authorship and Apache-2.0 notices. No predecessor executable is imported." +} diff --git a/research/p104-role-exchange-caller-audit/PROGRAMS.json.gz b/research/p104-role-exchange-caller-audit/PROGRAMS.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..32886ffaac7302c2ee5e5c77e4bd0698834906f4 GIT binary patch literal 88439 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

tRKfrbi_OKG24&-gScd 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 (-y,x+y)`. Its subsequent correction reads the +first output, applies `T^-1` to a paid copy, adds that copy to the second output, +and disposes of the copy. None of those later operations is donated here. +`scripts/copied_centers_network.py` records the separate paid endpoint child. + +That is an actual retained caller, but its documented two-factor geometry is +not a supplied P104 global owner embedding. We bind the caller's **inverse +shear equation** and give an explicit conservative realization at the P104 +post-channel cut. We do not substitute 104 for the caller's published triple +count, identify its two tensor axes for free, or claim that our local readout +is its complete second-stage physical implementation. This distinction is +essential to the stopping decision. + +At this cut, let `R(u,w)=(u-w,w)`, with all 72 dirty helpers unchanged. A legal +common-chart realization lifts each required `Y_i` from `H_i` to FULL, performs +`X_i -= Y_i` while both are FULL, and returns `Y_i` to `H_i`. This realization +costs 104 unit Gaussian additions and 208 rank-one conversions. It preserves +all returned `w` values. This is an explicit local implementation of the +retained equation, not a free source read or an outer recursive admission. + +For the source-preserving correction `S(x,y)=(x,x+y)`, the composed endpoint is +`R S(x,y)=(-y,x+y)`. Its return equations are `y=-X_out` and +`x=Y_out+X_out`; every arbitrary helper returns in its stated final chart. + +## 2. PR3882's boundary and why relabelling fails + +All algebra is over `D=Z[i,1/2]`, acting coordinatewise on arbitrary finite +arrays. Write `A=R_root^t R_root/8` in the pinned doubled-root port order. +For `J=[0,1,3,6,22,31,93,103]`, with complement N of size 96, the retained +geometry gives + +``` +A = [[I, B], [B^t, B^t B]], nnz(B)=384, +``` + +where every nonzero B coefficient is a signed half. PR3882 returns + +``` +X_J=q=x_J+B x_N, Y_J=w_J, +X_N=w_N, Y_N=v_N=y_N+B^t q. +``` + +`X_J,Y_N` are FULL; `X_N,Y_J` have their port hyperplanes. The 72 inherited +dirty helpers remain FULL and logically restored. This is a changed location +and data contract. Even allowing a free logical gather into residual order +`r=(q,v_N)`, the naive inverse shear returns `(r-w,w)`, whose error from the +required `(-y,w)` is `r-x`. It is generally nonzero. The verifier includes +the explicit nonpivot one-source, zero-y witness; zero dirty values are valid +for this separating witness, while the positive endpoint replay includes all +280 independent input columns. + +The residual-as-source error has rational rank exactly 104: its J rows are +`B x_N`, and `B B^t=12 I_8` proves their rank eight. Its N rows additionally +contain the 96 independent `y_N` coordinates with identity coefficient. +Thus the N rows are independent modulo the J rows. This is a logical +incompatibility statement, not a transport or recursive-cost lower bound. + +PR3882's inverse equations already recover x from `(w,q,v_N)`; those equations +and its sharp eight-replacement theorem are credited predecessor results. +The new result below is a literal return schedule and its sharp **fixed +physical-location** frame tariff. It is not a new residual-minimality theorem. + +## 3. A sharp 192-rank fixed-location restoration adapter + +Demand the same physical source and target locations as PR3894: X contains x +in FULL, Y contains w in `H_i`, and all helpers retain their values and frames. +Lift each `X_N` to FULL. In chronological order perform + +``` +Y_N -= X_N # v_N-w_N +Y_N -= B^t X_J # -x_N +X_J += B Y_N # x_J +for each i in N: + X_i -= Y_i # w_i+x_i + Y_i += X_i # w_i + X_i -= Y_i # x_i +``` + +Then descend `Y_N` to its target hyperplanes. The other eight sums `Y_J` and +the dirty helpers are untouched. Every scalar source and target is FULL. +No payload swap, sign operation, clean bank or private erasure is hidden in +the three displayed unit additions. The explicit schedule uses 1,152 unit +Gaussian ADD/SUBs, 104 halves and 104 restoring doubles, 96 lifts and 96 +descents. It contains 1,552 formal events. + +For each fixed physical register, the sum of absolute frame-dimension changes +is at least the absolute difference of its final and initial dimensions. +Here 96 X registers must go from dimension eight to nine, and 96 Y registers +must go from nine to eight. Thus **192 added rank units are necessary** under +the inherited nested dimension-gap tariff. The construction attains 192. +This bound permits arbitrary scalar resynthesis; it does not permit free +physical role renaming, changing the required return locations, or replacing +the caller's frame contract. It is not a scalar-operation or universal decoder +lower bound. Additional temporary banks cannot remove the fixed registers' +required endpoint dimension changes without changing this model. + +Consequently the literal PR3882 tail followed by this fixed-location adapter +has 400 added H1 conversions above the original channel, versus PR3894's 208. +The inherited channel mass is 2,368, so the respective totals are 2,768 and +2,576 before the next reader. Appending the separate inverse reader gives +2,976 and 2,784. These are constructive local invoices and a scoped adapter +minimum, not optimum complete caller costs. + +## 4. Fuse the return instead of paying an intermediate encoded boundary + +At the original channel exit X=x, Y=v=y+A x. Lift all 104 Y fields to FULL. +Use the eight original source pivots as temporary accumulators: + +``` +X_J += B X_N +Y_J -= B X_N +Y_N -= B^t X_J +X_J -= B X_N +Y_N += X_N +``` + +After the first two operations, `X_J=q` and `Y_J=w_J`. The third gives +`Y_N=v_N-B^t q=y_N`. The fourth restores the original `x_J`; the last gives +`Y_N=w_N`. Every `X_N` source is unchanged. The result is exactly S, including +all source, target and helper rows, so a caller which accepts PR3894's physical +endpoint accepts the same endpoint here **conditional on the same native +chart semantics**. The derivation uses the same source-pivot geometry as +PR3882; source-consuming and in-place pivot ideas are credited, not invented. + +There are four B traversals and 96 direct additions: `4*384+96=1632` unit +Gaussian ADD/SUBs. For a literal dyadic lowering, each of the two X_N gather +passes halves and restores each of 96 donors; the scatter halves and restores +eight pivots. Thus there are 200 halves and 200 doubles. The final 104 Y +descents and initial 104 lifts give exactly the same **208 H1** profile as +PR3894. This source-preserving suffix contains 2,240 formal events. + +To consume S with the bounded inverse reader, perform all `X_i -= Y_i` +**before** the Y descents. The result is `(-y,w)` with 1,736 unit additions, +200 halves, 200 doubles and 208 conversions: 2,344 suffix events. No X source +is consumed until every corrected Y sum exists. This chronology matters. + +For a fair control, retime PR3894's direct correction into the same all-Y-FULL +window. Halve each of the 104 original X sources once, apply its 4,992 signed +unit correction additions, restore every X by doubling, then perform the same +104 inverse-reader additions and descend Y. This uses 5,096 unit additions, +104 halves, 104 doubles and the same 208 conversions: 5,512 suffix events. +The new scalar schedule saves 3,360 unit additions but adds 96 halves and 96 +doubles. A separate copy/cleanup operation, less precision, faster runtime or +lower recursive-child profile does not follow from the addition count. + +At 512 complex words, multiply a Gaussian array addition/halving/doubling by +1,024 real component operations. The exact real-addition saving is 3,440,640; +each extra halving/doubling category has 98,304 real component operations. + +The normalized scalar prefixes have sharp maximum coefficient denominator +four in the pivot schedule and two in the retimed baseline; both have maximum +row one-norm 26 including their channel-exit entrance. The direct bound is +`26H` per computed data component when original normalized x,y components are +bounded by H. Untouched helpers retain their own input bounds. These are +**tail-only common-chart** certificates. The original channel +interior, physical native entrance, literal signed-floor divisibility, native +scratch, accumulated rounding and all-depth numerical formats are not proved. + +The all-Y-FULL schedules have 2,520 persistent frame coordinates at peak, +including 72 FULL dirty helpers; PR3894's target-major suffix peaks at 2,417. +The receipt also records after-event frame-coordinate sums with an explicit +convention. These finite occupancy diagnostics omit native internal scratch +and are not a recursive owner/idle tariff. + +## 5. Complete-cost decision and precise exclusions + +Retiming either baseline or pivot suffix into the reader window leaves the +profile `(1282,58,86,104,48,24,8,8)` and mass 2,576. The unchanged local +width-nine, 280-role bare screen is `2576/2520=46/45>1`. Every positive child +rank is at most nine, so for `0<=a<1`, `(r/9)^(1-a)>=r/9`. Nonnegative omitted +costs cannot rescue this particular unchanged-interface screen. This is not a +universal obstruction to a caller with a different coverage law. + +For the retained **source-preserving nine-call paired-chain template**, use +width 73, 832 families, one unpaid coordinate per live family, 2,312 persistent +progress units per local call, and no extra progress from the closed terminal +excursion. The remaining collective correction/helper/residual/idle coverage +is `72*832-9*2312=39096`. The favorable whole rank bill for the unchanged +profile is therefore + +``` +9*2576 + 39096 = 62280 > 60736 = 73*832, +M(0) >= 7785/7592 > 1. +``` + +This is the inherited complete-coverage rejection, now applied to an explicit +source-preserving resynthesis of the role-exchange idea. It is not a new +coverage theorem and does not transplant the separate PR3609/3620 dual's +425/426 threshold or six/seven/six format. Fully paid auxiliary banks add 73 +to both coverage and capacity, preserving the positive 1,544-rank deficit for +every finite number. The already charged terminal mass is not subtracted from +idle coverage as a free credit. + +The complete **physical** price retains native wrappers/arithmetic, inherited +private COPY/disposal, source availability, original and changed bank owners, +all holding/routing/address/control work, actual numerical formats, paid +endpoint copy/correction/cleanup, recursive backend, all-size transfer and +the outer caller's actual coverage law. Those quantities are unknown or +inherited as stated, not zero. The rejection uses a favorable lower bound, +so no additional implementation is needed to reject this unchanged budget. + +Decision **NARROW**: retain the exact fixed-location adapter, its sharp tariff, +the all-input caller-cut compositions, the scalar resynthesis and the fair +baseline comparison. No native expansion or supplier claim is justified. +The older 1,352-add chronological snapshot correction and 2,376-add dirty-root +factorization remain credited alternatives; this is not a record for all +source-preserving correction words. All native recipes, global ownership, +physical caller adoption, formal-kernel acceptance and independent human +review remain separate. diff --git a/research/p104-role-exchange-caller-audit/README.md b/research/p104-role-exchange-caller-audit/README.md new file mode 100644 index 000000000..ea747e88e --- /dev/null +++ b/research/p104-role-exchange-caller-audit/README.md @@ -0,0 +1,235 @@ +# P104 role-exchange return at a retained inverse-shear caller + +**Scoped caller-cut audit; no supplier, new kappa or selected-frontier change.** + +PR3882's source-consuming output is not interchangeable with PR3894's +source-preserving boundary. For a caller requiring the original X/Y physical +locations, restoring that boundary needs **at least 192 additional frame-rank +units**, and the explicit adapter here attains 192. Fusing the restoration +back into the correction gives a source-preserving suffix with **1,632 unit +Gaussian additions, 200 halves, 200 restoring doubles and 208 H1 conversions**. +It reduces scalar work relative to PR3894's direct correction while leaving +the noncontracting recursive-child profile unchanged. + +The named actual predecessor caller is the **two-stage complex bank-exchange +construction**, specifically its inverse second shear, in +[`notes/copied-centers-complex.tex`](../../notes/copied-centers-complex.tex). +The retained scalar contract is `(x,y) -> (-y,x+y)`; the later physical +endpoint copy/correction/erasure remains paid. We provide an explicit legal +common-chart realization of that inverse-shear equation at the P104 exit. +**This does not instantiate the caller's full two-factor geometry, P104 global +owners or all-size physical cost.** The caller equation is real; a compatible +complete P104 physical embedding remains absent from this package. + +Canonical base is `20ecf2891d80b5acf18d980b2164fb44ea7faa90`, priority revision 6. +The selected conditional kappa stays `0.001672660197076918`. New work is confined +to this package; frozen inputs, shared tools and the selected record are unchanged. + +## Exact composed endpoints and return + +Write `v=y+A x` for the inherited original 4,058-event channel. In the retained +eight-pivot decomposition `A=[[I,B],[B^t,B^t B]]`, PR3882 returns + +``` +X_J=q=x_J+B x_N, Y_J=w_J, +X_N=w_N, Y_N=v_N=y_N+B^t q, w=x+y. +``` + +The sums occupy hyperplanes; q and v_N occupy FULL. Its explicit inverse is +credited predecessor work. Even granting a free logical gather of residuals +into `r=(q,v_N)`, substituting r for the original source in the next inverse +shear gives `(r-w,w)`, with error `r-x` of **rational rank 104**. A literal +one-source fixture separates this from the desired `(-y,w)`. + +The new return adapter preserves every sum and restores the fixed physical +boundary `(X=x FULL, Y=w H_i)`, with all 72 arbitrary dirty helpers unchanged. +It uses 1,152 unit additions, 104 halves, 104 doubles and exactly 192 conversions. +The lower bound follows from the necessary dimension change on 96 X locations +and 96 Y locations. Free role renaming and changed return locations are outside +that bound. See [PROOF.md](PROOF.md) for the complete word and scope. + +After source restoration, the bounded inverse reader realizes + +``` +(x,w,h) -> (x-w,w,h) = (-y,x+y,h). +y = -X_out, x = Y_out+X_out. +``` + +It lifts Y to FULL, subtracts Y from X and descends Y: 104 unit additions and +208 conversions. These are actual paid operations in the local schedule. +The output preserves all input information; no residual is privately erased. + +## Fused correction and fair baseline + +All Y fields are lifted to FULL. The source pivots themselves provide the +temporary q values, and are restored before the optional reader consumes X: + +``` +X_J += B X_N +Y_J -= B X_N +Y_N -= B^t X_J +X_J -= B X_N +Y_N += X_N +``` + +This returns exactly `(x,x+y,h)`. Adding `X -= Y` before the final Y descents +gives the tested inverse-shear endpoint. Every scalar gate has both operands +in FULL. The source and target hyperplanes, all coefficients and all arbitrary +dirty rows are checked, not inferred from port supports alone. + +The following counts are **added suffix costs above the same original channel**. +The retimed baseline is derived from PR3894's exact 4,992 correction entries; +all donors are halved once and restored, so its displayed additions are also +unit operations. Moving all Y fields to FULL at once is a declared schedule +change, with its holding/ownership costs still separate. + +| Schedule | Required endpoint | Unit ADD/SUB | Halves | Doubles | Added H1 | +|---|---|---:|---:|---:|---:| +| PR3882 closed output, then fixed-location return | `(x,w)` | 2,400 | 208 | 208 | 400 | +| New fused source-preserving correction | `(x,w)` | 1,632 | 200 | 200 | 208 | +| Retimed, lowered PR3894 correction | `(x,w)` | 4,992 | 104 | 104 | 208 | +| New correction fused with bounded inverse reader | `(-y,w)` | 1,736 | 200 | 200 | 208 | +| Retimed, lowered PR3894 plus the same fused reader | `(-y,w)` | 5,096 | 104 | 104 | 208 | + +PR3894's original target-major word is also replayed literally: 4,992 scaled +additions and 208 conversions. Its scaled additions have not silently been +equated with unit additions. Without fusion, closing each interface and then +adding the separate inverse reader gives 608 added H1 for the role-return +route and 416 for PR3894. Those are constructive invoices, not caller optima. + +For the fair fused-reader comparison the scalar saving is **3,360 unit Gaussian +additions**, with 96 additional halves and 96 additional doubles. At 512 complex +words that saves 3,440,640 real ADD/SUBs and adds 98,304 real halves and 98,304 +real doubles. This is not a measured runtime result or a recursive improvement. + +The pivot suffix has a sharp maximum normalized scalar coefficient denominator +four; the retimed direct baseline needs denominator two. Both reach row one-norm +26 including their channel-exit entrance. This supplies a tail-only `26H` +computed-data component bound when normalized x,y components are bounded by H; +untouched helpers retain their own bounds. It is not a native/signed-floor, original-channel, rounding or +all-depth format certificate. The all-Y-FULL suffix peaks at 2,520 persistent +frame coordinates including the 72 helpers, versus 2,417 for the target-major +baseline. Detailed after-event occupancy diagnostics are in [RESULT.json](RESULT.json); +they do not price native scratch or recursive holding. + +## Complete-cost decision + +Both fully fused routes retain profile `(1282,58,86,104,48,24,8,8)` and mass +2,576, giving the unchanged local screen `2576/(9*280)=46/45>1`. For the +retained source-preserving nine-stage paired-chain coverage law, the favorable +whole rank bill is + +``` +remaining coverage = 72*832 - 9*2312 = 39096 +full lower mass = 9*2576 + 39096 = 62280 +capacity = 73*832 = 60736 +M(0) >= 7785/7592 > 1. +``` + +The closed terminal correction earns no new endpoint progress under that law. +Its mass is not deducted again from required idle/remaining coverage. Finite +fully paid auxiliary banks preserve the 1,544-rank excess. This is the credited +conditional coverage rejection applied to the explicit new source-preserving +word, not a new coverage theorem or a universal P104 obstruction. + +The full physical bill additionally needs native wrappers/arithmetic, original +private COPY/disposal, source availability, exact owners/holding/routing/address +and control, actual entrance/temporary widths, the caller's later endpoint +copy/correction/cleanup and all-size recursive transfer. Those costs are +unresolved or inherited; they are not assigned zero. The unchanged favorable +lower bound already fails, so supplier/native expansion stops here. + +**Decision: NARROW.** Preserve the sharp fixed-location adapter tariff, logical +incompatibility witness, exact caller-cut words and cost comparison. No actual +P104 global caller or favorable complete replacement coverage law is supplied. + +## Reproduce and evidence + +Standard-library CPython 3.12, from a complete checkout: + +```sh +python3.12 -I -B scripts/research_package.py --package research/p104-role-exchange-caller-audit +``` + +Direct source-complete, Git-free commands are: + +```sh +python3.12 -I -B research/p104-role-exchange-caller-audit/verify.py +python3.12 -I -O -B research/p104-role-exchange-caller-audit/independent.py +python3.12 -I -O -B research/p104-role-exchange-caller-audit/test_verify.py +``` + +The primary imports no predecessor executable. It authenticates all consumed +inputs, reconstructs the original channel on 280 independent variables with +its distinct owned-copy disposal semantics, regenerates PR3882's exact tail, +checks its encoded boundary, and replays eight return/reader/baseline schedules. +The separately written checker enumerates roots differently and reconstructs +the eight complete endpoints with dense quarter-integer arithmetic: 627,200 +coefficient comparisons. It imports no primary code. Both implementations +share this assisted session and source context; agreement is not independent +human review. + +All eight literal schedules are retained in `PROGRAMS.json.gz`. Verification +compares their complete decompressed canonical JSON, not gzip container bytes. + +The behavioral suite covers source restoration, coefficient sign, illegal +early descent, reader sign, omitted swap step, arbitrary dirty-bank return, +residual relabelling, undercharged transport, equivalent frame bases, and +actual optimized CLI rejection of altered/missing source bytes and malformed +typed receipts/programs. Read-only Git-free replays preserve source and +package bytes. Exact source origins, scientific heads and hashes are in +[SOURCES.json](SOURCES.json) and [PREDECESSORS.json](PREDECESSORS.json). +Recorded validation and publication limits are in TASK.json/VALIDATION.json. + +Original channel native recipes, all new literal native/signed-floor execution, +the full selected cold replay, full physical caller, human review and formal +proof-kernel acceptance are not freshly run or established here. The selected +record was read and pinned; its entire historical source inventory was not +materialized for the baseline wrapper in this bounded mirror. + +## Open next questions + +1. **A genuinely changed physical caller.** Can one actual P104 owner embedding + accept `(w,q,v_N)` without restoring the original source slots and pass its + complete replacement coverage law? Begin with the exact external reads, + return locations and physical owner map. No such favorable caller is supplied + here; another scalar optimization cannot substitute for it. +2. **Matched two-axis composition.** Can the retained caller's orthogonal-axis + second stage, paid endpoint correction and residual representation be changed + together? First state an exact all-role physical intertwiner and whole bill. + The local inverse reader here is not that geometric embedding. Stop before + native expansion if its favorable fully charged screen fails. + +Structured first steps and blockers are in [TASK.json](TASK.json). Questions +are released, not reserved; the unchanged failed budget does not justify a +dependent supplier-construction round. + +## Credit and overlap + +Credit Clear1nsight/PR3882 for the source-consuming boundary, exact inverse, +orthogonal pivots and sharp eight-residual theorem; 1337isnot1337/PR3894 for the +direct full-frame correction and its exact invoice; Rohan Arun/PR1972 for the +original channel; Chafik Boukhalfa/PR1991 for its native realization; Adam Gall +for the schedule and terminal coverage floor; Josie Elliston/PR1071 and the +E8/root lineage; and the retained rank-obstruction package for root factorization, +terminal tariff and the older 1,352-add chronological snapshot correction. +This is not a record for all source-preserving correction schedules. + +Credit Aurel Prosz/Paureel, Zhihao Chen, Rohan Arun, Dominik Scholz and icekylinx +for the retained two-stage/copied-center caller and paid endpoint correction; +Sagar Thakrar/PR1012 and Douglas Colkitt for coverage/ceiling context; Jose +Manuel and Vasek/PR2744 for complete consumer-budget discipline. PR3609's +different in-place dual entrance and PR3620's distinct caller thresholds retain +their priority. Their numerical thresholds are not transferred to this contract. + +Entry overlap examined 633 open PR records with reported complete pagination, +the required repository guidance and bounded public Discussion pages. No +complete Discussion cache, arbitrary historical diff search or novelty guarantee +is claimed. Source PR3882's scientific head is pinned at `9d56eee`; its later +workflow-only publication head was separately inspected. TASK.json records +checkpoint refreshes and publication limits. + +Prepared by Clear1nsight with substantial OpenAI Codex assistance in derivation, +implementation, tests and writing. New work is Apache-2.0. Exact predecessor +bytes and their authorship/notices are retained. No independent human review, +formal-kernel acceptance, supplier admission or selected-frontier update. diff --git a/research/p104-role-exchange-caller-audit/RESULT.json b/research/p104-role-exchange-caller-audit/RESULT.json new file mode 100644 index 000000000..697571f67 --- /dev/null +++ b/research/p104-role-exchange-caller-audit/RESULT.json @@ -0,0 +1 @@ +{"additional_halves_and_doubles_each":96,"dirty_helpers":72,"encoded_boundary":{"added_H1":208,"endpoint_sha256":"878c38dba97c831834e3ccd7fa8b1308b205e09865c43f8944fd65d9faf5e765","events":1664,"maximum_coefficient_denominator":4,"maximum_row_l1":"26","operation_counts":{"add":1248,"double":104,"drop":104,"half":104,"lift":104},"peak_persistent_frame_coordinates":2520,"post_event_persistent_frame_coordinate_holds":4182464},"fixed_location_restoration_minimum_added_rank":192,"independent_inputs":280,"naive_residual_as_source_error_rank_over_Q":104,"physical_or_all_size_supplier_admitted":false,"ports":104,"programs":{"baseline_3894":{"added_H1":208,"bare_280_role_M0":"46/45","combined_channel_mass":2576,"endpoint_sha256":"9193a83e46045fcc941bacc2863e19a758bc0b76819e95084da540604ef81120","events":5200,"maximum_coefficient_denominator":2,"maximum_row_l1":"26","operation_counts":{"drop":104,"lift":104,"scaled_add":4992},"peak_persistent_frame_coordinates":2417,"post_event_persistent_frame_coordinate_holds":12568296,"program_sha256":"17db246e9c264c74586b973cbda7edfe1ffe2c9ffb419ccad29cc559dd731a2e"},"baseline_3894_then_reader":{"added_H1":416,"bare_280_role_M0":"116/105","combined_channel_mass":2784,"endpoint_sha256":"77fc7c53b8be4d024ee786f29898f6573d6d05fcb758833cb12af9a610dd4f65","events":5512,"maximum_coefficient_denominator":2,"maximum_row_l1":"26","operation_counts":{"add":104,"drop":208,"lift":208,"scaled_add":4992},"peak_persistent_frame_coordinates":2520,"post_event_persistent_frame_coordinate_holds":13343720,"program_sha256":"ac3cfc5983b3f5b7fb024927f756d38f0aedfc9a98524b68cafbed729e946459"},"fused_return":{"added_H1":208,"bare_280_role_M0":"46/45","combined_channel_mass":2576,"endpoint_sha256":"9193a83e46045fcc941bacc2863e19a758bc0b76819e95084da540604ef81120","events":2240,"maximum_coefficient_denominator":4,"maximum_row_l1":"26","operation_counts":{"add":1632,"double":200,"drop":104,"half":200,"lift":104},"peak_persistent_frame_coordinates":2520,"post_event_persistent_frame_coordinate_holds":5633984,"program_sha256":"0b2e52ebcce88f3a51d6be2aa6185daa1f479ae5feaa164025746e9103909ef7"},"fused_return_and_reader":{"added_H1":208,"bare_280_role_M0":"46/45","combined_channel_mass":2576,"endpoint_sha256":"77fc7c53b8be4d024ee786f29898f6573d6d05fcb758833cb12af9a610dd4f65","events":2344,"maximum_coefficient_denominator":4,"maximum_row_l1":"26","operation_counts":{"add":1736,"double":200,"drop":104,"half":200,"lift":104},"peak_persistent_frame_coordinates":2520,"post_event_persistent_frame_coordinate_holds":5896064,"program_sha256":"3e523b323e789c20c396e0ab014bf0425d2b379a815090189c1bbaa680903896"},"retimed_lowered_baseline":{"added_H1":208,"bare_280_role_M0":"46/45","combined_channel_mass":2576,"endpoint_sha256":"9193a83e46045fcc941bacc2863e19a758bc0b76819e95084da540604ef81120","events":5408,"maximum_coefficient_denominator":2,"maximum_row_l1":"26","operation_counts":{"add":4992,"double":104,"drop":104,"half":104,"lift":104},"peak_persistent_frame_coordinates":2520,"post_event_persistent_frame_coordinate_holds":13617344,"program_sha256":"59d2160a659ccbcecd6bfe2e7016fd538851b235ed2bd695387ee2b4ec2cdac4"},"retimed_lowered_baseline_and_reader":{"added_H1":208,"bare_280_role_M0":"46/45","combined_channel_mass":2576,"endpoint_sha256":"77fc7c53b8be4d024ee786f29898f6573d6d05fcb758833cb12af9a610dd4f65","events":5512,"maximum_coefficient_denominator":2,"maximum_row_l1":"26","operation_counts":{"add":5096,"double":104,"drop":104,"half":104,"lift":104},"peak_persistent_frame_coordinates":2520,"post_event_persistent_frame_coordinate_holds":13879424,"program_sha256":"330963c3acb84421ba20126869685303981b7fd25f00cec35d72531b6fc8423c"},"role_return_then_reader":{"added_H1":608,"bare_280_role_M0":"124/105","combined_channel_mass":2976,"endpoint_sha256":"77fc7c53b8be4d024ee786f29898f6573d6d05fcb758833cb12af9a610dd4f65","events":3528,"maximum_coefficient_denominator":4,"maximum_row_l1":"26","operation_counts":{"add":2504,"double":208,"drop":304,"half":208,"lift":304},"peak_persistent_frame_coordinates":2520,"post_event_persistent_frame_coordinate_holds":8847296,"program_sha256":"a6ee625b8d7b643493d162ed72b605a994af5fa18a12b0343f9e9c4269c20e85"},"role_then_fixed_return":{"added_H1":400,"bare_280_role_M0":"346/315","combined_channel_mass":2768,"endpoint_sha256":"9193a83e46045fcc941bacc2863e19a758bc0b76819e95084da540604ef81120","events":3216,"maximum_coefficient_denominator":4,"maximum_row_l1":"26","operation_counts":{"add":2400,"double":208,"drop":200,"half":208,"lift":200},"peak_persistent_frame_coordinates":2520,"post_event_persistent_frame_coordinate_holds":8071872,"program_sha256":"14103347fc94f8931ad5270e2867a3157b985e6a538db0e8d32765f7cbd5ad2d"}},"restoration_constructed_added_rank":192,"scalar_saving_against_retimed_lowered_baseline":3360,"schema_version":1,"source_channel":{"events":4058,"mass":2368,"operation_counts":{"add":2624,"copy":8,"erase":8,"transport":1410,"zero":8},"persistent_progress":2312,"private_copy_mass":56,"profile":{"1":1074,"2":58,"3":86,"4":104,"5":48,"6":24,"7":8,"8":8}},"sources":{"notes/copied-centers-complex.tex":"18eac6d5c5755e53230c0c12a633f38b6ce9666ef0322c1aff79394f2952af72","research/p104-native-channel/inputs/LOWRANK-WITNESS.json":"0f541bef7f19fdeffd67157684e9f03d785f42c89973632f508fc1a0452b580e","research/p104-native-channel/inputs/P104-FIXTURE.json":"516c06f6ec3cb84be588c546108de897650288576dd5fbf5fe44b9c5546ad8a4","research/p104-role-exchange-caller-audit/inputs/3882-geometry.json":"8212331ef435650469b6fca71448bcc2915a0cab46562acc41c5fc2a3dfa56c7","research/p104-role-exchange-caller-audit/inputs/3882-proof.md":"fa0fc7842247df2f8522b6185b538f7570b7a864891fd7196e36d2be0734a6a2","research/p104-role-exchange-caller-audit/inputs/3882-readme.md":"d27d04a6a3143a52710a53aeb2d8e9804af9631b89ff933a2b1f11eeaa3994df","research/p104-role-exchange-caller-audit/inputs/3882-result.json":"33eaae6c77c10bed705d76b7950e7f8a6d5e09cd5727eadcde6f853c37be3f2b","research/p104-role-exchange-caller-audit/inputs/3894-correction.json":"cbe13b628f3f27610b01539ea6a4745134af62139d2e721a856bdc4b8815f8a0","research/p104-role-exchange-caller-audit/inputs/3894-readme.md":"85a7415cbca0d1680cc7fbed6f344a7d06b6e508ce0e8e99bc487556c38ca3f2","research/p104-role-exchange-caller-audit/inputs/3894-result.json":"7651fbf84b72711e7568c2066a4c594c057460315d0d72858e042fc0f91e6f2c"},"status":"PASS_P104_ROLE_EXCHANGE_CALLER_AUDIT","unchanged_paired_chain":{"M0":"7785/7592","capacity":60736,"families":832,"lower_mass":62280,"persistent_progress_per_call":2312,"remaining_coverage":39096,"scope":"Conditional inherited source-preserving nine-call template only; not a supplied owner embedding.","stages":9,"width":73}} diff --git a/research/p104-role-exchange-caller-audit/SOURCES.json b/research/p104-role-exchange-caller-audit/SOURCES.json new file mode 100644 index 000000000..5aea1a75e --- /dev/null +++ b/research/p104-role-exchange-caller-audit/SOURCES.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "base_commit": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "files": [ + { + "path": "research/p104-native-channel/inputs/LOWRANK-WITNESS.json", + "usage": "input", + "git_blob": "86beaf424e9f0f800ae3a62797d94ec9386b7706", + "sha256": "0f541bef7f19fdeffd67157684e9f03d785f42c89973632f508fc1a0452b580e" + }, + { + "path": "research/p104-native-channel/inputs/P104-FIXTURE.json", + "usage": "input", + "git_blob": "2e16f99b295bb386fd13bd8fbd57b42ef54143a9", + "sha256": "516c06f6ec3cb84be588c546108de897650288576dd5fbf5fe44b9c5546ad8a4" + }, + { + "path": "notes/copied-centers-complex.tex", + "usage": "input", + "git_blob": "fddd7bc7f2a2f749ba6eada19d153bf9243ee31c", + "sha256": "18eac6d5c5755e53230c0c12a633f38b6ce9666ef0322c1aff79394f2952af72" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "67f085acd86acd7d4e03922d9cf4b26bca66fed5", + "sha256": "47b42433f5a85809a3aadd29c2c339da2c6ed728e4f7762df6b88bccb7874cf0" + }, + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "b1fea0c94436b236cc2b7d41a7be032811b94c81", + "sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "path": "scripts/copied_centers_network.py", + "usage": "provenance", + "git_blob": "74796d6e1577b4d6745c77d82d586d1c78daf532", + "sha256": "409ebfbd8a41c4c4d089aa0949fcf5a949415dc26f57440ffd48b7bd8881e6a9" + } + ] +} diff --git a/research/p104-role-exchange-caller-audit/TASK.json b/research/p104-role-exchange-caller-audit/TASK.json new file mode 100644 index 000000000..eb6d4f26f --- /dev/null +++ b/research/p104-role-exchange-caller-audit/TASK.json @@ -0,0 +1,141 @@ +{ + "schema_version": 1, + "task_id": "p104-side-correction", + "priority_revision": 6, + "base_commit": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "original_card": { + "id": "p104-side-correction", + "question": "Can the proposed P104 joint endpoint flags be realized by a chronological correction program with coefficients, dirty restoration and an affordable complete bill?", + "starting_points": [ + "docs/research/research-family-status.md", + "research/p104-native-channel/README.md", + "research/p104-native-channel/PROOF.md", + "docs/research/community-efficient1000-review.md", + "research/p104-joint-unit-flags/README.md" + ], + "methods": [ + "Construct one side-correction word at an explicit chronological cut with the needed frames still available.", + "Derive a lower bound on the side correction and hosting costs that decides whether this channel can beat the selected budget." + ], + "acceptance_gate": "An exact arbitrary-input identity, source/target frame availability and restoration at the chosen cut, plus the complete channel+correction+idle/hosting bill or an explicit favorable bound. The native channel alone is not a supplier. A scoped local result may be retained without a complete supplier. Expanding it into further construction rounds requires the family-level budget and obligation gate in research-family-status.md; an optimistic passing relaxation alone is not acceptance.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read the revision-6 family record and #2981 static joint flags, alongside the reviewed #1991 channel. #2981 is an author-checked source archive, not an independently validated executable correction or a refutation of program-level lifetime floors.", + "scope": "Source-bound orientation only. Read the named package and review before relying on its local evidence; this command is not its replay or supplier admission." + }, + "first_experiment": "After checking live handoffs, pin one named collection from #2981 and attach acquisition/delivery times, source dependencies and coefficient requirements. Test legal access and arbitrary dirty restoration; price any completion against the full channel/endpoint/hosting allowance. Stop with the exact missing implication or a scoped counterexample rather than expanding the static cover census.", + "bottleneck_link": "Completing an already realized changed channel tests a concrete construction opportunity, instead of refining the incumbent packing. A positive local result still needs global and all-size admission.", + "allowed_variations": [ + "One correction factorization, one chronological cut, or one explicit hosting obstruction.", + "A changed correction schedule with an updated full bill and native frame contract." + ], + "scope_change_triggers": [ + "Recompiling the already certified low-rank channel without closing a new obligation.", + "Treating a pending ancestor, local histogram or unpriced side correction as an admitted global supplier.", + "Repeating a correction or physical conversion already supplied by a pending follow-up without adding independent coverage or a different unresolved obligation.", + "Repeating the 208-flag static matching or calling a static nested cover a chronological correction program. Independent audit of that certificate is distinct and remains useful." + ], + "overlap_terms": [ + "P104", + "I-G/2", + "side correction", + "native channel", + "1972", + "1991", + "2586", + "endpoint transport", + "physical dual", + "relay composition", + "2981", + "joint unit flags", + "acquisition delivery", + "static nesting" + ], + "existing_checks": [ + { + "scope": "PR #2981 reports static joint endpoint flags and a matching of 208 departure and arrival flags; archival intake is not independent verification.", + "evidence": "research/p104-joint-unit-flags/README.md", + "remaining": "Independent flag check and a chronological coefficient program with dirty restoration and a complete cost.", + "status": "author-checked", + "source_commit": "3d24b92d8ba057b57cb2d480170ec407520e6882", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + } + ] + }, + "scope_status": "changed", + "scope_change_reason": "Explicit user assignment: bound the source-consuming PR3882 residual contract to one actual retained downstream caller equation and compare its return and complete cost obligations with PR3894.", + "actual_scope": "The retained two-stage complex caller's inverse second shear, source-return compatibility, a sharp fixed-location 192-rank restoration tariff, and an exact orthogonal-pivot source-preserving resynthesis. This is one bounded caller-cut study, not a supplied P104 global owner embedding.", + "budget_minutes": 60, + "selection": "Explicit assignment; no picker reroll.", + "object_and_question": "Can PR3882's (w,q,v_N) feed the next inverse shear from notes/copied-centers-complex.tex without losing the original caller's two-bank endpoint or donating return/frame costs?", + "milestone": "Scoped exact caller-cut composition, restoration obstruction and cost comparison; no supplier or kappa.", + "success_test": "Exact arbitrary-input matrix and framed equations, retained 72 dirty helpers, independent endpoint calculation, baseline source reconstruction and meaningful rejection controls.", + "stop_rule": "Stop supplier/native expansion when the unchanged complete-cost relaxation fails or outer physical caller/coverage costs remain unspecified. Preserve the local result and release questions.", + "outcome": "partial", + "family_decision": "NARROW", + "checkpoints": [ + { + "round": "entry", + "utc": "2026-10-19T04:12:26Z", + "canonical_main": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "priority_revision": 6 + }, + { + "round": "pre-publication source refresh", + "utc": "2026-10-19T04:36:13.254614+00:00", + "canonical_main": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "priority_revision": 6, + "decision": "NARROW: retain caller-cut audit and source-return tariff; unchanged lower bill fails; no physical P104 embedding claimed." + }, + { + "round": "final main and overlap delta", + "utc": "2026-10-19T04:44:29.539088+00:00", + "canonical_main": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "priority_revision": 6, + "decision": "NARROW; scientific result retained; publication blocked by automatic approval review capacity, not scientific or repository-policy rejection." + } + ], + "overlap": { + "open_pr_records": 633, + "open_pr_pages": 8, + "complete_reported_pagination": true, + "atomic_snapshot": false, + "discussion_coverage": "Manual public start/handoff/active pages and canonical P104 2750/2619; no complete Discussion cache.", + "local_coverage": "Bounded exact predecessor and caller sources; no complete code/diff or historical closed-PR corpus.", + "helper": "scripts/find_overlap.py --task p104-side-correction 3882 3894 role-exchange --cache /tmp/p104-caller-overlap-entry.json --offline --json", + "limitations": "No-match is not a novelty guarantee. Live PR3882 head changed to d765863 (workflow-only child of scientific 9d56eee); scientific inputs stay frozen at 9d56eee.", + "prepublication_delta": { + "records_read": 100, + "updated_since_utc": "2026-10-19T04:17:00Z", + "scope": "Latest 100 current open PR bodies; initial 633-record complete-pagination snapshot retained; no complete Discussion cache or exhaustive historical diff scan." + } + }, + "publication_limits": [ + "Connected read API used because sandbox shell has no DNS and download escalation approval review could not complete (review model capacity).", + "No physical P104 global caller or complete all-size supplier is inferred from the retained two-stage logical caller.", + "New branch creation was blocked before execution by permission-review timeout and, on the allowed retry, review-model capacity. Read-back 404 confirms no new branch or PR; no Discussion post was made." + ], + "author": "Clear1nsight", + "ai_assistance": "Substantial OpenAI Codex assistance. Implementations and reviews share one assistant session; no independent human or formal-kernel review.", + "open_questions": [ + { + "question": "Can an actual physical P104 caller accept the encoded residual interface at a favorable complete cost?", + "why_it_matters": "The retained inverse-shear caller does not justify free source restoration or physical role permutation.", + "first_step": "Supply a concrete chronological owner map and changed complete coverage law with original-source/residual return and all unknown costs charged.", + "blocked_by": "No supplied global owner embedding, routing/precision bill or favorable replacement coverage law." + }, + { + "question": "Can the actual two-axis caller and its endpoint correction absorb the residual representation jointly?", + "why_it_matters": "The local inverse reader proves a cut identity, not the caller's orthogonal-axis geometry or complete owner embedding.", + "first_step": "Specify an all-role physical intertwiner with the actual two-axis reads, paid endpoint copy/correction/cleanup, and complete replacement cost before native work.", + "blocked_by": "No supplied matched physical P104 two-axis embedding or favorable fully charged coverage law." + } + ], + "bottleneck_link": "An actual retained inverse-shear caller requires its original source/target meanings. This study prices the encoded return and tests exact composed endpoints instead of donating a decoder or another fixed-cover census.", + "evidence": "Exact 4058-event scalar/frame reconstruction; PR3882 schedule and encoded boundary; eight complete 280-input caller-cut schedules; separate 627200-coefficient dense quarter-integer replay; nine behavioral groups including actual optimized Git-free source/receipt/program failure controls; no native/supplier admission." +} diff --git a/research/p104-role-exchange-caller-audit/VALIDATION.json b/research/p104-role-exchange-caller-audit/VALIDATION.json new file mode 100644 index 000000000..090a8b34d --- /dev/null +++ b/research/p104-role-exchange-caller-audit/VALIDATION.json @@ -0,0 +1,47 @@ +{ + "schema_version": 1, + "recorded_at_utc": "2026-10-19T04:44:29.539088+00:00", + "environment": { + "python": "3.12.3 (main, Aug 31 2026, 10:18:26) [GCC 13.3.0]", + "platform": "Linux-7.0.0-38-generic-x86_64-with-glibc2.39" + }, + "local": { + "primary_normal": "PASS_P104_ROLE_EXCHANGE_CALLER_AUDIT", + "primary_optimized": "PASS_P104_ROLE_EXCHANGE_CALLER_AUDIT", + "separate_optimized": "PASS_SEPARATE_QUARTER_INTEGER_CALLER coefficients=627200 programs=8 fixed_location_rank=192", + "behavioral_optimized": { + "status": "PASS", + "test_groups": 9, + "observed_latest_seconds": 27.227 + }, + "all_280_input_columns": true, + "original_channel_events_checked": 4058, + "fresh_native_recipe_execution": false, + "selected_cold_replay": false + }, + "registered_package_replay": { + "status": "not_run_locally", + "reason": "The source-complete mirror is not a full Git checkout. Direct registered command bodies pass; repository Git registration remains a separate gate." + }, + "source_history_preflight": { + "status": "not_run", + "reason": "No full local Git checkout. All canonical source pins use the canonical base and foreign source bytes are retained in this package." + }, + "lint": { + "status": "unavailable", + "reason": "The installed ruff executable segfaulted. No lint pass is claimed." + }, + "publication": { + "status": "blocked_before_execution", + "branch": "contribution/p104-caller-return-audit", + "base": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "attempts": 2, + "first_attempt": "Automatic permission approval review timed out; no branch created.", + "allowed_retry": "Automatic approval review failed because its selected review model was at capacity; action not executed.", + "readback": "GitHub branch lookup returned 404 after the retry.", + "new_pr_created": false, + "discussion_post_created": false + }, + "receipt_sha256": "f73c46dbdba6ed64b25b23f6130a23443d432d1127a0106f05f32feb2cf02fb8", + "scope": "Exact finite scalar/frame and caller-cut evidence; no complete P104 physical caller, global owner embedding or favorable new supplier." +} diff --git a/research/p104-role-exchange-caller-audit/VERIFY.json b/research/p104-role-exchange-caller-audit/VERIFY.json new file mode 100644 index 000000000..8634cff91 --- /dev/null +++ b/research/p104-role-exchange-caller-audit/VERIFY.json @@ -0,0 +1,45 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/p104-native-channel/inputs/LOWRANK-WITNESS.json", + "research/p104-native-channel/inputs/P104-FIXTURE.json", + "notes/copied-centers-complex.tex" + ], + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 120, + "checks": "All source bytes; original 4058-event scalar/frame channel; all 280 columns of seven caller/return schedules; exact baseline coefficients, invoices and endpoint identities." + }, + { + "argv": [ + "{python}", + "-I", + "-O", + "-B", + "{package}/independent.py" + ], + "timeout_seconds": 120, + "checks": "Separate quarter-integer schedule replay, independent root enumeration, all data and dirty columns, frame and cost controls." + }, + { + "argv": [ + "{python}", + "-I", + "-O", + "-B", + "{package}/test_verify.py" + ], + "timeout_seconds": 180, + "checks": "Mathematical endpoint, dirty-state, chronology, source-byte, typed-receipt and actual isolated CLI failure controls." + } + ] +} diff --git a/research/p104-role-exchange-caller-audit/independent.py b/research/p104-role-exchange-caller-audit/independent.py new file mode 100644 index 000000000..59615718a --- /dev/null +++ b/research/p104-role-exchange-caller-audit/independent.py @@ -0,0 +1,167 @@ +#!/usr/bin/env python3 +"""Separate dense quarter-integer replay; no primary/predecessor code imports. + +Apache-2.0. Clear1nsight with substantial OpenAI assistance; same-session +checking is not independent human authorship or a proof-kernel certificate. +""" +from collections import Counter +from fractions import Fraction +import gzip +import hashlib +import itertools +import json +from pathlib import Path + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] + + +def require(ok, message): + if not ok: + raise ValueError(message) + + +def read(path): + raw = path.read_bytes() + return json.loads(gzip.decompress(raw) if path.suffix == ".gz" else raw) + + +def code(value): + return (json.dumps(value, sort_keys=True, separators=(",", ":")) + "\n").encode() + + +def sources(): + rows = read(HERE / "PREDECESSORS.json")["files"] + rows += [r for r in read(HERE / "SOURCES.json")["files"] if r["usage"] == "input"] + for row in rows: + raw = (ROOT / row["path"]).read_bytes() + require(hashlib.sha256(raw).hexdigest() == row["sha256"], "source SHA256") + require(hashlib.sha1(b"blob "+str(len(raw)).encode()+b"\0"+raw).hexdigest() + == row["git_blob"], "source Git blob") + + +def roots(): + # Different enumeration from the primary: sparse ternary eight-tuples. + universe = [] + for row in itertools.product((0, -2, 2), repeat=8): + nonzero = [v for v in row if v] + if len(nonzero) == 2 and nonzero[0] > 0: + universe.append(row) + for row in itertools.product((1, -1), repeat=8): + if row[0] == 1 and row.count(-1) % 2 == 0: + universe.append(row) + fixture = read(ROOT / "research/p104-native-channel/inputs/P104-FIXTURE.json") + section = fixture["section4_explicit_P104"] + excluded = {tuple(r) for r in section["F0"] + section["C"]} + ports = sorted(set(universe)-excluded) + require(len(universe) == 120 and len(ports) == 104, "independent E8 enumeration") + # 4*A = dot(doubled root, doubled root)/2, an integer. + gram4 = [] + for r in ports: + row = [] + for s in ports: + dot = sum(a*b for a, b in zip(r, s)) + require(dot % 2 == 0, "quarter-integer entrance") + row.append(dot//2) + gram4.append(row) + return gram4 + + +def seed(gram4): + state = [[4*int(i == j) for j in range(280)] for i in range(280)] + for i in range(104): + state[104+i][:104] = gram4[i][:] + return state + + +def run(gram4, operations, hyperplanes): + rows = seed(gram4) + full = [1 << b for b in range(9)] + frames = [full[:] for _ in range(104)] + [h[:] for h in hyperplanes] + frames += [full[:] for _ in range(72)] + bill = Counter() + for op in operations: + tag, target = op[:2] + require(type(target) is int and 0 <= target < 208, "independent target") + bill[tag] += 1 + if tag == "lift": + require(frames[target] == hyperplanes[target % 104], "independent lift") + frames[target] = full[:] + elif tag == "drop": + require(frames[target] == full, "independent descent") + frames[target] = hyperplanes[target % 104][:] + elif tag == "half": + require(frames[target] == full, "half frame") + require(all(v % 2 == 0 for v in rows[target]), "two-bit scalar prefix") + rows[target] = [v//2 for v in rows[target]] + elif tag == "double": + require(frames[target] == full, "double frame") + rows[target] = [2*v for v in rows[target]] + elif tag in ("add", "scaled_add"): + source, c = op[2], Fraction(op[3]) + require(frames[source] == frames[target] == full, "independent ADD frames") + require(tag != "add" or c in (-1, 1), "independent unit coefficient") + require(all(v*c.numerator % c.denominator == 0 for v in rows[source]), + "quarter scaling is sufficient") + rows[target] = [a+b*c.numerator//c.denominator + for a, b in zip(rows[target], rows[source])] + else: + raise ValueError("independent unknown operation") + return rows, frames, bill + + +def check(rows, frames, hyperplanes, consume): + full = [1 << b for b in range(9)] + for i in range(280): + if i < 104: + want = [-4*int(j == 104+i) if consume else 4*int(j == i) for j in range(280)] + elif i < 208: + want = [4*int(j in (i, i-104)) for j in range(280)] + else: + want = [4*int(i == j) for j in range(280)] + require(rows[i] == want, "independent arbitrary-input endpoint") + require(frames[i] == (hyperplanes[i-104] if 104 <= i < 208 else full), + "independent return frame") + + +def main(): + sources() + gram4 = roots() + word = read(ROOT / "research/p104-native-channel/inputs/LOWRANK-WITNESS.json") + hyperplanes = [word["final_frames"][f"Y{i}"] for i in range(104)] + programs, expected = read(HERE / "PROGRAMS.json.gz"), read(HERE / "RESULT.json") + require(type(expected["fixed_location_restoration_minimum_added_rank"]) is int, + "typed rank receipt") + checked = 0 + for name, operations in programs.items(): + rows, frames, bill = run(gram4, operations, hyperplanes) + check(rows, frames, hyperplanes, "reader" in name) + saved = expected["programs"][name] + encoded = [[[j, str(Fraction(v, 4))] for j, v in enumerate(row) if v] for row in rows] + require(hashlib.sha256(code(encoded)).hexdigest() == saved["endpoint_sha256"], "endpoint hash") + require(hashlib.sha256(code(operations)).hexdigest() == saved["program_sha256"], "program hash") + require(code(dict(bill)) == code(saved["operation_counts"]), "independent invoice") + require(bill["lift"]+bill["drop"] == saved["added_H1"], "independent transport bill") + checked += 280*280 + # Independently derive the fixed physical-location rank gap from output dimensions. + J = read(HERE / "inputs/3882-result.json")["pivots"] + N = [i for i in range(104) if i not in J] + require(all(sum(gram4[j][i]*gram4[k][i] for i in N) == 192*int(j == k) + for j in J for k in J), "independent B B^t = 12 I") + input_dimensions = [9 if i in J else 8 for i in range(104)] + input_dimensions += [8 if i in J else 9 for i in range(104)] + goal_dimensions = [9]*104+[8]*104 + require(sum(abs(a-b) for a, b in zip(input_dimensions, goal_dimensions)) == 192, + "independent fixed-location lower bound") + require(expected["fixed_location_restoration_minimum_added_rank"] == 192, + "saved fixed-location lower bound") + require(expected["naive_residual_as_source_error_rank_over_Q"] == 8+96, + "independent residual-as-source error rank") + require(9*2576+(72*832-9*2312) == 62280 > 73*832 == 60736, + "conditional complete coverage stop") + print("PASS_SEPARATE_QUARTER_INTEGER_CALLER", "coefficients="+str(checked), + "programs="+str(len(programs)), "fixed_location_rank=192") + + +if __name__ == "__main__": + main() diff --git a/research/p104-role-exchange-caller-audit/inputs/3882-geometry.json b/research/p104-role-exchange-caller-audit/inputs/3882-geometry.json new file mode 100644 index 000000000..ba6d82f8a --- /dev/null +++ b/research/p104-role-exchange-caller-audit/inputs/3882-geometry.json @@ -0,0 +1,9 @@ +{ + "schema_version": 1, + "source_path": "research/p104-native-channel/inputs/P104-FIXTURE.json", + "source_commit": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "source_sha256": "516c06f6ec3cb84be588c546108de897650288576dd5fbf5fe44b9c5546ad8a4", + "extraction": "section4_explicit_P104.F0 and section4_explicit_P104.C, in original order", + "F0": [[0,0,0,0,0,0,2,-2],[0,0,0,0,0,0,2,2],[0,0,0,0,2,-2,0,0],[0,0,0,0,2,2,0,0],[0,0,2,-2,0,0,0,0],[0,0,2,2,0,0,0,0],[2,-2,0,0,0,0,0,0],[2,2,0,0,0,0,0,0]], + "C": [[0,0,0,0,0,2,-2,0],[0,0,0,2,-2,0,0,0],[0,2,-2,0,0,0,0,0],[1,-1,-1,-1,-1,-1,-1,1],[1,-1,-1,1,1,1,1,1],[1,1,1,-1,-1,1,1,1],[1,1,1,1,1,-1,-1,1],[2,0,0,0,0,0,0,-2]] +} diff --git a/research/p104-role-exchange-caller-audit/inputs/3882-proof.md b/research/p104-role-exchange-caller-audit/inputs/3882-proof.md new file mode 100644 index 000000000..3bac5b4b2 --- /dev/null +++ b/research/p104-role-exchange-caller-audit/inputs/3882-proof.md @@ -0,0 +1,69 @@ +# Exact boundary and sharp residual replacement bound + +## 1. Algebra and inherited channel + +Let D be `Z[i,1/2]`, the Gaussian dyadic ring. All identities below hold for arbitrary elements of a free D-module, hence coordinatewise on arbitrary finite arrays. No input target is zero, and no dirty helper is clean. Write x and y for the original 104 source and target fields. The retained channel has normalised boundary `(x,y,h) -> (x,v=y+A x,h)` for 72 independent dirty fields h. This boundary theorem and its native chart interpretation are inherited from PR1972/PR1991. + +The source extraction constructs the 120 unoriented doubled E8 root representatives in canonical sorted order and deletes the 16 retained F0/C vectors. The resulting matrix R satisfies `RR^t=104I`. Set `A=R^t R/8`. The eight chosen pivot columns J are an orthogonal frame, so `R_J^t R_J=8I` and `R_J R_J^t=8I`. With `B=R_J^t R_N/8`, direct multiplication gives + +``` +A = [[I, B], [B^t, B^t B]] +``` + +in J,N order. Thus `v_J=y_J+x_J+B x_N` and `v_N=y_N+B^t(x_J+B x_N)`. Every nonzero entry of B is a signed half. The finite verifier checks each entry and every identity used here. + +## 2. A source-consuming tail without a clean bank + +All source arrays finish in FULL. First lift every Y target from its existing eight-dimensional hyperplane to FULL. The following common-chart equations are then legal scalar operations on the available banks. + +For each unchanged nonpivot source, add its signed half to each incident pivot X and subtract that same signed half from the corresponding pivot Y. The two streams may be interleaved because no nonpivot source has yet been changed permanently. They give `X_J=q=x_J+B x_N` and `Y_J=w_J=x_J+y_J`. + +Next subtract `B^t q` from X_N and then add Y_N. This gives + +``` +X_N = x_N - B^t q + v_N = x_N+y_N = w_N. +``` + +Return X_N to the target hyperplanes indexed by N and Y_J to those indexed by J. The residual banks X_J and Y_N remain in FULL. This is an explicit output-role assignment, not a claim that data movement or arbitrary caller relabelling is free. The 72 inherited dirty-helper banks are never targeted or read by this tail. Their inherited logical restoration is therefore preserved. + +The literal scalar schedule halves each X_N once, applies all of its incident unit additions and subtractions, and doubles it before proceeding. It then halves each pivot q once, applies its incident scatter subtractions, and doubles it. Finally it performs 96 direct X_N += Y_N additions. This uses 1,248 unit Gaussian ADDs, 104 halves, and 104 doubles. Every arithmetic source and target is in FULL. The 104 initial lifts and 104 final descents are rank-one pairs, for 208 formal native occurrences. They require their usual paid native implementation, not free frame relabelling. + +The inverse boundary is explicit. From `(w,q,v_N)`, compute `x_N=w_N-v_N+B^t q`, then `x_J=q-B x_N`, and finally `y=w-x`. These are D-linear equations. Their existence proves an invertible encoding, but not the cost or legal availability of a physical downstream decoder. + +The statement does not preserve the original source bank. In particular, Y_N still contains the original channel-produced v_N, whereas the eight would-be residual values v_J are replaced by q. Requiring the original source outputs again changes the contract and demands a priced continuation. + +## 3. Why every old residual cannot be retained + +Consider the tempting alternative boundary that returns all corrected sums w and all old residuals v, with arbitrary dirty helpers restored and no other persistent source-dependent output. Its data matrix is + +``` +T = [[I,I], [A,I]]. +``` + +The previously known covariance identity implies `A^2=13A`, with A of rational rank eight. Hence `C=I-A` has eigenvalues 1 with multiplicity 96 and -12 with multiplicity eight, and `det(T)=det(C)=12^8`. This determinant was already implicit in the predecessor correction certificate; the new use is its odd-prime obstruction to this changed return contract. + +Reduce D modulo 3. The quotient is the field F9 because `z^2+1` is irreducible over F3 and 2 remains invertible. The matrix R has rank eight modulo 3 since `RR^t=104I=2I`. Therefore A is an idempotent of rank eight, C has rank 96, and T has rank 200 rather than 208. The primary checker separately eliminates both C and T modulo 3. Since all entries of these particular matrices are rational dyadics, their rank over F3 equals their rank after scalar extension to F9. + +A reversible D-linear circuit must remain invertible modulo 3. This includes arbitrary invertible D-linear recoding, exact dyadic scaling, phase multiplication, and invertible dyadic native chart changes. Appending any number of arbitrary dirty inputs and returning them unchanged only adds an identity block, so it cannot repair T's eight-dimensional defect. Clean temporary banks that are returned to zero likewise do not provide a final source-dependent observation. + +Now keep every w output but permit replacing k of the old v outputs by arbitrary D-linear outputs. Modulo 3, replacing k scalar rows increases rank by at most k. Reversibility therefore requires `200+k >= 208`, or `k >= 8`. Our boundary replaces exactly the eight v_J outputs and has the explicit D-linear inverse in section 2. Eight is thus the exact minimum in this residual-row replacement model. + +For arrays with d Gaussian coordinates, the naive defect has dimension 8d. Replacing k whole arrays contributes at most kd scalar rows even when arbitrary cross-coordinate D-linear mixing is allowed, so the whole-array minimum remains eight. This is a count of changed residual outputs, not a transport-rank, lifetime, storage-width, or recursive-cost lower bound. + +A related necessary statement holds when all v outputs are retained and extra persistent clean-carrier output coordinates are allowed. They must supply at least 8d independent residues modulo 3. This does not establish a physical attaining carrier scheme or allow an arbitrary dirty bank to be treated as clean. + +## 4. Scope controls + +The ordinary source-preserving correction shear `[[I,0],[C,I]]` is invertible over D for every C. The verifier checks its full rank modulo 3 as a positive scope control. Thus the argument is not an impossibility theorem for correcting P104. + +The lower bound also does not cover division by an odd Gaussian prime, nonlinear rounding/residue encoders, nonzero private erasure, extra persistent source-dependent outputs, restricted correlated input domains, or a consumer that requires fewer sums or a different residual contract. Those are separate hypotheses and have their own implementation and price obligations. In particular, the ideal dyadic argument does not silently validate the literal signed-floor execution on arbitrary integer arrays. + +The fixed-cover support and source-preconditioner models preserve different data contracts. Reading and modifying channel Y, consuming X, and replacing residual outputs are explicit changes here. The result neither repeats the 208-flag static cover nor refutes the 23-dimensional preconditioner obstruction reported in PR3810. + +## 5. Exact evidence and budget boundary + +The primary implementation replays every new scalar instruction on 280 independent columns, including all original dirty variables. It verifies every sum, every residual, every helper, and every final frame dimension. Its separate inverse calculation uses the boundary equations rather than reversing the instruction list. The second implementation rebuilds the root geometry by a different enumeration and evaluates the endpoint in quarter-integer coefficients with a block ordering distinct from the primary schedule. It compares the full 280 by 280 endpoint digest. + +With normalised integer x,y inputs, every scalar prefix coefficient is a multiple of one quarter. A quarter is actually attained, so two fractional bits are sharp for this scalar instruction list. The maximum row one-norm is 26, including the channel-exit input rows; this bounds each real component by 26H when every original component is at most H. Neither statement includes the native frame-conversion arithmetic or proves that an outer physical producer supplies these normalised integer inputs. + +The formal added native profile is 208 H1. The retained profile therefore becomes `(1282,58,86,104,48,24,8,8)` and has mass 2576. Under the unchanged width-nine, 280-role bare mass relaxation, `2576/(9*280)=46/45>1` already fails. This is the predecessor terminal-tariff stop applied to the same numeric profile, not a lower bound for all changed consumer laws. Owner routing, a physical residual consumer or decoder, literal native admission, precision, tape, and complete all-size hosting remain unresolved. Their costs are unknown, not zero. diff --git a/research/p104-role-exchange-caller-audit/inputs/3882-readme.md b/research/p104-role-exchange-caller-audit/inputs/3882-readme.md new file mode 100644 index 000000000..432e94639 --- /dev/null +++ b/research/p104-role-exchange-caller-audit/inputs/3882-readme.md @@ -0,0 +1,84 @@ +# P104 source-consuming role exchange with eight residual replacements + +This is a changed terminal consumer contract, not another fixed-cover census and not an admitted multiplication supplier. It starts after the retained PR1972/PR1991 forward channel, consumes its source bank, and produces every corrected sum `w = x+y`. It returns an explicit invertible encoding of the remaining data instead of pretending that the original source bank is restored. + +The new result has two parts. An exact chronological tail returns `(w,q,v_N)` without adding a clean bank or touching the 72 original dirty helpers. A modulo-three argument proves that replacing at least eight of the naive 104 residual outputs is necessary in the specified reversible dyadic-linear model, even when arbitrary dyadic recoding and native chart changes are granted. Our tail replaces exactly eight. The corrected sums are not left in the original Y bank locations. + +Canonical base is `20ecf2891d80b5acf18d980b2164fb44ea7faa90`, priority revision 6. The selected conditional kappa remains `0.001672660197076918`. Only this opt-in package is added. `TASK.json` records the explicit user assignment and changed scope. + +## The exact boundary + +Write `A=G/2=R^t R/8`, where R is the retained 8 by 104 doubled-root matrix. The predecessor channel leaves X holding x in FULL, Y holding `v=y+A x` in each target hyperplane, and its 72 arbitrary dirty helpers logically restored in FULL. Its native channel identity is inherited, not re-proved by this package. + +Choose the eight mutually orthogonal retained roots `2(e0 +/- e2)`, `2(e1 +/- e3)`, `2(e4 +/- e6)`, and `2(e5 +/- e7)`. In canonical port order their indices are + +``` +J = [0, 1, 3, 6, 22, 31, 93, 103]. +``` + +Let N be the other 96 indices and `B=A[J,N]`. All 384 nonzero B entries are signed halves. The pivot block is `A[J,J]=I`, and `A[N,N]=B^t B`. + +Lift all 104 Y arrays to FULL. While every X_N source is still unchanged, perform both `X_J += B X_N` and `Y_J -= B X_N`. Thus X_J becomes `q=x_J+B x_N`, and Y_J already equals `w_J`. Then perform `X_N -= B^t X_J` and `X_N += Y_N`, producing `w_N`. Return X_N and Y_J to their respective target hyperplanes. Leave X_J and Y_N in FULL. + +The final corrected-sum locations are X_N and Y_J. The residual locations are X_J for q and Y_N for v_N. All original dirty helper locations are untouched by the tail. Logical restoration at a changed frame is not a claim that the original physical input array is bitwise unchanged. + +The inverse boundary equations are + +``` +x_N = w_N - v_N + B^t q, +x_J = q - B x_N, +y = w - x. +``` + +They use only dyadic coefficients. They prove information preservation, not a free decoder or a caller that already accepts this representation. PROOF.md proves the identity, the modulo-three lower bound, and its precise exclusions. + +## Invoice and stopping decision + +The generated tail contains 1,664 formal events. These comprise 1,248 unit Gaussian array additions/subtractions, 104 exact array halvings, 104 restoring doublings, and 208 rank-one frame conversions. There are no new banks, private erasures, or clean-input assumptions. No source-independent dirty helper is substituted for a data pivot. + +Under the inherited native dimension-gap tariff, the added profile is `208 H1`. Adding it to the retained channel gives `(1282,58,86,104,48,24,8,8)` at ranks 1 through 8, with total rank mass 2,576. These are formal frame conversions of the same hyperplane/FULL pairs already considered by the predecessor terminal audit. We have not recompiled their native recipes or executed their signed-floor implementations under the changed bank roles. + +For 512 complex words per array, the scalar part alone has 1,277,952 real additions/subtractions, 106,496 real halvings, and 106,496 real doublings. These counts exclude native-pair arithmetic, addressing, movement, and control. In normalised common-chart coordinates, integer initial x and y require at most two fractional bits during the scalar tail, with a sharp coefficient denominator of four. The maximum row one-norm, including the channel-exit entrance, is exactly 26, giving a `26H` bound per real component. This does not certify the physical native entrance, the original channel's internal width, or accumulated rounding error. + +Even granting the unchanged width-nine, 280-role bare local-mass relaxation, this profile has `M(0)=2576/(9*280)=46/45>1`. That numerical stop is inherited from the earlier 208-rank terminal-correction tariff, not a new general P104 lower bound. The changed logical boundary supplies no additional capacity or coverage by itself. A different consumer needs its own law and complete bill. + +The decision is **NARROW**. Retain the exact changed-boundary module and the sharp eight-replacement result. Do not expand it into a supplier construction under the unchanged failed budget. + +## Reproduction and evidence boundaries + +From a complete checkout at the contribution head, use Python 3.12 and the standard library. + +```sh +python3.12 -I -B scripts/research_package.py --package research/p104-role-exchange-residue +``` + +The default primary command authenticates all three frozen source files, compares the 16-root extraction, and binds every original X, Y, and dirty-helper exit frame. It then checks all 280 independent input columns through the newly generated tail. The second implementation imports no primary code and reconstructs the complete endpoint using quarter-integer arithmetic and a different root enumeration. It also checks 16 signed fixtures. Tests distinguish the new output locations, arbitrary dirty inputs, the ordinary source-preserving correction shear, and malformed or altered receipts. + +A portable algebra-only mode is deliberately weaker. + +```sh +python3 -I -B research/p104-role-exchange-residue/verify.py --algebra-only +python3 -I -O -B research/p104-role-exchange-residue/verify.py --algebra-only +python3 -I -B research/p104-role-exchange-residue/independent.py --algebra-only +python3 -I -O -B research/p104-role-exchange-residue/test_verify.py +``` + +This mode uses the explicitly transcribed geometry and prints `ALGEBRA_ONLY`. It does not authenticate the complete repository sources. Normal mode fails closed when those files are missing. Frozen RESULT.json is compared without rewriting it. The canonical result digest is `0b869d0e68b8e21468a15977a31432d8b17f5a528558edec7eaf6c5461d63b78`. + +Local algebra replays passed on CPython 3.13.5. Full source-bound and registered Python 3.12 results, where subsequently observed, belong in the PR handoff with their exact public head and run identifier. No native recipe replay, original 4,058-event channel replay, full selected cold replay, independent human review, or formal proof-kernel acceptance is claimed here. + +## Relationship to predecessor work + +Rohan Arun's PR1972 and Chafik Boukhalfa's PR1991 supply the forward channel and native lineage. The retained `p104-side-correction-rank-obstruction` package already proves the rational correction rank and determinant, the root-coordinate factorisation, and the 208-rank terminal screen. Its 2,376-add common-chart word and 1,352-add snapshot word are not new contributions here. The covariance identity `RR^t=104I`, ordinary Gaussian elimination, and modular rank arguments are likewise not claimed as new mathematics. + +PR2383 already grants the complete root code for free under its monotone immutable-source contract. PR3427 and Sagar Thakrar's PR3810 address changed source preconditioning and fixed-cover support; the latter's channel-Y-read probe motivates testing coefficients and dirty-state semantics rather than interpreting support as a circuit. Their bounds do not transfer to a source-consuming changed output interface. Our eight-replacement result does not contradict PR3810's rank-23 preconditioner bound. + +Clear1nsight's PR3609 uses eight in-place data pivots for a different dual-entrance completion. That pivot technique is related, not a newly discovered general technique here. The present object is the original forward 104-source/104-target terminal channel, with a different returned-source contract and a sharp modular obstruction to leaving every old channel-Y residual intact. PR3620 and the later caller audit reinforce the need to price the actual changed consumer rather than donate a boundary conversion. + +Prepared by Clear1nsight with substantial OpenAI assistance. The two checking implementations share the same assisted session and sources. New work is Apache-2.0; source geometry and predecessor results retain their authorship and notices. See SOURCES.json for immutable source bindings and bounded overlap coverage. + +## Open next questions + +A useful continuation must name an actual consumer of `(w,q,v_N)` and prove its input/output intertwiner, ownership, return, and complete coverage law. Its first test is the full budget, because the unchanged width-nine relaxation already fails. Original-source decoding, residual erasure, and physical bank relabelling are not free operations. + +Only after that gate passes should the 208 hyperplane/FULL recipes be rebound to the new bank roles and replayed with an actually supplied physical entrance. The scalar two-bit result alone does not establish exact native halves, finite-width safety, routing, tape use, or all-size admission. TASK.json records these concrete blockers without reserving them. diff --git a/research/p104-role-exchange-caller-audit/inputs/3882-result.json b/research/p104-role-exchange-caller-audit/inputs/3882-result.json new file mode 100644 index 000000000..aea655ec6 --- /dev/null +++ b/research/p104-role-exchange-caller-audit/inputs/3882-result.json @@ -0,0 +1,32 @@ +{ + "schema_version": 1, + "base_commit": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "scope": "changed source-consuming boundary; no supplier or kappa", + "ports": 104, + "pivots": [0, 1, 3, 6, 22, 31, 93, 103], + "nonpivots": [2, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 24, 25, 26, 27, 28, 29, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 94, 95, 96, 97, 98, 99, 100, 101, 102], + "root_nonzeros": 568, + "B_nonzeros": 384, + "program_sha256": "d39c433ecd7b50828a0b1f957e8f212bc40cd54af7e3f0ed82c90eee65dbf7fb", + "endpoint_sha256": "6c0b0574f2eaa6b91d260206958eb87136e5c722f26b5f4d7627ed9d65983bcd", + "operation_counts": {"add": 1248, "double": 104, "drop": 104, "half": 104, "lift": 104}, + "total_tail_events": 1664, + "tail_native_profile": {"1": 208}, + "inherited_channel_mass": 2368, + "combined_mass": 2576, + "combined_native_profile": [1282, 58, 86, 104, 48, 24, 8, 8], + "scalar_real_adds_at_512_complex_words": 1277952, + "scalar_real_halves_at_512_complex_words": 106496, + "scalar_real_doubles_at_512_complex_words": 106496, + "maximum_scalar_coefficient_denominator": 4, + "maximum_scalar_row_l1": "26", + "sum_outputs": 104, + "dirty_helpers_restored": 72, + "rank_C_mod3": 96, + "rank_naive_mod3": 200, + "rank_repaired_mod3": 208, + "minimum_replaced_residual_arrays_in_stated_linear_model": 8, + "det_naive": "429981696", + "native_lowering_replayed": false, + "complete_consumer_admitted": false +} diff --git a/research/p104-role-exchange-caller-audit/inputs/3894-correction.json b/research/p104-role-exchange-caller-audit/inputs/3894-correction.json new file mode 100644 index 000000000..2e24adfea --- /dev/null +++ b/research/p104-role-exchange-caller-audit/inputs/3894-correction.json @@ -0,0 +1,116 @@ +{ + "base_commit": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "channel_witness_sha256": "0f541bef7f19fdeffd67157684e9f03d785f42c89973632f508fc1a0452b580e", + "flag_certificate_sha256": "a98126428a8da6eae91c50afcc42e014a284c82b554ef77e5b3a34fc6d228128", + "format": "p104-fullframe-endcut-correction/v1", + "full_source_frame": [1,2,4,8,16,32,64,128,256], + "rows": [ + {"target":0,"terms":[[2,"-1/2"],[4,"-1/2"],[5,"1/2"],[7,"1/2"],[9,"-1/2"],[10,"1/2"],[12,"-1/2"],[15,"1/2"],[17,"-1/2"],[18,"1/2"],[20,"-1/2"],[24,"1/2"],[26,"-1/2"],[27,"1/2"],[29,"-1/2"],[34,"-1/2"],[37,"1/2"],[39,"-1/2"],[41,"1/2"],[43,"-1/2"],[44,"1/2"],[46,"-1/2"],[48,"1/2"],[50,"-1/2"],[51,"1/2"],[53,"-1/2"],[55,"1/2"],[57,"-1/2"],[60,"1/2"],[62,"-1/2"],[64,"1/2"],[66,"-1/2"],[67,"1/2"],[69,"-1/2"],[71,"1/2"],[73,"-1/2"],[76,"1/2"],[78,"-1/2"],[79,"1/2"],[81,"-1/2"],[83,"1/2"],[85,"-1/2"],[87,"1/2"],[89,"-1/2"],[91,"-1/2"],[96,"1/2"],[98,"1/2"],[100,"-1/2"]]}, + {"target":1,"terms":[[2,"-1/2"],[4,"1/2"],[5,"-1/2"],[7,"1/2"],[9,"1/2"],[10,"-1/2"],[12,"-1/2"],[15,"1/2"],[17,"1/2"],[18,"-1/2"],[20,"-1/2"],[24,"1/2"],[26,"1/2"],[27,"-1/2"],[29,"-1/2"],[33,"1/2"],[35,"-1/2"],[36,"1/2"],[38,"-1/2"],[40,"1/2"],[42,"-1/2"],[45,"1/2"],[47,"1/2"],[49,"-1/2"],[52,"1/2"],[54,"-1/2"],[56,"1/2"],[58,"-1/2"],[59,"1/2"],[61,"-1/2"],[63,"1/2"],[65,"-1/2"],[68,"1/2"],[70,"-1/2"],[72,"1/2"],[74,"-1/2"],[75,"1/2"],[77,"-1/2"],[80,"1/2"],[82,"1/2"],[84,"-1/2"],[86,"1/2"],[88,"-1/2"],[90,"1/2"],[92,"-1/2"],[96,"1/2"],[98,"-1/2"],[100,"-1/2"]]}, + {"target":2,"terms":[[0,"-1/2"],[1,"-1/2"],[3,"1/2"],[6,"-1/2"],[7,"1/2"],[8,"1/2"],[11,"-1/2"],[12,"-1/2"],[15,"1/2"],[16,"1/2"],[19,"-1/2"],[20,"-1/2"],[24,"1/2"],[25,"1/2"],[28,"-1/2"],[29,"-1/2"],[35,"-1/2"],[36,"1/2"],[39,"-1/2"],[40,"1/2"],[43,"-1/2"],[44,"1/2"],[47,"1/2"],[50,"-1/2"],[51,"1/2"],[54,"-1/2"],[55,"1/2"],[58,"-1/2"],[59,"1/2"],[62,"-1/2"],[63,"1/2"],[66,"-1/2"],[67,"1/2"],[70,"-1/2"],[71,"1/2"],[74,"-1/2"],[75,"1/2"],[78,"-1/2"],[79,"1/2"],[82,"1/2"],[85,"-1/2"],[86,"1/2"],[89,"-1/2"],[92,"-1/2"],[96,"1/2"],[97,"1/2"],[99,"-1/2"],[100,"-1/2"]]}, + {"target":3,"terms":[[2,"1/2"],[4,"-1/2"],[5,"-1/2"],[8,"-1/2"],[11,"1/2"],[13,"-1/2"],[14,"1/2"],[16,"-1/2"],[19,"1/2"],[21,"-1/2"],[23,"1/2"],[25,"-1/2"],[28,"1/2"],[30,"-1/2"],[33,"1/2"],[35,"1/2"],[36,"-1/2"],[38,"-1/2"],[41,"1/2"],[43,"1/2"],[44,"-1/2"],[46,"-1/2"],[48,"1/2"],[50,"1/2"],[51,"-1/2"],[53,"-1/2"],[56,"1/2"],[58,"1/2"],[59,"-1/2"],[61,"-1/2"],[64,"1/2"],[66,"1/2"],[67,"-1/2"],[69,"-1/2"],[72,"1/2"],[74,"1/2"],[75,"-1/2"],[77,"-1/2"],[80,"1/2"],[82,"-1/2"],[84,"-1/2"],[87,"1/2"],[89,"1/2"],[91,"-1/2"],[95,"1/2"],[97,"-1/2"],[99,"1/2"],[101,"-1/2"]]}, + {"target":4,"terms":[[0,"-1/2"],[1,"1/2"],[3,"-1/2"],[6,"-1/2"],[9,"-1/2"],[10,"1/2"],[13,"-1/2"],[14,"1/2"],[17,"-1/2"],[18,"1/2"],[21,"-1/2"],[23,"1/2"],[26,"-1/2"],[27,"1/2"],[30,"-1/2"],[35,"1/2"],[36,"-1/2"],[39,"-1/2"],[41,"1/2"],[42,"1/2"],[45,"-1/2"],[46,"-1/2"],[48,"1/2"],[49,"1/2"],[52,"-1/2"],[53,"-1/2"],[55,"1/2"],[58,"1/2"],[59,"-1/2"],[62,"-1/2"],[64,"1/2"],[65,"1/2"],[68,"-1/2"],[69,"-1/2"],[71,"1/2"],[74,"1/2"],[75,"-1/2"],[78,"-1/2"],[79,"1/2"],[82,"-1/2"],[85,"-1/2"],[87,"1/2"],[88,"1/2"],[90,"-1/2"],[91,"-1/2"],[95,"1/2"],[98,"1/2"],[101,"-1/2"]]}, + {"target":5,"terms":[[0,"1/2"],[1,"-1/2"],[3,"-1/2"],[6,"-1/2"],[9,"1/2"],[10,"-1/2"],[13,"-1/2"],[14,"1/2"],[17,"1/2"],[18,"-1/2"],[21,"-1/2"],[23,"1/2"],[26,"1/2"],[27,"-1/2"],[30,"-1/2"],[33,"1/2"],[34,"1/2"],[37,"-1/2"],[38,"-1/2"],[40,"1/2"],[43,"1/2"],[44,"-1/2"],[47,"1/2"],[50,"1/2"],[51,"-1/2"],[54,"-1/2"],[56,"1/2"],[57,"1/2"],[60,"-1/2"],[61,"-1/2"],[63,"1/2"],[66,"1/2"],[67,"-1/2"],[70,"-1/2"],[72,"1/2"],[73,"1/2"],[76,"-1/2"],[77,"-1/2"],[80,"1/2"],[81,"1/2"],[83,"-1/2"],[84,"-1/2"],[86,"1/2"],[89,"1/2"],[92,"-1/2"],[95,"1/2"],[98,"-1/2"],[101,"-1/2"]]}, + {"target":6,"terms":[[2,"-1/2"],[4,"-1/2"],[5,"-1/2"],[8,"1/2"],[11,"-1/2"],[13,"-1/2"],[14,"1/2"],[16,"1/2"],[19,"-1/2"],[21,"-1/2"],[23,"1/2"],[25,"1/2"],[28,"-1/2"],[30,"-1/2"],[34,"1/2"],[37,"-1/2"],[39,"-1/2"],[40,"1/2"],[42,"1/2"],[45,"-1/2"],[47,"1/2"],[49,"1/2"],[52,"-1/2"],[54,"-1/2"],[55,"1/2"],[57,"1/2"],[60,"-1/2"],[62,"-1/2"],[63,"1/2"],[65,"1/2"],[68,"-1/2"],[70,"-1/2"],[71,"1/2"],[73,"1/2"],[76,"-1/2"],[78,"-1/2"],[79,"1/2"],[81,"1/2"],[83,"-1/2"],[85,"-1/2"],[86,"1/2"],[88,"1/2"],[90,"-1/2"],[92,"-1/2"],[95,"1/2"],[97,"1/2"],[99,"-1/2"],[101,"-1/2"]]}, + {"target":7,"terms":[[0,"1/2"],[1,"1/2"],[2,"1/2"],[8,"-1/2"],[9,"-1/2"],[10,"-1/2"],[11,"-1/2"],[13,"-1/2"],[15,"-1/2"],[20,"1/2"],[22,"1/2"],[24,"-1/2"],[29,"1/2"],[31,"-1/2"],[34,"1/2"],[35,"1/2"],[38,"1/2"],[39,"1/2"],[40,"-1/2"],[41,"-1/2"],[44,"-1/2"],[45,"-1/2"],[49,"1/2"],[50,"1/2"],[53,"1/2"],[54,"1/2"],[55,"-1/2"],[56,"-1/2"],[59,"-1/2"],[60,"-1/2"],[65,"1/2"],[66,"1/2"],[69,"1/2"],[70,"1/2"],[71,"-1/2"],[72,"-1/2"],[75,"-1/2"],[76,"-1/2"],[81,"1/2"],[84,"1/2"],[85,"1/2"],[86,"-1/2"],[87,"-1/2"],[90,"-1/2"],[94,"1/2"],[96,"-1/2"],[100,"1/2"],[102,"-1/2"]]}, + {"target":8,"terms":[[2,"1/2"],[3,"-1/2"],[6,"1/2"],[7,"-1/2"],[9,"-1/2"],[10,"-1/2"],[12,"-1/2"],[13,"-1/2"],[16,"-1/2"],[19,"1/2"],[22,"1/2"],[25,"-1/2"],[28,"1/2"],[31,"-1/2"],[33,"1/2"],[35,"1/2"],[37,"1/2"],[39,"1/2"],[40,"-1/2"],[42,"-1/2"],[44,"-1/2"],[46,"-1/2"],[48,"1/2"],[50,"1/2"],[52,"1/2"],[54,"1/2"],[55,"-1/2"],[57,"-1/2"],[59,"-1/2"],[61,"-1/2"],[64,"1/2"],[66,"1/2"],[68,"1/2"],[70,"1/2"],[71,"-1/2"],[73,"-1/2"],[75,"-1/2"],[77,"-1/2"],[80,"1/2"],[83,"1/2"],[85,"1/2"],[86,"-1/2"],[88,"-1/2"],[91,"-1/2"],[94,"1/2"],[97,"-1/2"],[99,"1/2"],[102,"-1/2"]]}, + {"target":9,"terms":[[0,"-1/2"],[1,"1/2"],[4,"-1/2"],[5,"1/2"],[7,"-1/2"],[8,"-1/2"],[11,"-1/2"],[12,"-1/2"],[13,"-1/2"],[17,"-1/2"],[18,"1/2"],[22,"1/2"],[26,"-1/2"],[27,"1/2"],[31,"-1/2"],[35,"1/2"],[37,"1/2"],[38,"1/2"],[40,"-1/2"],[43,"-1/2"],[45,"-1/2"],[46,"-1/2"],[48,"1/2"],[49,"1/2"],[51,"1/2"],[54,"1/2"],[56,"-1/2"],[57,"-1/2"],[59,"-1/2"],[62,"-1/2"],[64,"1/2"],[65,"1/2"],[67,"1/2"],[70,"1/2"],[72,"-1/2"],[73,"-1/2"],[75,"-1/2"],[78,"-1/2"],[79,"1/2"],[83,"1/2"],[84,"1/2"],[86,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[94,"1/2"],[98,"1/2"],[102,"-1/2"]]}, + {"target":10,"terms":[[0,"1/2"],[1,"-1/2"],[4,"1/2"],[5,"-1/2"],[7,"-1/2"],[8,"-1/2"],[11,"-1/2"],[12,"-1/2"],[13,"-1/2"],[17,"1/2"],[18,"-1/2"],[22,"1/2"],[26,"1/2"],[27,"-1/2"],[31,"-1/2"],[33,"1/2"],[34,"1/2"],[36,"1/2"],[39,"1/2"],[41,"-1/2"],[42,"-1/2"],[44,"-1/2"],[47,"1/2"],[50,"1/2"],[52,"1/2"],[53,"1/2"],[55,"-1/2"],[58,"-1/2"],[60,"-1/2"],[61,"-1/2"],[63,"1/2"],[66,"1/2"],[68,"1/2"],[69,"1/2"],[71,"-1/2"],[74,"-1/2"],[76,"-1/2"],[77,"-1/2"],[80,"1/2"],[81,"1/2"],[82,"1/2"],[85,"1/2"],[87,"-1/2"],[88,"-1/2"],[92,"-1/2"],[94,"1/2"],[98,"-1/2"],[102,"-1/2"]]}, + {"target":11,"terms":[[2,"-1/2"],[3,"1/2"],[6,"-1/2"],[7,"-1/2"],[9,"-1/2"],[10,"-1/2"],[12,"-1/2"],[13,"-1/2"],[16,"1/2"],[19,"-1/2"],[22,"1/2"],[25,"1/2"],[28,"-1/2"],[31,"-1/2"],[34,"1/2"],[36,"1/2"],[38,"1/2"],[41,"-1/2"],[43,"-1/2"],[45,"-1/2"],[47,"1/2"],[49,"1/2"],[51,"1/2"],[53,"1/2"],[56,"-1/2"],[58,"-1/2"],[60,"-1/2"],[62,"-1/2"],[63,"1/2"],[65,"1/2"],[67,"1/2"],[69,"1/2"],[72,"-1/2"],[74,"-1/2"],[76,"-1/2"],[78,"-1/2"],[79,"1/2"],[81,"1/2"],[82,"1/2"],[84,"1/2"],[87,"-1/2"],[89,"-1/2"],[90,"-1/2"],[92,"-1/2"],[94,"1/2"],[97,"1/2"],[99,"-1/2"],[102,"-1/2"]]}, + {"target":12,"terms":[[0,"-1/2"],[1,"-1/2"],[2,"-1/2"],[8,"-1/2"],[9,"-1/2"],[10,"-1/2"],[11,"-1/2"],[13,"-1/2"],[15,"1/2"],[20,"-1/2"],[22,"1/2"],[24,"1/2"],[29,"-1/2"],[31,"-1/2"],[33,"1/2"],[36,"1/2"],[37,"1/2"],[42,"-1/2"],[43,"-1/2"],[46,"-1/2"],[47,"1/2"],[48,"1/2"],[51,"1/2"],[52,"1/2"],[57,"-1/2"],[58,"-1/2"],[61,"-1/2"],[62,"-1/2"],[63,"1/2"],[64,"1/2"],[67,"1/2"],[68,"1/2"],[73,"-1/2"],[74,"-1/2"],[77,"-1/2"],[78,"-1/2"],[79,"1/2"],[80,"1/2"],[82,"1/2"],[83,"1/2"],[88,"-1/2"],[89,"-1/2"],[91,"-1/2"],[92,"-1/2"],[94,"1/2"],[96,"1/2"],[100,"-1/2"],[102,"-1/2"]]}, + {"target":13,"terms":[[3,"-1/2"],[4,"-1/2"],[5,"-1/2"],[6,"-1/2"],[7,"-1/2"],[8,"-1/2"],[9,"-1/2"],[10,"-1/2"],[11,"-1/2"],[12,"-1/2"],[14,"1/2"],[21,"-1/2"],[22,"1/2"],[23,"1/2"],[30,"-1/2"],[31,"-1/2"],[33,"1/2"],[34,"1/2"],[35,"1/2"],[44,"-1/2"],[45,"-1/2"],[46,"-1/2"],[47,"1/2"],[48,"1/2"],[49,"1/2"],[50,"1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[63,"1/2"],[64,"1/2"],[65,"1/2"],[66,"1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[79,"1/2"],[80,"1/2"],[81,"1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[94,"1/2"],[95,"1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":14,"terms":[[3,"1/2"],[4,"1/2"],[5,"1/2"],[6,"1/2"],[13,"1/2"],[15,"-1/2"],[16,"-1/2"],[17,"-1/2"],[18,"-1/2"],[19,"-1/2"],[20,"-1/2"],[23,"-1/2"],[30,"1/2"],[32,"-1/2"],[36,"1/2"],[37,"1/2"],[38,"1/2"],[39,"1/2"],[44,"1/2"],[45,"1/2"],[46,"1/2"],[47,"-1/2"],[48,"-1/2"],[49,"-1/2"],[50,"-1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[67,"1/2"],[68,"1/2"],[69,"1/2"],[70,"1/2"],[75,"1/2"],[76,"1/2"],[77,"1/2"],[78,"1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[93,"1/2"],[95,"-1/2"],[101,"1/2"],[103,"-1/2"]]}, + {"target":15,"terms":[[0,"1/2"],[1,"1/2"],[2,"1/2"],[7,"-1/2"],[12,"1/2"],[14,"-1/2"],[16,"-1/2"],[17,"-1/2"],[18,"-1/2"],[19,"-1/2"],[21,"-1/2"],[24,"-1/2"],[29,"1/2"],[32,"-1/2"],[34,"1/2"],[35,"1/2"],[38,"1/2"],[39,"1/2"],[42,"1/2"],[43,"1/2"],[46,"1/2"],[47,"-1/2"],[48,"-1/2"],[51,"-1/2"],[52,"-1/2"],[55,"-1/2"],[56,"-1/2"],[59,"-1/2"],[60,"-1/2"],[65,"1/2"],[66,"1/2"],[69,"1/2"],[70,"1/2"],[73,"1/2"],[74,"1/2"],[77,"1/2"],[78,"1/2"],[79,"-1/2"],[80,"-1/2"],[82,"-1/2"],[83,"-1/2"],[86,"-1/2"],[87,"-1/2"],[90,"-1/2"],[93,"1/2"],[96,"-1/2"],[100,"1/2"],[103,"-1/2"]]}, + {"target":16,"terms":[[2,"1/2"],[3,"-1/2"],[6,"1/2"],[8,"-1/2"],[11,"1/2"],[14,"-1/2"],[15,"-1/2"],[17,"-1/2"],[18,"-1/2"],[20,"-1/2"],[21,"-1/2"],[25,"-1/2"],[28,"1/2"],[32,"-1/2"],[33,"1/2"],[35,"1/2"],[37,"1/2"],[39,"1/2"],[41,"1/2"],[43,"1/2"],[45,"1/2"],[47,"-1/2"],[49,"-1/2"],[51,"-1/2"],[53,"-1/2"],[55,"-1/2"],[57,"-1/2"],[59,"-1/2"],[61,"-1/2"],[64,"1/2"],[66,"1/2"],[68,"1/2"],[70,"1/2"],[72,"1/2"],[74,"1/2"],[76,"1/2"],[78,"1/2"],[79,"-1/2"],[81,"-1/2"],[82,"-1/2"],[84,"-1/2"],[86,"-1/2"],[88,"-1/2"],[91,"-1/2"],[93,"1/2"],[97,"-1/2"],[99,"1/2"],[103,"-1/2"]]}, + {"target":17,"terms":[[0,"-1/2"],[1,"1/2"],[4,"-1/2"],[5,"1/2"],[9,"-1/2"],[10,"1/2"],[14,"-1/2"],[15,"-1/2"],[16,"-1/2"],[19,"-1/2"],[20,"-1/2"],[21,"-1/2"],[26,"-1/2"],[27,"1/2"],[32,"-1/2"],[35,"1/2"],[37,"1/2"],[38,"1/2"],[41,"1/2"],[42,"1/2"],[44,"1/2"],[47,"-1/2"],[50,"-1/2"],[52,"-1/2"],[53,"-1/2"],[56,"-1/2"],[57,"-1/2"],[59,"-1/2"],[62,"-1/2"],[64,"1/2"],[65,"1/2"],[67,"1/2"],[70,"1/2"],[71,"1/2"],[74,"1/2"],[76,"1/2"],[77,"1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[85,"-1/2"],[86,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[93,"1/2"],[98,"1/2"],[103,"-1/2"]]}, + {"target":18,"terms":[[0,"1/2"],[1,"-1/2"],[4,"1/2"],[5,"-1/2"],[9,"1/2"],[10,"-1/2"],[14,"-1/2"],[15,"-1/2"],[16,"-1/2"],[19,"-1/2"],[20,"-1/2"],[21,"-1/2"],[26,"1/2"],[27,"-1/2"],[32,"-1/2"],[33,"1/2"],[34,"1/2"],[36,"1/2"],[39,"1/2"],[40,"1/2"],[43,"1/2"],[45,"1/2"],[46,"1/2"],[48,"-1/2"],[49,"-1/2"],[51,"-1/2"],[54,"-1/2"],[55,"-1/2"],[58,"-1/2"],[60,"-1/2"],[61,"-1/2"],[63,"1/2"],[66,"1/2"],[68,"1/2"],[69,"1/2"],[72,"1/2"],[73,"1/2"],[75,"1/2"],[78,"1/2"],[79,"-1/2"],[83,"-1/2"],[84,"-1/2"],[87,"-1/2"],[88,"-1/2"],[92,"-1/2"],[93,"1/2"],[98,"-1/2"],[103,"-1/2"]]}, + {"target":19,"terms":[[2,"-1/2"],[3,"1/2"],[6,"-1/2"],[8,"1/2"],[11,"-1/2"],[14,"-1/2"],[15,"-1/2"],[17,"-1/2"],[18,"-1/2"],[20,"-1/2"],[21,"-1/2"],[25,"1/2"],[28,"-1/2"],[32,"-1/2"],[34,"1/2"],[36,"1/2"],[38,"1/2"],[40,"1/2"],[42,"1/2"],[44,"1/2"],[46,"1/2"],[48,"-1/2"],[50,"-1/2"],[52,"-1/2"],[54,"-1/2"],[56,"-1/2"],[58,"-1/2"],[60,"-1/2"],[62,"-1/2"],[63,"1/2"],[65,"1/2"],[67,"1/2"],[69,"1/2"],[71,"1/2"],[73,"1/2"],[75,"1/2"],[77,"1/2"],[80,"-1/2"],[83,"-1/2"],[85,"-1/2"],[87,"-1/2"],[89,"-1/2"],[90,"-1/2"],[92,"-1/2"],[93,"1/2"],[97,"1/2"],[99,"-1/2"],[103,"-1/2"]]}, + {"target":20,"terms":[[0,"-1/2"],[1,"-1/2"],[2,"-1/2"],[7,"1/2"],[12,"-1/2"],[14,"-1/2"],[16,"-1/2"],[17,"-1/2"],[18,"-1/2"],[19,"-1/2"],[21,"-1/2"],[24,"1/2"],[29,"-1/2"],[32,"-1/2"],[33,"1/2"],[36,"1/2"],[37,"1/2"],[40,"1/2"],[41,"1/2"],[44,"1/2"],[45,"1/2"],[49,"-1/2"],[50,"-1/2"],[53,"-1/2"],[54,"-1/2"],[57,"-1/2"],[58,"-1/2"],[61,"-1/2"],[62,"-1/2"],[63,"1/2"],[64,"1/2"],[67,"1/2"],[68,"1/2"],[71,"1/2"],[72,"1/2"],[75,"1/2"],[76,"1/2"],[81,"-1/2"],[84,"-1/2"],[85,"-1/2"],[88,"-1/2"],[89,"-1/2"],[91,"-1/2"],[92,"-1/2"],[93,"1/2"],[96,"1/2"],[100,"-1/2"],[103,"-1/2"]]}, + {"target":21,"terms":[[3,"-1/2"],[4,"-1/2"],[5,"-1/2"],[6,"-1/2"],[13,"-1/2"],[15,"-1/2"],[16,"-1/2"],[17,"-1/2"],[18,"-1/2"],[19,"-1/2"],[20,"-1/2"],[23,"1/2"],[30,"-1/2"],[32,"-1/2"],[33,"1/2"],[34,"1/2"],[35,"1/2"],[40,"1/2"],[41,"1/2"],[42,"1/2"],[43,"1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[63,"1/2"],[64,"1/2"],[65,"1/2"],[66,"1/2"],[71,"1/2"],[72,"1/2"],[73,"1/2"],[74,"1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[93,"1/2"],[95,"1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":22,"terms":[[7,"1/2"],[8,"1/2"],[9,"1/2"],[10,"1/2"],[11,"1/2"],[12,"1/2"],[13,"1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[27,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[32,"-1/2"],[40,"1/2"],[41,"1/2"],[42,"1/2"],[43,"1/2"],[44,"1/2"],[45,"1/2"],[46,"1/2"],[55,"1/2"],[56,"1/2"],[57,"1/2"],[58,"1/2"],[59,"1/2"],[60,"1/2"],[61,"1/2"],[62,"1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[94,"-1/2"],[102,"1/2"]]}, + {"target":23,"terms":[[3,"1/2"],[4,"1/2"],[5,"1/2"],[6,"1/2"],[13,"1/2"],[14,"-1/2"],[21,"1/2"],[22,"-1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[27,"-1/2"],[28,"-1/2"],[29,"-1/2"],[31,"-1/2"],[32,"-1/2"],[36,"1/2"],[37,"1/2"],[38,"1/2"],[39,"1/2"],[44,"1/2"],[45,"1/2"],[46,"1/2"],[51,"1/2"],[52,"1/2"],[53,"1/2"],[54,"1/2"],[59,"1/2"],[60,"1/2"],[61,"1/2"],[62,"1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[95,"-1/2"],[101,"1/2"]]}, + {"target":24,"terms":[[0,"1/2"],[1,"1/2"],[2,"1/2"],[7,"-1/2"],[12,"1/2"],[15,"-1/2"],[20,"1/2"],[22,"-1/2"],[23,"-1/2"],[25,"-1/2"],[26,"-1/2"],[27,"-1/2"],[28,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[34,"1/2"],[35,"1/2"],[38,"1/2"],[39,"1/2"],[42,"1/2"],[43,"1/2"],[46,"1/2"],[49,"1/2"],[50,"1/2"],[53,"1/2"],[54,"1/2"],[57,"1/2"],[58,"1/2"],[61,"1/2"],[62,"1/2"],[63,"-1/2"],[64,"-1/2"],[67,"-1/2"],[68,"-1/2"],[71,"-1/2"],[72,"-1/2"],[75,"-1/2"],[76,"-1/2"],[79,"-1/2"],[80,"-1/2"],[82,"-1/2"],[83,"-1/2"],[86,"-1/2"],[87,"-1/2"],[90,"-1/2"],[96,"-1/2"],[100,"1/2"]]}, + {"target":25,"terms":[[2,"1/2"],[3,"-1/2"],[6,"1/2"],[8,"-1/2"],[11,"1/2"],[16,"-1/2"],[19,"1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[26,"-1/2"],[27,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[33,"1/2"],[35,"1/2"],[37,"1/2"],[39,"1/2"],[41,"1/2"],[43,"1/2"],[45,"1/2"],[48,"1/2"],[50,"1/2"],[52,"1/2"],[54,"1/2"],[56,"1/2"],[58,"1/2"],[60,"1/2"],[62,"1/2"],[63,"-1/2"],[65,"-1/2"],[67,"-1/2"],[69,"-1/2"],[71,"-1/2"],[73,"-1/2"],[75,"-1/2"],[77,"-1/2"],[79,"-1/2"],[81,"-1/2"],[82,"-1/2"],[84,"-1/2"],[86,"-1/2"],[88,"-1/2"],[91,"-1/2"],[97,"-1/2"],[99,"1/2"]]}, + {"target":26,"terms":[[0,"-1/2"],[1,"1/2"],[4,"-1/2"],[5,"1/2"],[9,"-1/2"],[10,"1/2"],[17,"-1/2"],[18,"1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[35,"1/2"],[37,"1/2"],[38,"1/2"],[41,"1/2"],[42,"1/2"],[44,"1/2"],[48,"1/2"],[49,"1/2"],[51,"1/2"],[54,"1/2"],[55,"1/2"],[58,"1/2"],[60,"1/2"],[61,"1/2"],[63,"-1/2"],[66,"-1/2"],[68,"-1/2"],[69,"-1/2"],[72,"-1/2"],[73,"-1/2"],[75,"-1/2"],[78,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[85,"-1/2"],[86,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[98,"1/2"]]}, + {"target":27,"terms":[[0,"1/2"],[1,"-1/2"],[4,"1/2"],[5,"-1/2"],[9,"1/2"],[10,"-1/2"],[17,"1/2"],[18,"-1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[33,"1/2"],[34,"1/2"],[36,"1/2"],[39,"1/2"],[40,"1/2"],[43,"1/2"],[45,"1/2"],[46,"1/2"],[47,"1/2"],[50,"1/2"],[52,"1/2"],[53,"1/2"],[56,"1/2"],[57,"1/2"],[59,"1/2"],[62,"1/2"],[64,"-1/2"],[65,"-1/2"],[67,"-1/2"],[70,"-1/2"],[71,"-1/2"],[74,"-1/2"],[76,"-1/2"],[77,"-1/2"],[79,"-1/2"],[83,"-1/2"],[84,"-1/2"],[87,"-1/2"],[88,"-1/2"],[92,"-1/2"],[98,"-1/2"]]}, + {"target":28,"terms":[[2,"-1/2"],[3,"1/2"],[6,"-1/2"],[8,"1/2"],[11,"-1/2"],[16,"1/2"],[19,"-1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[26,"-1/2"],[27,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[34,"1/2"],[36,"1/2"],[38,"1/2"],[40,"1/2"],[42,"1/2"],[44,"1/2"],[46,"1/2"],[47,"1/2"],[49,"1/2"],[51,"1/2"],[53,"1/2"],[55,"1/2"],[57,"1/2"],[59,"1/2"],[61,"1/2"],[64,"-1/2"],[66,"-1/2"],[68,"-1/2"],[70,"-1/2"],[72,"-1/2"],[74,"-1/2"],[76,"-1/2"],[78,"-1/2"],[80,"-1/2"],[83,"-1/2"],[85,"-1/2"],[87,"-1/2"],[89,"-1/2"],[90,"-1/2"],[92,"-1/2"],[97,"1/2"],[99,"-1/2"]]}, + {"target":29,"terms":[[0,"-1/2"],[1,"-1/2"],[2,"-1/2"],[7,"1/2"],[12,"-1/2"],[15,"1/2"],[20,"-1/2"],[22,"-1/2"],[23,"-1/2"],[25,"-1/2"],[26,"-1/2"],[27,"-1/2"],[28,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[33,"1/2"],[36,"1/2"],[37,"1/2"],[40,"1/2"],[41,"1/2"],[44,"1/2"],[45,"1/2"],[47,"1/2"],[48,"1/2"],[51,"1/2"],[52,"1/2"],[55,"1/2"],[56,"1/2"],[59,"1/2"],[60,"1/2"],[65,"-1/2"],[66,"-1/2"],[69,"-1/2"],[70,"-1/2"],[73,"-1/2"],[74,"-1/2"],[77,"-1/2"],[78,"-1/2"],[81,"-1/2"],[84,"-1/2"],[85,"-1/2"],[88,"-1/2"],[89,"-1/2"],[91,"-1/2"],[92,"-1/2"],[96,"1/2"],[100,"-1/2"]]}, + {"target":30,"terms":[[3,"-1/2"],[4,"-1/2"],[5,"-1/2"],[6,"-1/2"],[13,"-1/2"],[14,"1/2"],[21,"-1/2"],[22,"-1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[27,"-1/2"],[28,"-1/2"],[29,"-1/2"],[31,"-1/2"],[32,"-1/2"],[33,"1/2"],[34,"1/2"],[35,"1/2"],[40,"1/2"],[41,"1/2"],[42,"1/2"],[43,"1/2"],[47,"1/2"],[48,"1/2"],[49,"1/2"],[50,"1/2"],[55,"1/2"],[56,"1/2"],[57,"1/2"],[58,"1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[95,"1/2"],[101,"-1/2"]]}, + {"target":31,"terms":[[7,"-1/2"],[8,"-1/2"],[9,"-1/2"],[10,"-1/2"],[11,"-1/2"],[12,"-1/2"],[13,"-1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[27,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[32,"-1/2"],[33,"1/2"],[34,"1/2"],[35,"1/2"],[36,"1/2"],[37,"1/2"],[38,"1/2"],[39,"1/2"],[47,"1/2"],[48,"1/2"],[49,"1/2"],[50,"1/2"],[51,"1/2"],[52,"1/2"],[53,"1/2"],[54,"1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[94,"1/2"],[102,"-1/2"]]}, + {"target":32,"terms":[[14,"-1/2"],[15,"-1/2"],[16,"-1/2"],[17,"-1/2"],[18,"-1/2"],[19,"-1/2"],[20,"-1/2"],[21,"-1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[27,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[33,"1/2"],[34,"1/2"],[35,"1/2"],[36,"1/2"],[37,"1/2"],[38,"1/2"],[39,"1/2"],[40,"1/2"],[41,"1/2"],[42,"1/2"],[43,"1/2"],[44,"1/2"],[45,"1/2"],[46,"1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[93,"1/2"],[103,"-1/2"]]}, + {"target":33,"terms":[[1,"1/2"],[3,"1/2"],[5,"1/2"],[8,"1/2"],[10,"1/2"],[12,"1/2"],[13,"1/2"],[16,"1/2"],[18,"1/2"],[20,"1/2"],[21,"1/2"],[25,"1/2"],[27,"1/2"],[29,"1/2"],[30,"1/2"],[31,"1/2"],[32,"1/2"],[34,"-1/2"],[35,"-1/2"],[36,"-1/2"],[37,"-1/2"],[39,"-1/2"],[40,"-1/2"],[41,"-1/2"],[43,"-1/2"],[45,"-1/2"],[47,"-1/2"],[48,"-1/2"],[50,"-1/2"],[52,"-1/2"],[56,"-1/2"],[61,"1/2"],[63,"-1/2"],[64,"-1/2"],[66,"-1/2"],[68,"-1/2"],[72,"-1/2"],[77,"1/2"],[80,"-1/2"],[84,"1/2"],[88,"1/2"],[91,"1/2"],[92,"1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[99,"-1/2"]]}, + {"target":34,"terms":[[0,"-1/2"],[5,"1/2"],[6,"1/2"],[7,"1/2"],[10,"1/2"],[11,"1/2"],[13,"1/2"],[15,"1/2"],[18,"1/2"],[19,"1/2"],[21,"1/2"],[24,"1/2"],[27,"1/2"],[28,"1/2"],[30,"1/2"],[31,"1/2"],[32,"1/2"],[33,"-1/2"],[35,"-1/2"],[36,"-1/2"],[38,"-1/2"],[39,"-1/2"],[40,"-1/2"],[42,"-1/2"],[43,"-1/2"],[46,"-1/2"],[47,"-1/2"],[49,"-1/2"],[50,"-1/2"],[53,"-1/2"],[57,"-1/2"],[60,"1/2"],[63,"-1/2"],[65,"-1/2"],[66,"-1/2"],[69,"-1/2"],[73,"-1/2"],[76,"1/2"],[81,"-1/2"],[83,"1/2"],[87,"1/2"],[90,"1/2"],[92,"1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[97,"-1/2"],[100,"-1/2"]]}, + {"target":35,"terms":[[1,"-1/2"],[2,"-1/2"],[3,"1/2"],[4,"1/2"],[7,"1/2"],[8,"1/2"],[9,"1/2"],[13,"1/2"],[15,"1/2"],[16,"1/2"],[17,"1/2"],[21,"1/2"],[24,"1/2"],[25,"1/2"],[26,"1/2"],[30,"1/2"],[31,"1/2"],[32,"1/2"],[33,"-1/2"],[34,"-1/2"],[37,"-1/2"],[38,"-1/2"],[39,"-1/2"],[41,"-1/2"],[42,"-1/2"],[43,"-1/2"],[48,"-1/2"],[49,"-1/2"],[50,"-1/2"],[54,"-1/2"],[58,"-1/2"],[59,"1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[70,"-1/2"],[74,"-1/2"],[75,"1/2"],[82,"1/2"],[86,"1/2"],[90,"1/2"],[91,"1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"]]}, + {"target":36,"terms":[[1,"1/2"],[2,"1/2"],[3,"-1/2"],[4,"-1/2"],[10,"1/2"],[11,"1/2"],[12,"1/2"],[14,"1/2"],[18,"1/2"],[19,"1/2"],[20,"1/2"],[23,"1/2"],[27,"1/2"],[28,"1/2"],[29,"1/2"],[31,"1/2"],[32,"1/2"],[33,"-1/2"],[34,"-1/2"],[37,"-1/2"],[38,"-1/2"],[39,"-1/2"],[40,"-1/2"],[44,"-1/2"],[45,"-1/2"],[46,"-1/2"],[47,"-1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[58,"1/2"],[59,"-1/2"],[63,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[74,"1/2"],[75,"-1/2"],[82,"-1/2"],[87,"1/2"],[88,"1/2"],[89,"1/2"],[92,"1/2"],[93,"-1/2"],[94,"-1/2"],[96,"-1/2"],[97,"-1/2"],[101,"-1/2"]]}, + {"target":37,"terms":[[0,"1/2"],[5,"-1/2"],[6,"-1/2"],[8,"1/2"],[9,"1/2"],[12,"1/2"],[14,"1/2"],[16,"1/2"],[17,"1/2"],[20,"1/2"],[23,"1/2"],[25,"1/2"],[26,"1/2"],[29,"1/2"],[31,"1/2"],[32,"1/2"],[33,"-1/2"],[35,"-1/2"],[36,"-1/2"],[38,"-1/2"],[39,"-1/2"],[41,"-1/2"],[44,"-1/2"],[45,"-1/2"],[48,"-1/2"],[51,"-1/2"],[52,"-1/2"],[54,"-1/2"],[57,"1/2"],[60,"-1/2"],[64,"-1/2"],[67,"-1/2"],[68,"-1/2"],[70,"-1/2"],[73,"1/2"],[76,"-1/2"],[81,"1/2"],[83,"-1/2"],[86,"1/2"],[88,"1/2"],[89,"1/2"],[91,"1/2"],[93,"-1/2"],[94,"-1/2"],[96,"-1/2"],[98,"-1/2"],[99,"-1/2"],[101,"-1/2"]]}, + {"target":38,"terms":[[1,"-1/2"],[3,"-1/2"],[5,"-1/2"],[7,"1/2"],[9,"1/2"],[11,"1/2"],[14,"1/2"],[15,"1/2"],[17,"1/2"],[19,"1/2"],[23,"1/2"],[24,"1/2"],[26,"1/2"],[28,"1/2"],[31,"1/2"],[32,"1/2"],[34,"-1/2"],[35,"-1/2"],[36,"-1/2"],[37,"-1/2"],[39,"-1/2"],[42,"-1/2"],[44,"-1/2"],[46,"-1/2"],[49,"-1/2"],[51,"-1/2"],[53,"-1/2"],[54,"-1/2"],[56,"1/2"],[61,"-1/2"],[65,"-1/2"],[67,"-1/2"],[69,"-1/2"],[70,"-1/2"],[72,"1/2"],[77,"-1/2"],[80,"1/2"],[84,"-1/2"],[86,"1/2"],[87,"1/2"],[89,"1/2"],[90,"1/2"],[93,"-1/2"],[94,"-1/2"],[97,"-1/2"],[98,"-1/2"],[100,"-1/2"],[101,"-1/2"]]}, + {"target":39,"terms":[[0,"-1/2"],[2,"-1/2"],[4,"-1/2"],[6,"-1/2"],[7,"1/2"],[8,"1/2"],[10,"1/2"],[14,"1/2"],[15,"1/2"],[16,"1/2"],[18,"1/2"],[23,"1/2"],[24,"1/2"],[25,"1/2"],[27,"1/2"],[31,"1/2"],[32,"1/2"],[33,"-1/2"],[34,"-1/2"],[35,"-1/2"],[36,"-1/2"],[37,"-1/2"],[38,"-1/2"],[43,"-1/2"],[45,"-1/2"],[46,"-1/2"],[50,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[55,"1/2"],[62,"-1/2"],[66,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[71,"1/2"],[78,"-1/2"],[79,"1/2"],[85,"-1/2"],[86,"1/2"],[87,"1/2"],[88,"1/2"],[93,"-1/2"],[94,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"]]}, + {"target":40,"terms":[[1,"1/2"],[2,"1/2"],[5,"1/2"],[6,"1/2"],[7,"-1/2"],[8,"-1/2"],[9,"-1/2"],[18,"1/2"],[19,"1/2"],[20,"1/2"],[21,"1/2"],[22,"1/2"],[27,"1/2"],[28,"1/2"],[29,"1/2"],[30,"1/2"],[32,"1/2"],[33,"-1/2"],[34,"-1/2"],[36,"-1/2"],[41,"-1/2"],[42,"-1/2"],[43,"-1/2"],[44,"-1/2"],[45,"-1/2"],[46,"-1/2"],[47,"-1/2"],[54,"1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[59,"-1/2"],[63,"-1/2"],[70,"1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[75,"-1/2"],[83,"1/2"],[84,"1/2"],[85,"1/2"],[86,"-1/2"],[92,"1/2"],[93,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[102,"-1/2"]]}, + {"target":41,"terms":[[0,"1/2"],[3,"1/2"],[4,"1/2"],[7,"-1/2"],[10,"-1/2"],[11,"-1/2"],[16,"1/2"],[17,"1/2"],[20,"1/2"],[21,"1/2"],[22,"1/2"],[25,"1/2"],[26,"1/2"],[29,"1/2"],[30,"1/2"],[32,"1/2"],[33,"-1/2"],[35,"-1/2"],[37,"-1/2"],[40,"-1/2"],[42,"-1/2"],[43,"-1/2"],[44,"-1/2"],[45,"-1/2"],[48,"-1/2"],[53,"1/2"],[55,"-1/2"],[56,"-1/2"],[58,"-1/2"],[60,"-1/2"],[64,"-1/2"],[69,"1/2"],[71,"-1/2"],[72,"-1/2"],[74,"-1/2"],[76,"-1/2"],[81,"1/2"],[82,"1/2"],[84,"1/2"],[85,"1/2"],[87,"-1/2"],[91,"1/2"],[93,"-1/2"],[95,"-1/2"],[96,"-1/2"],[98,"-1/2"],[99,"-1/2"],[102,"-1/2"]]}, + {"target":42,"terms":[[1,"-1/2"],[4,"1/2"],[6,"1/2"],[8,"-1/2"],[10,"-1/2"],[12,"-1/2"],[15,"1/2"],[17,"1/2"],[19,"1/2"],[21,"1/2"],[22,"1/2"],[24,"1/2"],[26,"1/2"],[28,"1/2"],[30,"1/2"],[32,"1/2"],[34,"-1/2"],[35,"-1/2"],[38,"-1/2"],[40,"-1/2"],[41,"-1/2"],[43,"-1/2"],[44,"-1/2"],[46,"-1/2"],[49,"-1/2"],[52,"1/2"],[55,"-1/2"],[57,"-1/2"],[58,"-1/2"],[61,"-1/2"],[65,"-1/2"],[68,"1/2"],[71,"-1/2"],[73,"-1/2"],[74,"-1/2"],[77,"-1/2"],[80,"1/2"],[82,"1/2"],[83,"1/2"],[85,"1/2"],[88,"-1/2"],[90,"1/2"],[93,"-1/2"],[95,"-1/2"],[97,"-1/2"],[98,"-1/2"],[100,"-1/2"],[102,"-1/2"]]}, + {"target":43,"terms":[[0,"-1/2"],[2,"-1/2"],[3,"1/2"],[5,"1/2"],[9,"-1/2"],[11,"-1/2"],[12,"-1/2"],[15,"1/2"],[16,"1/2"],[18,"1/2"],[21,"1/2"],[22,"1/2"],[24,"1/2"],[25,"1/2"],[27,"1/2"],[30,"1/2"],[32,"1/2"],[33,"-1/2"],[34,"-1/2"],[35,"-1/2"],[39,"-1/2"],[40,"-1/2"],[41,"-1/2"],[42,"-1/2"],[45,"-1/2"],[46,"-1/2"],[50,"-1/2"],[51,"1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[62,"-1/2"],[66,"-1/2"],[67,"1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[78,"-1/2"],[79,"1/2"],[82,"1/2"],[83,"1/2"],[84,"1/2"],[89,"-1/2"],[93,"-1/2"],[95,"-1/2"],[99,"-1/2"],[100,"-1/2"],[102,"-1/2"]]}, + {"target":44,"terms":[[0,"1/2"],[2,"1/2"],[3,"-1/2"],[5,"-1/2"],[7,"-1/2"],[8,"-1/2"],[10,"-1/2"],[13,"-1/2"],[14,"1/2"],[17,"1/2"],[19,"1/2"],[20,"1/2"],[22,"1/2"],[23,"1/2"],[26,"1/2"],[28,"1/2"],[29,"1/2"],[32,"1/2"],[36,"-1/2"],[37,"-1/2"],[38,"-1/2"],[40,"-1/2"],[41,"-1/2"],[42,"-1/2"],[45,"-1/2"],[46,"-1/2"],[50,"1/2"],[51,"-1/2"],[55,"-1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[66,"1/2"],[67,"-1/2"],[71,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[80,"1/2"],[81,"1/2"],[85,"1/2"],[89,"1/2"],[93,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":45,"terms":[[1,"1/2"],[4,"-1/2"],[6,"-1/2"],[7,"-1/2"],[9,"-1/2"],[11,"-1/2"],[13,"-1/2"],[14,"1/2"],[16,"1/2"],[18,"1/2"],[20,"1/2"],[22,"1/2"],[23,"1/2"],[25,"1/2"],[27,"1/2"],[29,"1/2"],[32,"1/2"],[33,"-1/2"],[36,"-1/2"],[37,"-1/2"],[39,"-1/2"],[40,"-1/2"],[41,"-1/2"],[43,"-1/2"],[44,"-1/2"],[46,"-1/2"],[49,"1/2"],[52,"-1/2"],[56,"-1/2"],[59,"-1/2"],[60,"-1/2"],[62,"-1/2"],[65,"1/2"],[68,"-1/2"],[72,"-1/2"],[75,"-1/2"],[76,"-1/2"],[78,"-1/2"],[79,"1/2"],[81,"1/2"],[84,"1/2"],[88,"1/2"],[90,"-1/2"],[93,"-1/2"],[96,"-1/2"],[99,"-1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":46,"terms":[[0,"-1/2"],[3,"-1/2"],[4,"-1/2"],[8,"-1/2"],[9,"-1/2"],[12,"-1/2"],[13,"-1/2"],[14,"1/2"],[15,"1/2"],[18,"1/2"],[19,"1/2"],[22,"1/2"],[23,"1/2"],[24,"1/2"],[27,"1/2"],[28,"1/2"],[32,"1/2"],[34,"-1/2"],[36,"-1/2"],[38,"-1/2"],[39,"-1/2"],[40,"-1/2"],[42,"-1/2"],[43,"-1/2"],[44,"-1/2"],[45,"-1/2"],[48,"1/2"],[53,"-1/2"],[57,"-1/2"],[59,"-1/2"],[61,"-1/2"],[62,"-1/2"],[64,"1/2"],[69,"-1/2"],[73,"-1/2"],[75,"-1/2"],[77,"-1/2"],[78,"-1/2"],[79,"1/2"],[80,"1/2"],[83,"1/2"],[87,"1/2"],[91,"-1/2"],[93,"-1/2"],[97,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":47,"terms":[[1,"1/2"],[2,"1/2"],[5,"1/2"],[6,"1/2"],[10,"1/2"],[11,"1/2"],[12,"1/2"],[13,"1/2"],[14,"-1/2"],[15,"-1/2"],[16,"-1/2"],[17,"-1/2"],[27,"1/2"],[28,"1/2"],[29,"1/2"],[30,"1/2"],[31,"1/2"],[33,"-1/2"],[34,"-1/2"],[36,"-1/2"],[40,"-1/2"],[48,"-1/2"],[49,"-1/2"],[50,"-1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[59,"-1/2"],[63,"-1/2"],[70,"1/2"],[74,"1/2"],[76,"1/2"],[77,"1/2"],[78,"1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[86,"-1/2"],[92,"1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[103,"-1/2"]]}, + {"target":48,"terms":[[0,"1/2"],[3,"1/2"],[4,"1/2"],[8,"1/2"],[9,"1/2"],[12,"1/2"],[13,"1/2"],[14,"-1/2"],[15,"-1/2"],[18,"-1/2"],[19,"-1/2"],[25,"1/2"],[26,"1/2"],[29,"1/2"],[30,"1/2"],[31,"1/2"],[33,"-1/2"],[35,"-1/2"],[37,"-1/2"],[41,"-1/2"],[46,"1/2"],[47,"-1/2"],[49,"-1/2"],[50,"-1/2"],[51,"-1/2"],[52,"-1/2"],[54,"-1/2"],[55,"-1/2"],[56,"-1/2"],[58,"-1/2"],[60,"-1/2"],[64,"-1/2"],[69,"1/2"],[73,"1/2"],[75,"1/2"],[77,"1/2"],[78,"1/2"],[79,"-1/2"],[80,"-1/2"],[83,"-1/2"],[87,"-1/2"],[91,"1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[98,"-1/2"],[99,"-1/2"],[103,"-1/2"]]}, + {"target":49,"terms":[[1,"-1/2"],[4,"1/2"],[6,"1/2"],[7,"1/2"],[9,"1/2"],[11,"1/2"],[13,"1/2"],[14,"-1/2"],[16,"-1/2"],[18,"-1/2"],[20,"-1/2"],[24,"1/2"],[26,"1/2"],[28,"1/2"],[30,"1/2"],[31,"1/2"],[34,"-1/2"],[35,"-1/2"],[38,"-1/2"],[42,"-1/2"],[45,"1/2"],[47,"-1/2"],[48,"-1/2"],[50,"-1/2"],[51,"-1/2"],[53,"-1/2"],[54,"-1/2"],[55,"-1/2"],[57,"-1/2"],[58,"-1/2"],[61,"-1/2"],[65,"-1/2"],[68,"1/2"],[72,"1/2"],[75,"1/2"],[76,"1/2"],[78,"1/2"],[79,"-1/2"],[81,"-1/2"],[84,"-1/2"],[88,"-1/2"],[90,"1/2"],[94,"-1/2"],[95,"-1/2"],[97,"-1/2"],[98,"-1/2"],[100,"-1/2"],[103,"-1/2"]]}, + {"target":50,"terms":[[0,"-1/2"],[2,"-1/2"],[3,"1/2"],[5,"1/2"],[7,"1/2"],[8,"1/2"],[10,"1/2"],[13,"1/2"],[14,"-1/2"],[17,"-1/2"],[19,"-1/2"],[20,"-1/2"],[24,"1/2"],[25,"1/2"],[27,"1/2"],[30,"1/2"],[31,"1/2"],[33,"-1/2"],[34,"-1/2"],[35,"-1/2"],[39,"-1/2"],[43,"-1/2"],[44,"1/2"],[47,"-1/2"],[48,"-1/2"],[49,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[62,"-1/2"],[66,"-1/2"],[67,"1/2"],[71,"1/2"],[75,"1/2"],[76,"1/2"],[77,"1/2"],[80,"-1/2"],[81,"-1/2"],[85,"-1/2"],[89,"-1/2"],[94,"-1/2"],[95,"-1/2"],[99,"-1/2"],[100,"-1/2"],[103,"-1/2"]]}, + {"target":51,"terms":[[0,"1/2"],[2,"1/2"],[3,"-1/2"],[5,"-1/2"],[9,"1/2"],[11,"1/2"],[12,"1/2"],[15,"-1/2"],[16,"-1/2"],[18,"-1/2"],[21,"-1/2"],[23,"1/2"],[26,"1/2"],[28,"1/2"],[29,"1/2"],[31,"1/2"],[36,"-1/2"],[37,"-1/2"],[38,"-1/2"],[43,"1/2"],[44,"-1/2"],[47,"-1/2"],[48,"-1/2"],[49,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[55,"-1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[66,"1/2"],[67,"-1/2"],[72,"1/2"],[73,"1/2"],[74,"1/2"],[78,"1/2"],[79,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[89,"1/2"],[94,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":52,"terms":[[1,"1/2"],[4,"-1/2"],[6,"-1/2"],[8,"1/2"],[10,"1/2"],[12,"1/2"],[15,"-1/2"],[17,"-1/2"],[19,"-1/2"],[21,"-1/2"],[23,"1/2"],[25,"1/2"],[27,"1/2"],[29,"1/2"],[31,"1/2"],[33,"-1/2"],[36,"-1/2"],[37,"-1/2"],[39,"-1/2"],[42,"1/2"],[45,"-1/2"],[47,"-1/2"],[48,"-1/2"],[50,"-1/2"],[51,"-1/2"],[53,"-1/2"],[54,"-1/2"],[56,"-1/2"],[59,"-1/2"],[60,"-1/2"],[62,"-1/2"],[65,"1/2"],[68,"-1/2"],[71,"1/2"],[73,"1/2"],[74,"1/2"],[77,"1/2"],[80,"-1/2"],[82,"-1/2"],[83,"-1/2"],[85,"-1/2"],[88,"1/2"],[90,"-1/2"],[94,"-1/2"],[96,"-1/2"],[99,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":53,"terms":[[0,"-1/2"],[3,"-1/2"],[4,"-1/2"],[7,"1/2"],[10,"1/2"],[11,"1/2"],[16,"-1/2"],[17,"-1/2"],[20,"-1/2"],[21,"-1/2"],[23,"1/2"],[24,"1/2"],[27,"1/2"],[28,"1/2"],[31,"1/2"],[34,"-1/2"],[36,"-1/2"],[38,"-1/2"],[39,"-1/2"],[41,"1/2"],[46,"-1/2"],[47,"-1/2"],[49,"-1/2"],[50,"-1/2"],[51,"-1/2"],[52,"-1/2"],[54,"-1/2"],[57,"-1/2"],[59,"-1/2"],[61,"-1/2"],[62,"-1/2"],[64,"1/2"],[69,"-1/2"],[71,"1/2"],[72,"1/2"],[74,"1/2"],[76,"1/2"],[81,"-1/2"],[82,"-1/2"],[84,"-1/2"],[85,"-1/2"],[87,"1/2"],[91,"-1/2"],[94,"-1/2"],[97,"-1/2"],[100,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":54,"terms":[[1,"-1/2"],[2,"-1/2"],[5,"-1/2"],[6,"-1/2"],[7,"1/2"],[8,"1/2"],[9,"1/2"],[18,"-1/2"],[19,"-1/2"],[20,"-1/2"],[21,"-1/2"],[23,"1/2"],[24,"1/2"],[25,"1/2"],[26,"1/2"],[31,"1/2"],[35,"-1/2"],[37,"-1/2"],[38,"-1/2"],[39,"-1/2"],[40,"1/2"],[48,"-1/2"],[49,"-1/2"],[50,"-1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[58,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[63,"1/2"],[70,"-1/2"],[71,"1/2"],[72,"1/2"],[73,"1/2"],[75,"1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[86,"1/2"],[92,"-1/2"],[94,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":55,"terms":[[0,"1/2"],[2,"1/2"],[4,"1/2"],[6,"1/2"],[7,"-1/2"],[8,"-1/2"],[10,"-1/2"],[14,"-1/2"],[15,"-1/2"],[16,"-1/2"],[18,"-1/2"],[22,"1/2"],[26,"1/2"],[28,"1/2"],[29,"1/2"],[30,"1/2"],[39,"1/2"],[40,"-1/2"],[41,"-1/2"],[42,"-1/2"],[44,"-1/2"],[47,"-1/2"],[48,"-1/2"],[49,"-1/2"],[51,"-1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[66,"1/2"],[68,"1/2"],[69,"1/2"],[70,"1/2"],[71,"-1/2"],[78,"1/2"],[79,"-1/2"],[85,"1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":56,"terms":[[1,"1/2"],[3,"1/2"],[5,"1/2"],[7,"-1/2"],[9,"-1/2"],[11,"-1/2"],[14,"-1/2"],[15,"-1/2"],[17,"-1/2"],[19,"-1/2"],[22,"1/2"],[25,"1/2"],[27,"1/2"],[29,"1/2"],[30,"1/2"],[33,"-1/2"],[38,"1/2"],[40,"-1/2"],[41,"-1/2"],[43,"-1/2"],[45,"-1/2"],[47,"-1/2"],[48,"-1/2"],[50,"-1/2"],[52,"-1/2"],[55,"-1/2"],[57,"-1/2"],[58,"-1/2"],[59,"-1/2"],[60,"-1/2"],[62,"-1/2"],[65,"1/2"],[67,"1/2"],[69,"1/2"],[70,"1/2"],[72,"-1/2"],[77,"1/2"],[80,"-1/2"],[84,"1/2"],[86,"-1/2"],[87,"-1/2"],[89,"-1/2"],[90,"-1/2"],[95,"-1/2"],[96,"-1/2"],[99,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":57,"terms":[[0,"-1/2"],[5,"1/2"],[6,"1/2"],[8,"-1/2"],[9,"-1/2"],[12,"-1/2"],[14,"-1/2"],[16,"-1/2"],[17,"-1/2"],[20,"-1/2"],[22,"1/2"],[24,"1/2"],[27,"1/2"],[28,"1/2"],[30,"1/2"],[34,"-1/2"],[37,"1/2"],[40,"-1/2"],[42,"-1/2"],[43,"-1/2"],[46,"-1/2"],[47,"-1/2"],[49,"-1/2"],[50,"-1/2"],[53,"-1/2"],[55,"-1/2"],[56,"-1/2"],[58,"-1/2"],[59,"-1/2"],[61,"-1/2"],[62,"-1/2"],[64,"1/2"],[67,"1/2"],[68,"1/2"],[70,"1/2"],[73,"-1/2"],[76,"1/2"],[81,"-1/2"],[83,"1/2"],[86,"-1/2"],[88,"-1/2"],[89,"-1/2"],[91,"-1/2"],[95,"-1/2"],[97,"-1/2"],[100,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":58,"terms":[[1,"-1/2"],[2,"-1/2"],[3,"1/2"],[4,"1/2"],[10,"-1/2"],[11,"-1/2"],[12,"-1/2"],[14,"-1/2"],[18,"-1/2"],[19,"-1/2"],[20,"-1/2"],[22,"1/2"],[24,"1/2"],[25,"1/2"],[26,"1/2"],[30,"1/2"],[35,"-1/2"],[36,"1/2"],[41,"-1/2"],[42,"-1/2"],[43,"-1/2"],[48,"-1/2"],[49,"-1/2"],[50,"-1/2"],[54,"-1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[63,"1/2"],[67,"1/2"],[68,"1/2"],[69,"1/2"],[74,"-1/2"],[75,"1/2"],[82,"1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[92,"-1/2"],[95,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":59,"terms":[[1,"1/2"],[2,"1/2"],[3,"-1/2"],[4,"-1/2"],[7,"-1/2"],[8,"-1/2"],[9,"-1/2"],[13,"-1/2"],[15,"-1/2"],[16,"-1/2"],[17,"-1/2"],[21,"-1/2"],[22,"1/2"],[23,"1/2"],[27,"1/2"],[28,"1/2"],[29,"1/2"],[35,"1/2"],[36,"-1/2"],[40,"-1/2"],[44,"-1/2"],[45,"-1/2"],[46,"-1/2"],[47,"-1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[64,"1/2"],[65,"1/2"],[66,"1/2"],[70,"1/2"],[74,"1/2"],[75,"-1/2"],[82,"-1/2"],[86,"-1/2"],[90,"-1/2"],[91,"-1/2"],[96,"-1/2"],[97,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":60,"terms":[[0,"1/2"],[5,"-1/2"],[6,"-1/2"],[7,"-1/2"],[10,"-1/2"],[11,"-1/2"],[13,"-1/2"],[15,"-1/2"],[18,"-1/2"],[19,"-1/2"],[21,"-1/2"],[22,"1/2"],[23,"1/2"],[25,"1/2"],[26,"1/2"],[29,"1/2"],[34,"1/2"],[37,"-1/2"],[41,"-1/2"],[44,"-1/2"],[45,"-1/2"],[48,"-1/2"],[51,"-1/2"],[52,"-1/2"],[54,"-1/2"],[55,"-1/2"],[56,"-1/2"],[58,"-1/2"],[59,"-1/2"],[61,"-1/2"],[62,"-1/2"],[63,"1/2"],[65,"1/2"],[66,"1/2"],[69,"1/2"],[73,"1/2"],[76,"-1/2"],[81,"1/2"],[83,"-1/2"],[87,"-1/2"],[90,"-1/2"],[92,"-1/2"],[96,"-1/2"],[98,"-1/2"],[99,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":61,"terms":[[1,"-1/2"],[3,"-1/2"],[5,"-1/2"],[8,"-1/2"],[10,"-1/2"],[12,"-1/2"],[13,"-1/2"],[16,"-1/2"],[18,"-1/2"],[20,"-1/2"],[21,"-1/2"],[22,"1/2"],[23,"1/2"],[24,"1/2"],[26,"1/2"],[28,"1/2"],[33,"1/2"],[38,"-1/2"],[42,"-1/2"],[44,"-1/2"],[46,"-1/2"],[49,"-1/2"],[51,"-1/2"],[53,"-1/2"],[54,"-1/2"],[55,"-1/2"],[57,"-1/2"],[58,"-1/2"],[59,"-1/2"],[60,"-1/2"],[62,"-1/2"],[63,"1/2"],[64,"1/2"],[66,"1/2"],[68,"1/2"],[72,"1/2"],[77,"-1/2"],[80,"1/2"],[84,"-1/2"],[88,"-1/2"],[91,"-1/2"],[92,"-1/2"],[97,"-1/2"],[98,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":62,"terms":[[0,"-1/2"],[2,"-1/2"],[4,"-1/2"],[6,"-1/2"],[9,"-1/2"],[11,"-1/2"],[12,"-1/2"],[13,"-1/2"],[17,"-1/2"],[19,"-1/2"],[20,"-1/2"],[21,"-1/2"],[22,"1/2"],[23,"1/2"],[24,"1/2"],[25,"1/2"],[27,"1/2"],[39,"-1/2"],[43,"-1/2"],[45,"-1/2"],[46,"-1/2"],[50,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[63,"1/2"],[64,"1/2"],[65,"1/2"],[67,"1/2"],[71,"1/2"],[78,"-1/2"],[79,"1/2"],[85,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":63,"terms":[[1,"1/2"],[2,"1/2"],[5,"1/2"],[6,"1/2"],[10,"1/2"],[11,"1/2"],[12,"1/2"],[13,"1/2"],[18,"1/2"],[19,"1/2"],[20,"1/2"],[21,"1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[33,"-1/2"],[34,"-1/2"],[36,"-1/2"],[40,"-1/2"],[47,"-1/2"],[54,"1/2"],[58,"1/2"],[60,"1/2"],[61,"1/2"],[62,"1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[75,"-1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[86,"-1/2"],[92,"1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"]]}, + {"target":64,"terms":[[0,"1/2"],[3,"1/2"],[4,"1/2"],[8,"1/2"],[9,"1/2"],[12,"1/2"],[13,"1/2"],[16,"1/2"],[17,"1/2"],[20,"1/2"],[21,"1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[27,"-1/2"],[28,"-1/2"],[33,"-1/2"],[35,"-1/2"],[37,"-1/2"],[41,"-1/2"],[46,"1/2"],[48,"-1/2"],[53,"1/2"],[57,"1/2"],[59,"1/2"],[61,"1/2"],[62,"1/2"],[63,"-1/2"],[65,"-1/2"],[66,"-1/2"],[67,"-1/2"],[68,"-1/2"],[70,"-1/2"],[71,"-1/2"],[72,"-1/2"],[74,"-1/2"],[76,"-1/2"],[79,"-1/2"],[80,"-1/2"],[83,"-1/2"],[87,"-1/2"],[91,"1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[98,"-1/2"],[99,"-1/2"]]}, + {"target":65,"terms":[[1,"-1/2"],[4,"1/2"],[6,"1/2"],[7,"1/2"],[9,"1/2"],[11,"1/2"],[13,"1/2"],[15,"1/2"],[17,"1/2"],[19,"1/2"],[21,"1/2"],[22,"-1/2"],[23,"-1/2"],[25,"-1/2"],[27,"-1/2"],[29,"-1/2"],[34,"-1/2"],[35,"-1/2"],[38,"-1/2"],[42,"-1/2"],[45,"1/2"],[49,"-1/2"],[52,"1/2"],[56,"1/2"],[59,"1/2"],[60,"1/2"],[62,"1/2"],[63,"-1/2"],[64,"-1/2"],[66,"-1/2"],[67,"-1/2"],[69,"-1/2"],[70,"-1/2"],[71,"-1/2"],[73,"-1/2"],[74,"-1/2"],[77,"-1/2"],[79,"-1/2"],[81,"-1/2"],[84,"-1/2"],[88,"-1/2"],[90,"1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[97,"-1/2"],[98,"-1/2"],[100,"-1/2"]]}, + {"target":66,"terms":[[0,"-1/2"],[2,"-1/2"],[3,"1/2"],[5,"1/2"],[7,"1/2"],[8,"1/2"],[10,"1/2"],[13,"1/2"],[15,"1/2"],[16,"1/2"],[18,"1/2"],[21,"1/2"],[22,"-1/2"],[23,"-1/2"],[26,"-1/2"],[28,"-1/2"],[29,"-1/2"],[33,"-1/2"],[34,"-1/2"],[35,"-1/2"],[39,"-1/2"],[43,"-1/2"],[44,"1/2"],[50,"-1/2"],[51,"1/2"],[55,"1/2"],[59,"1/2"],[60,"1/2"],[61,"1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[78,"-1/2"],[80,"-1/2"],[81,"-1/2"],[85,"-1/2"],[89,"-1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[99,"-1/2"],[100,"-1/2"]]}, + {"target":67,"terms":[[0,"1/2"],[2,"1/2"],[3,"-1/2"],[5,"-1/2"],[9,"1/2"],[11,"1/2"],[12,"1/2"],[14,"1/2"],[17,"1/2"],[19,"1/2"],[20,"1/2"],[22,"-1/2"],[24,"-1/2"],[25,"-1/2"],[27,"-1/2"],[30,"-1/2"],[36,"-1/2"],[37,"-1/2"],[38,"-1/2"],[43,"1/2"],[44,"-1/2"],[50,"1/2"],[51,"-1/2"],[56,"1/2"],[57,"1/2"],[58,"1/2"],[62,"1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[71,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[79,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[89,"1/2"],[93,"-1/2"],[94,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[101,"-1/2"]]}, + {"target":68,"terms":[[1,"1/2"],[4,"-1/2"],[6,"-1/2"],[8,"1/2"],[10,"1/2"],[12,"1/2"],[14,"1/2"],[16,"1/2"],[18,"1/2"],[20,"1/2"],[22,"-1/2"],[24,"-1/2"],[26,"-1/2"],[28,"-1/2"],[30,"-1/2"],[33,"-1/2"],[36,"-1/2"],[37,"-1/2"],[39,"-1/2"],[42,"1/2"],[45,"-1/2"],[49,"1/2"],[52,"-1/2"],[55,"1/2"],[57,"1/2"],[58,"1/2"],[61,"1/2"],[63,"-1/2"],[64,"-1/2"],[66,"-1/2"],[67,"-1/2"],[69,"-1/2"],[70,"-1/2"],[72,"-1/2"],[75,"-1/2"],[76,"-1/2"],[78,"-1/2"],[80,"-1/2"],[82,"-1/2"],[83,"-1/2"],[85,"-1/2"],[88,"1/2"],[90,"-1/2"],[93,"-1/2"],[94,"-1/2"],[96,"-1/2"],[99,"-1/2"],[101,"-1/2"]]}, + {"target":69,"terms":[[0,"-1/2"],[3,"-1/2"],[4,"-1/2"],[7,"1/2"],[10,"1/2"],[11,"1/2"],[14,"1/2"],[15,"1/2"],[18,"1/2"],[19,"1/2"],[22,"-1/2"],[25,"-1/2"],[26,"-1/2"],[29,"-1/2"],[30,"-1/2"],[34,"-1/2"],[36,"-1/2"],[38,"-1/2"],[39,"-1/2"],[41,"1/2"],[46,"-1/2"],[48,"1/2"],[53,"-1/2"],[55,"1/2"],[56,"1/2"],[58,"1/2"],[60,"1/2"],[63,"-1/2"],[65,"-1/2"],[66,"-1/2"],[67,"-1/2"],[68,"-1/2"],[70,"-1/2"],[73,"-1/2"],[75,"-1/2"],[77,"-1/2"],[78,"-1/2"],[81,"-1/2"],[82,"-1/2"],[84,"-1/2"],[85,"-1/2"],[87,"1/2"],[91,"-1/2"],[93,"-1/2"],[94,"-1/2"],[97,"-1/2"],[100,"-1/2"],[101,"-1/2"]]}, + {"target":70,"terms":[[1,"-1/2"],[2,"-1/2"],[5,"-1/2"],[6,"-1/2"],[7,"1/2"],[8,"1/2"],[9,"1/2"],[14,"1/2"],[15,"1/2"],[16,"1/2"],[17,"1/2"],[22,"-1/2"],[27,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[35,"-1/2"],[37,"-1/2"],[38,"-1/2"],[39,"-1/2"],[40,"1/2"],[47,"1/2"],[54,"-1/2"],[55,"1/2"],[56,"1/2"],[57,"1/2"],[59,"1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[74,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[86,"1/2"],[92,"-1/2"],[93,"-1/2"],[94,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"]]}, + {"target":71,"terms":[[0,"1/2"],[2,"1/2"],[4,"1/2"],[6,"1/2"],[7,"-1/2"],[8,"-1/2"],[10,"-1/2"],[17,"1/2"],[19,"1/2"],[20,"1/2"],[21,"1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[27,"-1/2"],[31,"-1/2"],[39,"1/2"],[40,"-1/2"],[41,"-1/2"],[42,"-1/2"],[44,"-1/2"],[50,"1/2"],[52,"1/2"],[53,"1/2"],[54,"1/2"],[55,"-1/2"],[62,"1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[67,"-1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[79,"-1/2"],[85,"1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[93,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[102,"-1/2"]]}, + {"target":72,"terms":[[1,"1/2"],[3,"1/2"],[5,"1/2"],[7,"-1/2"],[9,"-1/2"],[11,"-1/2"],[16,"1/2"],[18,"1/2"],[20,"1/2"],[21,"1/2"],[23,"-1/2"],[24,"-1/2"],[26,"-1/2"],[28,"-1/2"],[31,"-1/2"],[33,"-1/2"],[38,"1/2"],[40,"-1/2"],[41,"-1/2"],[43,"-1/2"],[45,"-1/2"],[49,"1/2"],[51,"1/2"],[53,"1/2"],[54,"1/2"],[56,"-1/2"],[61,"1/2"],[63,"-1/2"],[64,"-1/2"],[66,"-1/2"],[68,"-1/2"],[71,"-1/2"],[73,"-1/2"],[74,"-1/2"],[75,"-1/2"],[76,"-1/2"],[78,"-1/2"],[80,"-1/2"],[84,"1/2"],[86,"-1/2"],[87,"-1/2"],[89,"-1/2"],[90,"-1/2"],[93,"-1/2"],[95,"-1/2"],[96,"-1/2"],[99,"-1/2"],[102,"-1/2"]]}, + {"target":73,"terms":[[0,"-1/2"],[5,"1/2"],[6,"1/2"],[8,"-1/2"],[9,"-1/2"],[12,"-1/2"],[15,"1/2"],[18,"1/2"],[19,"1/2"],[21,"1/2"],[23,"-1/2"],[25,"-1/2"],[26,"-1/2"],[29,"-1/2"],[31,"-1/2"],[34,"-1/2"],[37,"1/2"],[40,"-1/2"],[42,"-1/2"],[43,"-1/2"],[46,"-1/2"],[48,"1/2"],[51,"1/2"],[52,"1/2"],[54,"1/2"],[57,"-1/2"],[60,"1/2"],[63,"-1/2"],[65,"-1/2"],[66,"-1/2"],[69,"-1/2"],[71,"-1/2"],[72,"-1/2"],[74,"-1/2"],[75,"-1/2"],[77,"-1/2"],[78,"-1/2"],[81,"-1/2"],[83,"1/2"],[86,"-1/2"],[88,"-1/2"],[89,"-1/2"],[91,"-1/2"],[93,"-1/2"],[95,"-1/2"],[97,"-1/2"],[100,"-1/2"],[102,"-1/2"]]}, + {"target":74,"terms":[[1,"-1/2"],[2,"-1/2"],[3,"1/2"],[4,"1/2"],[10,"-1/2"],[11,"-1/2"],[12,"-1/2"],[15,"1/2"],[16,"1/2"],[17,"1/2"],[21,"1/2"],[23,"-1/2"],[27,"-1/2"],[28,"-1/2"],[29,"-1/2"],[31,"-1/2"],[35,"-1/2"],[36,"1/2"],[41,"-1/2"],[42,"-1/2"],[43,"-1/2"],[47,"1/2"],[51,"1/2"],[52,"1/2"],[53,"1/2"],[58,"-1/2"],[59,"1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[70,"-1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[82,"1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[92,"-1/2"],[93,"-1/2"],[95,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[102,"-1/2"]]}, + {"target":75,"terms":[[1,"1/2"],[2,"1/2"],[3,"-1/2"],[4,"-1/2"],[7,"-1/2"],[8,"-1/2"],[9,"-1/2"],[13,"-1/2"],[14,"1/2"],[18,"1/2"],[19,"1/2"],[20,"1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[30,"-1/2"],[31,"-1/2"],[35,"1/2"],[36,"-1/2"],[40,"-1/2"],[44,"-1/2"],[45,"-1/2"],[46,"-1/2"],[48,"1/2"],[49,"1/2"],[50,"1/2"],[54,"1/2"],[58,"1/2"],[59,"-1/2"],[63,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[82,"-1/2"],[86,"-1/2"],[90,"-1/2"],[91,"-1/2"],[93,"-1/2"],[96,"-1/2"],[97,"-1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":76,"terms":[[0,"1/2"],[5,"-1/2"],[6,"-1/2"],[7,"-1/2"],[10,"-1/2"],[11,"-1/2"],[13,"-1/2"],[14,"1/2"],[16,"1/2"],[17,"1/2"],[20,"1/2"],[24,"-1/2"],[27,"-1/2"],[28,"-1/2"],[30,"-1/2"],[31,"-1/2"],[34,"1/2"],[37,"-1/2"],[41,"-1/2"],[44,"-1/2"],[45,"-1/2"],[47,"1/2"],[49,"1/2"],[50,"1/2"],[53,"1/2"],[57,"1/2"],[60,"-1/2"],[64,"-1/2"],[67,"-1/2"],[68,"-1/2"],[70,"-1/2"],[71,"-1/2"],[72,"-1/2"],[74,"-1/2"],[75,"-1/2"],[77,"-1/2"],[78,"-1/2"],[81,"1/2"],[83,"-1/2"],[87,"-1/2"],[90,"-1/2"],[92,"-1/2"],[93,"-1/2"],[96,"-1/2"],[98,"-1/2"],[99,"-1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":77,"terms":[[1,"-1/2"],[3,"-1/2"],[5,"-1/2"],[8,"-1/2"],[10,"-1/2"],[12,"-1/2"],[13,"-1/2"],[14,"1/2"],[15,"1/2"],[17,"1/2"],[19,"1/2"],[25,"-1/2"],[27,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[33,"1/2"],[38,"-1/2"],[42,"-1/2"],[44,"-1/2"],[46,"-1/2"],[47,"1/2"],[48,"1/2"],[50,"1/2"],[52,"1/2"],[56,"1/2"],[61,"-1/2"],[65,"-1/2"],[67,"-1/2"],[69,"-1/2"],[70,"-1/2"],[71,"-1/2"],[73,"-1/2"],[74,"-1/2"],[75,"-1/2"],[76,"-1/2"],[78,"-1/2"],[80,"1/2"],[84,"-1/2"],[88,"-1/2"],[91,"-1/2"],[92,"-1/2"],[93,"-1/2"],[97,"-1/2"],[98,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":78,"terms":[[0,"-1/2"],[2,"-1/2"],[4,"-1/2"],[6,"-1/2"],[9,"-1/2"],[11,"-1/2"],[12,"-1/2"],[13,"-1/2"],[14,"1/2"],[15,"1/2"],[16,"1/2"],[18,"1/2"],[26,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[39,"-1/2"],[43,"-1/2"],[45,"-1/2"],[46,"-1/2"],[47,"1/2"],[48,"1/2"],[49,"1/2"],[51,"1/2"],[55,"1/2"],[62,"-1/2"],[66,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[79,"1/2"],[85,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[93,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":79,"terms":[[0,"1/2"],[2,"1/2"],[4,"1/2"],[6,"1/2"],[9,"1/2"],[11,"1/2"],[12,"1/2"],[13,"1/2"],[14,"-1/2"],[15,"-1/2"],[16,"-1/2"],[18,"-1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[27,"-1/2"],[32,"-1/2"],[39,"1/2"],[43,"1/2"],[45,"1/2"],[46,"1/2"],[47,"-1/2"],[48,"-1/2"],[49,"-1/2"],[51,"-1/2"],[55,"-1/2"],[62,"1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[67,"-1/2"],[71,"-1/2"],[78,"1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[103,"-1/2"]]}, + {"target":80,"terms":[[1,"1/2"],[3,"1/2"],[5,"1/2"],[8,"1/2"],[10,"1/2"],[12,"1/2"],[13,"1/2"],[14,"-1/2"],[15,"-1/2"],[17,"-1/2"],[19,"-1/2"],[22,"-1/2"],[23,"-1/2"],[24,"-1/2"],[26,"-1/2"],[28,"-1/2"],[32,"-1/2"],[33,"-1/2"],[38,"1/2"],[42,"1/2"],[44,"1/2"],[46,"1/2"],[47,"-1/2"],[48,"-1/2"],[50,"-1/2"],[52,"-1/2"],[56,"-1/2"],[61,"1/2"],[63,"-1/2"],[64,"-1/2"],[66,"-1/2"],[68,"-1/2"],[72,"-1/2"],[77,"1/2"],[79,"-1/2"],[81,"-1/2"],[82,"-1/2"],[83,"-1/2"],[85,"-1/2"],[86,"-1/2"],[87,"-1/2"],[89,"-1/2"],[90,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[99,"-1/2"],[103,"-1/2"]]}, + {"target":81,"terms":[[0,"-1/2"],[5,"1/2"],[6,"1/2"],[7,"1/2"],[10,"1/2"],[11,"1/2"],[13,"1/2"],[14,"-1/2"],[16,"-1/2"],[17,"-1/2"],[20,"-1/2"],[22,"-1/2"],[23,"-1/2"],[25,"-1/2"],[26,"-1/2"],[29,"-1/2"],[32,"-1/2"],[34,"-1/2"],[37,"1/2"],[41,"1/2"],[44,"1/2"],[45,"1/2"],[47,"-1/2"],[49,"-1/2"],[50,"-1/2"],[53,"-1/2"],[57,"-1/2"],[60,"1/2"],[63,"-1/2"],[65,"-1/2"],[66,"-1/2"],[69,"-1/2"],[73,"-1/2"],[76,"1/2"],[79,"-1/2"],[80,"-1/2"],[82,"-1/2"],[84,"-1/2"],[85,"-1/2"],[86,"-1/2"],[88,"-1/2"],[89,"-1/2"],[91,"-1/2"],[94,"-1/2"],[95,"-1/2"],[97,"-1/2"],[100,"-1/2"],[103,"-1/2"]]}, + {"target":82,"terms":[[1,"1/2"],[2,"1/2"],[3,"-1/2"],[4,"-1/2"],[10,"1/2"],[11,"1/2"],[12,"1/2"],[15,"-1/2"],[16,"-1/2"],[17,"-1/2"],[21,"-1/2"],[22,"-1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[30,"-1/2"],[32,"-1/2"],[35,"1/2"],[36,"-1/2"],[41,"1/2"],[42,"1/2"],[43,"1/2"],[47,"-1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[58,"1/2"],[59,"-1/2"],[63,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[74,"1/2"],[75,"-1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[86,"-1/2"],[90,"-1/2"],[91,"-1/2"],[94,"-1/2"],[96,"-1/2"],[97,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":83,"terms":[[0,"1/2"],[5,"-1/2"],[6,"-1/2"],[8,"1/2"],[9,"1/2"],[12,"1/2"],[15,"-1/2"],[18,"-1/2"],[19,"-1/2"],[21,"-1/2"],[22,"-1/2"],[24,"-1/2"],[27,"-1/2"],[28,"-1/2"],[30,"-1/2"],[32,"-1/2"],[34,"1/2"],[37,"-1/2"],[40,"1/2"],[42,"1/2"],[43,"1/2"],[46,"1/2"],[48,"-1/2"],[51,"-1/2"],[52,"-1/2"],[54,"-1/2"],[57,"1/2"],[60,"-1/2"],[64,"-1/2"],[67,"-1/2"],[68,"-1/2"],[70,"-1/2"],[73,"1/2"],[76,"-1/2"],[79,"-1/2"],[80,"-1/2"],[82,"-1/2"],[84,"-1/2"],[85,"-1/2"],[87,"-1/2"],[90,"-1/2"],[92,"-1/2"],[94,"-1/2"],[96,"-1/2"],[98,"-1/2"],[99,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":84,"terms":[[1,"-1/2"],[3,"-1/2"],[5,"-1/2"],[7,"1/2"],[9,"1/2"],[11,"1/2"],[16,"-1/2"],[18,"-1/2"],[20,"-1/2"],[21,"-1/2"],[22,"-1/2"],[25,"-1/2"],[27,"-1/2"],[29,"-1/2"],[30,"-1/2"],[32,"-1/2"],[33,"1/2"],[38,"-1/2"],[40,"1/2"],[41,"1/2"],[43,"1/2"],[45,"1/2"],[49,"-1/2"],[51,"-1/2"],[53,"-1/2"],[54,"-1/2"],[56,"1/2"],[61,"-1/2"],[65,"-1/2"],[67,"-1/2"],[69,"-1/2"],[70,"-1/2"],[72,"1/2"],[77,"-1/2"],[79,"-1/2"],[81,"-1/2"],[82,"-1/2"],[83,"-1/2"],[85,"-1/2"],[88,"-1/2"],[91,"-1/2"],[92,"-1/2"],[94,"-1/2"],[97,"-1/2"],[98,"-1/2"],[100,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":85,"terms":[[0,"-1/2"],[2,"-1/2"],[4,"-1/2"],[6,"-1/2"],[7,"1/2"],[8,"1/2"],[10,"1/2"],[17,"-1/2"],[19,"-1/2"],[20,"-1/2"],[21,"-1/2"],[22,"-1/2"],[26,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[32,"-1/2"],[39,"-1/2"],[40,"1/2"],[41,"1/2"],[42,"1/2"],[44,"1/2"],[50,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[55,"1/2"],[62,"-1/2"],[66,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[71,"1/2"],[78,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[94,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":86,"terms":[[1,"1/2"],[2,"1/2"],[5,"1/2"],[6,"1/2"],[7,"-1/2"],[8,"-1/2"],[9,"-1/2"],[14,"-1/2"],[15,"-1/2"],[16,"-1/2"],[17,"-1/2"],[23,"-1/2"],[24,"-1/2"],[25,"-1/2"],[26,"-1/2"],[31,"-1/2"],[32,"-1/2"],[35,"1/2"],[37,"1/2"],[38,"1/2"],[39,"1/2"],[40,"-1/2"],[47,"-1/2"],[54,"1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[59,"-1/2"],[63,"-1/2"],[70,"1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[75,"-1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":87,"terms":[[0,"1/2"],[3,"1/2"],[4,"1/2"],[7,"-1/2"],[10,"-1/2"],[11,"-1/2"],[14,"-1/2"],[15,"-1/2"],[18,"-1/2"],[19,"-1/2"],[23,"-1/2"],[24,"-1/2"],[27,"-1/2"],[28,"-1/2"],[31,"-1/2"],[32,"-1/2"],[34,"1/2"],[36,"1/2"],[38,"1/2"],[39,"1/2"],[41,"-1/2"],[46,"1/2"],[48,"-1/2"],[53,"1/2"],[55,"-1/2"],[56,"-1/2"],[58,"-1/2"],[60,"-1/2"],[64,"-1/2"],[69,"1/2"],[71,"-1/2"],[72,"-1/2"],[74,"-1/2"],[76,"-1/2"],[79,"-1/2"],[80,"-1/2"],[83,"-1/2"],[86,"-1/2"],[88,"-1/2"],[89,"-1/2"],[90,"-1/2"],[92,"-1/2"],[95,"-1/2"],[96,"-1/2"],[98,"-1/2"],[99,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":88,"terms":[[1,"-1/2"],[4,"1/2"],[6,"1/2"],[8,"-1/2"],[10,"-1/2"],[12,"-1/2"],[14,"-1/2"],[16,"-1/2"],[18,"-1/2"],[20,"-1/2"],[23,"-1/2"],[25,"-1/2"],[27,"-1/2"],[29,"-1/2"],[31,"-1/2"],[32,"-1/2"],[33,"1/2"],[36,"1/2"],[37,"1/2"],[39,"1/2"],[42,"-1/2"],[45,"1/2"],[49,"-1/2"],[52,"1/2"],[55,"-1/2"],[57,"-1/2"],[58,"-1/2"],[61,"-1/2"],[65,"-1/2"],[68,"1/2"],[71,"-1/2"],[73,"-1/2"],[74,"-1/2"],[77,"-1/2"],[79,"-1/2"],[81,"-1/2"],[84,"-1/2"],[86,"-1/2"],[87,"-1/2"],[89,"-1/2"],[91,"-1/2"],[92,"-1/2"],[95,"-1/2"],[97,"-1/2"],[98,"-1/2"],[100,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":89,"terms":[[0,"-1/2"],[2,"-1/2"],[3,"1/2"],[5,"1/2"],[9,"-1/2"],[11,"-1/2"],[12,"-1/2"],[14,"-1/2"],[17,"-1/2"],[19,"-1/2"],[20,"-1/2"],[23,"-1/2"],[26,"-1/2"],[28,"-1/2"],[29,"-1/2"],[31,"-1/2"],[32,"-1/2"],[36,"1/2"],[37,"1/2"],[38,"1/2"],[43,"-1/2"],[44,"1/2"],[50,"-1/2"],[51,"1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[62,"-1/2"],[66,"-1/2"],[67,"1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[78,"-1/2"],[80,"-1/2"],[81,"-1/2"],[85,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[95,"-1/2"],[99,"-1/2"],[100,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":90,"terms":[[1,"1/2"],[4,"-1/2"],[6,"-1/2"],[7,"-1/2"],[9,"-1/2"],[11,"-1/2"],[13,"-1/2"],[15,"-1/2"],[17,"-1/2"],[19,"-1/2"],[21,"-1/2"],[24,"-1/2"],[26,"-1/2"],[28,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[34,"1/2"],[35,"1/2"],[38,"1/2"],[42,"1/2"],[45,"-1/2"],[49,"1/2"],[52,"-1/2"],[56,"-1/2"],[59,"-1/2"],[60,"-1/2"],[62,"-1/2"],[65,"1/2"],[68,"-1/2"],[72,"-1/2"],[75,"-1/2"],[76,"-1/2"],[78,"-1/2"],[80,"-1/2"],[82,"-1/2"],[83,"-1/2"],[85,"-1/2"],[86,"-1/2"],[87,"-1/2"],[89,"-1/2"],[91,"-1/2"],[92,"-1/2"],[96,"-1/2"],[99,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":91,"terms":[[0,"-1/2"],[3,"-1/2"],[4,"-1/2"],[8,"-1/2"],[9,"-1/2"],[12,"-1/2"],[13,"-1/2"],[16,"-1/2"],[17,"-1/2"],[20,"-1/2"],[21,"-1/2"],[25,"-1/2"],[26,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[33,"1/2"],[35,"1/2"],[37,"1/2"],[41,"1/2"],[46,"-1/2"],[48,"1/2"],[53,"-1/2"],[57,"-1/2"],[59,"-1/2"],[61,"-1/2"],[62,"-1/2"],[64,"1/2"],[69,"-1/2"],[73,"-1/2"],[75,"-1/2"],[77,"-1/2"],[78,"-1/2"],[81,"-1/2"],[82,"-1/2"],[84,"-1/2"],[85,"-1/2"],[86,"-1/2"],[88,"-1/2"],[89,"-1/2"],[90,"-1/2"],[92,"-1/2"],[97,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":92,"terms":[[1,"-1/2"],[2,"-1/2"],[5,"-1/2"],[6,"-1/2"],[10,"-1/2"],[11,"-1/2"],[12,"-1/2"],[13,"-1/2"],[18,"-1/2"],[19,"-1/2"],[20,"-1/2"],[21,"-1/2"],[27,"-1/2"],[28,"-1/2"],[29,"-1/2"],[30,"-1/2"],[31,"-1/2"],[32,"-1/2"],[33,"1/2"],[34,"1/2"],[36,"1/2"],[40,"1/2"],[47,"1/2"],[54,"-1/2"],[58,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[63,"1/2"],[70,"-1/2"],[74,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":93,"terms":[[14,"1/2"],[15,"1/2"],[16,"1/2"],[17,"1/2"],[18,"1/2"],[19,"1/2"],[20,"1/2"],[21,"1/2"],[32,"1/2"],[33,"-1/2"],[34,"-1/2"],[35,"-1/2"],[36,"-1/2"],[37,"-1/2"],[38,"-1/2"],[39,"-1/2"],[40,"-1/2"],[41,"-1/2"],[42,"-1/2"],[43,"-1/2"],[44,"-1/2"],[45,"-1/2"],[46,"-1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"]]}, + {"target":94,"terms":[[7,"1/2"],[8,"1/2"],[9,"1/2"],[10,"1/2"],[11,"1/2"],[12,"1/2"],[13,"1/2"],[22,"-1/2"],[31,"1/2"],[33,"-1/2"],[34,"-1/2"],[35,"-1/2"],[36,"-1/2"],[37,"-1/2"],[38,"-1/2"],[39,"-1/2"],[47,"-1/2"],[48,"-1/2"],[49,"-1/2"],[50,"-1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[93,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":95,"terms":[[3,"1/2"],[4,"1/2"],[5,"1/2"],[6,"1/2"],[13,"1/2"],[14,"-1/2"],[21,"1/2"],[23,"-1/2"],[30,"1/2"],[33,"-1/2"],[34,"-1/2"],[35,"-1/2"],[40,"-1/2"],[41,"-1/2"],[42,"-1/2"],[43,"-1/2"],[47,"-1/2"],[48,"-1/2"],[49,"-1/2"],[50,"-1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[63,"-1/2"],[64,"-1/2"],[65,"-1/2"],[66,"-1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[93,"-1/2"],[94,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":96,"terms":[[0,"1/2"],[1,"1/2"],[2,"1/2"],[7,"-1/2"],[12,"1/2"],[15,"-1/2"],[20,"1/2"],[24,"-1/2"],[29,"1/2"],[33,"-1/2"],[36,"-1/2"],[37,"-1/2"],[40,"-1/2"],[41,"-1/2"],[44,"-1/2"],[45,"-1/2"],[47,"-1/2"],[48,"-1/2"],[51,"-1/2"],[52,"-1/2"],[55,"-1/2"],[56,"-1/2"],[59,"-1/2"],[60,"-1/2"],[63,"-1/2"],[64,"-1/2"],[67,"-1/2"],[68,"-1/2"],[71,"-1/2"],[72,"-1/2"],[75,"-1/2"],[76,"-1/2"],[79,"-1/2"],[80,"-1/2"],[82,"-1/2"],[83,"-1/2"],[86,"-1/2"],[87,"-1/2"],[90,"-1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[97,"-1/2"],[98,"-1/2"],[99,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":97,"terms":[[2,"1/2"],[3,"-1/2"],[6,"1/2"],[8,"-1/2"],[11,"1/2"],[16,"-1/2"],[19,"1/2"],[25,"-1/2"],[28,"1/2"],[34,"-1/2"],[36,"-1/2"],[38,"-1/2"],[40,"-1/2"],[42,"-1/2"],[44,"-1/2"],[46,"-1/2"],[47,"-1/2"],[49,"-1/2"],[51,"-1/2"],[53,"-1/2"],[55,"-1/2"],[57,"-1/2"],[59,"-1/2"],[61,"-1/2"],[63,"-1/2"],[65,"-1/2"],[67,"-1/2"],[69,"-1/2"],[71,"-1/2"],[73,"-1/2"],[75,"-1/2"],[77,"-1/2"],[79,"-1/2"],[81,"-1/2"],[82,"-1/2"],[84,"-1/2"],[86,"-1/2"],[88,"-1/2"],[91,"-1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[98,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":98,"terms":[[0,"1/2"],[1,"-1/2"],[4,"1/2"],[5,"-1/2"],[9,"1/2"],[10,"-1/2"],[17,"1/2"],[18,"-1/2"],[26,"1/2"],[27,"-1/2"],[35,"-1/2"],[37,"-1/2"],[38,"-1/2"],[41,"-1/2"],[42,"-1/2"],[44,"-1/2"],[48,"-1/2"],[49,"-1/2"],[51,"-1/2"],[54,"-1/2"],[55,"-1/2"],[58,"-1/2"],[60,"-1/2"],[61,"-1/2"],[64,"-1/2"],[65,"-1/2"],[67,"-1/2"],[70,"-1/2"],[71,"-1/2"],[74,"-1/2"],[76,"-1/2"],[77,"-1/2"],[79,"-1/2"],[83,"-1/2"],[84,"-1/2"],[87,"-1/2"],[88,"-1/2"],[92,"-1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":99,"terms":[[2,"-1/2"],[3,"1/2"],[6,"-1/2"],[8,"1/2"],[11,"-1/2"],[16,"1/2"],[19,"-1/2"],[25,"1/2"],[28,"-1/2"],[33,"-1/2"],[35,"-1/2"],[37,"-1/2"],[39,"-1/2"],[41,"-1/2"],[43,"-1/2"],[45,"-1/2"],[48,"-1/2"],[50,"-1/2"],[52,"-1/2"],[54,"-1/2"],[56,"-1/2"],[58,"-1/2"],[60,"-1/2"],[62,"-1/2"],[64,"-1/2"],[66,"-1/2"],[68,"-1/2"],[70,"-1/2"],[72,"-1/2"],[74,"-1/2"],[76,"-1/2"],[78,"-1/2"],[80,"-1/2"],[83,"-1/2"],[85,"-1/2"],[87,"-1/2"],[89,"-1/2"],[90,"-1/2"],[92,"-1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[98,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":100,"terms":[[0,"-1/2"],[1,"-1/2"],[2,"-1/2"],[7,"1/2"],[12,"-1/2"],[15,"1/2"],[20,"-1/2"],[24,"1/2"],[29,"-1/2"],[34,"-1/2"],[35,"-1/2"],[38,"-1/2"],[39,"-1/2"],[42,"-1/2"],[43,"-1/2"],[46,"-1/2"],[49,"-1/2"],[50,"-1/2"],[53,"-1/2"],[54,"-1/2"],[57,"-1/2"],[58,"-1/2"],[61,"-1/2"],[62,"-1/2"],[65,"-1/2"],[66,"-1/2"],[69,"-1/2"],[70,"-1/2"],[73,"-1/2"],[74,"-1/2"],[77,"-1/2"],[78,"-1/2"],[81,"-1/2"],[84,"-1/2"],[85,"-1/2"],[88,"-1/2"],[89,"-1/2"],[91,"-1/2"],[92,"-1/2"],[93,"-1/2"],[94,"-1/2"],[95,"-1/2"],[97,"-1/2"],[98,"-1/2"],[99,"-1/2"],[101,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":101,"terms":[[3,"-1/2"],[4,"-1/2"],[5,"-1/2"],[6,"-1/2"],[13,"-1/2"],[14,"1/2"],[21,"-1/2"],[23,"1/2"],[30,"-1/2"],[36,"-1/2"],[37,"-1/2"],[38,"-1/2"],[39,"-1/2"],[44,"-1/2"],[45,"-1/2"],[46,"-1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[67,"-1/2"],[68,"-1/2"],[69,"-1/2"],[70,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[93,"-1/2"],[94,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[102,"-1/2"],[103,"-1/2"]]}, + {"target":102,"terms":[[7,"-1/2"],[8,"-1/2"],[9,"-1/2"],[10,"-1/2"],[11,"-1/2"],[12,"-1/2"],[13,"-1/2"],[22,"1/2"],[31,"-1/2"],[40,"-1/2"],[41,"-1/2"],[42,"-1/2"],[43,"-1/2"],[44,"-1/2"],[45,"-1/2"],[46,"-1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[71,"-1/2"],[72,"-1/2"],[73,"-1/2"],[74,"-1/2"],[75,"-1/2"],[76,"-1/2"],[77,"-1/2"],[78,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[93,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[103,"-1/2"]]}, + {"target":103,"terms":[[14,"-1/2"],[15,"-1/2"],[16,"-1/2"],[17,"-1/2"],[18,"-1/2"],[19,"-1/2"],[20,"-1/2"],[21,"-1/2"],[32,"-1/2"],[47,"-1/2"],[48,"-1/2"],[49,"-1/2"],[50,"-1/2"],[51,"-1/2"],[52,"-1/2"],[53,"-1/2"],[54,"-1/2"],[55,"-1/2"],[56,"-1/2"],[57,"-1/2"],[58,"-1/2"],[59,"-1/2"],[60,"-1/2"],[61,"-1/2"],[62,"-1/2"],[79,"-1/2"],[80,"-1/2"],[81,"-1/2"],[82,"-1/2"],[83,"-1/2"],[84,"-1/2"],[85,"-1/2"],[86,"-1/2"],[87,"-1/2"],[88,"-1/2"],[89,"-1/2"],[90,"-1/2"],[91,"-1/2"],[92,"-1/2"],[94,"-1/2"],[95,"-1/2"],[96,"-1/2"],[97,"-1/2"],[98,"-1/2"],[99,"-1/2"],[100,"-1/2"],[101,"-1/2"],[102,"-1/2"]]} + ], + "schedule": "target-major; raise Y_t to F9; apply each listed addition; lower Y_t", + "target_output_frames": {"0":[243,499,23,32,112,3,4,1],"1":[243,499,23,32,112,3,4,9],"10":[243,499,27,55,92,3,4,9],"100":[484,232,12,55,103,24,4,1],"101":[467,27,196,12,124,3,36,5],"102":[431,44,27,148,12,100,4,1],"103":[351,80,44,27,3,12,224,6],"11":[243,499,23,59,92,3,8,5],"12":[484,232,12,55,75,24,7,1],"13":[467,27,196,12,80,3,4,37],"14":[467,27,196,12,124,52,7,2],"15":[484,232,12,55,103,3,7,1],"16":[243,499,23,59,107,15,4,2],"17":[243,499,27,55,103,15,7,2],"18":[243,499,27,55,103,15,7,1],"19":[243,499,23,59,107,15,4,1],"2":[243,499,27,32,112,3,8,5],"20":[484,232,12,55,103,3,7,18],"21":[467,27,196,12,124,52,7,1],"22":[431,44,27,148,12,100,7,2],"23":[467,27,196,12,124,3,7,1],"24":[484,232,12,55,103,24,7,2],"25":[243,499,23,59,107,3,11,1],"26":[243,499,27,55,103,3,7,1],"27":[243,499,27,55,103,3,7,9],"28":[243,499,23,59,107,3,11,5],"29":[484,232,12,55,103,24,7,1],"3":[243,499,23,32,92,15,4,2],"30":[467,27,196,12,124,3,7,37],"31":[431,44,27,148,12,100,7,1],"32":[351,80,44,27,3,12,7,169],"33":[243,484,12,44,124,3,19,1],"34":[499,23,232,32,112,15,7,2],"35":[499,27,228,32,112,15,4,1],"36":[499,27,228,32,92,3,4,1],"37":[499,23,232,32,92,3,8,5],"38":[243,484,12,44,75,24,7,1],"39":[243,27,12,55,431,83,4,1],"4":[243,499,27,32,92,15,7,2],"40":[499,27,228,55,92,15,7,2],"41":[499,23,232,59,92,15,4,1],"42":[243,484,12,55,75,3,4,18],"43":[243,27,12,467,124,3,63,5],"44":[243,27,12,467,80,47,7,1],"45":[243,484,12,55,103,24,4,1],"46":[499,23,232,59,107,3,4,9],"47":[499,27,228,55,103,3,7,1],"48":[499,23,232,59,107,3,11,5],"49":[243,484,12,55,103,24,7,1],"5":[243,499,27,32,92,15,7,1],"50":[243,27,12,467,80,47,4,1],"51":[243,27,12,467,124,3,7,37],"52":[243,484,12,55,75,3,16,5],"53":[499,23,232,59,92,15,7,1],"54":[499,27,228,55,92,15,4,2],"55":[243,27,12,55,431,83,7,1],"56":[243,484,12,44,75,24,4,1],"57":[499,23,232,32,92,3,7,9],"58":[499,27,228,32,92,3,11,1],"59":[499,27,228,32,112,15,7,1],"6":[243,499,23,32,92,15,4,1],"60":[499,23,232,32,112,15,4,2],"61":[243,484,12,44,124,3,7,1],"62":[243,27,12,55,103,3,447,1],"63":[499,27,228,55,103,15,7,2],"64":[499,23,232,59,107,15,4,1],"65":[243,484,12,55,103,3,7,18],"66":[243,27,12,467,80,3,60,5],"67":[243,27,12,467,124,47,7,1],"68":[243,484,12,55,75,24,4,1],"69":[499,23,232,59,92,3,7,9],"7":[484,232,12,55,75,24,7,2],"70":[499,27,228,55,92,3,11,1],"71":[243,27,12,55,431,3,7,89],"72":[243,484,12,44,75,3,16,5],"73":[499,23,232,32,92,15,7,1],"74":[499,27,228,32,92,15,4,2],"75":[499,27,228,32,112,3,7,9],"76":[499,23,232,32,112,3,11,1],"77":[243,484,12,44,124,24,7,2],"78":[243,27,12,55,103,351,4,2],"79":[243,27,12,55,103,351,7,1],"8":[243,499,23,59,92,3,8,1],"80":[243,484,12,44,124,24,4,1],"81":[499,23,232,32,112,3,4,9],"82":[499,27,228,32,92,15,7,1],"83":[499,23,232,32,92,15,4,2],"84":[243,484,12,44,75,3,4,1],"85":[243,27,12,55,431,3,67,1],"86":[499,27,228,55,92,3,4,9],"87":[499,23,232,59,92,3,8,1],"88":[243,484,12,55,75,24,7,2],"89":[243,27,12,467,124,47,4,2],"9":[243,499,27,55,92,3,4,1],"90":[243,484,12,55,103,3,19,1],"91":[499,23,232,59,107,15,7,2],"92":[499,27,228,55,103,15,4,1],"93":[351,80,44,27,3,12,224,1],"94":[431,44,27,148,12,100,4,2],"95":[467,27,196,12,124,3,36,1],"96":[484,232,12,55,103,24,4,2],"97":[243,499,23,59,107,3,4,1],"98":[243,499,27,55,103,3,8,5],"99":[243,499,23,59,107,3,4,9]}, + "transport_rank_per_target": 1 +} diff --git a/research/p104-role-exchange-caller-audit/inputs/3894-readme.md b/research/p104-role-exchange-caller-audit/inputs/3894-readme.md new file mode 100644 index 000000000..890f0a22e --- /dev/null +++ b/research/p104-role-exchange-caller-audit/inputs/3894-readme.md @@ -0,0 +1,108 @@ +# P104 full-frame end-cut correction + +This package gives one exact finite `I-G/2` correction word for the 104 source +and 104 target endpoints in PR #2981's 208-flag collection. It uses the +source-bound PR #1972 channel already retained by `p104-native-channel`. + +The cut is immediately after that 4,058-event channel. Every source `X_s` is +then in the common full frame `F9`; every target `Y_t` is in its prescribed +eight-dimensional output frame; and the 72 arbitrary dirty helpers have been +restored. For each target, the word is: + +1. transport `Y_t` from its output hyperplane frame to `F9` (one `H1`); +2. for every nonzero entry of `I-G/2`, apply `Y_t += (I-G/2)[t,s] X_s` in + `F9`; +3. transport `Y_t` back to its exact original output frame (one `H1`). + +The coefficient matrix is reconstructed from the exact channel event list. +Each of its 104 rows and columns has 48 nonzero entries. The exact coefficient +histogram is 3,376 copies of `-1/2` and 1,616 copies of `+1/2`, for 4,992 +scalar additions. The checker composes the full rational register map and +verifies `Y_t = y_t + x_t`, with every `X`, `G`, `D`, and `Q` input restored. +It also verifies that each target returns to its original frame. + +## Finite invoice + +The inherited channel has 4,058 events, 2,624 scalar additions, 1,410 frame +transports, and rank mass 2,368. This end-cut suffix adds 4,992 scalar +additions and 208 rank-one transports. The combined finite word therefore has +9,258 events, 7,616 scalar additions, 1,618 transports, and rank mass 2,576. +The paid transport profile changes only by `+208 H1`; no new dirty or private +register is introduced. + +Under the explicit frame-coordinate occupancy convention used by the checker, +the correction has peak endpoint width `104*9 + 104*8 + 1 = 1,769`: all source +frames, all target output frames, and one currently promoted target dimension. +The suffix has 5,200 scalar/transport events, for 9,198,800 endpoint +frame-coordinate event-holds. This is a finite scheduling count, not a claim +that the repository's recursive owner/idle tariff charges this quantity in +that way. The sources remain live through the suffix, so their global owner +and idle charge is still an admission obligation. + +## Scope and limits + +This is a finite chronological identity at the pinned endpoint cut. It changes +the target-frame contract used by the fixed-cover support cut: targets are +raised to `F9`, corrected there, and lowered back. Thus it does not contradict +or re-run the fixed-cover, monotone equal-frame obstruction in PR #3259. It +also does not use the 208 internal flag bases or establish their 1,872-step +screen as an executable word; it uses their shared 104-source/104-target +endpoint set. + +PR #3618 already gives a flag-9 row-23 end-cut correction (`T48`) with 48 ADDs +and a `+2` rank-mass change at event 3489. This result does not claim that row +or cut as new. It extends the entrywise end-cut word to all 104 target rows at +the later post-channel cut, where each target starts in its actual output +hyperplane frame. The full word has 4,992 ADDs and `+208 H1` transports. The +fresh #3810 review separately closes the fixed-cover support contract; this +word changes that contract by paying target-frame lifts and descents. + +The word is exact for the retained finite P104 channel. It does not supply a +global recursive owner schedule, a selected-supplier idle tariff, precision +or all-size lifting, the complete consumer composition, or a new kappa. No +claim of supplier admission follows from the finite invoice. + +## Reproduce + +From the repository root: + +```sh +python3 -B research/p104-fullframe-endcut-correction/audit.py +python3 -B research/p104-fullframe-endcut-correction/audit.py --emit-word > research/p104-fullframe-endcut-correction/CORRECTION.json +python3 -B research/p104-fullframe-endcut-correction/audit.py +flock /home/cinna/int-bounds-pass/20261018-luna-xhigh/compute.lock python3 -B research/p104-fullframe-endcut-correction/compile_transports.py --emit-transports > research/p104-fullframe-endcut-correction/TRANSPORTS.json +flock /home/cinna/int-bounds-pass/20261018-luna-xhigh/compute.lock python3 -B research/p104-fullframe-endcut-correction/compile_transports.py +``` + +The first command reconstructs and checks the rational channel map and the +correction composition. The second emits 104 target rows, each with its exact +48 `[source, coefficient]` updates. The final command compares that grouped +word to the retained `CORRECTION.json`. + +The last two commands compile and independently interpret both native +transports for every target. Each one must have rank one and match the exact +signed Pauli action and global phase of its frame change. +The compiler can choose among equivalent monomial factorizations, so a fresh +lowering need not be byte-identical; the retained recipes are checked against +the exact frame-change operators. Each retained target recipe is one compact +line, keeping the review diff readable. + +## Open next questions + +- Can the 4,992 exact scalar updates be fused into a smaller legal word while + retaining the same source and target frames? +- What is the exact selected recursive owner/idle charge for keeping the 104 + full-frame sources alive through this suffix? +- Does the finite end-cut word compose with the required consumer and precision + contract at all sizes? + +## Credit + +The scalar/frame channel and its dirty-helper cancellation come from Rohan +Arun's PR #1972. The concrete native channel realization and verifier lineage +are retained by Chafik Boukhalfa's PR #1991 package. The joint endpoint flag +collection is Nick Petalas's PR #2981, building on the credited PR #2920 +endpoint geometry. PRs #3614 and #3618 supply the earlier flag-9 lower bound +and attaining single-row word; PRs #3601 and #3610 supply related flag-specific +corrections. This end-cut audit is a separate Codex-assisted finite +composition; it does not claim independent human or formal-kernel review. diff --git a/research/p104-role-exchange-caller-audit/inputs/3894-result.json b/research/p104-role-exchange-caller-audit/inputs/3894-result.json new file mode 100644 index 000000000..2fd6145ef --- /dev/null +++ b/research/p104-role-exchange-caller-audit/inputs/3894-result.json @@ -0,0 +1,72 @@ +{ + "base_channel": { + "event_counts": { + "add": 2624, + "copy": 8, + "erase": 8, + "transport": 1410, + "zero": 8 + }, + "events": 4058, + "paid_profile": { + "1": 1074, + "2": 58, + "3": 86, + "4": 104, + "5": 48, + "6": 24, + "7": 8, + "8": 8 + }, + "rank_mass": 2368 + }, + "chosen_suffix_occupancy": { + "convention": "all 104 sources and all 104 targets remain live; one target is promoted", + "endpoint_frame_width_peak": 1769, + "events": 5200, + "frame_coordinate_event_holds": 9198800 + }, + "combined_finite_word": { + "events": 9258, + "paid_profile": { + "1": 1282, + "2": 58, + "3": 86, + "4": 104, + "5": 48, + "6": 24, + "7": 8, + "8": 8 + }, + "rank_mass": 2576, + "scalar_adds": 7616, + "transports": 1618 + }, + "correction": { + "coefficient_counts": { + "-1/2": 3376, + "1/2": 1616 + }, + "column_degree": 48, + "entries": 4992, + "exact_endpoint_map": "Y_t = y_t + x_t; X, G, D, Q unchanged", + "identity": "C = I - G/2, derived from the exact channel output rows", + "new_dirty_or_private_registers": 0, + "row_degree": 48, + "target_transports": 208, + "transport_profile_delta": { + "1": 208 + } + }, + "correction_sha256": "31ba28ca97693f93ee85cc241dd57ef19230f17fe4f08d153d9250957c583d41", + "cut": "after the pinned 4058-event PR #1972 channel", + "flag_collection": "PR #2981; 208 records; all 104 X and 104 Y endpoints used twice", + "scope_limit": "No recursive owner/idle tariff, precision, consumer, or all-size admission is proved.", + "sources": { + "research/p104-joint-unit-flags/CERTIFICATE.json": "a98126428a8da6eae91c50afcc42e014a284c82b554ef77e5b3a34fc6d228128", + "research/p104-native-channel/PROOF.md": "5d743145d389ffdfaffc66096fa7e32c7155b18f73d74755403151d0435bb94c", + "research/p104-native-channel/inputs/LOWRANK-RESULT.json": "7143ec7780f6f38a8c294df8009c3621936b281d05ae79946ce22f581b73d1b1", + "research/p104-native-channel/inputs/LOWRANK-WITNESS.json": "0f541bef7f19fdeffd67157684e9f03d785f42c89973632f508fc1a0452b580e" + }, + "status": "PASS_P104_FULLFRAME_ENDCUT_CORRECTION" +} diff --git a/research/p104-role-exchange-caller-audit/test_verify.py b/research/p104-role-exchange-caller-audit/test_verify.py new file mode 100644 index 000000000..9ea13289c --- /dev/null +++ b/research/p104-role-exchange-caller-audit/test_verify.py @@ -0,0 +1,153 @@ +#!/usr/bin/env python3 +"""Behavioral and actual export/CLI controls. Apache-2.0; same-session AI checks.""" +import gzip +import json +import os +from pathlib import Path +import runpy +import shutil +import subprocess +import sys +import tempfile +import unittest + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] +M = runpy.run_path(str(HERE / "verify.py")) + + +class CallerControls(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.A, cls.J, cls.N, cls.B = M["geometry"]() + cls.final = M["load"](ROOT / "research/p104-native-channel/inputs/LOWRANK-WITNESS.json")["final_frames"] + + def accepted(self, ops, consume=False): + state, frames, bill = M["replay"](self.A, ops, self.final) + M["endpoint"](state, frames, self.final, consume) + return bill + + def test_equivalent_binary_frame_bases(self): + self.assertEqual(M["space"]([1, 2, 4]), M["space"]([3, 6, 4])) + self.assertNotEqual(M["space"]([1, 2]), M["space"]([1, 4])) + + def test_missing_source_return_is_detected(self): + good = M["fused"](self.J, self.N, self.B) + restore = M["pivot_stream"](self.J, self.N, self.B, restore=True) + # Delete the complete restoration block; all sum outputs still exist. + start = 104+len(M["pivot_stream"](self.J, self.N, self.B))+len(M["scatter"](self.J, self.N, self.B, 104)) + bad = good[:start]+good[start+len(restore):] + with self.assertRaisesRegex(ValueError, "X caller endpoint"): + self.accepted(bad) + + def test_wrong_pivot_scatter_coefficient(self): + ops = M["fused"](self.J, self.N, self.B) + target = next(i for i, op in enumerate(ops) if op[0] == "add" and op[1] >= 104) + ops[target][3] *= -1 + with self.assertRaisesRegex(ValueError, "Y caller endpoint"): + self.accepted(ops) + + def test_illegal_early_descent(self): + ops = M["fused"](self.J, self.N, self.B, True) + first_read = next(i for i, op in enumerate(ops) if op == ["add", 0, 104, -1]) + ops.insert(first_read, ["drop", 104]) + with self.assertRaisesRegex(ValueError, "source frame"): + self.accepted(ops, True) + + def test_reader_sign_and_missing_swap(self): + ops = M["fused"](self.J, self.N, self.B, True) + i = next(i for i, op in enumerate(ops) if op == ["add", 0, 104, -1]) + ops[i][3] = 1 + with self.assertRaisesRegex(ValueError, "X caller endpoint"): + self.accepted(ops, True) + old = M["role_tail"](self.J, self.N, self.B) + adapter = M["return_adapter"](self.J, self.N, self.B) + index = next(i for i, op in enumerate(adapter) if op == ["add", self.N[0], 104+self.N[0], -1]) + del adapter[index] + with self.assertRaisesRegex(ValueError, "caller endpoint"): + self.accepted(old+adapter) + + def test_dirty_bank_is_not_clean_workspace(self): + state, frames, _ = M["replay"](self.A, M["fused"](self.J, self.N, self.B), self.final) + state[208] = {} + with self.assertRaisesRegex(ValueError, "dirty helper return"): + M["endpoint"](state, frames, self.final) + ops = [["half", 208]] + with self.assertRaisesRegex(ValueError, "public arithmetic target"): + M["replay"](self.A, ops, self.final) + + def test_residual_relabelling_does_not_supply_inverse_shear(self): + # Even grant free logical gathering to residual-bank order (q,v_N). + x = [int(i == self.N[0]) for i in range(104)] + y = [0]*104 + q = [x[j]+sum(self.B[b][a]*x[i] for a, i in enumerate(self.N)) + for b, j in enumerate(self.J)] + v = [sum(self.A[i][j]*x[j] for j in range(104)) for i in range(104)] + residual = v[:] + for b, j in enumerate(self.J): + residual[j] = q[b] + naive = [residual[i]-x[i]-y[i] for i in range(104)] + self.assertNotEqual(naive, [-v for v in y]) + self.assertTrue(any(naive[j] for j in self.J)) + + def test_adapter_tariff_is_counted(self): + role = M["role_tail"](self.J, self.N, self.B) + complete = self.accepted(role+M["return_adapter"](self.J, self.N, self.B)) + self.assertEqual(complete["added_H1"], 400) + self.assertNotEqual(complete["added_H1"], 208) + reader = self.accepted(M["fused"](self.J, self.N, self.B, True), True) + self.assertEqual(reader["operation_counts"], + {"add":1736,"double":200,"drop":104,"half":200,"lift":104}) + + def export(self, root): + package = root / "research" / HERE.name + shutil.copytree(HERE, package, ignore=shutil.ignore_patterns("__pycache__", "*.pyc")) + for name in M["load"](HERE / "VERIFY.json")["inputs"]: + target = root / name + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(ROOT / name, target) + return package + + def cli(self, package, expect=True, script="verify.py"): + command = [sys.executable, "-I", "-O", "-B", str(package/script)] + result = subprocess.run(command, cwd=package.parents[1], capture_output=True, + text=True, timeout=90, env={**os.environ, "PYTHONDONTWRITEBYTECODE":"1"}) + self.assertEqual(result.returncode == 0, expect, result.stdout+result.stderr) + return result + + def test_real_git_free_read_only_replays_and_cli_rejections(self): + with tempfile.TemporaryDirectory(prefix="p104-caller-controls-") as temporary: + root = Path(temporary) + package = self.export(root) + before = {p.relative_to(root):p.read_bytes() for p in root.rglob("*") if p.is_file()} + self.cli(package) + self.cli(package, script="independent.py") + after = {p.relative_to(root):p.read_bytes() for p in root.rglob("*") if p.is_file()} + self.assertEqual(before, after) + source = root / "research/p104-native-channel/inputs/P104-FIXTURE.json" + original = source.read_bytes() + source.write_bytes(original+b" ") + self.cli(package, False) + source.write_bytes(original) + source.rename(source.with_suffix(".missing")) + self.cli(package, False) + source.with_suffix(".missing").rename(source) + result_path = package / "RESULT.json" + original_result = result_path.read_bytes() + receipt = json.loads(original_result) + receipt["physical_or_all_size_supplier_admitted"] = 0 + result_path.write_text(json.dumps(receipt)) + self.cli(package, False) + result_path.write_bytes(original_result) + program_path = package / "PROGRAMS.json.gz" + original_program = program_path.read_bytes() + programs = json.loads(gzip.decompress(original_program)) + programs["fused_return_and_reader"][0][1] = 105 + program_path.write_bytes(gzip.compress(json.dumps(programs).encode(), mtime=0)) + self.cli(package, False) + program_path.write_bytes(original_program) + self.cli(package) + + +if __name__ == "__main__": + unittest.main(verbosity=2) diff --git a/research/p104-role-exchange-caller-audit/verify.py b/research/p104-role-exchange-caller-audit/verify.py new file mode 100644 index 000000000..11ed66aa8 --- /dev/null +++ b/research/p104-role-exchange-caller-audit/verify.py @@ -0,0 +1,422 @@ +#!/usr/bin/env python3 +"""Bounded P104 caller-cut audit. Apache-2.0; see README for scope and credit.""" +from __future__ import annotations + +import argparse +from collections import Counter +from fractions import Fraction as F +import gzip +import hashlib +import itertools +import json +from pathlib import Path + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] +FULL = tuple(1 << i for i in range(9)) +FIELDS = ([f"X{i}" for i in range(104)] + [f"Y{i}" for i in range(104)] + + [f"Q{i}" for i in range(8)] + [f"G{i}" for i in range(32)] + + [f"D{i}" for i in range(32)]) + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def load(path): + def unique(pairs): + result = {} + for key, value in pairs: + need(key not in result, "duplicate JSON key") + result[key] = value + return result + raw = path.read_bytes() + if path.suffix == ".gz": + raw = gzip.decompress(raw) + return json.loads(raw, object_pairs_hook=unique) + + +def canonical(value): + return (json.dumps(value, sort_keys=True, separators=(",", ":")) + "\n").encode() + + +def digest(value): + return hashlib.sha256(canonical(value)).hexdigest() + + +def blob(raw): + return hashlib.sha1(b"blob " + str(len(raw)).encode() + b"\0" + raw).hexdigest() + + +def space(vectors): + need(all(type(v) is int and 0 < v < 512 for v in vectors), "binary frame vector") + rows = [v for v in vectors if v] + pivot = 0 + for bit in range(8, -1, -1): + found = next((i for i in range(pivot, len(rows)) if (rows[i] >> bit) & 1), None) + if found is None: + continue + rows[pivot], rows[found] = rows[found], rows[pivot] + for i in range(len(rows)): + if i != pivot and (rows[i] >> bit) & 1: + rows[i] ^= rows[pivot] + pivot += 1 + return tuple(sorted(rows[:pivot])) + + +def authenticate(): + pins = load(HERE / "PREDECESSORS.json")["files"] + pins += [row for row in load(HERE / "SOURCES.json")["files"] if row["usage"] == "input"] + result = {} + for row in pins: + path = ROOT / row["path"] + need(not path.is_symlink(), "source symlink") + raw = path.read_bytes() + need(hashlib.sha256(raw).hexdigest() == row["sha256"], "source hash: " + row["path"]) + need(blob(raw) == row["git_blob"], "source blob: " + row["path"]) + result[row["path"]] = row["sha256"] + return result + + +def geometry(): + fixture = load(ROOT / "research/p104-native-channel/inputs/P104-FIXTURE.json") + g = load(HERE / "inputs/3882-geometry.json") + section = fixture["section4_explicit_P104"] + need(section["F0"] == g["F0"] and section["C"] == g["C"], "puncture source") + roots = set() + for a, b in itertools.combinations(range(8), 2): + for sign in (-1, 1): + r = [0] * 8 + r[a], r[b] = 2, 2 * sign + roots.add(tuple(r)) + for signs in itertools.product((-1, 1), repeat=7): + if sum(s < 0 for s in signs) % 2 == 0: + roots.add((1,) + signs) + ports = sorted(roots - {tuple(r) for r in g["F0"] + g["C"]}) + need(len(roots) == 120 and len(ports) == 104, "root count") + A = [[F(sum(x*y for x, y in zip(r, s)), 8) for s in ports] for r in ports] + J = load(HERE / "inputs/3882-result.json")["pivots"] + N = [i for i in range(104) if i not in J] + need(J == [0, 1, 3, 6, 22, 31, 93, 103], "pivot order") + B = [[A[j][i] for i in N] for j in J] + need(sum(v != 0 for row in B for v in row) == 384, "B support") + need(all(v in (F(-1, 2), 0, F(1, 2)) for row in B for v in row), "B alphabet") + need(all(A[j][k] == int(j == k) for j in J for k in J), "pivot block") + need(all(sum(B[a][i]*B[b][i] for i in range(96)) == 12*int(a == b) + for a in range(8) for b in range(8)), "B row rank witness") + for a, i in enumerate(N): + for b, k in enumerate(N): + need(A[i][k] == sum(B[t][a]*B[t][b] for t in range(8)), "Schur block") + return A, J, N, B + + +def plus(a, b, coefficient=F(1)): + out = dict(a) + for key, value in b.items(): + out[key] = out.get(key, F(0)) + coefficient * value + if not out[key]: + del out[key] + return out + + +def source_channel(A): + word = load(ROOT / "research/p104-native-channel/inputs/LOWRANK-WITNESS.json") + state = {name: {i: F(1)} for i, name in enumerate(FIELDS)} + frames = {name: tuple(value) for name, value in word["initial_frames"].items()} + counts, profile = Counter(), Counter() + for op in word["program"]: + kind, target = op[:2] + counts[kind] += 1 + if kind == "transport": + old, new, rank = tuple(op[2]), tuple(op[3]), op[4] + need(space(frames[target]) == space(old) and rank == abs(len(new)-len(old)), "source transport") + need(len(space(old)) == len(old) and len(space(new)) == len(new), "source frame basis") + frames[target] = new + profile[rank] += 1 + elif kind == "add": + source, c, frame = op[2], F(op[3]), tuple(op[4]) + need(space(frames[target]) == space(frames[source]) == space(frame), "source ADD frame") + state[target] = plus(state[target], state[source], c) + elif kind == "zero": + need(target == "C" and target not in state, "owned private creation") + state[target], frames[target] = {}, tuple(op[2]) + elif kind == "copy": + need(target == "C" and not state[target], "owned private COPY destination") + need(space(frames[target]) == space(frames[op[2]]) == space(op[3]), "source COPY frame") + state[target] = dict(state[op[2]]) + elif kind == "erase": + # Inherited owned live-copy disposal; deliberately not a zero-erasure assertion. + need(target == "C" and space(frames[target]) == space(op[2]), "private disposal") + del state[target], frames[target] + else: + raise ValueError("unknown source instruction") + for i, name in enumerate(FIELDS): + expected = {i: F(1)} + if name.startswith("Y"): + expected.update({j: value for j, value in enumerate(A[int(name[1:])]) if value}) + need(state[name] == expected, "source endpoint: " + name) + need(space(frames[name]) == space(word["final_frames"][name]), "source final frame") + if name.startswith("Y"): + need(len(space(frames[name])) == 8, "channel exit target hyperplane") + else: + need(space(frames[name]) == space(FULL), "channel exit source/helper FULL") + need(len(word["program"]) == 4058 and sum(r*n for r, n in profile.items()) == 2368, + "source invoice") + progress = sum(len(word["final_frames"][name])-len(word["initial_frames"][name]) + for name in FIELDS) + need(progress == 2312, "persistent source boundary progress") + return state, frames, {"events": 4058, "operation_counts": dict(counts), + "profile": dict(sorted(profile.items())), "mass": 2368, + "persistent_progress": progress, "private_copy_mass": 2368-progress} + + +def seed(A): + state = [{i: F(1)} for i in range(280)] + for i, row in enumerate(A): + state[104+i].update({j: value for j, value in enumerate(row) if value}) + return state + + +def pivot_stream(J, N, B, restore=False): + ops = [] + for a, i in enumerate(N): + ops.append(["half", i]) + for b, j in enumerate(J): + if B[b][a]: + sign = int(2*B[b][a]) + ops.append(["add", j, i, -sign if restore else sign]) + if not restore: + ops.append(["add", 104+j, i, -sign]) + ops.append(["double", i]) + return ops + + +def scatter(J, N, B, destination): + ops = [] + for b, j in enumerate(J): + ops.append(["half", j]) + for a, i in enumerate(N): + if B[b][a]: + ops.append(["add", destination+i, j, -int(2*B[b][a])]) + ops.append(["double", j]) + return ops + + +def role_tail(J, N, B): + ops = [["lift", 104+i] for i in range(104)] + ops += pivot_stream(J, N, B) + scatter(J, N, B, 0) + ops += [["add", i, 104+i, 1] for i in N] + ops += [["drop", i] for i in N] + [["drop", 104+j] for j in J] + return ops + + +def return_adapter(J, N, B): + ops = [["lift", i] for i in N] + [["add", 104+i, i, -1] for i in N] + ops += scatter(J, N, B, 104) + for a, i in enumerate(N): + ops.append(["half", 104+i]) + for b, j in enumerate(J): + if B[b][a]: + ops.append(["add", j, 104+i, int(2*B[b][a])]) + ops.append(["double", 104+i]) + for i in N: + ops += [["add", i, 104+i, -1], ["add", 104+i, i, 1], ["add", i, 104+i, -1]] + return ops + [["drop", 104+i] for i in N] + + +def inverse_reader(): + return ([["lift", 104+i] for i in range(104)] + + [["add", i, 104+i, -1] for i in range(104)] + + [["drop", 104+i] for i in range(104)]) + + +def fused(J, N, B, consume=False): + ops = [["lift", 104+i] for i in range(104)] + ops += pivot_stream(J, N, B) + scatter(J, N, B, 104) + ops += pivot_stream(J, N, B, restore=True) + ops += [["add", 104+i, i, 1] for i in N] + if consume: + ops += [["add", i, 104+i, -1] for i in range(104)] + return ops + [["drop", 104+i] for i in range(104)] + + +def direct_baseline(correction, consume=False, retime=False): + rows, ops = correction["rows"], [] + if retime: + ops += [["lift", 104+i] for i in range(104)] + ops += [["half", i] for i in range(104)] + for row in rows: + ops += [["add", 104+row["target"], i, int(2*F(c))] for i, c in row["terms"]] + ops += [["double", i] for i in range(104)] + if consume: + ops += [["add", i, 104+i, -1] for i in range(104)] + return ops + [["drop", 104+i] for i in range(104)] + for row in rows: + t = 104 + row["target"] + ops.append(["lift", t]) + for i, c in row["terms"]: + ops.append(["scaled_add", t, i, c]) + ops.append(["drop", t]) + return ops + (inverse_reader() if consume else []) + + +def replay(A, ops, final): + state, frames = seed(A), [FULL]*104 + [None]*104 + [FULL]*72 + for i in range(104): + frames[104+i] = tuple(final[f"Y{i}"]) + counts, peak, holds = Counter(), sum(map(len, frames)), 0 + max_den, max_norm = 1, F(0) + for row in state: + max_den = max(max_den, *(v.denominator for v in row.values())) + max_norm = max(max_norm, sum(map(abs, row.values()))) + for op in ops: + kind, t = op[:2] + need(type(t) is int and 0 <= t < 208, "public arithmetic target") + counts[kind] += 1 + if kind == "lift": + need(len(frames[t]) == 8, "lift entrance") + frames[t] = FULL + elif kind == "drop": + need(frames[t] == FULL, "drop entrance") + frames[t] = tuple(final[f"Y{t % 104}"]) + else: + need(frames[t] == FULL, "arithmetic target frame") + if kind in ("add", "scaled_add"): + s, coefficient = op[2], F(op[3]) + need(type(s) is int and 0 <= s < 208 and s != t, "arithmetic source") + need(frames[s] == FULL, "arithmetic source frame") + need(kind != "add" or coefficient in (-1, 1), "unit ADD") + state[t] = plus(state[t], state[s], coefficient) + else: + need(kind in ("half", "double"), "unknown arithmetic") + c = F(1, 2) if kind == "half" else F(2) + state[t] = {k: c*v for k, v in state[t].items()} + max_den = max(max_den, *(v.denominator for v in state[t].values())) + max_norm = max(max_norm, sum(map(abs, state[t].values()))) + width = sum(map(len, frames)) + peak, holds = max(peak, width), holds + width + return state, frames, {"events": len(ops), "operation_counts": dict(sorted(counts.items())), + "added_H1": counts["lift"]+counts["drop"], + "maximum_coefficient_denominator": max_den, + "maximum_row_l1": str(max_norm), "peak_persistent_frame_coordinates": peak, + "post_event_persistent_frame_coordinate_holds": holds} + + +def endpoint(state, frames, final, consume=False): + for i in range(104): + want_x = {104+i: F(-1)} if consume else {i: F(1)} + need(state[i] == want_x and frames[i] == FULL, "X caller endpoint") + need(state[104+i] == {i: F(1), 104+i: F(1)}, "Y caller endpoint") + need(frames[104+i] == tuple(final[f"Y{i}"]), "Y caller return frame") + for i in range(208, 280): + need(state[i] == {i: F(1)} and frames[i] == FULL, "dirty helper return") + + +def encode_state(state): + return [[[k, str(v)] for k, v in sorted(row.items())] for row in state] + + +def check_baseline(A): + c = load(HERE / "inputs/3894-correction.json") + need(len(c["rows"]) == 104, "baseline row count") + signs = Counter() + for i, row in enumerate(c["rows"]): + need(type(row["target"]) is int and row["target"] == i, "baseline target order") + terms = {j: F(v) for j, v in row["terms"]} + need(len(terms) == len(row["terms"]) == 48, "baseline row support") + need(terms == {j: F(i == j)-v for j, v in enumerate(A[i]) if F(i == j)-v}, + "baseline exact correction coefficients") + signs.update(v for _, v in row["terms"]) + need(signs == {"-1/2": 3376, "1/2": 1616}, "baseline signs") + word = load(ROOT / "research/p104-native-channel/inputs/LOWRANK-WITNESS.json") + need(c["target_output_frames"] == {str(i): word["final_frames"][f"Y{i}"] + for i in range(104)}, "baseline endpoint frame binding") + return c + + +def calculate(): + hashes = authenticate() + caller = (ROOT / "notes/copied-centers-complex.tex").read_text() + need("maps $(x,y)$ to $(-y,x+y)$" in caller, "retained caller equation") + need("Its copy, addition and erasure are paid local work".lower() in caller.lower() + or "its copy, addition and erasure are paid local work" in caller, + "retained caller payment clause") + A, J, N, B = geometry() + _, _, source = source_channel(A) + word = load(ROOT / "research/p104-native-channel/inputs/LOWRANK-WITNESS.json") + final = word["final_frames"] + baseline = check_baseline(A) + old = role_tail(J, N, B) + need(digest(old) == load(HERE / "inputs/3882-result.json")["program_sha256"], "PR3882 schedule") + encoded, encoded_frames, encoded_bill = replay(A, old, final) + for i in range(104): + target = 104+i if i in J else i + need(encoded[target] == {i:F(1),104+i:F(1)} and len(encoded_frames[target]) == 8, + "PR3882 sum and frame") + for b, j in enumerate(J): + q = {j:F(1)} + q.update({i:B[b][a] for a, i in enumerate(N) if B[b][a]}) + need(encoded[j] == q and encoded_frames[j] == FULL, "PR3882 q boundary") + entrance = seed(A) + for i in N: + need(encoded[104+i] == entrance[104+i] and encoded_frames[104+i] == FULL, + "PR3882 v_N boundary") + for i in range(208, 280): + need(encoded[i] == {i:F(1)} and encoded_frames[i] == FULL, "PR3882 dirty boundary") + restoration_floor = sum(abs(len(encoded_frames[i])-9) for i in range(104)) + restoration_floor += sum(abs(len(encoded_frames[104+i])-8) for i in range(104)) + programs = { + "role_then_fixed_return": old + return_adapter(J, N, B), + "role_return_then_reader": old + return_adapter(J, N, B) + inverse_reader(), + "fused_return": fused(J, N, B), + "fused_return_and_reader": fused(J, N, B, True), + "baseline_3894": direct_baseline(baseline), + "baseline_3894_then_reader": direct_baseline(baseline, True), + "retimed_lowered_baseline": direct_baseline(baseline, False, True), + "retimed_lowered_baseline_and_reader": direct_baseline(baseline, True, True), + } + results = {} + for name, ops in programs.items(): + state, frames, bill = replay(A, ops, final) + endpoint(state, frames, final, "reader" in name) + bill["endpoint_sha256"], bill["program_sha256"] = digest(encode_state(state)), digest(ops) + bill["combined_channel_mass"] = 2368 + bill["added_H1"] + bill["bare_280_role_M0"] = str(F(bill["combined_channel_mass"], 9*280)) + results[name] = bill + return {"schema_version": 1, "status": "PASS_P104_ROLE_EXCHANGE_CALLER_AUDIT", + "sources": hashes, "source_channel": source, "programs": results, + "encoded_boundary": {"endpoint_sha256":digest(encode_state(encoded)), **encoded_bill}, + "fixed_location_restoration_minimum_added_rank": restoration_floor, + "restoration_constructed_added_rank": results["role_then_fixed_return"]["added_H1"]-encoded_bill["added_H1"], + "naive_residual_as_source_error_rank_over_Q": 104, + "ports": 104, "independent_inputs": 280, "dirty_helpers": 72, + "scalar_saving_against_retimed_lowered_baseline": 3360, + "additional_halves_and_doubles_each": 96, + "unchanged_paired_chain": {"stages": 9, "width": 73, "families": 832, + "persistent_progress_per_call": 2312, "remaining_coverage": 39096, + "lower_mass": 9*2576+39096, "capacity": 73*832, + "M0": str(F(9*2576+39096, 73*832)), + "scope": "Conditional inherited source-preserving nine-call template only; not a supplied owner embedding."}, + "physical_or_all_size_supplier_admitted": False}, programs + + +def main(): + ap = argparse.ArgumentParser(description=__doc__) + ap.add_argument("--emit", action="store_true") + ap.add_argument("--write", type=Path) + args = ap.parse_args() + result, programs = calculate() + if args.write: + with args.write.open("xb") as out: + out.write(canonical(result)) + else: + expected = load(HERE / "RESULT.json") + need(type(expected.get("schema_version")) is int, "typed receipt schema") + need(canonical(result) == canonical(expected), "frozen receipt mismatch") + need(canonical(programs) == canonical(load(HERE / "PROGRAMS.json.gz")), "frozen programs mismatch") + print(json.dumps(result, indent=2) if args.emit else result["status"]) + + +if __name__ == "__main__": + main()