Copy <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>GME Phantom Shares via ETF Cash-in-Lieu + CNS</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font:11px Arial,sans-serif;background:#f0f0f0;color:#000;padding:8px}
.wrap{max-width:1050px;margin:0 auto;background:#fff;border:1px solid #999;padding:10px}
h1{font-size:12px;background:#333;color:#fff;padding:6px 8px;margin:-10px -10px 10px -10px}
.grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-bottom:8px}
.grid2{display:grid;grid-template-columns:2fr 1fr;gap:8px;margin-bottom:8px}
.box{border:1px solid #000;background:#fff}
.box-head{background:#ddd;border-bottom:1px solid #000;padding:4px 6px;font-weight:700;font-size:10px}
.box-body{padding:6px}
.row{display:flex;justify-content:space-between;padding:2px 0;border-bottom:1px solid #eee}
.row:last-child{border-bottom:none}
.row.head{font-weight:700;background:#f5f5f5;padding:4px 0;border-bottom:1px solid #ccc}
.row.total{background:#ffffcc;font-weight:700;border-top:2px solid #000;margin-top:4px;padding-top:4px}
.row.warn span:last-child{color:#c00}
.val{font-weight:700}
.small{font-size:10px;color:#666}
.controls{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:8px;padding:6px;background:#f9f9f9;border:1px solid #ccc}
button{font:11px Arial,sans-serif;padding:5px 12px;border:1px solid #000;background:#fff;cursor:pointer}
button:hover{background:#000;color:#fff}
input{font:11px Arial,sans-serif;width:60px;padding:3px;border:1px solid #999;text-align:right}
label{font-size:10px;display:flex;align-items:center;gap:3px}
.chain{display:flex;align-items:center;justify-content:center;gap:4px;padding:8px;background:#f5f5f5;border:1px solid #ccc;margin-bottom:8px}
.step{padding:4px 8px;border:1px solid #000;font-size:10px;background:#fff}
.step.on{background:#000;color:#fff}
.arrow{font-size:12px}
.meters{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;margin-bottom:8px}
.meter{border:1px solid #000;padding:6px;text-align:center;background:#fff}
.meter-lbl{font-size:9px;color:#666;margin-bottom:2px}
.meter-val{font-size:20px;font-weight:700}
.meter-val.warn{color:#c00}
.meter-bar{height:4px;background:#eee;margin-top:4px;border:1px solid #ccc}
.meter-fill{height:100%;background:#000;width:0%;transition:width .2s}
.meter-fill.warn{background:#c00}
.arena{border:1px solid #000;height:140px;position:relative;background:#fafafa;margin-bottom:8px}
.pool{position:absolute;bottom:0;width:100%;display:flex;justify-content:space-around;padding:8px}
.poolbox{border:1px solid #000;background:#fff;width:30%;padding:8px;text-align:center}
.poolbox-lbl{font-size:9px;color:#666}
.poolbox-val{font-size:14px;font-weight:700}
.token{position:absolute;width:14px;height:14px;border:1px solid #000;font-size:9px;display:flex;align-items:center;justify-content:center;transition:all .4s ease-out}
.t-cash{background:#cfc}
.t-ent{background:#ffc;border-style:dashed}
.t-ftd{background:#fcc}
.flow{position:absolute;top:35%;left:50%;transform:translate(-50%,-50%);font-weight:700;font-size:11px;opacity:0;transition:opacity .15s}
.flow.on{opacity:1}
.status{position:absolute;top:6px;left:8px;font-size:10px}
.log{border:1px solid #000;max-height:120px;overflow-y:auto}
.log table{width:100%;border-collapse:collapse;font-size:10px}
.log th,.log td{border:1px solid #ccc;padding:3px 5px}
.log th{background:#ddd;position:sticky;top:0}
.log td{background:#fff}
.log .r{text-align:right}
.formula{font-size:10px;color:#666;padding:6px;background:#f9f9f9;border:1px solid #ccc;margin-top:8px}
.formula b{color:#000}
</style>
</head>
<body>
<div class="wrap">
<h1>GME PHANTOM SHARES — ETF CASH-IN-LIEU + NSCC CNS NETTING</h1>
<div class="controls">
<button id="stepBtn">Step</button>
<button id="runBtn">Run</button>
<button id="stopBtn">Stop</button>
<button id="resetBtn">Reset</button>
<label>Basket:<input id="pB" type="number" value="10" min="1"></label>
<label>Cash$:<input id="pC" type="number" value="1000" min="0"></label>
<label>Cover%:<input id="pCov" type="number" value="0" min="0" max="100"></label>
<label>Net%:<input id="pNet" type="number" value="90" min="0" max="100"></label>
<label>Speed:<input id="pSpd" type="number" value="400" min="50"></label>
<span class="small">Cycle: <b id="cyc">0</b></span>
</div>
<div class="chain">
<div class="step" data-i="0">AP needs GME</div><div class="arrow">→</div>
<div class="step" data-i="1">Can't locate</div><div class="arrow">→</div>
<div class="step" data-i="2">Pays cash</div><div class="arrow">→</div>
<div class="step" data-i="3">ETF created</div><div class="arrow">→</div>
<div class="step" data-i="4">Phantom born</div><div class="arrow">→</div>
<div class="step" data-i="5">CNS nets</div><div class="arrow">↺</div>
</div>
<div class="meters">
<div class="meter"><div class="meter-lbl">REAL SHARES (S)</div><div class="meter-val" id="mS">100</div><div class="meter-bar"><div class="meter-fill" id="bS"></div></div></div>
<div class="meter"><div class="meter-lbl">ENTITLEMENTS (E)</div><div class="meter-val" id="mE">100</div><div class="meter-bar"><div class="meter-fill" id="bE"></div></div></div>
<div class="meter"><div class="meter-lbl">PHANTOM (E-S)</div><div class="meter-val warn" id="mP">0</div><div class="meter-bar"><div class="meter-fill warn" id="bP"></div></div></div>
<div class="meter"><div class="meter-lbl">RECEIVABLE</div><div class="meter-val warn" id="mR">0</div><div class="meter-bar"><div class="meter-fill warn" id="bR"></div></div></div>
<div class="meter"><div class="meter-lbl">CNS NET DELIV</div><div class="meter-val" id="mN">0</div><div class="meter-bar"><div class="meter-fill" id="bN"></div></div></div>
</div>
<div class="grid2">
<div class="arena" id="arena">
<div class="status" id="status">Ready</div>
<div class="flow" id="flow"></div>
<div class="pool">
<div class="poolbox"><div class="poolbox-lbl">DTC VAULT</div><div class="poolbox-val"><span id="pDtc">100</span> real</div></div>
<div class="poolbox"><div class="poolbox-lbl">CNS POOL</div><div class="poolbox-val"><span id="pCns">0</span> receivable</div></div>
<div class="poolbox"><div class="poolbox-lbl">MARKET</div><div class="poolbox-val"><span id="pMkt">100</span> claims</div></div>
</div>
</div>
<div class="log" id="logWrap">
<table><thead><tr><th>t</th><th>Action</th><th class="r">ΔE</th><th class="r">ΔR</th><th class="r">Net</th></tr></thead><tbody id="log"></tbody></table>
</div>
</div>
<div class="grid">
<div class="box">
<div class="box-head">A. SHARES OUTSTANDING</div>
<div class="box-body">
<div class="row"><span>GME Issued (S)</span><span class="val" id="aS">100</span></div>
<div class="row"><span>Held at DTC</span><span class="val" id="aDtc">100</span></div>
<div class="row"><span>Entitlements (E)</span><span class="val" id="aE">100</span></div>
<div class="row"><span>— Real-backed</span><span id="aReal">100</span></div>
<div class="row warn"><span>— Phantom</span><span id="aPhantom">0</span></div>
<div class="row total"><span>Overage %</span><span id="aOver">0%</span></div>
</div>
</div>
<div class="box">
<div class="box-head">B. NSCC CNS LEDGER</div>
<div class="box-body">
<div class="row"><span>Gross Receivable</span><span class="val" id="bGross">0</span></div>
<div class="row"><span>Netting Factor</span><span id="bNetF">90%</span></div>
<div class="row"><span>Net Required Delivery</span><span class="val" id="bNet">0</span></div>
<div class="row"><span>Cash Collateral</span><span id="bCash">$0</span></div>
<div class="row total warn"><span>Hidden FTDs</span><span id="bFtd">0</span></div>
</div>
</div>
<div class="box">
<div class="box-head">C. ETF FUND BALANCE</div>
<div class="box-body">
<div class="row"><span>GME Shares Held</span><span id="cHeld">0</span></div>
<div class="row"><span>GME Receivable</span><span class="val" id="cRecv">0</span></div>
<div class="row"><span>Cash-in-Lieu</span><span id="cCash">$0</span></div>
<div class="row"><span>Baskets Created</span><span id="cBask">0</span></div>
<div class="row total"><span>NAV Exposure</span><span id="cNav">0</span></div>
</div>
</div>
</div>
<div class="grid">
<div class="box">
<div class="box-head">D. MARKET BALANCE</div>
<div class="box-body">
<div class="row"><span>Assets (Real S)</span><span id="dAsset">100</span></div>
<div class="row"><span>Liabilities (E)</span><span id="dLiab">100</span></div>
<div class="row warn"><span>Unmatched Claims</span><span id="dUnmatch">0</span></div>
<div class="row total"><span>Integrity Gap</span><span id="dGap">0%</span></div>
</div>
</div>
<div class="box">
<div class="box-head">E. CORE PARTIES</div>
<div class="box-body small">
<div class="row"><span>DTC</span><span>Depository (real shares)</span></div>
<div class="row"><span>NSCC CNS</span><span>Nets settlements</span></div>
<div class="row"><span>AP</span><span>Creates/redeems ETF</span></div>
<div class="row"><span>ETF Issuer</span><span>Issues shares, books recv</span></div>
<div class="row"><span>MM/Broker</span><span>Routes orders, lends</span></div>
</div>
</div>
<div class="box">
<div class="box-head">F. CORE DATA</div>
<div class="box-body small">
<div class="row"><span>S (Shares Outstanding)</span><span>Fixed real supply</span></div>
<div class="row"><span>E (Entitlements)</span><span>S + Short Interest</span></div>
<div class="row"><span>SI (Short Interest)</span><span>Borrowed claims</span></div>
<div class="row"><span>Phantom = E - S</span><span>Excess claims</span></div>
<div class="row"><span>FTD/Receivable</span><span>Undelivered stock</span></div>
</div>
</div>
</div>
<div class="formula">
<b>RECURSION:</b> Cash-in-lieu → E<sub>t+1</sub> = E<sub>t</sub> + Basket (S unchanged) → Phantom grows →
Claims lendable → More shorts → More creates → <b>Loop ↺</b><br>
<b>CNS MASK:</b> Net = Gross × (1 - NetFactor) — Netting hides gross obligations, reducing forced delivery
</div>
</div>
<script>
const $=id=>document.getElementById(id);
const arena=$('arena');
let S={s:100,e:100,r:0,cash:0,bask:0,t:0,tick:0,busy:false,run:false};
let timer=null;
function P(){
return{
b:Math.max(1,+$('pB').value||10),
c:Math.max(0,+$('pC').value||1000),
cov:Math.max(0,Math.min(100,+$('pCov').value||0)),
net:Math.max(0,Math.min(100,+$('pNet').value||90)),
spd:Math.max(50,+$('pSpd').value||400)
};
}
function chain(i){
document.querySelectorAll('.step').forEach(s=>s.classList.remove('on'));
const el=document.querySelector('.step[data-i="'+i+'"]');
if(el)el.classList.add('on');
}
function flash(t){
const f=$('flow');f.textContent=t;f.classList.add('on');
setTimeout(()=>f.classList.remove('on'),200);
}
function tok(cls,ch,x,y){
const d=document.createElement('div');
d.className='token '+cls;d.textContent=ch;
d.style.left=x+'px';d.style.top=y+'px';
arena.appendChild(d);return d;
}
function mv(d,x,y){
return new Promise(r=>{
setTimeout(()=>{d.style.left=x+'px';d.style.top=y+'px'},10);
setTimeout(r,420);
});
}
function rm(d){d.style.opacity='0';setTimeout(()=>d.remove(),200)}
function log(a,dE,dR,net){
const tr=document.createElement('tr');
tr.innerHTML=`<td>${S.t}</td><td>${a}</td><td class="r">${dE>=0?'+':''}${dE}</td><td class="r">${dR>=0?'+':''}${dR}</td><td class="r">${net}</td>`;
$('log').prepend(tr);
}
function calcNet(){
const{net}=P();
return Math.round(S.r*(1-net/100));
}
function upd(){
const p=Math.max(0,S.e-S.s);
const n=calcNet();
const{net}=P();
$('cyc').textContent=Math.floor(S.tick/6);
$('mS').textContent=S.s;
$('mE').textContent=S.e;
$('mP').textContent=p;
$('mR').textContent=S.r;
$('mN').textContent=n;
$('bS').style.width='100%';
$('bE').style.width=Math.min(100,S.e/S.s*50)+'%';
$('bP').style.width=Math.min(100,p/S.s*100)+'%';
$('bR').style.width=Math.min(100,S.r/S.s*100)+'%';
$('bN').style.width=Math.min(100,n/S.s*100)+'%';
$('pDtc').textContent=S.s;
$('pCns').textContent=S.r;
$('pMkt').textContent=S.e;
// A
$('aS').textContent=S.s;
$('aDtc').textContent=S.s;
$('aE').textContent=S.e;
$('aReal').textContent=S.s;
$('aPhantom').textContent=p;
$('aOver').textContent=Math.round((S.e-S.s)/S.s*100)+'%';
// B
$('bGross').textContent=S.r;
$('bNetF').textContent=net+'%';
$('bNet').textContent=n;
$('bCash').textContent='$'+S.cash;
$('bFtd').textContent=S.r;
// C
$('cHeld').textContent=0;
$('cRecv').textContent=S.r;
$('cCash').textContent='$'+S.cash;
$('cBask').textContent=S.bask;
$('cNav').textContent=S.r;
// D
$('dAsset').textContent=S.s;
$('dLiab').textContent=S.e;
$('dUnmatch').textContent=p;
$('dGap').textContent=Math.round(p/S.s*100)+'%';
}
async function step(){
if(S.busy)return;
S.busy=true;
const{b,c,cov}=P();
const i=S.tick%6;
chain(i);
if(i===0){
$('status').textContent='AP needs '+b+' GME for basket';
flash('NEED GME');
log('AP initiates create',0,0,calcNet());
}
if(i===1){
$('status').textContent='Locate fails — GME unavailable';
flash('LOCATE FAIL');
log('Cannot locate GME',0,0,calcNet());
}
if(i===2){
$('status').textContent='AP pays $'+c+' cash-in-lieu';
flash('$'+c+' CASH');
const t=tok('t-cash','$',420,15);
await mv(t,420,70);rm(t);
S.cash+=c;
log('Cash-in-lieu delivered',0,0,calcNet());
}
if(i===3){
$('status').textContent='ETF created — books GME receivable';
flash('ETF ISSUED');
S.bask++;
log('ETF shares issued',0,0,calcNet());
}
if(i===4){
$('status').textContent='+'+b+' phantom entitlements';
flash('+'+b+' PHANTOM');
S.e+=b;S.r+=b;
for(let k=0;k<Math.min(4,b);k++){
const t=tok('t-ent','?',380+k*20,15);
mv(t,500+k*18,70).then(()=>setTimeout(()=>rm(t),600));
}
log('Entitlements created',b,b,calcNet());
}
if(i===5){
const covered=Math.round(S.r*cov/100);
S.r=Math.max(0,S.r-covered);
$('status').textContent='CNS nets — cover '+cov+'%';
flash('CNS NETS');
log('CNS netting cycle',0,-covered,calcNet());
}
S.t++;S.tick++;
upd();
S.busy=false;
}
async function loop(){
if(!S.run)return;
await step();
timer=setTimeout(loop,P().spd);
}
function run(){if(S.run)return;S.run=true;loop()}
function stop(){S.run=false;clearTimeout(timer)}
function reset(){
stop();
S={s:100,e:100,r:0,cash:0,bask:0,t:0,tick:0,busy:false,run:false};
$('log').innerHTML='';
$('status').textContent='Ready';
chain(-1);upd();
}
$('stepBtn').onclick=step;
$('runBtn').onclick=run;
$('stopBtn').onclick=stop;
$('resetBtn').onclick=reset;
upd();
</script>
</body>
</html>