@provable-games/budokan-sdk 0.1.22 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/{client-DlXvzneQ.d.cts → player-BUynfv7D.d.cts} +36 -1
- package/dist/{client-DlXvzneQ.d.ts → player-BUynfv7D.d.ts} +36 -1
- package/dist/react.cjs +200 -2
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +45 -2
- package/dist/react.d.ts +45 -2
- package/dist/react.js +201 -4
- package/dist/react.js.map +1 -1
- package/package.json +3 -6
package/dist/react.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors/index.ts","../src/utils/retry.ts","../src/api/base.ts","../src/utils/mappers.ts","../src/api/tournaments.ts","../src/utils/address.ts","../src/api/games.ts","../src/api/activity.ts","../src/ws/manager.ts","../src/chains/constants.ts","../src/datasource/health.ts","../src/datasource/resolver.ts","../src/rpc/provider.ts","../src/rpc/viewer.ts","../src/rpc/abis/budokanViewer.json","../src/rpc/abis/budokan.json","../src/rpc/budokan.ts","../src/client.ts","../src/react/context.tsx","../src/react/useResetOnClient.ts","../src/react/useTournaments.ts","../src/react/useTournamentCount.ts","../src/react/useLeaderboard.ts","../src/react/useRegistrations.ts","../src/react/useByOwner.ts","../src/react/useRewardClaims.ts","../src/react/usePrizes.ts","../src/react/usePrizeAggregation.ts","../src/react/useQualifications.ts","../src/react/useActivityStats.ts","../src/react/useSubscription.ts","../src/react/useConnectionStatus.ts"],"names":["fetchOpts","num","CairoCustomEnum","wrapRpcCall","createContext","useMemo","useRef","useEffect","useContext","useState","fetch","useCallback","useTokens"],"mappings":";;;;;;;;;;AAAO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EACtC,YAAY,OAAA,EAAiB;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EACvC,MAAA;AAAA,EACA,UAAA;AAAA,EAET,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAgB,UAAA,GAAqB,EAAA,EAAI;AACpE,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AACF,CAAA;AAEO,IAAM,mBAAA,GAAN,cAAkC,YAAA,CAAa;AAAA,EACpD,WAAA,CAAY,UAAU,mBAAA,EAAqB;AACzC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,qBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,sBAAA,GAAN,cAAqC,YAAA,CAAa;AAAA,EACvD,WAAA,CAAY,UAAU,mBAAA,EAAqB;AACzC,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,wBAAA;AAAA,EACd;AACF,CAAA;AAEO,IAAM,uBAAA,GAAN,cAAsC,YAAA,CAAa;AAAA,EAC/C,YAAA;AAAA,EAET,YAAY,YAAA,EAAsB;AAChC,IAAA,KAAA,CAAM,CAAA,sBAAA,EAAyB,YAAY,CAAA,CAAE,CAAA;AAC7C,IAAA,IAAA,CAAK,IAAA,GAAO,yBAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AAAA,EACtB;AACF,CAAA;AAEO,IAAM,QAAA,GAAN,cAAuB,YAAA,CAAa;AAAA,EAChC,eAAA;AAAA,EAET,WAAA,CAAY,SAAiB,eAAA,EAA0B;AACrD,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,IAAA,GAAO,UAAA;AACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AAAA,EACzB;AACF,CAAA;AAEO,IAAM,eAAA,GAAN,cAA8B,YAAA,CAAa;AAAA,EACvC,YAAA;AAAA,EACA,aAAA;AAAA,EAET,WAAA,CAAY,cAAqB,aAAA,EAAsB;AACrD,IAAA,KAAA,CAAM,sCAAsC,YAAA,CAAa,OAAO,CAAA,YAAA,EAAe,aAAA,CAAc,OAAO,CAAA,CAAE,CAAA;AACtG,IAAA,IAAA,CAAK,IAAA,GAAO,iBAAA;AACZ,IAAA,IAAA,CAAK,YAAA,GAAe,YAAA;AACpB,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AACF,CAAA;AAEO,SAAS,oBAAoB,KAAA,EAAyB;AAC3D,EAAA,IAAI,KAAA,YAAiB,yBAAyB,OAAO,IAAA;AACrD,EAAA,IAAI,KAAA,YAAiB,eAAA,IAAmB,KAAA,CAAM,MAAA,IAAU,GAAA,IAAO,MAAM,MAAA,GAAS,GAAA,IAAO,KAAA,CAAM,MAAA,KAAW,GAAA,EAAK;AACzG,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,KAAA;AACT;;;ACrEO,SAAS,gBAAA,CACd,OAAA,EACA,SAAA,EACA,QAAA,EACQ;AACR,EAAA,IAAI,KAAA,GAAQ,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,GAAG,OAAO,CAAA;AAC3C,EAAA,IAAI,KAAA,GAAQ,UAAU,KAAA,GAAQ,QAAA;AAC9B,EAAA,MAAM,WAAW,KAAA,GAAQ,CAAA;AACzB,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,EAAO,IAAK,KAAA,GAAQ,QAAA,CAAA;AACxC,EAAA,OAAO,QAAA,GAAW,MAAA;AACpB;AAEO,SAAS,MAAM,EAAA,EAA2B;AAC/C,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,EAAE,CAAC,CAAA;AACzD;AAEA,eAAsB,SAAA,CACpB,EAAA,EACA,QAAA,GAAmB,CAAA,EACnB,QAAgB,GAAA,EACJ;AACZ,EAAA,IAAI,SAAA,GAA0B,IAAA;AAE9B,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,GAAU,QAAA,EAAU,OAAA,EAAA,EAAW;AACnD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,SAAS,KAAA,EAAO;AACd,MAAA,SAAA,GAAY,KAAA;AAEZ,MAAA,IAAI,mBAAA,CAAoB,KAAK,CAAA,EAAG;AAC9B,QAAA,MAAM,KAAA;AAAA,MACR;AAEA,MAAA,IAAI,OAAA,KAAY,WAAW,CAAA,EAAG;AAE9B,MAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,OAAA,EAAS,KAAA,EAAO,QAAQ,CAAC,CAAA;AAC1D,MAAA,MAAM,MAAM,OAAO,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,MAAM,SAAA,IAAa,IAAI,mBAAA,CAAoB,6BAA6B,CAAA;AAC1E;;;AC9BA,IAAM,eAAA,GAAkB,GAAA;AACxB,IAAM,sBAAA,GAAyB,CAAA;AAC/B,IAAM,mBAAA,GAAsB,GAAA;AAK5B,eAAsB,QAAA,CAAY,GAAA,EAAa,OAAA,GAA2B,EAAC,EAAe;AACxF,EAAA,MAAM;AAAA,IACJ,MAAA,GAAS,KAAA;AAAA,IACT,UAAU,EAAC;AAAA,IACX,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA,GAAU,eAAA;AAAA,IACV,aAAA,GAAgB,sBAAA;AAAA,IAChB,UAAA,GAAa;AAAA,GACf,GAAI,OAAA;AAEJ,EAAA,OAAO,SAAA;AAAA,IACL,YAAY;AACV,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,MAAM,YAAY,UAAA,CAAW,MAAM,UAAA,CAAW,KAAA,IAAS,OAAO,CAAA;AAG9D,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,IAAI,OAAO,OAAA,EAAS;AAClB,UAAA,YAAA,CAAa,SAAS,CAAA;AACtB,UAAA,MAAM,IAAI,oBAAoB,qBAAqB,CAAA;AAAA,QACrD;AACA,QAAA,MAAA,CAAO,gBAAA,CAAiB,SAAS,MAAM,UAAA,CAAW,OAAM,EAAG,EAAE,IAAA,EAAM,IAAA,EAAM,CAAA;AAAA,MAC3E;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,UAChC,MAAA;AAAA,UACA,OAAA,EAAS;AAAA,YACP,cAAA,EAAgB,kBAAA;AAAA,YAChB,GAAG;AAAA,WACL;AAAA,UACA,IAAA,EAAM,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,IAAI,CAAA,GAAI,KAAA,CAAA;AAAA,UACpC,QAAQ,UAAA,CAAW;AAAA,SACpB,CAAA;AAED,QAAA,YAAA,CAAa,SAAS,CAAA;AAEtB,QAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,UAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AACxD,UAAA,MAAM,IAAI,eAAA;AAAA,YACP,SAAA,CAAqC,KAAA,IAAS,CAAA,WAAA,EAAc,QAAA,CAAS,MAAM,CAAA,CAAA;AAAA,YAC5E,QAAA,CAAS,MAAA;AAAA,YACT,QAAA,CAAS;AAAA,WACX;AAAA,QACF;AAEA,QAAA,OAAQ,MAAM,SAAS,IAAA,EAAK;AAAA,MAC9B,SAAS,KAAA,EAAO;AACd,QAAA,YAAA,CAAa,SAAS,CAAA;AACtB,QAAA,IAAI,iBAAiB,eAAA,EAAiB;AACpC,UAAA,MAAM,KAAA;AAAA,QACR;AACA,QAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,KAAA,CAAM,IAAA,KAAS,YAAA,EAAc;AACzD,UAAA,IAAI,MAAA,EAAQ,OAAA,EAAS,MAAM,IAAI,oBAAoB,qBAAqB,CAAA;AACxE,UAAA,MAAM,IAAI,mBAAA,EAAoB;AAAA,QAChC;AACA,QAAA,MAAM,IAAI,sBAAA;AAAA,UACR,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,SAC3C;AAAA,MACF;AAAA,IACF,CAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF;AAOO,SAAS,iBAAA,CAAkB,QAAiC,QAAA,EAIjE;AACA,EAAA,MAAM,aAAa,MAAA,CAAO,UAAA;AAC1B,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,UAAA,EAAY,KAAA,IAAU,MAAA,CAAO,KAAA;AAAA,IACpC,OAAO,UAAA,EAAY,KAAA,IAAU,MAAA,CAAO,KAAA,IAAgC,UAAU,KAAA,IAAS,EAAA;AAAA,IACvF,QAAQ,UAAA,EAAY,MAAA,IAAW,MAAA,CAAO,MAAA,IAAiC,UAAU,MAAA,IAAU;AAAA,GAC7F;AACF;AAMO,SAAS,iBAAiB,MAAA,EAA8E;AAC7G,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,EAAG;AACjD,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,IAAA,EAAM;AACzC,MAAA,EAAA,CAAG,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,KAAK,CAAC,CAAA;AAAA,IAC3B;AAAA,EACF;AACA,EAAA,MAAM,GAAA,GAAM,GAAG,QAAA,EAAS;AACxB,EAAA,OAAO,GAAA,GAAM,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA,GAAK,EAAA;AAC3B;;;ACnHA,SAAS,YAAY,GAAA,EAAqB;AACxC,EAAA,OAAO,GAAA,CAAI,QAAQ,WAAA,EAAa,CAAC,GAAG,MAAA,KAAmB,MAAA,CAAO,aAAa,CAAA;AAC7E;AAYO,SAAS,aAAgB,GAAA,EAAiB;AAC/C,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,IAAI,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAAa,IAAI,CAAC,CAAA;AAAA,EAC7C;AACA,EAAA,IAAI,QAAQ,IAAA,IAAQ,OAAO,QAAQ,QAAA,IAAY,EAAE,eAAe,IAAA,CAAA,EAAO;AACrE,IAAA,MAAM,SAAkC,EAAC;AACzC,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAA8B,CAAA,EAAG;AACzE,MAAA,MAAA,CAAO,WAAA,CAAY,GAAG,CAAC,CAAA,GAAI,aAAa,KAAK,CAAA;AAAA,IAC/C;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA;AACT;;;ACpBA,SAAS,oBAAoB,GAAA,EAA0C;AACrE,EAAA,MAAM,CAAA,GAAI,aAA2C,GAAG,CAAA;AAExD,EAAA,MAAM,EAAA,GAAK,CAAA,CAAE,EAAA,IAAM,CAAA,CAAE,YAAA;AACrB,EAAA,OAAO,EAAE,GAAG,CAAA,EAAG,EAAA,EAAI,cAAc,EAAA,EAAG;AACtC;AAQA,SAAS,UAAU,GAAA,EAA4C;AAC7D,EAAA,OAAO;AAAA,IACL,eAAe,GAAA,EAAK,aAAA;AAAA,IACpB,YAAY,GAAA,EAAK,UAAA;AAAA,IACjB,SAAS,GAAA,EAAK;AAAA,GAChB;AACF;AAKA,eAAsB,cAAA,CACpB,OAAA,EACA,MAAA,EACA,GAAA,EACsC;AACtC,EAAA,MAAM,KAAK,gBAAA,CAAiB;AAAA,IAC1B,cAAc,MAAA,EAAQ,WAAA;AAAA,IACtB,SAAS,MAAA,EAAQ,OAAA;AAAA,IACjB,OAAO,MAAA,EAAQ,KAAA;AAAA,IACf,OAAO,MAAA,EAAQ,KAAA;AAAA,IACf,QAAQ,MAAA,EAAQ,MAAA;AAAA,IAChB,MAAM,MAAA,EAAQ,IAAA;AAAA,IACd,SAAS,MAAA,EAAQ,MAAA;AAAA,IACjB,WAAA,EAAa,MAAA,EAAQ,UAAA,EAAY,IAAA,CAAK,GAAG,CAAA;AAAA,IACzC,cAAA,EAAgB,MAAA,EAAQ,aAAA,EAAe,IAAA,CAAK,GAAG,CAAA;AAAA,IAC/C,sBAAA,EAAwB,MAAA,EAAQ,qBAAA,EAAuB,IAAA,CAAK,GAAG,CAAA;AAAA,IAC/D,gBAAgB,MAAA,EAAQ;AAAA,GACzB,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAkC,CAAA,EAAG,OAAO,eAAe,EAAE,CAAA,CAAA,EAAI,SAAA,CAAU,GAAG,CAAC,CAAA;AACpG,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,WAAU,GAAI,iBAAA,CAAkB,MAAA,EAAQ,EAAE,OAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAChI,EAAA,OAAO;AAAA,IACL,IAAA,EAAO,OAAO,IAAA,CAAmC,GAAA,CAAI,CAAC,IAAA,KAAS,mBAAA,CAAoB,IAAI,CAAC,CAAA;AAAA,IACxF,KAAA;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACF;AAKA,eAAsB,aAAA,CACpB,OAAA,EACA,YAAA,EACA,GAAA,EACqB;AACrB,EAAA,MAAM,SAAS,MAAM,QAAA;AAAA,IACnB,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,CAAA;AAAA,IACtC,UAAU,GAAG;AAAA,GACf;AACA,EAAA,OAAO,mBAAA,CAAoB,OAAO,IAAI,CAAA;AACxC;AAUA,eAAsB,0BAAA,CACpB,OAAA,EACA,YAAA,EACA,MAAA,EACA,GAAA,EACwC;AACxC,EAAA,MAAM,KAAK,gBAAA,CAAiB;AAAA,IAC1B,cAAA,EAAgB,QAAQ,YAAA,EAAc,MAAA,GAAS,OAAO,YAAA,CAAa,IAAA,CAAK,GAAG,CAAA,GAAI,MAAA;AAAA,IAC/E,eAAe,MAAA,EAAQ,YAAA;AAAA,IACvB,WAAW,MAAA,EAAQ,QAAA;AAAA,IACnB,OAAO,MAAA,EAAQ,KAAA;AAAA,IACf,QAAQ,MAAA,EAAQ;AAAA,GACjB,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAkC,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAA,EAAI,SAAA,CAAU,GAAG,CAAC,CAAA;AAClI,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,WAAU,GAAI,iBAAA,CAAkB,MAAA,EAAQ,EAAE,OAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAChI,EAAA,OAAO;AAAA,IACL,IAAA,EAAO,OAAO,IAAA,CAAmC,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAA2B,IAAI,CAAC,CAAA;AAAA,IAC/F,KAAA;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACF;AAKA,eAAsB,mBAAA,CACpB,OAAA,EACA,YAAA,EACA,GAAA,EACkB;AAClB,EAAA,MAAM,SAAS,MAAM,QAAA;AAAA,IACnB,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,OAAA,CAAA;AAAA,IACtC,UAAU,GAAG;AAAA,GACf;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAAoB,IAAI,CAAC,CAAA;AAC5D;AAKA,eAAsB,yBAAA,CACpB,OAAA,EACA,YAAA,EACA,MAAA,EACA,GAAA,EACuC;AACvC,EAAA,MAAM,KAAK,gBAAA,CAAiB;AAAA,IAC1B,OAAO,MAAA,EAAQ,KAAA;AAAA,IACf,QAAQ,MAAA,EAAQ;AAAA,GACjB,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAkC,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,cAAA,EAAiB,EAAE,CAAA,CAAA,EAAI,SAAA,CAAU,GAAG,CAAC,CAAA;AAClI,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,WAAU,GAAI,iBAAA,CAAkB,MAAA,EAAQ,EAAE,OAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAChI,EAAA,OAAO;AAAA,IACL,IAAA,EAAO,OAAO,IAAA,CAAmC,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAA0B,IAAI,CAAC,CAAA;AAAA,IAC9F,KAAA;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACF;AAKA,eAAsB,gCAAA,CACpB,OAAA,EACA,YAAA,EACA,GAAA,EAC6B;AAC7B,EAAA,MAAM,SAAS,MAAM,QAAA;AAAA,IACnB,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,sBAAA,CAAA;AAAA,IACtC,UAAU,GAAG;AAAA,GACf;AACA,EAAA,OAAO,YAAA,CAAiC,OAAO,IAAI,CAAA;AACrD;AAKA,eAAsB,2BAAA,CACpB,OAAA,EACA,YAAA,EACA,MAAA,EACA,GAAA,EAC8C;AAC9C,EAAA,MAAM,KAAK,gBAAA,CAAiB;AAAA,IAC1B,OAAO,MAAA,EAAQ,KAAA;AAAA,IACf,QAAQ,MAAA,EAAQ;AAAA,GACjB,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAkC,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,YAAY,CAAA,eAAA,EAAkB,EAAE,CAAA,CAAA,EAAI,SAAA,CAAU,GAAG,CAAC,CAAA;AACnI,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,WAAU,GAAI,iBAAA,CAAkB,MAAA,EAAQ,EAAE,OAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAChI,EAAA,OAAO;AAAA,IACL,IAAA,EAAO,OAAO,IAAA,CAAmC,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAAiC,IAAI,CAAC,CAAA;AAAA,IACrG,KAAA;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACF;AAKA,eAAsB,6BAAA,CACpB,OAAA,EACA,YAAA,EACA,GAAA,EAC6B;AAC7B,EAAA,MAAM,EAAA,GAAK,gBAAA,CAAiB,EAAE,mBAAA,EAAqB,MAAM,CAAA;AACzD,EAAA,MAAM,SAAS,MAAM,QAAA;AAAA,IACnB,CAAA,EAAG,OAAO,CAAA,aAAA,EAAgB,YAAY,UAAU,EAAE,CAAA,CAAA;AAAA,IAClD,UAAU,GAAG;AAAA,GACf;AACA,EAAA,OAAO,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAA+B,IAAI,CAAC,CAAA;AACvE;;;AClMO,SAAS,iBAAiB,OAAA,EAAyB;AACxD,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AAC7C,EAAA,OAAA,CAAQ,OAAO,QAAA,CAAS,QAAA,CAAS,EAAA,EAAI,GAAG,GAAG,WAAA,EAAY;AACzD;;;ACQA,SAASA,WAAU,GAAA,EAA4C;AAC7D,EAAA,OAAO;AAAA,IACL,eAAe,GAAA,EAAK,aAAA;AAAA,IACpB,YAAY,GAAA,EAAK,UAAA;AAAA,IACjB,SAAS,GAAA,EAAK;AAAA,GAChB;AACF;AAKA,eAAsB,kBAAA,CACpB,OAAA,EACA,WAAA,EACA,MAAA,EACA,GAAA,EACsC;AACtC,EAAA,MAAM,UAAA,GAAa,iBAAiB,WAAW,CAAA;AAC/C,EAAA,MAAM,KAAK,gBAAA,CAAiB;AAAA,IAC1B,SAAS,MAAA,EAAQ,OAAA;AAAA,IACjB,OAAO,MAAA,EAAQ,KAAA;AAAA,IACf,OAAO,MAAA,EAAQ,KAAA;AAAA,IACf,QAAQ,MAAA,EAAQ;AAAA,GACjB,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAkC,CAAA,EAAG,OAAO,CAAA,OAAA,EAAU,UAAU,CAAA,YAAA,EAAe,EAAE,CAAA,CAAA,EAAIA,UAAAA,CAAU,GAAG,CAAC,CAAA;AACxH,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,QAAA,EAAU,MAAA,EAAQ,WAAU,GAAI,iBAAA,CAAkB,MAAA,EAAQ,EAAE,OAAO,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAA,EAAQ,QAAQ,CAAA;AAChI,EAAA,OAAO;AAAA,IACL,IAAA,EAAO,OAAO,IAAA,CAAmC,GAAA,CAAI,CAAC,IAAA,KAAS,YAAA,CAAyB,IAAI,CAAC,CAAA;AAAA,IAC7F,KAAA;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACF;AAKA,eAAsB,YAAA,CACpB,OAAA,EACA,WAAA,EACA,GAAA,EACwB;AACxB,EAAA,MAAM,UAAA,GAAa,iBAAiB,WAAW,CAAA;AAC/C,EAAA,MAAM,SAAS,MAAM,QAAA;AAAA,IACnB,CAAA,EAAG,OAAO,CAAA,OAAA,EAAU,UAAU,CAAA,MAAA,CAAA;AAAA,IAC9BA,WAAU,GAAG;AAAA,GACf;AACA,EAAA,OAAO,YAAA,CAA4B,OAAO,IAAI,CAAA;AAChD;;;ACnDA,SAASA,WAAU,GAAA,EAA4C;AAC7D,EAAA,OAAO;AAAA,IACL,eAAe,GAAA,EAAK,aAAA;AAAA,IACpB,YAAY,GAAA,EAAK,UAAA;AAAA,IACjB,SAAS,GAAA,EAAK;AAAA,GAChB;AACF;AAKA,eAAsB,gBAAA,CACpB,SACA,GAAA,EACwB;AACxB,EAAA,MAAM,SAAS,MAAM,QAAA;AAAA,IACnB,GAAG,OAAO,CAAA,eAAA,CAAA;AAAA,IACVA,WAAU,GAAG;AAAA,GACf;AACA,EAAA,OAAO,YAAA,CAA4B,OAAO,IAAI,CAAA;AAChD;AAKA,eAAsB,aAAA,CACpB,SACA,GAAA,EACqB;AACrB,EAAA,MAAM,SAAS,MAAM,QAAA;AAAA,IACnB,GAAG,OAAO,CAAA,qBAAA,CAAA;AAAA,IACVA,WAAU,GAAG;AAAA,GACf;AACA,EAAA,OAAO,YAAA,CAAyB,OAAO,IAAI,CAAA;AAC7C;;;ACtCA,IAAM,iBAAA,GAAqC;AAAA,EACzC,oBAAA,EAAsB,EAAA;AAAA,EACtB,kBAAA,EAAoB;AACtB,CAAA;AAKO,IAAM,YAAN,MAAgB;AAAA,EACb,EAAA,GAAuB,IAAA;AAAA,EACd,KAAA;AAAA,EACA,MAAA;AAAA,EACT,iBAAA,GAAoB,CAAA;AAAA,EACpB,gBAAA,GAAyD,IAAA;AAAA,EACzD,aAAA,uBAAoB,GAAA,EAAsE;AAAA,EAC1F,SAAA,GAAY,CAAA;AAAA,EACZ,SAAA,GAAY,KAAA;AAAA,EACZ,mBAAA,uBAA0B,GAAA,EAAkC;AAAA,EAEpE,WAAA,CAAY,OAAe,MAAA,EAAmC;AAC5D,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,EAAE,GAAG,iBAAA,EAAmB,GAAG,MAAA,EAAO;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAI,KAAK,EAAA,EAAI;AAEb,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,EAAA,GAAK,IAAI,SAAA,CAAU,IAAA,CAAK,KAAK,CAAA;AAElC,MAAA,IAAA,CAAK,EAAA,CAAG,SAAS,MAAM;AACrB,QAAA,IAAA,CAAK,SAAA,GAAY,IAAA;AACjB,QAAA,IAAA,CAAK,iBAAA,GAAoB,CAAA;AACzB,QAAA,IAAA,CAAK,uBAAuB,IAAI,CAAA;AAEhC,QAAA,KAAA,MAAW,GAAG,GAAG,CAAA,IAAK,KAAK,aAAA,EAAe;AACxC,UAAA,IAAA,CAAK,aAAA,CAAc,IAAI,OAAO,CAAA;AAAA,QAChC;AAAA,MACF,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,SAAA,GAAY,CAAC,KAAA,KAAU;AAC7B,QAAA,IAAI;AACF,UAAA,MAAM,OAAA,GAAU,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAc,CAAA;AAC/C,UAAA,IAAI,OAAA,CAAQ,SAAS,OAAA,EAAS;AAC5B,YAAA,KAAA,MAAW,GAAG,GAAG,CAAA,IAAK,KAAK,aAAA,EAAe;AACxC,cAAA,GAAA,CAAI,QAAQ,OAAO,CAAA;AAAA,YACrB;AAAA,UACF;AAAA,QACF,CAAA,CAAA,MAAQ;AAAA,QAER;AAAA,MACF,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AACtB,QAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,QAAA,IAAA,CAAK,uBAAuB,KAAK,CAAA;AACjC,QAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AACV,QAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,MACxB,CAAA;AAEA,MAAA,IAAA,CAAK,EAAA,CAAG,UAAU,MAAM;AAAA,MAExB,CAAA;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,IAAA,CAAK,gBAAA,EAAiB;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmB;AACjB,IAAA,IAAI,KAAK,gBAAA,EAAkB;AACzB,MAAA,YAAA,CAAa,KAAK,gBAAgB,CAAA;AAClC,MAAA,IAAA,CAAK,gBAAA,GAAmB,IAAA;AAAA,IAC1B;AACA,IAAA,IAAI,KAAK,EAAA,EAAI;AACX,MAAA,IAAA,CAAK,GAAG,OAAA,GAAU,IAAA;AAClB,MAAA,IAAA,CAAK,GAAG,KAAA,EAAM;AACd,MAAA,IAAA,CAAK,EAAA,GAAK,IAAA;AAAA,IACZ;AACA,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,uBAAuB,KAAK,CAAA;AACjC,IAAA,IAAA,CAAK,iBAAA,GAAoB,CAAA;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,CAAU,SAA6B,OAAA,EAAqC;AAC1E,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,CAAA;AAClC,IAAA,IAAA,CAAK,cAAc,GAAA,CAAI,EAAA,EAAI,EAAE,OAAA,EAAS,SAAS,CAAA;AAE/C,IAAA,IAAI,KAAK,SAAA,EAAW;AAClB,MAAA,IAAA,CAAK,cAAc,OAAO,CAAA;AAAA,IAC5B;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,aAAA,CAAc,OAAO,EAAE,CAAA;AAC5B,MAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,EAAA,EAAI;AAC7B,QAAA,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU;AAAA,UAC1B,IAAA,EAAM,aAAA;AAAA,UACN,UAAU,OAAA,CAAQ;AAAA,SACnB,CAAC,CAAA;AAAA,MACJ;AAAA,IACF,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,QAAA,EAAsC;AAC9C,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,CAAA;AAElC,IAAA,IAAA,CAAK,aAAA,CAAc,IAAI,EAAA,EAAI;AAAA,MACzB,OAAA,EAAS,EAAE,QAAA,EAAU,EAAC,EAAE;AAAA,MACxB,OAAA,EAAS;AAAA,KACV,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,aAAA,CAAc,OAAO,EAAE,CAAA;AAAA,IAC9B,CAAA;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,WAAA,GAAuB;AACzB,IAAA,OAAO,IAAA,CAAK,SAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,mBAAmB,QAAA,EAAoD;AACrE,IAAA,IAAA,CAAK,mBAAA,CAAoB,IAAI,QAAQ,CAAA;AACrC,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,mBAAA,CAAoB,OAAO,QAAQ,CAAA;AAAA,IAC1C,CAAA;AAAA,EACF;AAAA,EAEQ,uBAAuB,WAAA,EAA4B;AACzD,IAAA,KAAA,MAAW,QAAA,IAAY,KAAK,mBAAA,EAAqB;AAC/C,MAAA,IAAI;AACF,QAAA,QAAA,CAAS,WAAW,CAAA;AAAA,MACtB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,cAAc,OAAA,EAAmC;AACvD,IAAA,IAAI,CAAC,IAAA,CAAK,EAAA,IAAM,KAAK,EAAA,CAAG,UAAA,KAAe,UAAU,IAAA,EAAM;AACvD,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,MAAA,KAAW,CAAA,EAAG;AACnC,IAAA,IAAA,CAAK,EAAA,CAAG,IAAA,CAAK,IAAA,CAAK,SAAA,CAAU;AAAA,MAC1B,IAAA,EAAM,WAAA;AAAA,MACN,UAAU,OAAA,CAAQ,QAAA;AAAA,MAClB,eAAe,OAAA,CAAQ;AAAA,KACxB,CAAC,CAAA;AAAA,EACJ;AAAA,EAEQ,gBAAA,GAAyB;AAC/B,IAAA,IAAI,IAAA,CAAK,iBAAA,IAAqB,IAAA,CAAK,MAAA,CAAO,oBAAA,EAAsB;AAChE,IAAA,IAAI,IAAA,CAAK,aAAA,CAAc,IAAA,KAAS,CAAA,EAAG;AAEnC,IAAA,MAAM,KAAA,GAAQ,KAAK,MAAA,CAAO,kBAAA,GAAqB,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,iBAAiB,CAAA;AACjF,IAAA,IAAA,CAAK,iBAAA,EAAA;AAEL,IAAA,IAAA,CAAK,gBAAA,GAAmB,WAAW,MAAM;AACvC,MAAA,IAAA,CAAK,OAAA,EAAQ;AAAA,IACf,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,KAAA,EAAO,GAAM,CAAC,CAAA;AAAA,EAC5B;AACF,CAAA;;;ACjLO,IAAM,MAAA,GAAsC;AAAA,EACjD,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,uDAAA;AAAA,IACR,UAAA,EAAY,+CAAA;AAAA,IACZ,KAAA,EAAO,gDAAA;AAAA,IACP,cAAA,EAAgB,oEAAA;AAAA,IAChB,aAAA,EAAe;AAAA,GACjB;AAAA,EACA,OAAA,EAAS;AAAA,IACP,MAAA,EAAQ,6CAAA;AAAA,IACR,UAAA,EAAY,4CAAA;AAAA,IACZ,KAAA,EAAO,6CAAA;AAAA,IACP,cAAA,EAAgB,oEAAA;AAAA,IAChB,aAAA,EAAe;AAAA;AAEnB,CAAA;AAEO,SAAS,eAAe,KAAA,EAAwC;AACrE,EAAA,OAAO,OAAO,KAAK,CAAA;AACrB;;;ACHO,IAAM,mBAAN,MAAuB;AAAA,EACpB,MAAA,GAAgC;AAAA,IACtC,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,aAAa,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,IACnE,GAAA,EAAK,EAAE,SAAA,EAAW,IAAA,EAAM,aAAa,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK;AAAA,IACnE,IAAA,EAAM,KAAA;AAAA,IACN,oBAAA,EAAsB;AAAA,GACxB;AAAA,EAEQ,SAAA,uBAAgB,GAAA,EAAoB;AAAA,EACpC,aAAA,GAAuD,IAAA;AAAA,EACvD,mBAAA,GAA4D,IAAA;AAAA,EAC5D,MAAA;AAAA,EACA,MAAA;AAAA,EACS,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EAEjB,WAAA,CAAY,MAAA,EAAgB,MAAA,EAAgB,MAAA,EAA6B;AACvE,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,oBAAoB,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,iBAAA,IAAqB,KAAO,GAAG,CAAA;AACzE,IAAA,IAAA,CAAK,kBAAkB,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,aAAA,IAAiB,KAAQ,GAAK,CAAA;AACtE,IAAA,IAAA,CAAK,iBAAiB,IAAA,CAAK,GAAA,CAAI,MAAA,EAAQ,YAAA,IAAgB,KAAO,GAAK,CAAA;AAAA,EACrE;AAAA,EAEA,SAAA,GAAmC;AACjC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,MAAA,EAAO;AAAA,EAC1B;AAAA,EAEA,IAAI,IAAA,GAAuB;AACzB,IAAA,OAAO,KAAK,MAAA,CAAO,IAAA;AAAA,EACrB;AAAA,EAEA,UAAU,QAAA,EAAsC;AAC9C,IAAA,IAAA,CAAK,SAAA,CAAU,IAAI,QAAQ,CAAA;AAC3B,IAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AACpB,IAAA,OAAO,MAAM;AAAE,MAAA,IAAA,CAAK,SAAA,CAAU,OAAO,QAAQ,CAAA;AAAA,IAAG,CAAA;AAAA,EAClD;AAAA,EAEA,eAAA,GAAwB;AACtB,IAAA,IAAI,KAAK,aAAA,EAAe;AACxB,IAAA,IAAA,CAAK,mBAAA,GAAsB,WAAW,MAAM;AAC1C,MAAA,IAAA,CAAK,kBAAA,EAAmB;AACxB,MAAA,IAAA,CAAK,gBAAgB,WAAA,CAAY,MAAM,KAAK,kBAAA,EAAmB,EAAG,KAAK,eAAe,CAAA;AAAA,IACxF,CAAA,EAAG,KAAK,iBAAiB,CAAA;AAAA,EAC3B;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,IAAI,KAAK,aAAA,EAAe;AACtB,MAAA,aAAA,CAAc,KAAK,aAAa,CAAA;AAChC,MAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,IACvB;AACA,IAAA,IAAI,KAAK,mBAAA,EAAqB;AAC5B,MAAA,YAAA,CAAa,KAAK,mBAAmB,CAAA;AACrC,MAAA,IAAA,CAAK,mBAAA,GAAsB,IAAA;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,mBAAmB,KAAA,EAAsB;AACvC,IAAA,IAAA,CAAK,YAAA,CAAa;AAAA,MAChB,GAAA,EAAK,EAAE,GAAG,IAAA,CAAK,OAAO,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,IAAA,CAAK,GAAA,EAAI,EAAG,KAAA,EAAO,SAAS,gBAAA;AAAiB,KACxG,CAAA;AAAA,EACH;AAAA,EAEA,mBAAmB,KAAA,EAAsB;AACvC,IAAA,IAAA,CAAK,YAAA,CAAa;AAAA,MAChB,GAAA,EAAK,EAAE,GAAG,IAAA,CAAK,OAAO,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,IAAA,CAAK,GAAA,EAAI,EAAG,KAAA,EAAO,SAAS,gBAAA;AAAiB,KACxG,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,MAAM,KAAK,kBAAA,EAAmB;AAAA,EAChC;AAAA,EAEA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,cAAA,EAAe;AACpB,IAAA,IAAA,CAAK,UAAU,KAAA,EAAM;AAAA,EACvB;AAAA,EAEA,MAAc,kBAAA,GAAoC;AAChD,IAAA,MAAM,CAAC,SAAA,EAAW,SAAS,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MAC/C,KAAK,QAAA,EAAS;AAAA,MACd,KAAK,QAAA;AAAS,KACf,CAAA;AACD,IAAA,IAAA,CAAK,YAAA,CAAa,EAAE,GAAA,EAAK,SAAA,EAAW,KAAK,SAAA,EAAW,oBAAA,EAAsB,MAAM,CAAA;AAAA,EAClF;AAAA,EAEA,MAAc,QAAA,GAAmC;AAC/C,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,MAAM,YAAY,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,cAAc,CAAA;AAC1E,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,OAAA,CAAA,EAAW,EAAE,MAAA,EAAQ,UAAA,CAAW,MAAA,EAAQ,CAAA;AACnF,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC7B,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,IAAA,CAAK,GAAA,EAAI,EAAG,OAAA,EAAS,KAAA,EAAO,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA,EAAG;AAAA,MAChG;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,WAAA,GAAc,IAAA,CAAK,MAAA,KAAW,SAAA,IAAa,KAAK,MAAA,KAAW,UAAA;AACjE,MAAA,OAAO,EAAE,SAAA,EAAW,WAAA,EAAa,WAAA,EAAa,KAAK,GAAA,EAAI,EAAG,OAAA,EAAS,KAAA,EAAO,WAAA,GAAc,IAAA,GAAO,CAAA,YAAA,EAAe,IAAA,CAAK,MAAM,CAAA,CAAA,EAAG;AAAA,IAC9H,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,KAAK,GAAA,EAAI,EAAG,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAA,EAAgB;AAAA,IACrI;AAAA,EACF;AAAA,EAEA,MAAc,QAAA,GAAmC;AAC/C,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,MAAM,YAAY,UAAA,CAAW,MAAM,WAAW,KAAA,EAAM,EAAG,KAAK,cAAc,CAAA;AAC1E,MAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ;AAAA,QACxC,MAAA,EAAQ,MAAA;AAAA,QACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,QAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,KAAA,EAAO,MAAA,EAAQ,kBAAA,EAAoB,MAAA,EAAQ,EAAC,EAAG,EAAA,EAAI,GAAG,CAAA;AAAA,QACtF,QAAQ,UAAA,CAAW;AAAA,OACpB,CAAA;AACD,MAAA,YAAA,CAAa,SAAS,CAAA;AACtB,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,GAAA,EAAI,GAAI,SAAA;AAC7B,MAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,QAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,IAAA,CAAK,GAAA,EAAI,EAAG,OAAA,EAAS,KAAA,EAAO,CAAA,KAAA,EAAQ,QAAA,CAAS,MAAM,CAAA,CAAA,EAAG;AAAA,MAChG;AACA,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,IAAA,EAAK;AACjC,MAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,KAAW,KAAA,CAAA,IAAa,CAAC,IAAA,CAAK,KAAA;AACrD,MAAA,OAAO,EAAE,SAAA,EAAW,SAAA,EAAW,WAAA,EAAa,IAAA,CAAK,GAAA,EAAI,EAAG,OAAA,EAAS,KAAA,EAAO,SAAA,GAAY,IAAA,GAAO,WAAA,EAAY;AAAA,IACzG,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,EAAE,SAAA,EAAW,KAAA,EAAO,WAAA,EAAa,KAAK,GAAA,EAAI,EAAG,OAAA,EAAS,IAAA,EAAM,KAAA,EAAO,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,UAAU,eAAA,EAAgB;AAAA,IACrI;AAAA,EACF;AAAA,EAEQ,aAAa,OAAA,EAA+C;AAClE,IAAA,MAAM,YAAY,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,OAAA,EAAQ;AAE/C,IAAA,IAAI,SAAA,CAAU,IAAI,SAAA,EAAW;AAC3B,MAAA,SAAA,CAAU,IAAA,GAAO,KAAA;AAAA,IACnB,CAAA,MAAA,IAAW,SAAA,CAAU,GAAA,CAAI,SAAA,EAAW;AAClC,MAAA,SAAA,CAAU,IAAA,GAAO,cAAA;AAAA,IACnB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,IAAA,GAAO,SAAA;AAAA,IACnB;AAEA,IAAA,MAAM,OAAA,GACJ,KAAK,MAAA,CAAO,GAAA,CAAI,cAAc,SAAA,CAAU,GAAA,CAAI,SAAA,IAC5C,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,cAAc,SAAA,CAAU,GAAA,CAAI,SAAA,IAC5C,IAAA,CAAK,MAAA,CAAO,IAAA,KAAS,UAAU,IAAA,IAC/B,IAAA,CAAK,MAAA,CAAO,oBAAA,KAAyB,SAAA,CAAU,oBAAA;AAEjD,IAAA,IAAA,CAAK,MAAA,GAAS,SAAA;AAEd,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,IAAA,CAAK,SAAA,CAAU,OAAA,CAAQ,CAAC,QAAA,KAAa;AACnC,QAAA,IAAI;AAAE,UAAA,QAAA,CAAS,KAAK,MAAM,CAAA;AAAA,QAAG,CAAA,CAAA,MAAQ;AAAA,QAAe;AAAA,MACtD,CAAC,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAA;;;AChLA,eAAsB,YAAA,CACpB,OAAA,EACA,QAAA,EACA,MAAA,EACY;AAEZ,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAM,OAAO,MAAA,CAAO,IAAA;AACpB,IAAA,IAAI,SAAS,cAAA,EAAgB;AAE3B,MAAA,IAAI;AACF,QAAA,OAAO,MAAM,QAAA,EAAS;AAAA,MACxB,SAAS,aAAA,EAAe;AACtB,QAAA,MAAM,aAAA;AAAA,MACR;AAAA,IACF;AAIA,EACF;AAEA,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,OAAA,EAAQ;AAAA,EACvB,SAAS,KAAA,EAAO;AACd,IAAA,YAAA,GAAe,KAAA;AAEf,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,kBAAA,CAAmB,aAAa,OAAO,CAAA;AAAA,IAChD;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,QAAA,EAAS;AAAA,EACxB,SAAS,aAAA,EAAe;AACtB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,kBAAA,CAAoB,cAAwB,OAAO,CAAA;AAAA,IAC5D;AACA,IAAA,MAAM,IAAI,eAAA,CAAgB,YAAA,EAAc,aAAsB,CAAA;AAAA,EAChE;AACF;;;AC1CA,IAAI,cAAA,GAAmD,IAAA;AAEvD,eAAe,WAAA,GAAkD;AAC/D,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA,cAAA,GAAiB,MAAM,OAAO,UAAU,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,cAAA;AACT;AAEA,eAAsB,cAAA,CACpB,QACA,OAAA,EACsB;AACtB,EAAA,MAAM,EAAE,WAAA,EAAa,mBAAA,EAAoB,GAAI,MAAM,WAAA,EAAY;AAC/D,EAAA,MAAM,QAAA,GAAW,IAAI,mBAAA,CAAoB;AAAA,IACvC,OAAA,EAAS,MAAA;AAAA,IACT,GAAI,OAAA,IAAW,EAAE,OAAA;AAAQ,GAC1B,CAAA;AACD,EAAA,OAAO,QAAA;AACT;AAEA,eAAsB,cAAA,CACpB,GAAA,EACA,OAAA,EACA,QAAA,EACmB;AAEnB,EAAA,IAAI,WAAA,GAAmB,GAAA;AACvB,EAAA,IAAI,GAAA,IAAO,CAAC,KAAA,CAAM,OAAA,CAAQ,GAAG,KAAK,OAAO,GAAA,KAAQ,QAAA,IAAY,SAAA,IAAa,GAAA,EAAK;AAC7E,IAAA,WAAA,GAAe,GAAA,CAAyB,OAAA;AAAA,EAC1C;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,WAAA,EAAY;AAEnC,EAAA,OAAO,IAAI,SAAS,QAAA,CAAS,EAAE,KAAK,WAAA,EAAa,OAAA,EAAS,iBAAA,EAAmB,QAAA,EAAU,CAAA;AACzF;ACrBA,SAAS,WAAA,CAAe,IAAsB,eAAA,EAAsC;AAClF,EAAA,OAAO,EAAA,EAAG,CAAE,KAAA,CAAM,CAAC,KAAA,KAAmB;AACpC,IAAA,MAAM,IAAI,QAAA;AAAA,MACR,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,iBAAA;AAAA,MACzC;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAEA,SAAS,kBAAkB,KAAA,EAAwB;AACjD,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AACnB,EAAA,MAAM,GAAA,GAAMC,YAAA,CAAI,KAAA,CAAM,KAAe,CAAA;AACrC,EAAA,IAAI,GAAA,KAAQ,OAAO,OAAO,EAAA;AAC1B,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAC1B,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,MAAA,CAAO,MAAA,EAAQ,KAAK,CAAA,EAAG;AACzC,IAAA,MAAM,QAAA,GAAW,SAAS,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,GAAG,EAAE,CAAA;AACpD,IAAA,IAAI,aAAa,CAAA,EAAG;AACpB,IAAA,MAAA,IAAU,MAAA,CAAO,aAAa,QAAQ,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,gBAAgB,KAAA,EAAwB;AAC/C,EAAA,IAAI,CAAC,OAAO,OAAO,EAAA;AAEnB,EAAA,MAAM,GAAA,GAAM,KAAA;AACZ,EAAA,MAAM,OAAO,GAAA,CAAI,IAAA;AACjB,EAAA,MAAM,cAAc,GAAA,CAAI,YAAA;AACxB,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,GAAA,CAAI,gBAAA,IAAoB,CAAC,CAAA;AAEvD,EAAA,IAAI,MAAA,GAAS,EAAA;AAGb,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,KAAA,MAAW,SAAS,IAAA,EAAM;AACxB,MAAA,MAAM,GAAA,GAAMA,YAAA,CAAI,KAAA,CAAM,KAAe,CAAA,CAAE,MAAM,CAAC,CAAA,CAAE,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA;AAChE,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,KAAK,CAAA,EAAG;AAC9B,QAAA,MAAM,QAAA,GAAW,SAAS,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,GAAG,EAAE,CAAA;AACjD,QAAA,IAAI,QAAA,KAAa,CAAA,EAAG,MAAA,IAAU,MAAA,CAAO,aAAa,QAAQ,CAAA;AAAA,MAC5D;AAAA,IACF;AAAA,EACF;AAGA,EAAA,IAAI,WAAA,IAAe,iBAAiB,CAAA,EAAG;AACrC,IAAA,MAAM,GAAA,GAAMA,YAAA,CAAI,KAAA,CAAM,WAAqB,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA,CAAS,cAAA,GAAiB,CAAA,EAAG,GAAG,CAAA;AACtF,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,cAAA,GAAiB,CAAA,EAAG,KAAK,CAAA,EAAG;AAC9C,MAAA,MAAM,QAAA,GAAW,SAAS,GAAA,CAAI,KAAA,CAAM,GAAG,CAAA,GAAI,CAAC,GAAG,EAAE,CAAA;AACjD,MAAA,IAAI,QAAA,KAAa,CAAA,EAAG,MAAA,IAAU,MAAA,CAAO,aAAa,QAAQ,CAAA;AAAA,IAC5D;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;AAGA,IAAM,iBAAiB,CAAC,WAAA,EAAa,gBAAgB,SAAA,EAAW,MAAA,EAAQ,cAAc,WAAW,CAAA;AAEjG,IAAM,cAAA,GAAwC;AAAA,EAC5C,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc,cAAA;AAAA,EACd,OAAA,EAAS,SAAA;AAAA,EACT,IAAA,EAAM,MAAA;AAAA,EACN,UAAA,EAAY,YAAA;AAAA,EACZ,SAAA,EAAW;AACb,CAAA;AAGA,SAAS,cAAc,KAAA,EAA+B;AACpD,EAAA,MAAM,aAAA,GAAgB,eAAe,KAAK,CAAA;AAC1C,EAAA,MAAM,WAAoC,EAAC;AAC3C,EAAA,KAAA,MAAW,KAAK,cAAA,EAAgB;AAC9B,IAAA,QAAA,CAAS,CAAC,CAAA,GAAI,CAAA,KAAM,aAAA,GAAgB,EAAC,GAAI,MAAA;AAAA,EAC3C;AACA,EAAA,OAAO,IAAIC,yBAAgB,QAAQ,CAAA;AACrC;AAMA,SAAS,eAAA,CACP,KACA,UAAA,EACY;AACZ,EAAA,MAAM,GAAA,GAAM,GAAA;AACZ,EAAA,MAAM,EAAA,GAAK,MAAA,CAAO,GAAA,CAAI,EAAA,IAAM,GAAG,CAAA;AAC/B,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,UAAA,IAAc,CAAC,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAYD,YAAA,CAAI,KAAA,CAAM,GAAA,CAAI,UAAoB,CAAA;AACpD,EAAA,MAAM,iBAAiB,GAAA,CAAI,gBAAA,GAAmBA,aAAI,KAAA,CAAM,GAAA,CAAI,gBAA0B,CAAA,GAAI,IAAA;AAG1F,EAAA,MAAM,WAAW,GAAA,CAAI,QAAA;AACrB,EAAA,MAAM,IAAA,GAAO,QAAA,GAAW,iBAAA,CAAkB,QAAA,CAAS,IAAI,CAAA,GAAI,EAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,QAAA,GAAW,eAAA,CAAgB,QAAA,CAAS,WAAW,CAAA,GAAI,EAAA;AAGvE,EAAA,MAAM,QAAQ,GAAA,CAAI,QAAA;AAClB,EAAA,MAAM,sBAAA,GAAyB,MAAA,CAAO,KAAA,EAAO,wBAAA,IAA4B,CAAC,CAAA;AAC1E,EAAA,MAAM,oBAAA,GAAuB,MAAA,CAAO,KAAA,EAAO,sBAAA,IAA0B,CAAC,CAAA;AACtE,EAAA,MAAM,cAAA,GAAiB,MAAA,CAAO,KAAA,EAAO,gBAAA,IAAoB,CAAC,CAAA;AAC1D,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,KAAA,EAAO,cAAA,IAAkB,CAAC,CAAA;AACtD,EAAA,MAAM,kBAAA,GAAqB,MAAA,CAAO,KAAA,EAAO,mBAAA,IAAuB,CAAC,CAAA;AAGjE,EAAA,MAAM,YAAA,GAAe,OAAO,SAAS,CAAA;AACrC,EAAA,MAAM,WAAW,SAAA,GAAY,sBAAA;AAC7B,EAAA,MAAM,SAAS,QAAA,GAAW,oBAAA;AAC1B,EAAA,MAAM,YAAY,SAAA,GAAY,cAAA;AAC9B,EAAA,MAAM,UAAU,SAAA,GAAY,YAAA;AAC5B,EAAA,MAAM,SAAS,OAAA,GAAU,kBAAA;AACzB,EAAA,MAAM,qBAAA,GAAwB,OAAO,QAAQ,CAAA;AAC7C,EAAA,MAAM,mBAAA,GAAsB,OAAO,MAAM,CAAA;AACzC,EAAA,MAAM,aAAA,GAAgB,OAAO,SAAS,CAAA;AACtC,EAAA,MAAM,WAAA,GAAc,OAAO,OAAO,CAAA;AAClC,EAAA,MAAM,iBAAA,GAAoB,OAAO,MAAM,CAAA;AAGvC,EAAA,MAAM,KAAK,GAAA,CAAI,WAAA;AACf,EAAA,MAAM,cAAc,EAAA,GAAKA,YAAA,CAAI,KAAA,CAAM,EAAA,CAAG,YAAsB,CAAA,GAAI,EAAA;AAChE,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,EAAA,EAAI,WAAA,IAAe,CAAC,CAAA;AAC9C,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,EAAA,EAAI,SAAS,CAAA;AACvC,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,EAAA,EAAI,SAAS,CAAA;AACvC,EAAA,MAAM,YAAY,EAAA,EAAI,UAAA,GAAa,uBAAA,CAAwB,EAAA,CAAG,UAAU,CAAA,GAAI,IAAA;AAC5E,EAAA,MAAM,WAAW,EAAA,EAAI,QAAA,GAAW,oBAAA,CAAqB,EAAA,CAAG,QAAQ,CAAA,GAAI,IAAA;AAGpE,EAAA,MAAM,KAAK,GAAA,CAAI,kBAAA;AACf,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,EAAA,EAAI,SAAS,CAAA;AACvC,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,EAAA,EAAI,iBAAiB,CAAA;AAGpD,EAAA,MAAM,WAAA,GAAc,WAAA,CAAY,GAAA,CAAI,SAAS,CAAA;AAC7C,EAAA,IAAI,aAAA,GAA+B,IAAA;AACnC,EAAA,IAAI,cAAA,GAAgC,IAAA;AACpC,EAAA,IAAI,QAAA,GAAmC,IAAA;AACvC,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,EAAA,GAAK,WAAA;AACX,IAAA,aAAA,GAAgBA,YAAA,CAAI,KAAA,CAAM,EAAA,CAAG,aAAuB,CAAA;AACpD,IAAA,cAAA,GAAiB,MAAA,CAAO,EAAA,CAAG,MAAA,IAAU,GAAG,CAAA;AACxC,IAAA,QAAA,GAAW;AAAA,MACT,YAAA,EAAc,aAAA;AAAA,MACd,MAAA,EAAQ,cAAA;AAAA,MACR,sBAAA,EAAwB,MAAA,CAAO,EAAA,CAAG,wBAAA,IAA4B,CAAC,CAAA;AAAA,MAC/D,gBAAA,EAAkB,MAAA,CAAO,EAAA,CAAG,kBAAA,IAAsB,CAAC,CAAA;AAAA,MACnD,WAAA,EAAa,MAAA,CAAO,EAAA,CAAG,YAAA,IAAgB,CAAC,CAAA;AAAA,MACxC,YAAA,EAAe,GAAG,YAAA,IAAiC,IAAA;AAAA,MACnD,iBAAA,EAAmB,MAAA,CAAO,EAAA,CAAG,kBAAA,IAAsB,CAAC;AAAA,KACtD;AAAA,EACF;AAGA,EAAA,MAAM,gBAAA,GAAmB,WAAA,CAAY,GAAA,CAAI,iBAAiB,CAAA;AAC1D,EAAA,MAAM,sBAAsB,gBAAA,KAAqB,IAAA;AAEjD,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,YAAA,EAAc,EAAA;AAAA,IACd,WAAA;AAAA,IACA,WAAW,IAAI,IAAA,CAAK,SAAA,GAAY,GAAI,EAAE,WAAA,EAAY;AAAA,IAClD,SAAA;AAAA,IACA,cAAA;AAAA,IACA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,sBAAA;AAAA,IACA,oBAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,kBAAA;AAAA,IACA,gBAAA,EAAkB,YAAA;AAAA,IAClB,qBAAA;AAAA,IACA,mBAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,QAAA;AAAA,IACA,oBAAA,EAAsB,SAAA;AAAA,IACtB,yBAAA,EAA2B,cAAA;AAAA,IAC3B,aAAA;AAAA,IACA,cAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAA,EAAU;AAAA,MACR,sBAAA;AAAA,MACA,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,UAAA,EAAY;AAAA,MACV,WAAA;AAAA,MACA,UAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA,EAAmB,EAAE,SAAA,EAAW,cAAA,EAAe;AAAA,IAC/C,UAAA;AAAA,IACA,UAAA,EAAY,CAAA;AAAA;AAAA,IACZ,eAAA,EAAiB,CAAA;AAAA;AAAA,IACjB,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,SAAS,sBAAsB,GAAA,EAAgC;AAC7D,EAAA,MAAM,GAAA,GAAM,GAAA;AACZ,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA,CAAO,GAAA,CAAI,QAAA,IAAY,CAAC,CAAA;AAAA,IAClC,OAAA,EAASA,YAAA,CAAI,KAAA,CAAM,GAAA,CAAI,QAAkB;AAAA,GAC3C;AACF;AAEA,SAAS,iBAAA,CAAkB,KAAc,YAAA,EAAoC;AAC3E,EAAA,MAAM,GAAA,GAAM,GAAA;AACZ,EAAA,OAAO;AAAA,IACL,YAAA;AAAA,IACA,WAAA,EAAaA,YAAA,CAAI,KAAA,CAAM,GAAA,CAAI,aAAuB,CAAA;AAAA,IAClD,WAAA,EAAa,EAAA;AAAA;AAAA,IACb,WAAA,EAAa,MAAA,CAAO,GAAA,CAAI,QAAA,IAAY,CAAC,CAAA;AAAA,IACrC,YAAA,EAAc,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AAAA,IACvC,QAAA,EAAU,OAAA,CAAQ,GAAA,CAAI,SAAS;AAAA,GACjC;AACF;AAEA,SAAS,WAAW,GAAA,EAAqB;AACvC,EAAA,MAAM,GAAA,GAAM,GAAA;AACZ,EAAA,MAAM,gBAAgB,GAAA,CAAI,UAAA;AAG1B,EAAA,IAAI,SAAA,GAAgC,OAAA;AACpC,EAAA,IAAI,MAAA,GAAwB,IAAA;AAC5B,EAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,EAAA,IAAI,gBAAA,GAAkC,IAAA;AACtC,EAAA,IAAI,kBAAA,GAAoC,IAAA;AACxC,EAAA,IAAI,kBAAA,GAAsC,IAAA;AAC1C,EAAA,IAAI,iBAAA,GAAmC,IAAA;AACvC,EAAA,IAAI,cAAA,GAAiB,CAAA;AAErB,EAAA,IAAI,aAAA,EAAe;AAGjB,IAAA,MAAM,aAAA,GAAgB,OAAO,aAAA,CAAc,aAAA,KAAkB,aACxD,aAAA,CAAc,aAAA,EAA+B,GAC9C,aAAA,CAAc,UAAU,MAAA,GAAY,OAAA,GACpC,aAAA,CAAc,MAAA,KAAW,SAAY,QAAA,GACrC,IAAA;AAGJ,IAAA,MAAM,cAAe,aAAA,CAA0C,OAAA;AAC/D,IAAA,MAAM,SAAS,CAAC,IAAA,KACb,cAAc,IAAI,CAAA,IAAK,cAAc,IAAI,CAAA;AAE5C,IAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,MAAA,MAAM,KAAA,GAAQ,OAAO,OAAO,CAAA;AAC5B,MAAA,SAAA,GAAY,OAAA;AACZ,MAAA,MAAA,GAAS,MAAA,CAAO,KAAA,EAAO,MAAA,IAAU,GAAG,CAAA;AAGpC,MAAA,MAAM,aAAa,KAAA,EAAO,YAAA;AAC1B,MAAA,MAAM,YAAY,UAAA,EAAY,IAAA;AAC9B,MAAA,IAAI,SAAA,EAAW;AAGb,QAAA,MAAM,WAAA,GAAe,UAAU,OAAA,IAAW,SAAA;AAC1C,QAAA,MAAM,QAAA,GAAW,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA,KAAM,WAAA,CAAY,CAAC,CAAA,KAAM,MAAS,CAAA;AAClF,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,gBAAA,GAAmB,SAAS,WAAA,EAAY;AACxC,UAAA,MAAM,SAAA,GAAY,YAAY,QAAQ,CAAA;AACtC,UAAA,IAAI,qBAAqB,QAAA,EAAU;AACjC,YAAA,kBAAA,GAAqB,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,GACvC,SAAA,CAAwB,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAA,GAC7C,IAAA;AAAA,UACN,CAAA,MAAO;AACL,YAAA,kBAAA,GAAqB,SAAA,IAAa,IAAA,GAAO,MAAA,CAAO,SAAS,CAAA,GAAI,IAAA;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,cAAc,KAAA,EAAO,kBAAA;AAC3B,MAAA,iBAAA,GAAoB,aAAa,IAAA,IAAQ,IAAA,GAAO,MAAA,CAAO,WAAA,CAAY,IAAI,CAAA,GAAI,IAAA;AAAA,IAC7E,CAAA,MAAA,IAAW,kBAAkB,QAAA,EAAU;AACrC,MAAA,MAAM,MAAA,GAAS,OAAO,QAAQ,CAAA;AAC9B,MAAA,SAAA,GAAY,QAAA;AACZ,MAAA,OAAA,GAAU,MAAA,CAAO,MAAA,EAAQ,EAAA,IAAM,GAAG,CAAA;AAAA,IACpC;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAA,CAAO,GAAA,CAAI,EAAA,IAAM,GAAG,CAAA;AAAA,IAC7B,YAAA,EAAc,MAAA,CAAO,GAAA,CAAI,UAAA,IAAc,GAAG,CAAA;AAAA,IAC1C,cAAA;AAAA,IACA,YAAA,EAAcA,YAAA,CAAI,KAAA,CAAM,GAAA,CAAI,aAAuB,CAAA;AAAA,IACnD,SAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,IACA,kBAAA;AAAA,IACA,kBAAA;AAAA,IACA,iBAAA;AAAA,IACA,cAAA,EAAgBA,YAAA,CAAI,KAAA,CAAM,GAAA,CAAI,eAAyB;AAAA,GACzD;AACF;AAGA,SAAS,YAAY,GAAA,EAA8B;AACjD,EAAA,IAAI,GAAA,KAAQ,MAAA,IAAa,GAAA,KAAQ,IAAA,EAAM,OAAO,IAAA;AAC9C,EAAA,MAAM,GAAA,GAAM,GAAA;AACZ,EAAA,IAAI,MAAA,IAAU,GAAA,EAAK,OAAO,GAAA,CAAI,IAAA;AAC9B,EAAA,IAAI,MAAA,IAAU,KAAK,OAAO,IAAA;AAE1B,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,wBAAwB,GAAA,EAA6B;AAC5D,EAAA,MAAM,KAAA,GAAQ,YAAY,GAAG,CAAA;AAC7B,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,OAAO,gBAAgB,KAAK,CAAA;AAC9B;AAEA,SAAS,qBAAqB,GAAA,EAA6B;AACzD,EAAA,MAAM,KAAA,GAAQ,YAAY,GAAG,CAAA;AAC7B,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,GAAA,GAAMA,YAAA,CAAI,KAAA,CAAM,KAAe,CAAA;AACrC,EAAA,OAAO,GAAA,KAAQ,QAAQ,IAAA,GAAO,GAAA;AAChC;AAWA,SAAS,kBAAkB,GAAA,EAAsC;AAC/D,EAAA,MAAM,GAAA,GAAM,GAAA;AACZ,EAAA,MAAM,GAAA,GAAO,GAAA,CAAI,cAAA,EAA8B,GAAA,CAAI,CAAC,MAAM,MAAA,CAAO,CAAC,CAAC,CAAA,IAAK,EAAC;AACzE,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,CAAC,CAAA;AACnC,EAAA,OAAO,EAAE,aAAA,EAAe,GAAA,EAAK,KAAA,EAAM;AACrC;AAEA,SAAS,yBAAyB,GAAA,EAA0B;AAC1D,EAAA,MAAM,GAAA,GAAM,GAAA;AACZ,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,WAAA,IAAe,CAAC,CAAA;AAC9C,EAAA,OAAO,eAAA,CAAgB,GAAA,CAAI,UAAA,EAAY,UAAU,CAAA;AACnD;AAIA,eAAsB,iBAAA,CACpB,QAAA,EACA,MAAA,EACA,KAAA,EACiC;AACjC,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,eAAe,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AACjE,IAAA,OAAO,kBAAkB,MAAM,CAAA;AAAA,EACjC,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAEA,eAAsB,uBAAA,CACpB,QAAA,EACA,WAAA,EACA,MAAA,EACA,KAAA,EACiC;AACjC,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,uBAAuB,CAAC,WAAA,EAAa,MAAA,EAAQ,KAAK,CAAC,CAAA;AACtF,IAAA,OAAO,kBAAkB,MAAM,CAAA;AAAA,EACjC,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAEA,eAAsB,0BAAA,CACpB,QAAA,EACA,OAAA,EACA,MAAA,EACA,KAAA,EACiC;AACjC,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,0BAA0B,CAAC,OAAA,EAAS,MAAA,EAAQ,KAAK,CAAC,CAAA;AACrF,IAAA,OAAO,kBAAkB,MAAM,CAAA;AAAA,EACjC,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAQA,IAAM,YAAA,GAAuC;AAAA,EAC3C,SAAA,EAAW,CAAC,WAAA,EAAa,cAAA,EAAgB,SAAS,CAAA;AAAA,EAClD,YAAA,EAAc,CAAC,cAAc,CAAA;AAAA,EAC7B,OAAA,EAAS,CAAC,SAAS,CAAA;AAAA,EACnB,IAAA,EAAM,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,EAC3B,UAAA,EAAY,CAAC,YAAY,CAAA;AAAA,EACzB,SAAA,EAAW,CAAC,WAAW;AACzB,CAAA;AAEA,eAAsB,wBAAA,CACpB,QAAA,EACA,KAAA,EACA,MAAA,EACA,KAAA,EACiC;AACjC,EAAA,MAAM,MAAA,GAAS,aAAa,KAAK,CAAA;AACjC,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO,YAAY,YAAY;AAC7B,MAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,sBAAA,EAAwB,CAAC,aAAA,CAAc,KAAK,CAAA,EAAG,MAAA,EAAQ,KAAK,CAAC,CAAA;AAChG,MAAA,OAAO,kBAAkB,MAAM,CAAA;AAAA,IACjC,CAAA,EAAG,SAAS,OAAO,CAAA;AAAA,EACrB;AACA,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,uBAAA,EAAyB,CAAC,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA,EAAG,MAAA,EAAQ,KAAK,CAAC,CAAA;AACtG,IAAA,OAAO,kBAAkB,MAAM,CAAA;AAAA,EACjC,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAIA,eAAsB,sBAAA,CACpB,UACA,YAAA,EAC4B;AAC5B,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,SAAS,MAAM,QAAA,CAAS,KAAK,mBAAA,EAAqB,CAAC,YAAY,CAAC,CAAA;AACtE,IAAA,MAAM,UAAA,GAAa,yBAAyB,MAAM,CAAA;AAElD,IAAA,IAAI,CAAC,UAAA,CAAW,WAAA,IAAe,UAAA,CAAW,WAAA,KAAgB,OAAO,OAAO,IAAA;AACxE,IAAA,OAAO,UAAA;AAAA,EACT,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAEA,eAAsB,sBAAA,CACpB,UACA,aAAA,EACuB;AACvB,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,SAAS,MAAM,QAAA,CAAS,KAAK,mBAAA,EAAqB,CAAC,aAAa,CAAC,CAAA;AACvE,IAAA,OAAQ,MAAA,CAAqB,IAAI,wBAAwB,CAAA;AAAA,EAC3D,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAIA,eAAsB,mBAAA,CACpB,QAAA,EACA,YAAA,EACA,MAAA,EACA,KAAA,EACwC;AACxC,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,4BAA4B,CAAC,YAAA,EAAc,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC5F,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,MAAM,OAAA,GAAW,GAAA,CAAI,OAAA,IAAyB,EAAC;AAC/C,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,CAAC,CAAA;AACnC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAQ,GAAA,CAAI,CAAC,MAAM,iBAAA,CAAkB,CAAA,EAAG,YAAY,CAAC,CAAA;AAAA,MAC3D,KAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAEA,eAAsB,6BAAA,CACpB,QAAA,EACA,YAAA,EACA,QAAA,EACA,QACA,KAAA,EACwC;AACxC,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,uCAAA,EAAyC,CAAC,YAAA,EAAc,QAAA,EAAU,MAAA,EAAQ,KAAK,CAAC,CAAA;AACnH,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,MAAM,OAAA,GAAW,GAAA,CAAI,OAAA,IAAyB,EAAC;AAC/C,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,CAAC,CAAA;AACnC,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,QAAQ,GAAA,CAAI,CAAC,MAAM,iBAAA,CAAkB,CAAA,EAAG,YAAY,CAAC,CAAA;AAAA,MAC3D,KAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAIA,eAAsB,iBAAA,CACpB,QAAA,EACA,YAAA,EACA,MAAA,EACA,KAAA,EAC6B;AAC7B,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,eAAe,CAAC,YAAA,EAAc,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC/E,IAAA,OAAQ,MAAA,CAAqB,IAAI,qBAAqB,CAAA;AAAA,EACxD,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAIA,eAAsB,YAAA,CACpB,UACA,YAAA,EACkB;AAClB,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,SAAS,MAAM,QAAA,CAAS,KAAK,mBAAA,EAAqB,CAAC,YAAY,CAAC,CAAA;AACtE,IAAA,OAAQ,MAAA,CAAqB,IAAI,UAAU,CAAA;AAAA,EAC7C,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;AAoCA,SAAS,yBAAyB,UAAA,EAMhC;AACA,EAAA,IAAI,CAAC,UAAA,IAAc,OAAO,UAAA,KAAe,QAAA,EAAU;AACjD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,KAAK,SAAA,CAAU,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,EAChF;AACA,EAAA,MAAM,EAAA,GAAK,UAAA;AACX,EAAA,MAAM,QACJ,OAAO,EAAA,CAAG,kBAAkB,UAAA,GAAa,EAAA,CAAG,eAAc,GAAI,IAAA;AAChE,EAAA,MAAM,WAAY,OAAO,EAAA,CAAG,aAAA,KAAkB,UAAA,GAAa,GAAG,OAAA,GAAU,EAAA;AAExE,EAAA,IAAI,KAAA,KAAU,OAAA,IAAW,QAAA,CAAS,KAAA,KAAU,MAAA,EAAW;AACrD,IAAA,MAAM,QAAQ,QAAA,CAAS,KAAA;AACvB,IAAA,MAAM,aAAa,OAAO,KAAA,EAAO,kBAAkB,UAAA,GAAa,KAAA,CAAM,eAAc,GAAI,IAAA;AACxF,IAAA,MAAM,SAAU,OAAO,KAAA,EAAO,aAAA,KAAkB,UAAA,GAAa,MAAM,OAAA,GAAU,KAAA;AAE7E,IAAA,IAAI,UAAA,KAAe,QAAA,IAAY,MAAA,EAAQ,MAAA,KAAW,MAAA,EAAW;AAC3D,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,cAAA;AAAA,QACX,OAAA,EAAS,MAAA,CAAO,MAAA,CAAO,MAAM,EAAE,QAAA,EAAS;AAAA,QACxC,WAAA,EAAa,IAAA;AAAA,QACb,QAAA,EAAU,IAAA;AAAA,QACV,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,IAAI,UAAA,KAAe,aAAA,IAAiB,MAAA,EAAQ,WAAA,KAAgB,MAAA,EAAW;AACrE,MAAA,MAAM,cAAc,MAAA,CAAO,WAAA;AAC3B,MAAA,MAAM,OAAA,GAAU,WAAA,GAAc,GAAG,CAAA,IAAK,cAAc,CAAC,CAAA;AACrD,MAAA,MAAM,WAAA,GAAc,WAAA,GAAc,GAAG,CAAA,IAAK,cAAc,CAAC,CAAA;AACzD,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,mBAAA;AAAA,QACX,OAAA,EAAS,MAAA,CAAO,OAAO,CAAA,CAAE,QAAA,EAAS;AAAA,QAClC,WAAA,EAAa,OAAO,WAAW,CAAA;AAAA,QAC/B,QAAA,EAAU,IAAA;AAAA,QACV,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,IAAI,KAAA,KAAU,UAAA,IAAc,QAAA,CAAS,QAAA,KAAa,MAAA,EAAW;AAC3D,IAAA,MAAM,WAAW,QAAA,CAAS,QAAA;AAC1B,IAAA,MAAM,aACJ,OAAO,QAAA,EAAU,kBAAkB,UAAA,GAAa,QAAA,CAAS,eAAc,GAAI,IAAA;AAC7E,IAAA,MAAM,SAAU,OAAO,QAAA,EAAU,aAAA,KAAkB,UAAA,GAAa,SAAS,OAAA,GAAU,QAAA;AAEnF,IAAA,IAAI,UAAA,KAAe,UAAA,IAAc,MAAA,EAAQ,QAAA,KAAa,MAAA,EAAW;AAC/D,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,oBAAA;AAAA,QACX,OAAA,EAAS,IAAA;AAAA,QACT,WAAA,EAAa,IAAA;AAAA,QACb,QAAA,EAAU,MAAA,CAAO,MAAA,CAAO,QAAQ,CAAA;AAAA,QAChC,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,IAAI,UAAA,KAAe,mBAAA,IAAuB,MAAA,EAAQ,iBAAA,KAAsB,MAAA,EAAW;AACjF,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,8BAAA;AAAA,QACX,OAAA,EAAS,IAAA;AAAA,QACT,WAAA,EAAa,IAAA;AAAA,QACb,QAAA,EAAU,IAAA;AAAA,QACV,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,IAAI,UAAA,KAAe,aAAA,IAAiB,MAAA,EAAQ,WAAA,KAAgB,MAAA,EAAW;AACrE,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,wBAAA;AAAA,QACX,OAAA,EAAS,IAAA;AAAA,QACT,WAAA,EAAa,IAAA;AAAA,QACb,QAAA,EAAU,IAAA;AAAA,QACV,aAAA,EAAe;AAAA,OACjB;AAAA,IACF;AACA,IAAA,IAAI,UAAA,KAAe,QAAA,IAAY,MAAA,EAAQ,MAAA,KAAW,MAAA,EAAW;AAC3D,MAAA,OAAO;AAAA,QACL,SAAA,EAAW,kBAAA;AAAA,QACX,OAAA,EAAS,IAAA;AAAA,QACT,WAAA,EAAa,IAAA;AAAA,QACb,QAAA,EAAU,IAAA;AAAA,QACV,aAAA,EAAe,KAAK,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA;AAAA,OACxD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,IAAI,KAAA;AAAA,IACR,CAAA,0CAAA,EAA6C,IAAA,CAAK,SAAA,CAAU,UAAU,CAAC,CAAA;AAAA,GACzE;AACF;AAEA,eAAsB,kBAAA,CACpB,QAAA,EACA,YAAA,EACA,MAAA,EACA,KAAA,EACkC;AAClC,EAAA,OAAO,YAAY,YAAY;AAC7B,IAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,IAAA,CAAK,4BAA4B,CAAC,YAAA,EAAc,MAAA,EAAQ,KAAK,CAAC,CAAA;AAC5F,IAAA,MAAM,GAAA,GAAM,MAAA;AACZ,IAAA,MAAM,MAAA,GAA+B,GAAA,CAAI,MAAA,EAAsB,GAAA,CAAI,CAAC,GAAA,KAAQ;AAC1E,MAAA,MAAM,KAAA,GAAQ,GAAA;AACd,MAAA,OAAO;AAAA,QACL,GAAG,wBAAA,CAAyB,KAAA,CAAM,WAAW,CAAA;AAAA,QAC7C,OAAA,EAAS,OAAA,CAAQ,KAAA,CAAM,OAAO;AAAA,OAChC;AAAA,IACF,CAAC,KAAK,EAAC;AACP,IAAA,OAAO;AAAA,MACL,MAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,CAAC,CAAA;AAAA,MAC5B,YAAA,EAAc,MAAA,CAAO,GAAA,CAAI,aAAA,IAAiB,CAAC,CAAA;AAAA,MAC3C,cAAA,EAAgB,MAAA,CAAO,GAAA,CAAI,eAAA,IAAmB,CAAC;AAAA,KACjD;AAAA,EACF,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;;;AC9qBA,IAAA,qBAAA,GAAA;AAAA,EACE;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,iBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,SAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,mBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,6BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,uCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,uCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,0BAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,qDAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,2EAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,wDAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,uCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,0BAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,+DAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,4DAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,qEAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,iEAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,yFAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,gDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,wDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,gDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,kDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,gFAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,4CAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,kDAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,6CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,4CAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,aAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,qBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,wBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,sBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,2BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,8BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,4BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,6BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,0BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,aAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,0BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,QAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,aAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,oDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,sBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,6DAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,aAAA;AAAA,IACR,IAAA,EAAQ,aAAA;AAAA,IACR,MAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,+EAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,mFAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ,+EAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,0BAAA;AAAA,QACR,IAAA,EAAQ,mFAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,oEAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,uCAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,iEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oEAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,sDAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,gEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ,iEAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF;AAEJ,CAAA;;;AC7pCA,IAAA,eAAA,GAAA;AAAA,EACE;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,iBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,SAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,iBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,YAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,iEAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,aAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,wBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,6BAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,4CAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,4DAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,iFAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,mEAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,wEAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,iBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,aAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,uCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,uCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,0BAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,qDAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,2EAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,wDAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,uCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,0BAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,+DAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,wEAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,wCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,qEAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,iEAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,yFAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,gDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,qBAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,iEAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,mEAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,2FAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,iDAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,gFAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,+CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,kDAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,IAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,uCAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,iBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,gCAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,mBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,yBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,mBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,oBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,MAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,gBAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,aAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,eAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,cAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,uDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,iBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,UAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,+CAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,cAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,aAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,oDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,OAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,SAAW,EAAC;AAAA,QACZ,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,cAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,4CAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,wDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,6EAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,uDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,QAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,+EAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,kDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,sBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,qEAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,kEAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,2BAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,OAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,WAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,2CAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,QAAU,EAAC;AAAA,QACX,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,kBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,MAAA;AAAA,IACR,IAAA,EAAQ,kBAAA;AAAA,IACR,cAAA,EAAkB;AAAA,GACpB;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,QAAA;AAAA,IACR,IAAA,EAAQ,wDAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAQ,yDAAA;AAAA,IACR,KAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,WAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,cAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,iBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA,WACV;AAAA,UACA;AAAA,YACE,IAAA,EAAQ,UAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA,OACtB;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,iBAAA;AAAA,QACR,MAAA,EAAU;AAAA,UACR;AAAA,YACE,IAAA,EAAQ,YAAA;AAAA,YACR,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,OAAA,EAAW;AAAA,UACT;AAAA,YACE,IAAA,EAAQ;AAAA;AACV,SACF;AAAA,QACA,gBAAA,EAAoB;AAAA;AACtB;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,aAAA;AAAA,IACR,IAAA,EAAQ,aAAA;AAAA,IACR,MAAA,EAAU;AAAA,MACR;AAAA,QACE,IAAA,EAAQ,OAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,uBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,kGAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,2GAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,wDAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,2FAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,+EAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,mFAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,sBAAA;AAAA,QACR,IAAA,EAAQ,+EAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,0BAAA;AAAA,QACR,IAAA,EAAQ,mFAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,oEAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,uCAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,iEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oEAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,8FAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,oFAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,4GAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,yEAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,UAAY;AAAC,GACf;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,oCAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uCAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,uCAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,yCAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,+DAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ,yFAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ,gDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,yCAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,gBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,qCAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,oCAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,6BAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,UAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,kDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,iBAAA;AAAA,QACR,IAAA,EAAQ,mDAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,gCAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,yCAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,8CAAA;AAAA,IACR,IAAA,EAAQ,QAAA;AAAA,IACR,OAAA,EAAW;AAAA,MACT;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,qBAAA;AAAA,QACR,IAAA,EAAQ,mEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF,GACF;AAAA,EACA;AAAA,IACE,IAAA,EAAQ,OAAA;AAAA,IACR,IAAA,EAAQ,kCAAA;AAAA,IACR,IAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAY;AAAA,MACV;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,kGAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,2GAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,WAAA;AAAA,QACR,IAAA,EAAQ,wDAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ,2FAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,cAAA;AAAA,QACR,IAAA,EAAQ,gEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,kBAAA;AAAA,QACR,IAAA,EAAQ,iEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ,8FAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,oFAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,uBAAA;AAAA,QACR,IAAA,EAAQ,4GAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,yEAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,mBAAA;AAAA,QACR,IAAA,EAAQ,oCAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,wBAAA;AAAA,QACR,IAAA,EAAQ,yCAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,oBAAA;AAAA,QACR,IAAA,EAAQ,qCAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,YAAA;AAAA,QACR,IAAA,EAAQ,6BAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,eAAA;AAAA,QACR,IAAA,EAAQ,gCAAA;AAAA,QACR,IAAA,EAAQ;AAAA,OACV;AAAA,MACA;AAAA,QACE,IAAA,EAAQ,6BAAA;AAAA,QACR,IAAA,EAAQ,8CAAA;AAAA,QACR,IAAA,EAAQ;AAAA;AACV;AACF;AAEJ,CAAA;;;ACzyDA,SAASE,YAAAA,CAAe,IAAsB,eAAA,EAAsC;AAClF,EAAA,OAAO,EAAA,EAAG,CAAE,KAAA,CAAM,CAAC,KAAA,KAAmB;AACpC,IAAA,MAAM,IAAI,QAAA;AAAA,MACR,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,iBAAA;AAAA,MACzC;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAkBA,eAAsB,mCAAA,CACpB,UACA,YAAA,EACmB;AACnB,EAAA,OAAOA,aAAY,YAAY;AAC7B,IAAA,MAAM,SAAS,MAAM,QAAA,CAAS,KAAK,gCAAA,EAAkC,CAAC,YAAY,CAAC,CAAA;AACnF,IAAA,MAAM,MAAM,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,GAAK,SAAuB,EAAC;AAC7D,IAAA,OAAO,IAAI,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,EACjC,CAAA,EAAG,SAAS,OAAO,CAAA;AACrB;;;ACkDO,IAAM,gBAAN,MAAoB;AAAA,EACR,cAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACT,cAAA,GAAqC,IAAA;AAAA,EACrC,oBAAA,GAAwC,IAAA;AAAA,EACxC,qBAAA,GAAyC,IAAA;AAAA,EAEjD,YAAY,MAAA,EAA6B;AAEvC,IAAA,MAAM,cAAc,MAAA,CAAO,KAAA,GAAQ,cAAA,CAAe,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAClE,IAAA,IAAA,CAAK,cAAA,GAAiB;AAAA,MACpB,GAAG,MAAA;AAAA,MACH,UAAA,EAAY,MAAA,CAAO,UAAA,IAAc,WAAA,EAAa,UAAA,IAAc,EAAA;AAAA,MAC5D,MAAA,EAAQ,MAAA,CAAO,MAAA,IAAU,WAAA,EAAa,MAAA,IAAU,EAAA;AAAA,MAChD,aAAA,EAAe,MAAA,CAAO,aAAA,IAAiB,WAAA,EAAa,aAAA,IAAiB,EAAA;AAAA,MACrE,cAAA,EAAgB,MAAA,CAAO,cAAA,IAAkB,WAAA,EAAa,cAAA,IAAkB;AAAA,KAC1E;AAEA,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,WAAA,EAAa,SACtC,IAAA,CAAK,cAAA,CAAe,UAAA,CAAW,OAAA,CAAQ,SAAS,IAAI,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,GAAI,KAAA;AAChF,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,SAAA,CAAU,KAAK,CAAA;AAEpC,IAAA,IAAA,CAAK,mBAAmB,IAAI,gBAAA;AAAA,MAC1B,KAAK,cAAA,CAAe,UAAA;AAAA,MACpB,KAAK,cAAA,CAAe,MAAA;AAAA,MACpB,MAAA,CAAO;AAAA,KACT;AAGA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,UAAA,IAAc,IAAA,CAAK,eAAe,MAAA,EAAQ;AAChE,MAAA,IAAA,CAAK,iBAAiB,eAAA,EAAgB;AAAA,IACxC;AAAA,EACF;AAAA;AAAA;AAAA,EAKA,IAAI,YAAA,GAAoC;AACtC,IAAA,OAAO,EAAE,GAAG,IAAA,CAAK,cAAA,EAAe;AAAA,EAClC;AAAA;AAAA,EAGA,IAAI,WAAA,GAAuB;AACzB,IAAA,OAAO,KAAK,SAAA,CAAU,WAAA;AAAA,EACxB;AAAA;AAAA;AAAA,EAKA,mBAAA,GAA6C;AAC3C,IAAA,OAAO,IAAA,CAAK,iBAAiB,SAAA,EAAU;AAAA,EACzC;AAAA;AAAA,EAGA,yBAAyB,QAAA,EAA+D;AACtF,IAAA,OAAO,IAAA,CAAK,gBAAA,CAAiB,SAAA,CAAU,QAAQ,CAAA;AAAA,EACjD;AAAA;AAAA,EAIA,MAAc,WAAA,GAAoC;AAChD,IAAA,IAAI,IAAA,CAAK,cAAA,EAAgB,OAAO,IAAA,CAAK,cAAA;AACrC,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,MAAA,EAAQ;AAC/B,MAAA,MAAM,IAAI,SAAS,sBAAsB,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,IAAA,CAAK,eAAe,QAAA,EAAU;AAChC,MAAA,IAAA,CAAK,cAAA,GAAiB,KAAK,cAAA,CAAe,QAAA;AAC1C,MAAA,OAAO,IAAA,CAAK,cAAA;AAAA,IACd;AACA,IAAA,IAAA,CAAK,iBAAiB,MAAM,cAAA;AAAA,MAC1B,KAAK,cAAA,CAAe,MAAA;AAAA,MACpB,KAAK,cAAA,CAAe;AAAA,KACtB;AACA,IAAA,OAAO,IAAA,CAAK,cAAA;AAAA,EACd;AAAA,EAEA,MAAc,iBAAA,GAAuC;AACnD,IAAA,IAAI,IAAA,CAAK,oBAAA,EAAsB,OAAO,IAAA,CAAK,oBAAA;AAC3C,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,aAAA,EAAe;AACtC,MAAA,MAAM,IAAI,SAAS,iHAAiH,CAAA;AAAA,IACtI;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,EAAY;AACxC,IAAA,IAAA,CAAK,uBAAuB,MAAM,cAAA;AAAA,MAChC,qBAAA;AAAA,MACA,KAAK,cAAA,CAAe,aAAA;AAAA,MACpB;AAAA,KACF;AACA,IAAA,OAAO,IAAA,CAAK,oBAAA;AAAA,EACd;AAAA,EAEA,MAAc,kBAAA,GAAwC;AACpD,IAAA,IAAI,IAAA,CAAK,qBAAA,EAAuB,OAAO,IAAA,CAAK,qBAAA;AAC5C,IAAA,IAAI,CAAC,IAAA,CAAK,cAAA,CAAe,cAAA,EAAgB;AACvC,MAAA,MAAM,IAAI,SAAS,oHAAoH,CAAA;AAAA,IACzI;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,WAAA,EAAY;AACxC,IAAA,IAAA,CAAK,wBAAwB,MAAM,cAAA;AAAA,MACjC,eAAA;AAAA,MACA,KAAK,cAAA,CAAe,cAAA;AAAA,MACpB;AAAA,KACF;AACA,IAAA,OAAO,IAAA,CAAK,qBAAA;AAAA,EACd;AAAA;AAAA,EAIA,IAAY,MAAA,GAAS;AACnB,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,KAAK,cAAA,CAAe,aAAA;AAAA,MACnC,UAAA,EAAY,KAAK,cAAA,CAAe,UAAA;AAAA,MAChC,OAAA,EAAS,KAAK,cAAA,CAAe;AAAA,KAC/B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,eAAe,MAAA,EAAqE;AACxF,IAAA,MAAM,cAAc,YAAkD;AACpE,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC9C,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAG/B,MAAA,IAAI,YAAA;AACJ,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,YAAA,GAAe,MAAM,wBAAA,CAAyB,QAAA,EAAU,MAAA,CAAO,KAAA,EAAO,QAAQ,KAAK,CAAA;AAAA,MACrF,CAAA,MAAA,IAAW,QAAQ,WAAA,EAAa;AAC9B,QAAA,YAAA,GAAe,MAAM,uBAAA,CAAwB,QAAA,EAAU,MAAA,CAAO,WAAA,EAAa,QAAQ,KAAK,CAAA;AAAA,MAC1F,CAAA,MAAA,IAAW,QAAQ,OAAA,EAAS;AAC1B,QAAA,YAAA,GAAe,MAAM,0BAAA,CAA2B,QAAA,EAAU,MAAA,CAAO,OAAA,EAAS,QAAQ,KAAK,CAAA;AAAA,MACzF,CAAA,MAAO;AACL,QAAA,YAAA,GAAe,MAAM,iBAAA,CAAkB,QAAA,EAAU,MAAA,EAAQ,KAAK,CAAA;AAAA,MAChE;AAGA,MAAA,IAAI,OAAqB,EAAC;AAC1B,MAAA,IAAI,YAAA,CAAa,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACzC,QAAA,IAAA,GAAO,MAAM,sBAAA,CAAuB,QAAA,EAAU,YAAA,CAAa,aAAa,CAAA;AAGxE,QAAA,IAAI,QAAQ,mBAAA,EAAqB;AAC/B,UAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA;AAAA,YAAI,CAAC,CAAA,KAC9B,YAAA,CAAa,QAAA,EAAU,CAAA,CAAE,EAAE,CAAA,CAAE,KAAA,CAAM,MAAM,EAAa;AAAA,WACxD;AACA,UAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAA;AACjD,UAAA,IAAA,GAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACxB,YAAA,MAAM,MAAA,GAAS,UAAU,CAAC,CAAA;AAC1B,YAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,CAAA;AAEhC,YAAA,MAAM,QAAA,uBAAe,GAAA,EAAgG;AACrH,YAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,cAAA,MAAM,MAAM,CAAA,CAAE,YAAA;AACd,cAAA,MAAM,QAAA,GAAW,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AACjC,cAAA,IAAI,QAAA,EAAU;AACZ,gBAAA,QAAA,CAAS,WAAA,IAAe,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,GAAG,CAAA;AAC9C,gBAAA,IAAI,CAAA,CAAE,SAAA,KAAc,QAAA,EAAU,QAAA,CAAS,QAAA,IAAY,CAAA;AAAA,cACrD,CAAA,MAAO;AACL,gBAAA,QAAA,CAAS,IAAI,GAAA,EAAK;AAAA,kBAChB,cAAc,CAAA,CAAE,YAAA;AAAA,kBAChB,WAAW,CAAA,CAAE,SAAA;AAAA,kBACb,WAAA,EAAa,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,GAAG,CAAA;AAAA,kBACnC,QAAA,EAAU,CAAA,CAAE,SAAA,KAAc,QAAA,GAAW,CAAA,GAAI;AAAA,iBAC1C,CAAA;AAAA,cACH;AAAA,YACF;AACA,YAAA,OAAO;AAAA,cACL,GAAG,CAAA;AAAA,cACH,gBAAA,EAAkB,MAAM,IAAA,CAAK,QAAA,CAAS,QAAQ,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,gBAC1D,cAAc,CAAA,CAAE,YAAA;AAAA,gBAChB,WAAW,CAAA,CAAE,SAAA;AAAA,gBACb,WAAA,EAAa,CAAA,CAAE,WAAA,CAAY,QAAA,EAAS;AAAA,gBACpC,UAAU,CAAA,CAAE;AAAA,eACd,CAAE;AAAA,aACJ;AAAA,UACF,CAAC,CAAA;AAAA,QACH;AAAA,MACF;AAEA,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,OAAO,MAAA,EAAO;AAAA,IAC1D,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,aAAA,KAAkB,KAAA,EAAO;AAC/C,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB;AAEA,IAAA,OAAO,YAAA;AAAA,MACL,MAAM,cAAA,CAAkB,IAAA,CAAK,eAAe,UAAA,EAAY,MAAA,EAAQ,KAAK,MAAM,CAAA;AAAA,MAC3E,WAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,cAAc,YAAA,EAAkD;AACpE,IAAA,MAAM,cAAc,YAAY;AAC9B,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC9C,MAAA,MAAM,UAAA,GAAa,MAAM,sBAAA,CAAuB,QAAA,EAAU,YAAY,CAAA;AACtE,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,MAAM,IAAA,CAAK,wBAAwB,UAAU,CAAA;AAAA,MAC/C;AACA,MAAA,OAAO,UAAA;AAAA,IACT,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,aAAA,KAAkB,KAAA,EAAO;AAC/C,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB;AAEA,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,aAAA,CAAiB,IAAA,CAAK,eAAe,UAAA,EAAY,YAAA,EAAc,KAAK,MAAM,CAAA;AAAA,IACzF,CAAA,CAAA,MAAQ;AAEN,MAAA,IAAI;AACF,QAAA,IAAA,CAAK,iBAAiB,kBAAA,EAAmB;AACzC,QAAA,OAAO,MAAM,WAAA,EAAY;AAAA,MAC3B,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,IAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAc,wBAAwB,UAAA,EAAuC;AAC3E,IAAA,MAAM,IAAA,GAAO,WAAW,QAAA,EAAU,YAAA;AAClC,IAAA,IAAI,CAAC,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AAEvC,IAAA,MAAM,GAAA,GACF,KAA+C,OAAA,IAC9C,IAAA;AACL,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,MAAA,IAAU,GAAA,CAAI,MAAA;AACtC,IAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,IAAK,WAAA,CAAY,SAAS,CAAA,EAAG;AAE3D,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,+BAAA,CAAgC,WAAW,EAAE,CAAA;AACvE,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AAErB,QAAC,IAAgC,MAAA,GAAS,MAAA;AAAA,MAC5C;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAER;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,gCAAgC,YAAA,EAAyC;AAC7E,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,kBAAA,EAAmB;AAC/C,IAAA,OAAO,mCAAA,CAAoC,UAAU,YAAY,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,yBAAyB,YAAA,EAAmD;AAChF,IAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAE9C,IAAA,OAAO,iBAAA,CAAkB,QAAA,EAAU,YAAA,EAAc,CAAA,EAAG,GAAI,CAAA;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,0BAAA,CACJ,YAAA,EACA,MAAA,EACwC;AACxC,IAAA,MAAM,cAAc,YAAY;AAC9B,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC9C,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAC/B,MAAA,IAAI,MAAA,EAAQ,cAAc,MAAA,EAAQ;AAChC,QAAA,OAAO,8BAA8B,QAAA,EAAU,YAAA,EAAc,MAAA,CAAO,YAAA,EAAc,QAAQ,KAAK,CAAA;AAAA,MACjG;AACA,MAAA,OAAO,mBAAA,CAAoB,QAAA,EAAU,YAAA,EAAc,MAAA,EAAQ,KAAK,CAAA;AAAA,IAClE,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,aAAA,KAAkB,KAAA,EAAO;AAC/C,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB;AAEA,IAAA,OAAO,YAAA;AAAA,MACL,MAAM,2BAA8B,IAAA,CAAK,cAAA,CAAe,YAAY,YAAA,EAAc,MAAA,EAAQ,KAAK,MAAM,CAAA;AAAA,MACrG,WAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,oBAAoB,YAAA,EAAwC;AAChE,IAAA,MAAM,cAAc,YAAY;AAC9B,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC9C,MAAA,OAAO,YAAA,CAAa,UAAU,YAAY,CAAA;AAAA,IAC5C,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,aAAA,KAAkB,KAAA,EAAO;AAC/C,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB;AAEA,IAAA,OAAO,YAAA;AAAA,MACL,MAAM,mBAAA,CAAuB,IAAA,CAAK,eAAe,UAAA,EAAY,YAAA,EAAc,KAAK,MAAM,CAAA;AAAA,MACtF,WAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,kBAAA,CACJ,WAAA,EACA,MAAA,EACsC;AACtC,IAAA,MAAM,cAAc,YAAkD;AACpE,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC9C,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,EAAA;AAC/B,MAAA,MAAM,eAAe,MAAM,uBAAA,CAAwB,QAAA,EAAU,WAAA,EAAa,QAAQ,KAAK,CAAA;AAEvF,MAAA,IAAI,OAAqB,EAAC;AAC1B,MAAA,IAAI,YAAA,CAAa,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AACzC,QAAA,IAAA,GAAO,MAAM,sBAAA,CAAuB,QAAA,EAAU,YAAA,CAAa,aAAa,CAAA;AAAA,MAC1E;AAEA,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,YAAA,CAAa,KAAA,EAAO,OAAO,MAAA,EAAO;AAAA,IAC1D,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,aAAA,KAAkB,KAAA,EAAO;AAC/C,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB;AAEA,IAAA,OAAO,YAAA;AAAA,MACL,MAAM,mBAAsB,IAAA,CAAK,cAAA,CAAe,YAAY,WAAA,EAAa,MAAA,EAAQ,KAAK,MAAM,CAAA;AAAA,MAC5F,WAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAa,WAAA,EAA6C;AAC9D,IAAA,OAAO,aAAgB,IAAA,CAAK,cAAA,CAAe,UAAA,EAAY,WAAA,EAAa,KAAK,MAAM,CAAA;AAAA,EACjF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,yBAAA,CACJ,YAAA,EACA,MAAA,EACuC;AACvC,IAAA,MAAM,cAAc,YAAmD;AACrE,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC9C,MAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACjC,MAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,GAAA;AAC/B,MAAA,MAAM,SAAS,MAAM,kBAAA,CAAmB,QAAA,EAAU,YAAA,EAAc,QAAQ,KAAK,CAAA;AAC7E,MAAA,MAAM,IAAA,GAAsB,MAAA,CAAO,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QACpD,YAAA;AAAA,QACA,GAAG;AAAA,OACL,CAAE,CAAA;AACF,MAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,OAAO,MAAA,EAAO;AAAA,IACpD,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,aAAA,KAAkB,KAAA,EAAO;AAC/C,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB;AAEA,IAAA,OAAO,YAAA;AAAA,MACL,MAAM,0BAA6B,IAAA,CAAK,cAAA,CAAe,YAAY,YAAA,EAAc,MAAA,EAAQ,KAAK,MAAM,CAAA;AAAA,MACpG,WAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,iCAAiC,YAAA,EAAmD;AACxF,IAAA,MAAM,cAAc,YAAyC;AAC3D,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,iBAAA,EAAkB;AAC9C,MAAA,MAAM,SAAS,MAAM,kBAAA,CAAmB,QAAA,EAAU,YAAA,EAAc,GAAG,CAAC,CAAA;AACpE,MAAA,OAAO;AAAA,QACL,aAAa,MAAA,CAAO,KAAA;AAAA,QACpB,cAAc,MAAA,CAAO,YAAA;AAAA,QACrB,gBAAgB,MAAA,CAAO;AAAA,OACzB;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,cAAA,CAAe,aAAA,KAAkB,KAAA,EAAO;AAC/C,MAAA,OAAO,WAAA,EAAY;AAAA,IACrB;AAEA,IAAA,OAAO,YAAA;AAAA,MACL,MAAM,gCAAA,CAAoC,IAAA,CAAK,eAAe,UAAA,EAAY,YAAA,EAAc,KAAK,MAAM,CAAA;AAAA,MACnG,WAAA;AAAA,MACA,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,2BAAA,CACJ,YAAA,EACA,MAAA,EAC8C;AAC9C,IAAA,OAAO,4BAA+B,IAAA,CAAK,cAAA,CAAe,YAAY,YAAA,EAAc,MAAA,EAAQ,KAAK,MAAM,CAAA;AAAA,EACzG;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,8BAA8B,YAAA,EAAmD;AACrF,IAAA,OAAO,8BAAiC,IAAA,CAAK,cAAA,CAAe,UAAA,EAAY,YAAA,EAAc,KAAK,MAAM,CAAA;AAAA,EACnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,gBAAA,GAA2C;AAC/C,IAAA,OAAO,gBAAA,CAAoB,IAAA,CAAK,cAAA,CAAe,UAAA,EAAY,KAAK,MAAM,CAAA;AAAA,EACxE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,aAAA,GAAqC;AACzC,IAAA,OAAO,aAAA,CAAiB,IAAA,CAAK,cAAA,CAAe,UAAA,EAAY,KAAK,MAAM,CAAA;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,UAAU,OAAA,EAAQ;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAA,GAAmB;AACjB,IAAA,IAAA,CAAK,UAAU,UAAA,EAAW;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA,EAKA,OAAA,GAAgB;AACd,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAQ;AAC9B,IAAA,IAAA,CAAK,UAAU,UAAA,EAAW;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,SAAA,CACE,QAAA,EACA,OAAA,EACA,aAAA,EACY;AACZ,IAAA,OAAO,KAAK,SAAA,CAAU,SAAA,CAAU,EAAE,QAAA,EAAU,aAAA,IAAiB,OAAO,CAAA;AAAA,EACtE;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,qBAAqB,QAAA,EAAoD;AACvE,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,kBAAA,CAAmB,QAAQ,CAAA;AAAA,EACnD;AACF,CAAA;AAKO,SAAS,oBAAoB,MAAA,EAA4C;AAC9E,EAAA,OAAO,IAAI,cAAc,MAAM,CAAA;AACjC;AC/mBA,IAAM,cAAA,GAAiBC,oBAAoC,IAAI,CAAA;AAYxD,SAAS,gBAAgB,EAAE,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,gBAAe,EAAyB;AAClG,EAAA,MAAM,MAAA,GAASC,cAAQ,MAAM;AAC3B,IAAA,IAAI,gBAAgB,OAAO,cAAA;AAC3B,IAAA,IAAI,MAAA,EAAQ,OAAO,mBAAA,CAAoB,MAAM,CAAA;AAC7C,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E,CAAA,EAAG,CAAC,cAAA,EAAgB,MAAM,CAAC,CAAA;AAE3B,EAAA,MAAM,SAAA,GAAYC,aAAO,MAAM,CAAA;AAE/B,EAAAC,eAAA,CAAU,MAAM;AAEd,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,CAAC,cAAA,IAAkB,SAAA,CAAU,OAAA,KAAY,MAAA,EAAQ;AACnD,QAAA,SAAA,CAAU,QAAQ,OAAA,EAAQ;AAAA,MAC5B;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,cAAc,CAAC,CAAA;AAE3B,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,SAAA,CAAU,OAAA,GAAU,MAAA;AAAA,EACtB,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,sCACG,cAAA,CAAe,QAAA,EAAf,EAAwB,KAAA,EAAO,QAC7B,QAAA,EACH,CAAA;AAEJ;AAMO,SAAS,gBAAA,GAAkC;AAChD,EAAA,MAAM,MAAA,GAASC,iBAAW,cAAc,CAAA;AACxC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAAA,EAC1E;AACA,EAAA,OAAO,MAAA;AACT;ACjDO,SAAS,gBAAA,CACd,WACG,SAAA,EACG;AACN,EAAAD,gBAAU,MAAM;AACd,IAAA,KAAA,MAAW,SAAS,SAAA,EAAW;AAC7B,MAAA,KAAA,CAAM,IAAI,CAAA;AAAA,IACZ;AAAA,EAEF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACb;;;ACAO,SAAS,eAAe,MAAA,EAAqD;AAClF,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIE,eAA6C,IAAI,CAAA;AACvF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAA,CAAS,CAAC,CAAC,MAAM,CAAA;AAC/C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEvC,EAAA,gBAAA,CAAiB,MAAA,EAAQ,gBAAgB,QAAQ,CAAA;AAEjD,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,WAAW,MAAA,EAAW;AAC1B,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,cAAA,CAAe,MAAM,CAAA;AACjD,MAAA,cAAA,CAAe,MAAM,CAAA;AAAA,IACvB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EAEF,CAAA,EAAG,CAAC,MAAA,EAAQ,SAAS,CAAC,CAAA;AAEtB,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACvD;AAYO,SAAS,cAAc,YAAA,EAAuD;AACnF,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAID,eAA4B,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAA,CAAS,CAAC,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,eAAe,QAAQ,CAAA;AAEhD,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,aAAA,CAAc,YAAY,CAAA;AACpD,MAAA,aAAA,CAAc,IAAI,CAAA;AAAA,IACpB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEzB,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACtD;ACnEO,SAAS,mBAAmB,KAAA,EAAyC;AAC1E,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,eAAwB,IAAI,CAAA;AACtD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,UAAU,QAAQ,CAAA;AAE3C,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,cAAA,CAAe,EAAE,KAAA,EAAO,KAAA,EAAO,GAAG,CAAA;AAC9D,MAAA,QAAA,CAAS,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,IAC5B,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,KAAK,CAAC,CAAA;AAElB,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACjD;ACxBO,SAAS,eAAe,YAAA,EAAwD;AACrF,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAID,eAAoC,IAAI,CAAA;AAC9E,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAAA,CAAS,CAAC,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,gBAAgB,QAAQ,CAAA;AAEjD,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,wBAAA,CAAyB,YAAY,CAAA;AACjE,MAAA,cAAA,CAAe,MAAM,CAAA;AAAA,IACvB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEzB,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,WAAA,EAAa,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACvD;ACxBO,SAAS,gBAAA,CACd,cACA,MAAA,EACwB;AACxB,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAID,eAA+C,IAAI,CAAA;AAC7F,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAAA,CAAS,CAAC,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,kBAAkB,QAAQ,CAAA;AAEnD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEvC,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,0BAAA,CAA2B,cAAc,MAAM,CAAA;AAC3E,MAAA,gBAAA,CAAiB,MAAM,CAAA;AAAA,IACzB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EAEF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,SAAS,CAAC,CAAA;AAEpC,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACzD;AC/BA,IAAM,gBAAA,GAAmB,GAAA;AAEzB,IAAM,SAAA,GAAY,CAAK,KAAA,EAAe,MAAA,MAAwC;AAAA,EAC5E,MAAM,EAAC;AAAA,EACP,KAAA,EAAO,CAAA;AAAA,EACP,KAAA;AAAA,EACA;AACF,CAAA,CAAA;AAYA,SAAS,qBAAA,CACP,OACA,SAAA,EACsD;AACtD,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,cAAA,GAAiB,OAAO,YAAA,CAAa,cAAA;AAC3C,EAAA,MAAM,OAAA,GAAU,CAAC,CAAC,KAAA,IAAS,CAAC,CAAC,cAAA;AAE7B,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAU,GAAIE,iBAAA;AAAA,IAC1B,OAAA,GACI;AAAA,MACE,KAAA;AAAA,MACA,aAAA,EAAe,cAAA;AAAA,MACf,UAAA,EAAY,IAAA;AAAA,MACZ,GAAwC,EAAC;AAAA,MACzC,KAAA,EAAO;AAAA,KACT,GACA;AAAA,GACN;AAEA,EAAA,MAAM,aAAA,GAAgBP,cAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,IAAI,CAAC,IAAA,EAAM,IAAA,EAAM,OAAO,IAAA;AACxB,IAAA,MAAM,GAAA,uBAAU,GAAA,EAAY;AAC5B,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,IAAA,EAAM;AACzB,MAAA,IAAI,EAAE,SAAA,EAAW,GAAA,CAAI,IAAI,MAAA,CAAO,CAAA,CAAE,SAAS,CAAC,CAAA;AAAA,IAC9C;AACA,IAAA,OAAO,CAAC,GAAG,GAAG,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,OAAA,EAAS,IAAI,CAAC,CAAA;AAElB,EAAA,OAAO,EAAE,aAAA,EAAe,OAAA,EAAS,SAAA,EAAU;AAC7C;AAWO,SAAS,qBAAA,CACd,OACA,MAAA,EAOsB;AACtB,EAAA,MAAM,EAAE,aAAA,EAAe,OAAA,EAAS,aAAA,EAAc,GAAI,sBAAsB,KAAK,CAAA;AAE7E,EAAA,MAAM,KAAA,GAAQ,cAAA;AAAA,IACZ,aAAA,IAAiB,aAAA,CAAc,MAAA,GAAS,CAAA,GACpC;AAAA,MACE,aAAA;AAAA,MACA,OAAO,MAAA,EAAQ,KAAA;AAAA,MACf,OAAO,MAAA,EAAQ,KAAA;AAAA,MACf,QAAQ,MAAA,EAAQ,MAAA;AAAA,MAChB,MAAM,MAAA,EAAQ,IAAA;AAAA,MACd,qBAAqB,MAAA,EAAQ;AAAA,KAC/B,GACA;AAAA,GACN;AAIA,EAAA,IAAI,aAAA,KAAkB,IAAA,IAAQ,aAAA,CAAc,MAAA,KAAW,CAAA,EAAG;AACxD,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,SAAA;AAAA,QACX,QAAQ,KAAA,IAAS,EAAA;AAAA,QACjB,QAAQ,MAAA,IAAU;AAAA,OACpB;AAAA,MACA,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,SAAS,YAAY;AAAA,MAAC;AAAA,KACxB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,OAAA,EAAS,iBAAiB,KAAA,CAAM,OAAA;AAAA,IAChC,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,SAAS,KAAA,CAAM;AAAA,GACjB;AACF;AAQO,SAAS,0BAAA,CACd,OACA,MAAA,EAC0B;AAC1B,EAAA,MAAM,EAAE,aAAA,EAAe,OAAA,EAAS,aAAA,EAAc,GAAI,sBAAsB,KAAK,CAAA;AAK7E,EAAA,MAAM,cAAc,MAAA,EAAQ,KAAA;AAC5B,EAAA,MAAM,QAAA,GAAW,cAAA;AAAA,IACf,WAAA,IAAe,aAAA,IAAiB,aAAA,CAAc,MAAA,GAAS,CAAA,GACnD,EAAE,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,KAAA,EAAO,CAAA,EAAE,GAC9C;AAAA,GACN;AAEA,EAAA,IAAI,kBAAkB,IAAA,EAAM;AAC1B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAS,aAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,SAAS,YAAY;AAAA,MAAC;AAAA,KACxB;AAAA,EACF;AACA,EAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,CAAA;AAAA,MACP,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,SAAS,YAAY;AAAA,MAAC;AAAA,KACxB;AAAA,EACF;AACA,EAAA,IAAI,CAAC,WAAA,EAAa;AAEhB,IAAA,OAAO;AAAA,MACL,OAAO,aAAA,CAAc,MAAA;AAAA,MACrB,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,SAAS,YAAY;AAAA,MAAC;AAAA,KACxB;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAA,CAAS,WAAA,EAAa,KAAA,IAAS,IAAA;AAAA,IACtC,SAAS,QAAA,CAAS,OAAA;AAAA,IAClB,OAAO,QAAA,CAAS,KAAA;AAAA,IAChB,SAAS,YAAY;AAAA,IAAC;AAAA,GACxB;AACF;AAQO,SAAS,uBAAA,CACd,YAAA,EACA,KAAA,EACA,MAAA,EAMwB;AACxB,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,cAAA,GAAiB,OAAO,YAAA,CAAa,cAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,YAAA,GAAe,MAAA,CAAO,YAAY,CAAA,GAAI,MAAA;AACxD,EAAA,MAAM,OAAA,GACJ,CAAC,CAAC,KAAA,IAAS,CAAC,CAAC,cAAA,IAAkB,YAAA,IAAgB,IAAA,IAAQ,SAAA,KAAc,MAAA;AAEvE,EAAA,MAAM,EAAE,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,eAAc,GAAIO,iBAAA;AAAA,IACvD,OAAA,GACI;AAAA,MACE,KAAA;AAAA,MACA,aAAA,EAAe,cAAA;AAAA,MACf,SAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACT,GACA;AAAA,GACN;AAEA,EAAA,MAAM,iBAAA,GAAoBP,cAAQ,MAAM;AACtC,IAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AACrB,IAAA,IAAI,CAAC,YAAA,EAAc,IAAA,EAAM,OAAO,IAAA;AAChC,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,CAAA,IAAK,aAAa,IAAA,EAAM;AACjC,MAAA,IAAI,CAAA,CAAE,WAAW,IAAA,EAAM;AACvB,MAAA,IAAI;AACF,QAAA,GAAA,CAAI,IAAA,CAAK,OAAO,MAAA,CAAO,CAAA,CAAE,OAAO,CAAC,CAAA,CAAE,UAAU,CAAA;AAAA,MAC/C,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,CAAC,OAAA,EAAS,YAAY,CAAC,CAAA;AAE1B,EAAA,MAAM,KAAA,GAAQ,gBAAA;AAAA,IACZ,iBAAA,IAAqB,iBAAA,CAAkB,MAAA,GAAS,CAAA,GAAI,YAAA,GAAe,MAAA;AAAA,IACnE,iBAAA,IAAqB,kBAAkB,MAAA,GAAS,CAAA,GAC5C,EAAE,GAAG,MAAA,EAAQ,YAAA,EAAc,iBAAA,EAAkB,GAC7C;AAAA,GACN;AAEA,EAAA,IAAI,iBAAA,KAAsB,IAAA,IAAQ,iBAAA,CAAkB,MAAA,KAAW,CAAA,EAAG;AAChE,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,SAAA;AAAA,QACb,QAAQ,KAAA,IAAS,EAAA;AAAA,QACjB,QAAQ,MAAA,IAAU;AAAA,OACpB;AAAA,MACA,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,SAAS,YAAY;AAAA,MAAC;AAAA,KACxB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,OAAA,EAAS,iBAAiB,KAAA,CAAM,OAAA;AAAA,IAChC,OAAO,KAAA,CAAM,KAAA;AAAA,IACb,SAAS,KAAA,CAAM;AAAA,GACjB;AACF;AC5OO,SAAS,eAAA,CACd,cACA,MAAA,EACuB;AACvB,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAII,eAA8C,IAAI,CAAA;AAC1F,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAAA,CAAS,CAAC,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,iBAAiB,QAAQ,CAAA;AAElD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEvC,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,yBAAA,CAA0B,cAAc,MAAM,CAAA;AAC1E,MAAA,eAAA,CAAgB,MAAM,CAAA;AAAA,IACxB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EAEF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,SAAS,CAAC,CAAA;AAEpC,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,YAAA,EAAc,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACxD;AAYO,SAAS,uBAAuB,YAAA,EAAgE;AACrG,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAID,eAAoC,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAAA,CAAS,CAAC,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,YAAY,QAAQ,CAAA;AAE7C,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,gCAAA,CAAiC,YAAY,CAAA;AACzE,MAAA,UAAA,CAAW,MAAM,CAAA;AAAA,IACnB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEzB,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,OAAA,EAAS,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACnD;ACpEO,SAAS,UAAU,YAAA,EAAmD;AAC3E,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAID,eAAyB,IAAI,CAAA;AACzD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAAA,CAAS,CAAC,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,WAAW,QAAQ,CAAA;AAE5C,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,mBAAA,CAAoB,YAAY,CAAA;AAC5D,MAAA,SAAA,CAAU,MAAM,CAAA;AAAA,IAClB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEzB,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AAClD;AAYO,SAAS,aAAA,GAAqC;AACnD,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAID,eAA4B,IAAI,CAAA;AACpE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,eAAe,QAAQ,CAAA;AAEhD,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,aAAA,EAAc;AAC1C,MAAA,aAAA,CAAc,MAAM,CAAA;AAAA,IACtB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,UAAA,EAAY,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACtD;AC9DO,SAAS,oBAAoB,YAAA,EAA6D;AAC/F,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAID,eAAoC,IAAI,CAAA;AACxF,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAAA,CAAS,CAAC,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,qBAAqB,QAAQ,CAAA;AAEtD,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,6BAAA,CAA8B,YAAY,CAAA;AACtE,MAAA,mBAAA,CAAoB,MAAM,CAAA;AAAA,IAC5B,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAY,CAAC,CAAA;AAEzB,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,gBAAA,EAAkB,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AAC5D;ACxBO,SAAS,iBAAA,CACd,cACA,MAAA,EACyB;AACzB,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAID,eAAqD,IAAI,CAAA;AACrG,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,cAAAA,CAAS,CAAC,CAAC,YAAY,CAAA;AACrD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,mBAAmB,QAAQ,CAAA;AAEpD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA;AAEvC,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,2BAAA,CAA4B,cAAc,MAAM,CAAA;AAC5E,MAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,IAC1B,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EAEF,CAAA,EAAG,CAAC,MAAA,EAAQ,YAAA,EAAc,SAAS,CAAC,CAAA;AAEpC,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AAC1D;AChCO,SAAS,gBAAA,GAA2C;AACzD,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAID,eAA+B,IAAI,CAAA;AAC7D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AAErD,EAAA,gBAAA,CAAiB,MAAA,EAAQ,UAAU,QAAQ,CAAA;AAE3C,EAAA,MAAMC,MAAAA,GAAQC,kBAAY,YAAY;AACpC,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,gBAAA,EAAiB;AAC7C,MAAA,QAAA,CAAS,MAAM,CAAA;AAAA,IACjB,SAAS,CAAA,EAAG;AACV,MAAA,QAAA,CAAS,CAAU,CAAA;AAAA,IACrB,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAAJ,gBAAU,MAAM;AAAE,IAAAG,MAAAA,EAAM;AAAA,EAAG,CAAA,EAAG,CAACA,MAAK,CAAC,CAAA;AAErC,EAAA,OAAO,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,SAASA,MAAAA,EAAM;AACjD;AC1BO,SAAS,eAAA,CACd,UACA,aAAA,EACuB;AACvB,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAID,eAAgC,IAAI,CAAA;AAC1E,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,cAAAA,CAAS,OAAO,WAAW,CAAA;AACjE,EAAA,MAAM,WAAA,GAAcH,aAAO,QAAQ,CAAA;AACnC,EAAA,MAAM,gBAAA,GAAmBA,aAAO,aAAa,CAAA;AAG7C,EAAA,WAAA,CAAY,OAAA,GAAU,QAAA;AACtB,EAAA,gBAAA,CAAiB,OAAA,GAAU,aAAA;AAE3B,EAAAC,gBAAU,MAAM;AACd,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AAE3B,IAAA,MAAA,CAAO,OAAA,EAAQ;AAEf,IAAA,MAAM,cAAc,MAAA,CAAO,SAAA;AAAA,MACzB,QAAA;AAAA,MACA,CAAC,OAAA,KAAY,cAAA,CAAe,OAAO,CAAA;AAAA,MACnC;AAAA,KACF;AAEA,IAAA,MAAM,qBAAA,GAAwB,MAAA,CAAO,oBAAA,CAAqB,CAAC,SAAA,KAAc;AACvE,MAAA,cAAA,CAAe,SAAS,CAAA;AAAA,IAC1B,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,WAAA,EAAY;AACZ,MAAA,qBAAA,EAAsB;AAAA,IACxB,CAAA;AAAA,EAEF,CAAA,EAAG,CAAC,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,aAAa,CAAC,CAAC,CAAA;AAEpE,EAAA,OAAO,EAAE,aAAa,WAAA,EAAY;AACpC;ACtCO,SAAS,mBAAA,GAGd;AACA,EAAA,MAAM,SAAS,gBAAA,EAAiB;AAChC,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIE,cAAAA,CAAS,OAAO,WAAW,CAAA;AACjE,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,eAAyB,KAAK,CAAA;AAE1E,EAAAF,gBAAU,MAAM;AACd,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,oBAAA,CAAqB,CAAC,SAAA,KAAc;AACzD,MAAA,cAAA,CAAe,SAAS,CAAA;AAAA,IAC1B,CAAC,CAAA;AACD,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,wBAAA,CAAyB,CAAC,MAAA,KAAW;AAC1D,MAAA,iBAAA,CAAkB,OAAO,IAAI,CAAA;AAAA,IAC/B,CAAC,CAAA;AACD,IAAA,OAAO,MAAM;AACX,MAAA,OAAA,EAAQ;AACR,MAAA,OAAA,EAAQ;AAAA,IACV,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,OAAO,EAAE,aAAa,cAAA,EAAe;AACvC","file":"react.cjs","sourcesContent":["export class BudokanError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BudokanError\";\n }\n}\n\nexport class BudokanApiError extends BudokanError {\n readonly status: number;\n readonly statusText: string;\n\n constructor(message: string, status: number, statusText: string = \"\") {\n super(message);\n this.name = \"BudokanApiError\";\n this.status = status;\n this.statusText = statusText;\n }\n}\n\nexport class BudokanTimeoutError extends BudokanError {\n constructor(message = \"Request timed out\") {\n super(message);\n this.name = \"BudokanTimeoutError\";\n }\n}\n\nexport class BudokanConnectionError extends BudokanError {\n constructor(message = \"Connection failed\") {\n super(message);\n this.name = \"BudokanConnectionError\";\n }\n}\n\nexport class TournamentNotFoundError extends BudokanError {\n readonly tournamentId: string;\n\n constructor(tournamentId: string) {\n super(`Tournament not found: ${tournamentId}`);\n this.name = \"TournamentNotFoundError\";\n this.tournamentId = tournamentId;\n }\n}\n\nexport class RpcError extends BudokanError {\n readonly contractAddress?: string;\n\n constructor(message: string, contractAddress?: string) {\n super(message);\n this.name = \"RpcError\";\n this.contractAddress = contractAddress;\n }\n}\n\nexport class DataSourceError extends BudokanError {\n readonly primaryError: Error;\n readonly fallbackError: Error;\n\n constructor(primaryError: Error, fallbackError: Error) {\n super(`Both data sources failed. Primary: ${primaryError.message}. Fallback: ${fallbackError.message}`);\n this.name = \"DataSourceError\";\n this.primaryError = primaryError;\n this.fallbackError = fallbackError;\n }\n}\n\nexport function isNonRetryableError(error: unknown): boolean {\n if (error instanceof TournamentNotFoundError) return true;\n if (error instanceof BudokanApiError && error.status >= 400 && error.status < 500 && error.status !== 429) {\n return true;\n }\n return false;\n}\n","import { isNonRetryableError, BudokanTimeoutError } from \"../errors/index.js\";\n\nexport function calculateBackoff(\n attempt: number,\n baseDelay: number,\n maxDelay: number,\n): number {\n let delay = baseDelay * Math.pow(2, attempt);\n if (delay > maxDelay) delay = maxDelay;\n const minDelay = delay / 2;\n const jitter = Math.random() * (delay - minDelay);\n return minDelay + jitter;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n attempts: number = 3,\n delay: number = 1000,\n): Promise<T> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (isNonRetryableError(error)) {\n throw error;\n }\n\n if (attempt === attempts - 1) break;\n\n const backoff = calculateBackoff(attempt, delay, delay * 8);\n await sleep(backoff);\n }\n }\n\n throw lastError ?? new BudokanTimeoutError(\"Unknown error after retries\");\n}\n","import { BudokanApiError, BudokanTimeoutError, BudokanConnectionError } from \"../errors/index.js\";\nimport { withRetry } from \"../utils/retry.js\";\n\nexport interface ApiFetchOptions {\n method?: string;\n headers?: Record<string, string>;\n body?: unknown;\n signal?: AbortSignal;\n timeout?: number;\n retryAttempts?: number;\n retryDelay?: number;\n}\n\nconst DEFAULT_TIMEOUT = 10_000;\nconst DEFAULT_RETRY_ATTEMPTS = 3;\nconst DEFAULT_RETRY_DELAY = 1000;\n\n/**\n * Fetch JSON from an API endpoint with retry logic, timeout, and error handling.\n */\nexport async function apiFetch<T>(url: string, options: ApiFetchOptions = {}): Promise<T> {\n const {\n method = \"GET\",\n headers = {},\n body,\n signal,\n timeout = DEFAULT_TIMEOUT,\n retryAttempts = DEFAULT_RETRY_ATTEMPTS,\n retryDelay = DEFAULT_RETRY_DELAY,\n } = options;\n\n return withRetry(\n async () => {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n // Link external signal\n if (signal) {\n if (signal.aborted) {\n clearTimeout(timeoutId);\n throw new BudokanTimeoutError(\"Request was aborted\");\n }\n signal.addEventListener(\"abort\", () => controller.abort(), { once: true });\n }\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({}));\n throw new BudokanApiError(\n (errorBody as Record<string, string>).error ?? `API error: ${response.status}`,\n response.status,\n response.statusText,\n );\n }\n\n return (await response.json()) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof BudokanApiError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n if (signal?.aborted) throw new BudokanTimeoutError(\"Request was aborted\");\n throw new BudokanTimeoutError();\n }\n throw new BudokanConnectionError(\n error instanceof Error ? error.message : \"Connection failed\",\n );\n }\n },\n retryAttempts,\n retryDelay,\n );\n}\n\n/**\n * Extract pagination from API response.\n * The API wraps pagination in a `pagination` object, but the SDK\n * PaginatedResult type uses flat fields (total, limit, offset).\n */\nexport function extractPagination(result: Record<string, unknown>, defaults?: { limit?: number; offset?: number }): {\n total: number | undefined;\n limit: number;\n offset: number;\n} {\n const pagination = result.pagination as { total?: number; limit?: number; offset?: number } | undefined;\n return {\n total: pagination?.total ?? (result.total as number | undefined),\n limit: pagination?.limit ?? (result.limit as number | undefined) ?? defaults?.limit ?? 50,\n offset: pagination?.offset ?? (result.offset as number | undefined) ?? defaults?.offset ?? 0,\n };\n}\n\n/**\n * Build a query string from a record of key-value pairs.\n * Undefined and null values are omitted.\n */\nexport function buildQueryString(params: Record<string, string | number | boolean | undefined | null>): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n qs.set(key, String(value));\n }\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n","/**\n * Convert a snake_case string to camelCase.\n */\nfunction toCamelCase(str: string): string {\n return str.replace(/_([a-z])/g, (_, letter: string) => letter.toUpperCase());\n}\n\n/**\n * Convert a camelCase string to snake_case.\n */\nfunction toSnakeCase(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Deeply convert all keys in an object from snake_case to camelCase.\n */\nexport function snakeToCamel<T>(obj: unknown): T {\n if (Array.isArray(obj)) {\n return obj.map((item) => snakeToCamel(item)) as T;\n }\n if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n result[toCamelCase(key)] = snakeToCamel(value);\n }\n return result as T;\n }\n return obj as T;\n}\n\n/**\n * Deeply convert all keys in an object from camelCase to snake_case.\n */\nexport function camelToSnake<T>(obj: unknown): T {\n if (Array.isArray(obj)) {\n return obj.map((item) => camelToSnake(item)) as T;\n }\n if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n result[toSnakeCase(key)] = camelToSnake(value);\n }\n return result as T;\n }\n return obj as T;\n}\n","import type { Tournament, TournamentListParams, QualificationEntry } from \"../types/tournament.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { Prize, RewardClaim, RewardClaimSummary, PrizeAggregation } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\n\n/** Normalize tournament: ensure both `id` and `tournamentId` exist */\nfunction normalizeTournament(raw: Record<string, unknown>): Tournament {\n const t = snakeToCamel<Tournament & { id?: string }>(raw);\n // API returns `id`, SDK type uses `tournamentId` — keep both in sync\n const id = t.id ?? t.tournamentId;\n return { ...t, id, tournamentId: id };\n}\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch a paginated list of tournaments.\n */\nexport async function getTournaments(\n baseUrl: string,\n params?: TournamentListParams,\n ctx?: ApiContext,\n): Promise<PaginatedResult<Tournament>> {\n const qs = buildQueryString({\n game_address: params?.gameAddress,\n creator: params?.creator,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n sort: params?.sort,\n from_id: params?.fromId,\n exclude_ids: params?.excludeIds?.join(\",\"),\n tournament_ids: params?.tournamentIds?.join(\",\"),\n whitelisted_extensions: params?.whitelistedExtensions?.join(\",\"),\n include_prizes: params?.includePrizeSummary,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => normalizeTournament(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch a single tournament by ID.\n */\nexport async function getTournament(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<Tournament> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/tournaments/${tournamentId}`,\n fetchOpts(ctx),\n );\n return normalizeTournament(result.data);\n}\n\n/**\n * Fetch registrations for a tournament.\n *\n * No `playerAddress` filter: registrations are keyed by token id, and\n * the original registrant goes stale on transfer. Callers wanting \"the\n * current user's registrations\" should resolve their owned token ids via\n * denshokan-sdk's useTokens and pass them as `gameTokenIds`.\n */\nexport async function getTournamentRegistrations(\n baseUrl: string,\n tournamentId: string,\n params?: { gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<Registration>> {\n const qs = buildQueryString({\n game_token_ids: params?.gameTokenIds?.length ? params.gameTokenIds.join(\",\") : undefined,\n has_submitted: params?.hasSubmitted,\n is_banned: params?.isBanned,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/registrations${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<Registration>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch prizes for a tournament.\n */\nexport async function getTournamentPrizes(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<Prize[]> {\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/prizes`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<Prize>(item));\n}\n\n/**\n * Fetch reward claims for a tournament.\n */\nexport async function getTournamentRewardClaims(\n baseUrl: string,\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<RewardClaim>> {\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/reward-claims${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<RewardClaim>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch reward claims summary for a tournament.\n */\nexport async function getTournamentRewardClaimsSummary(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<RewardClaimSummary> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/tournaments/${tournamentId}/reward-claims/summary`,\n fetchOpts(ctx),\n );\n return snakeToCamel<RewardClaimSummary>(result.data);\n}\n\n/**\n * Fetch qualifications for a tournament.\n */\nexport async function getTournamentQualifications(\n baseUrl: string,\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<QualificationEntry>> {\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/qualifications${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<QualificationEntry>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch prize aggregation for a tournament.\n */\nexport async function getTournamentPrizeAggregation(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<PrizeAggregation[]> {\n const qs = buildQueryString({ include_aggregation: true });\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/prizes${qs}`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<PrizeAggregation>(item));\n}\n","/**\n * Normalize a Starknet address to a 0x-prefixed, 66-character lowercase hex string.\n */\nexport function normalizeAddress(address: string): string {\n const stripped = address.replace(/^0x0*/i, \"\");\n return (\"0x\" + stripped.padStart(64, \"0\")).toLowerCase();\n}\n","import type { Tournament, TournamentListParams } from \"../types/tournament.js\";\nimport type { PlatformStats } from \"../types/activity.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch tournaments for a specific game.\n */\nexport async function getGameTournaments(\n baseUrl: string,\n gameAddress: string,\n params?: Omit<TournamentListParams, \"gameAddress\">,\n ctx?: ApiContext,\n): Promise<PaginatedResult<Tournament>> {\n const normalized = normalizeAddress(gameAddress);\n const qs = buildQueryString({\n creator: params?.creator,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/games/${normalized}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<Tournament>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch tournament stats for a specific game.\n */\nexport async function getGameStats(\n baseUrl: string,\n gameAddress: string,\n ctx?: ApiContext,\n): Promise<PlatformStats> {\n const normalized = normalizeAddress(gameAddress);\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/games/${normalized}/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlatformStats>(result.data);\n}\n","import type { PlatformStats, PrizeStats } from \"../types/activity.js\";\nimport { apiFetch } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch platform-wide activity stats.\n */\nexport async function getActivityStats(\n baseUrl: string,\n ctx?: ApiContext,\n): Promise<PlatformStats> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/activity/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlatformStats>(result.data);\n}\n\n/**\n * Fetch platform-wide prize stats.\n */\nexport async function getPrizeStats(\n baseUrl: string,\n ctx?: ApiContext,\n): Promise<PrizeStats> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/activity/prize-stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PrizeStats>(result.data);\n}\n","import type { WSSubscribeOptions, WSEventHandler, WSEventMessage } from \"../types/websocket.js\";\n\ninterface WSManagerConfig {\n maxReconnectAttempts: number;\n reconnectBaseDelay: number;\n}\n\nconst DEFAULT_WS_CONFIG: WSManagerConfig = {\n maxReconnectAttempts: 10,\n reconnectBaseDelay: 1000,\n};\n\n/**\n * WebSocket manager with auto-reconnect and subscription management.\n */\nexport class WSManager {\n private ws: WebSocket | null = null;\n private readonly wsUrl: string;\n private readonly config: WSManagerConfig;\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private subscriptions = new Map<string, { options: WSSubscribeOptions; handler: WSEventHandler }>();\n private nextSubId = 1;\n private connected = false;\n private connectionListeners = new Set<(connected: boolean) => void>();\n\n constructor(wsUrl: string, config?: Partial<WSManagerConfig>) {\n this.wsUrl = wsUrl;\n this.config = { ...DEFAULT_WS_CONFIG, ...config };\n }\n\n /**\n * Open a WebSocket connection. No-op if already connected.\n */\n connect(): void {\n if (this.ws) return;\n\n try {\n this.ws = new WebSocket(this.wsUrl);\n\n this.ws.onopen = () => {\n this.connected = true;\n this.reconnectAttempts = 0;\n this.notifyConnectionChange(true);\n // Re-subscribe all active subscriptions\n for (const [, sub] of this.subscriptions) {\n this.sendSubscribe(sub.options);\n }\n };\n\n this.ws.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data as string) as WSEventMessage;\n if (message.type === \"event\") {\n for (const [, sub] of this.subscriptions) {\n sub.handler(message);\n }\n }\n } catch {\n // Ignore malformed messages\n }\n };\n\n this.ws.onclose = () => {\n this.connected = false;\n this.notifyConnectionChange(false);\n this.ws = null;\n this.attemptReconnect();\n };\n\n this.ws.onerror = () => {\n // onclose will fire after onerror\n };\n } catch {\n this.attemptReconnect();\n }\n }\n\n /**\n * Close the WebSocket connection and stop reconnecting.\n */\n disconnect(): void {\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.ws) {\n this.ws.onclose = null;\n this.ws.close();\n this.ws = null;\n }\n this.connected = false;\n this.notifyConnectionChange(false);\n this.reconnectAttempts = 0;\n }\n\n /**\n * Subscribe to channels with an optional tournament filter.\n * Returns an unsubscribe function.\n */\n subscribe(options: WSSubscribeOptions, handler: WSEventHandler): () => void {\n const id = String(this.nextSubId++);\n this.subscriptions.set(id, { options, handler });\n\n if (this.connected) {\n this.sendSubscribe(options);\n }\n\n return () => {\n this.subscriptions.delete(id);\n if (this.connected && this.ws) {\n this.ws.send(JSON.stringify({\n type: \"unsubscribe\",\n channels: options.channels,\n }));\n }\n };\n }\n\n /**\n * Register a callback for a single message. Convenience wrapper around subscribe.\n * Returns an unsubscribe function.\n */\n onMessage(callback: WSEventHandler): () => void {\n const id = String(this.nextSubId++);\n // Subscribe to all channels by using a passthrough handler\n this.subscriptions.set(id, {\n options: { channels: [] },\n handler: callback,\n });\n\n return () => {\n this.subscriptions.delete(id);\n };\n }\n\n /**\n * Whether the WebSocket is currently connected.\n */\n get isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Register a listener for connection state changes.\n * Returns an unsubscribe function.\n */\n onConnectionChange(listener: (connected: boolean) => void): () => void {\n this.connectionListeners.add(listener);\n return () => {\n this.connectionListeners.delete(listener);\n };\n }\n\n private notifyConnectionChange(isConnected: boolean): void {\n for (const listener of this.connectionListeners) {\n try {\n listener(isConnected);\n } catch {\n // Ignore listener errors\n }\n }\n }\n\n private sendSubscribe(options: WSSubscribeOptions): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n if (options.channels.length === 0) return;\n this.ws.send(JSON.stringify({\n type: \"subscribe\",\n channels: options.channels,\n tournamentIds: options.tournamentIds,\n }));\n }\n\n private attemptReconnect(): void {\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) return;\n if (this.subscriptions.size === 0) return;\n\n const delay = this.config.reconnectBaseDelay * Math.pow(2, this.reconnectAttempts);\n this.reconnectAttempts++;\n\n this.reconnectTimeout = setTimeout(() => {\n this.connect();\n }, Math.min(delay, 30_000));\n }\n}\n","export interface ChainConfig {\n rpcUrl: string;\n apiBaseUrl: string;\n wsUrl: string;\n budokanAddress: string;\n viewerAddress: string;\n}\n\nexport const CHAINS: Record<string, ChainConfig> = {\n mainnet: {\n rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_10\",\n apiBaseUrl: \"https://budokan-api-production.up.railway.app\",\n wsUrl: \"wss://budokan-api-production.up.railway.app/ws\",\n budokanAddress: \"0x0596ced030e74ebc37f33607f07ecd5a62eff22cdc4ae31fe2d724040c1bdc0b\",\n viewerAddress: \"0x013c8239361fdbd7ec26db2c83f4ff270c5bba83a0bc105b4005b676ff57fdbe\",\n },\n sepolia: {\n rpcUrl: \"https://starknet-sepolia.public.blastapi.io\",\n apiBaseUrl: \"https://budokan-api-sepolia.up.railway.app\",\n wsUrl: \"wss://budokan-api-sepolia.up.railway.app/ws\",\n budokanAddress: \"0x017750a167b7c4968249d7db06dccc8b3908ef8954cb40cfe4d3c651ca0dcd1d\",\n viewerAddress: \"0x03d5febe0042b943967074f4ebd850a6b5d50850cd3fb84fbd0eb66dadd9ddec\",\n },\n} as const;\n\nexport function getChainConfig(chain: string): ChainConfig | undefined {\n return CHAINS[chain];\n}\n","export type ConnectionMode = \"api\" | \"rpc-fallback\" | \"offline\";\n\nexport interface ServiceStatus {\n available: boolean;\n lastChecked: number;\n latency: number | null;\n error: string | null;\n}\n\nexport interface ConnectionStatusState {\n api: ServiceStatus;\n rpc: ServiceStatus;\n mode: ConnectionMode;\n initialCheckComplete: boolean;\n}\n\ntype StatusListener = (status: ConnectionStatusState) => void;\n\nexport interface HealthTimingConfig {\n initialCheckDelay?: number;\n checkInterval?: number;\n checkTimeout?: number;\n}\n\nexport class ConnectionStatus {\n private status: ConnectionStatusState = {\n api: { available: true, lastChecked: 0, latency: null, error: null },\n rpc: { available: true, lastChecked: 0, latency: null, error: null },\n mode: \"api\",\n initialCheckComplete: false,\n };\n\n private listeners = new Set<StatusListener>();\n private checkInterval: ReturnType<typeof setInterval> | null = null;\n private initialCheckTimeout: ReturnType<typeof setTimeout> | null = null;\n private apiUrl: string;\n private rpcUrl: string;\n private readonly initialCheckDelay: number;\n private readonly checkIntervalMs: number;\n private readonly checkTimeoutMs: number;\n\n constructor(apiUrl: string, rpcUrl: string, config?: HealthTimingConfig) {\n this.apiUrl = apiUrl;\n this.rpcUrl = rpcUrl;\n this.initialCheckDelay = Math.max(config?.initialCheckDelay ?? 1_000, 100);\n this.checkIntervalMs = Math.max(config?.checkInterval ?? 30_000, 1_000);\n this.checkTimeoutMs = Math.max(config?.checkTimeout ?? 5_000, 1_000);\n }\n\n getStatus(): ConnectionStatusState {\n return { ...this.status };\n }\n\n get mode(): ConnectionMode {\n return this.status.mode;\n }\n\n subscribe(listener: StatusListener): () => void {\n this.listeners.add(listener);\n listener(this.status);\n return () => { this.listeners.delete(listener); };\n }\n\n startMonitoring(): void {\n if (this.checkInterval) return;\n this.initialCheckTimeout = setTimeout(() => {\n this.performHealthCheck();\n this.checkInterval = setInterval(() => this.performHealthCheck(), this.checkIntervalMs);\n }, this.initialCheckDelay);\n }\n\n stopMonitoring(): void {\n if (this.checkInterval) {\n clearInterval(this.checkInterval);\n this.checkInterval = null;\n }\n if (this.initialCheckTimeout) {\n clearTimeout(this.initialCheckTimeout);\n this.initialCheckTimeout = null;\n }\n }\n\n markApiUnavailable(error?: string): void {\n this.updateStatus({\n api: { ...this.status.api, available: false, lastChecked: Date.now(), error: error || \"Request failed\" },\n });\n }\n\n markRpcUnavailable(error?: string): void {\n this.updateStatus({\n rpc: { ...this.status.rpc, available: false, lastChecked: Date.now(), error: error || \"Request failed\" },\n });\n }\n\n async checkNow(): Promise<void> {\n await this.performHealthCheck();\n }\n\n destroy(): void {\n this.stopMonitoring();\n this.listeners.clear();\n }\n\n private async performHealthCheck(): Promise<void> {\n const [apiResult, rpcResult] = await Promise.all([\n this.checkApi(),\n this.checkRpc(),\n ]);\n this.updateStatus({ api: apiResult, rpc: rpcResult, initialCheckComplete: true });\n }\n\n private async checkApi(): Promise<ServiceStatus> {\n const startTime = Date.now();\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.checkTimeoutMs);\n const response = await fetch(`${this.apiUrl}/health`, { signal: controller.signal });\n clearTimeout(timeoutId);\n const latency = Date.now() - startTime;\n if (!response.ok) {\n return { available: false, lastChecked: Date.now(), latency, error: `HTTP ${response.status}` };\n }\n const data = await response.json() as Record<string, unknown>;\n const isAvailable = data.status === \"healthy\" || data.status === \"degraded\";\n return { available: isAvailable, lastChecked: Date.now(), latency, error: isAvailable ? null : `API status: ${data.status}` };\n } catch (error) {\n return { available: false, lastChecked: Date.now(), latency: null, error: error instanceof Error ? error.message : \"Network error\" };\n }\n }\n\n private async checkRpc(): Promise<ServiceStatus> {\n const startTime = Date.now();\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.checkTimeoutMs);\n const response = await fetch(this.rpcUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ jsonrpc: \"2.0\", method: \"starknet_chainId\", params: [], id: 1 }),\n signal: controller.signal,\n });\n clearTimeout(timeoutId);\n const latency = Date.now() - startTime;\n if (!response.ok) {\n return { available: false, lastChecked: Date.now(), latency, error: `HTTP ${response.status}` };\n }\n const data = await response.json() as Record<string, unknown>;\n const isHealthy = data.result !== undefined && !data.error;\n return { available: isHealthy, lastChecked: Date.now(), latency, error: isHealthy ? null : \"RPC error\" };\n } catch (error) {\n return { available: false, lastChecked: Date.now(), latency: null, error: error instanceof Error ? error.message : \"Network error\" };\n }\n }\n\n private updateStatus(partial: Partial<ConnectionStatusState>): void {\n const newStatus = { ...this.status, ...partial };\n\n if (newStatus.api.available) {\n newStatus.mode = \"api\";\n } else if (newStatus.rpc.available) {\n newStatus.mode = \"rpc-fallback\";\n } else {\n newStatus.mode = \"offline\";\n }\n\n const changed =\n this.status.api.available !== newStatus.api.available ||\n this.status.rpc.available !== newStatus.rpc.available ||\n this.status.mode !== newStatus.mode ||\n this.status.initialCheckComplete !== newStatus.initialCheckComplete;\n\n this.status = newStatus;\n\n if (changed) {\n this.listeners.forEach((listener) => {\n try { listener(this.status); } catch { /* ignore */ }\n });\n }\n }\n}\n","import type { ConnectionStatus } from \"./health.js\";\nimport { DataSourceError } from \"../errors/index.js\";\n\nexport async function withFallback<T>(\n primary: () => Promise<T>,\n fallback: () => Promise<T>,\n health?: ConnectionStatus,\n): Promise<T> {\n // If health monitoring shows primary source is down, skip it\n if (health) {\n const mode = health.mode;\n if (mode === \"rpc-fallback\") {\n // API is known-down, go straight to RPC fallback\n try {\n return await fallback();\n } catch (fallbackError) {\n throw fallbackError;\n }\n }\n\n if (mode === \"offline\") {\n // Both are known-down, still try both in order\n }\n }\n\n let primaryError: Error;\n try {\n return await primary();\n } catch (error) {\n primaryError = error as Error;\n // Report failure to health service\n if (health) {\n health.markApiUnavailable(primaryError.message);\n }\n }\n\n try {\n return await fallback();\n } catch (fallbackError) {\n if (health) {\n health.markRpcUnavailable((fallbackError as Error).message);\n }\n throw new DataSourceError(primaryError, fallbackError as Error);\n }\n}\n","import type { RpcProvider, Contract, Abi } from \"starknet\";\n\nlet starknetModule: typeof import(\"starknet\") | null = null;\n\nasync function getStarknet(): Promise<typeof import(\"starknet\")> {\n if (!starknetModule) {\n starknetModule = await import(\"starknet\");\n }\n return starknetModule;\n}\n\nexport async function createProvider(\n rpcUrl: string,\n headers?: Record<string, string>,\n): Promise<RpcProvider> {\n const { RpcProvider: StarknetRpcProvider } = await getStarknet();\n const provider = new StarknetRpcProvider({\n nodeUrl: rpcUrl,\n ...(headers && { headers }),\n });\n return provider;\n}\n\nexport async function createContract(\n abi: Abi,\n address: string,\n provider: RpcProvider,\n): Promise<Contract> {\n // Handle case where ABI might be wrapped in a default export\n let resolvedAbi: Abi = abi;\n if (abi && !Array.isArray(abi) && typeof abi === \"object\" && \"default\" in abi) {\n resolvedAbi = (abi as { default: Abi }).default;\n }\n\n const starknet = await getStarknet();\n\n return new starknet.Contract({ abi: resolvedAbi, address, providerOrAccount: provider });\n}\n","import type { Contract } from \"starknet\";\nimport { CairoCustomEnum } from \"starknet\";\nimport type { Tournament } from \"../types/tournament.js\";\nimport type { EntryRequirement, Distribution } from \"@provable-games/metagame-sdk\";\nimport type { LeaderboardEntry } from \"../types/leaderboard.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { Prize } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport type { Phase } from \"../types/tournament.js\";\nimport { RpcError } from \"../errors/index.js\";\nimport { num } from \"starknet\";\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction wrapRpcCall<T>(fn: () => Promise<T>, contractAddress?: string): Promise<T> {\n return fn().catch((error: unknown) => {\n throw new RpcError(\n error instanceof Error ? error.message : \"RPC call failed\",\n contractAddress,\n );\n });\n}\n\nfunction decodeShortString(value: unknown): string {\n if (!value) return \"\";\n const hex = num.toHex(value as bigint);\n if (hex === \"0x0\") return \"\";\n const hexStr = hex.slice(2);\n let result = \"\";\n for (let i = 0; i < hexStr.length; i += 2) {\n const charCode = parseInt(hexStr.slice(i, i + 2), 16);\n if (charCode === 0) break;\n result += String.fromCharCode(charCode);\n }\n return result;\n}\n\nfunction decodeByteArray(value: unknown): string {\n if (!value) return \"\";\n // ByteArray from Cairo is serialized as { data: felt252[], pending_word: felt252, pending_word_len: u32 }\n const obj = value as Record<string, unknown>;\n const data = obj.data as unknown[] | undefined;\n const pendingWord = obj.pending_word;\n const pendingWordLen = Number(obj.pending_word_len ?? 0);\n\n let result = \"\";\n\n // Each data element is a 31-byte chunk encoded as felt252\n if (data) {\n for (const chunk of data) {\n const hex = num.toHex(chunk as bigint).slice(2).padStart(62, \"0\");\n for (let i = 0; i < 62; i += 2) {\n const charCode = parseInt(hex.slice(i, i + 2), 16);\n if (charCode !== 0) result += String.fromCharCode(charCode);\n }\n }\n }\n\n // Pending word contains remaining bytes (< 31)\n if (pendingWord && pendingWordLen > 0) {\n const hex = num.toHex(pendingWord as bigint).slice(2).padStart(pendingWordLen * 2, \"0\");\n for (let i = 0; i < pendingWordLen * 2; i += 2) {\n const charCode = parseInt(hex.slice(i, i + 2), 16);\n if (charCode !== 0) result += String.fromCharCode(charCode);\n }\n }\n\n return result;\n}\n\n/** All Phase variant names for CairoCustomEnum */\nconst PHASE_VARIANTS = [\"Scheduled\", \"Registration\", \"Staging\", \"Live\", \"Submission\", \"Finalized\"] as const;\n\nconst PHASE_NAME_MAP: Record<Phase, string> = {\n scheduled: \"Scheduled\",\n registration: \"Registration\",\n staging: \"Staging\",\n live: \"Live\",\n submission: \"Submission\",\n finalized: \"Finalized\",\n};\n\n/** Convert SDK Phase string to Cairo enum argument for RPC calls */\nfunction phaseToRpcArg(phase: Phase): CairoCustomEnum {\n const activeVariant = PHASE_NAME_MAP[phase];\n const variants: Record<string, unknown> = {};\n for (const v of PHASE_VARIANTS) {\n variants[v] = v === activeVariant ? {} : undefined;\n }\n return new CairoCustomEnum(variants);\n}\n\n// =========================================================================\n// Parsers — raw on-chain structs → SDK types\n// =========================================================================\n\nfunction parseTournament(\n raw: unknown,\n entryCount: number,\n): Tournament {\n const obj = raw as Record<string, unknown>;\n const id = String(obj.id ?? \"0\");\n const createdAt = Number(obj.created_at ?? 0);\n const createdBy = num.toHex(obj.created_by as bigint);\n const creatorTokenId = obj.creator_token_id ? num.toHex(obj.creator_token_id as bigint) : null;\n\n // Metadata\n const metadata = obj.metadata as Record<string, unknown> | undefined;\n const name = metadata ? decodeShortString(metadata.name) : \"\";\n const description = metadata ? decodeByteArray(metadata.description) : \"\";\n\n // Schedule\n const sched = obj.schedule as Record<string, unknown> | undefined;\n const registrationStartDelay = Number(sched?.registration_start_delay ?? 0);\n const registrationEndDelay = Number(sched?.registration_end_delay ?? 0);\n const gameStartDelay = Number(sched?.game_start_delay ?? 0);\n const gameEndDelay = Number(sched?.game_end_delay ?? 0);\n const submissionDuration = Number(sched?.submission_duration ?? 0);\n\n // Compute absolute timestamps (matching contract: each delay is relative to its anchor)\n const createdAtStr = String(createdAt);\n const regStart = createdAt + registrationStartDelay;\n const regEnd = regStart + registrationEndDelay;\n const gameStart = createdAt + gameStartDelay;\n const gameEnd = gameStart + gameEndDelay;\n const subEnd = gameEnd + submissionDuration;\n const registrationStartTime = String(regStart);\n const registrationEndTime = String(regEnd);\n const gameStartTime = String(gameStart);\n const gameEndTime = String(gameEnd);\n const submissionEndTime = String(subEnd);\n\n // GameConfig\n const gc = obj.game_config as Record<string, unknown> | undefined;\n const gameAddress = gc ? num.toHex(gc.game_address as bigint) : \"\";\n const settingsId = Number(gc?.settings_id ?? 0);\n const soulbound = Boolean(gc?.soulbound);\n const paymaster = Boolean(gc?.paymaster);\n const clientUrl = gc?.client_url ? decodeOptionalByteArray(gc.client_url) : null;\n const renderer = gc?.renderer ? parseOptionalAddress(gc.renderer) : null;\n\n // LeaderboardConfig\n const lc = obj.leaderboard_config as Record<string, unknown> | undefined;\n const ascending = Boolean(lc?.ascending);\n const gameMustBeOver = Boolean(lc?.game_must_be_over);\n\n // EntryFee (Option)\n const entryFeeRaw = parseOption(obj.entry_fee);\n let entryFeeToken: string | null = null;\n let entryFeeAmount: string | null = null;\n let entryFee: Tournament[\"entryFee\"] = null;\n if (entryFeeRaw) {\n const ef = entryFeeRaw as Record<string, unknown>;\n entryFeeToken = num.toHex(ef.token_address as bigint);\n entryFeeAmount = String(ef.amount ?? \"0\");\n entryFee = {\n tokenAddress: entryFeeToken,\n amount: entryFeeAmount,\n tournamentCreatorShare: Number(ef.tournament_creator_share ?? 0),\n gameCreatorShare: Number(ef.game_creator_share ?? 0),\n refundShare: Number(ef.refund_share ?? 0),\n distribution: (ef.distribution as Distribution) ?? null,\n distributionCount: Number(ef.distribution_count ?? 0),\n };\n }\n\n // EntryRequirement (Option)\n const entryRequirement = parseOption(obj.entry_requirement) as EntryRequirement | null;\n const hasEntryRequirement = entryRequirement !== null;\n\n return {\n id,\n tournamentId: id,\n gameAddress,\n createdAt: new Date(createdAt * 1000).toISOString(),\n createdBy,\n creatorTokenId,\n name,\n description,\n registrationStartDelay,\n registrationEndDelay,\n gameStartDelay,\n gameEndDelay,\n submissionDuration,\n createdAtOnchain: createdAtStr,\n registrationStartTime,\n registrationEndTime,\n gameStartTime,\n gameEndTime,\n submissionEndTime,\n settingsId,\n soulbound,\n paymaster,\n clientUrl,\n renderer,\n leaderboardAscending: ascending,\n leaderboardGameMustBeOver: gameMustBeOver,\n entryFeeToken,\n entryFeeAmount,\n hasEntryRequirement,\n schedule: {\n registrationStartDelay,\n registrationEndDelay,\n gameStartDelay,\n gameEndDelay,\n submissionDuration,\n },\n gameConfig: {\n gameAddress,\n settingsId,\n soulbound,\n paymaster,\n clientUrl,\n renderer,\n },\n entryFee,\n entryRequirement,\n leaderboardConfig: { ascending, gameMustBeOver },\n entryCount,\n prizeCount: 0, // Not available from viewer\n submissionCount: 0, // Not available from viewer\n metadata: null,\n };\n}\n\nfunction parseLeaderboardEntry(raw: unknown): LeaderboardEntry {\n const obj = raw as Record<string, unknown>;\n return {\n position: Number(obj.position ?? 0),\n tokenId: num.toHex(obj.token_id as bigint),\n };\n}\n\nfunction parseRegistration(raw: unknown, tournamentId: string): Registration {\n const obj = raw as Record<string, unknown>;\n return {\n tournamentId,\n gameTokenId: num.toHex(obj.game_token_id as bigint),\n gameAddress: \"\", // Not in on-chain struct\n entryNumber: Number(obj.entry_id ?? 0),\n hasSubmitted: Boolean(obj.has_submitted),\n isBanned: Boolean(obj.is_banned),\n };\n}\n\nfunction parsePrize(raw: unknown): Prize {\n const obj = raw as Record<string, unknown>;\n const tokenTypeData = obj.token_type as Record<string, unknown> | undefined;\n\n // TokenTypeData is a Cairo enum: { erc20: ERC20Data } or { erc721: ERC721Data }\n let tokenType: \"erc20\" | \"erc721\" = \"erc20\";\n let amount: string | null = null;\n let tokenId: string | null = null;\n let distributionType: string | null = null;\n let distributionWeight: number | null = null;\n let distributionShares: number[] | null = null;\n let distributionCount: number | null = null;\n let payoutPosition = 0;\n\n if (tokenTypeData) {\n // starknet.js v9 returns CairoCustomEnum with the active variant as a\n // non-undefined property. Check activeVariant() or the property value.\n const activeVariant = typeof tokenTypeData.activeVariant === \"function\"\n ? (tokenTypeData.activeVariant as () => string)()\n : tokenTypeData.erc20 !== undefined ? \"erc20\"\n : tokenTypeData.erc721 !== undefined ? \"erc721\"\n : null;\n\n // starknet.js v9 nests data under .variant.{name} or directly under .{name}\n const variantData = (tokenTypeData as Record<string, unknown>).variant as Record<string, unknown> | undefined;\n const unwrap = (name: string) =>\n (variantData?.[name] ?? tokenTypeData[name]) as Record<string, unknown> | undefined;\n\n if (activeVariant === \"erc20\") {\n const erc20 = unwrap(\"erc20\");\n tokenType = \"erc20\";\n amount = String(erc20?.amount ?? \"0\");\n\n // distribution is Option<Distribution> — unwrap the Option then the enum\n const distOption = erc20?.distribution as Record<string, unknown> | undefined;\n const distInner = distOption?.Some as Record<string, unknown> | undefined;\n if (distInner) {\n // Distribution enum: { variant: { Linear: n } } or { Linear: n }.\n // Custom carries a Span<u16>; the scalar variants carry a u32.\n const distVariant = (distInner.variant ?? distInner) as Record<string, unknown>;\n const distType = Object.keys(distVariant).find((k) => distVariant[k] !== undefined);\n if (distType) {\n distributionType = distType.toLowerCase();\n const distValue = distVariant[distType];\n if (distributionType === \"custom\") {\n distributionShares = Array.isArray(distValue)\n ? (distValue as unknown[]).map((v) => Number(v))\n : null;\n } else {\n distributionWeight = distValue != null ? Number(distValue) : null;\n }\n }\n }\n\n // distribution_count is Option<u32>\n const countOption = erc20?.distribution_count as Record<string, unknown> | undefined;\n distributionCount = countOption?.Some != null ? Number(countOption.Some) : null;\n } else if (activeVariant === \"erc721\") {\n const erc721 = unwrap(\"erc721\");\n tokenType = \"erc721\";\n tokenId = String(erc721?.id ?? \"0\");\n }\n }\n\n return {\n prizeId: String(obj.id ?? \"0\"),\n tournamentId: String(obj.context_id ?? \"0\"),\n payoutPosition,\n tokenAddress: num.toHex(obj.token_address as bigint),\n tokenType,\n amount,\n tokenId,\n distributionType,\n distributionWeight,\n distributionShares,\n distributionCount,\n sponsorAddress: num.toHex(obj.sponsor_address as bigint),\n };\n}\n\n/** Unwrap a Cairo Option — starknet.js may return { Some: value } / { None: {} } or just the value */\nfunction parseOption(raw: unknown): unknown | null {\n if (raw === undefined || raw === null) return null;\n const obj = raw as Record<string, unknown>;\n if (\"Some\" in obj) return obj.Some;\n if (\"None\" in obj) return null;\n // Some starknet.js versions flatten the option\n return raw;\n}\n\nfunction decodeOptionalByteArray(raw: unknown): string | null {\n const inner = parseOption(raw);\n if (!inner) return null;\n return decodeByteArray(inner);\n}\n\nfunction parseOptionalAddress(raw: unknown): string | null {\n const inner = parseOption(raw);\n if (!inner) return null;\n const hex = num.toHex(inner as bigint);\n return hex === \"0x0\" ? null : hex;\n}\n\n// =========================================================================\n// Viewer functions\n// =========================================================================\n\ninterface TournamentFilterResult {\n tournamentIds: string[];\n total: number;\n}\n\nfunction parseFilterResult(raw: unknown): TournamentFilterResult {\n const obj = raw as Record<string, unknown>;\n const ids = (obj.tournament_ids as unknown[])?.map((v) => String(v)) ?? [];\n const total = Number(obj.total ?? 0);\n return { tournamentIds: ids, total };\n}\n\nfunction parseTournamentFullState(raw: unknown): Tournament {\n const obj = raw as Record<string, unknown>;\n const entryCount = Number(obj.entry_count ?? 0);\n return parseTournament(obj.tournament, entryCount);\n}\n\n// --- Tournament listing ---\n\nexport async function viewerTournaments(\n contract: Contract,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments\", [offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\nexport async function viewerTournamentsByGame(\n contract: Contract,\n gameAddress: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_game\", [gameAddress, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\nexport async function viewerTournamentsByCreator(\n contract: Contract,\n creator: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_creator\", [creator, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\n/**\n * Map a single SDK phase to the group of on-chain phases it represents.\n * \"scheduled\" includes Scheduled + Registration + Staging (all pre-game).\n * \"live\" includes Live + Submission (active gameplay).\n * \"finalized\" stays as-is.\n */\nconst PHASE_GROUPS: Record<Phase, Phase[]> = {\n scheduled: [\"scheduled\", \"registration\", \"staging\"],\n registration: [\"registration\"],\n staging: [\"staging\"],\n live: [\"live\", \"submission\"],\n submission: [\"submission\"],\n finalized: [\"finalized\"],\n};\n\nexport async function viewerTournamentsByPhase(\n contract: Contract,\n phase: Phase,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n const phases = PHASE_GROUPS[phase];\n if (phases.length === 1) {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_phase\", [phaseToRpcArg(phase), offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n }\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_phases\", [phases.map(phaseToRpcArg), offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\n// --- Tournament detail ---\n\nexport async function viewerTournamentDetail(\n contract: Contract,\n tournamentId: string,\n): Promise<Tournament | null> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_detail\", [tournamentId]);\n const tournament = parseTournamentFullState(result);\n // Viewer returns a zero-filled struct for non-existent tournaments\n if (!tournament.gameAddress || tournament.gameAddress === \"0x0\") return null;\n return tournament;\n }, contract.address);\n}\n\nexport async function viewerTournamentsBatch(\n contract: Contract,\n tournamentIds: string[],\n): Promise<Tournament[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_batch\", [tournamentIds]);\n return (result as unknown[]).map(parseTournamentFullState);\n }, contract.address);\n}\n\n// --- Registrations ---\n\nexport async function viewerRegistrations(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations\", [tournamentId, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\nexport async function viewerRegistrationsByTokenIds(\n contract: Contract,\n tournamentId: string,\n tokenIds: string[],\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations_by_token_ids\", [tournamentId, tokenIds, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\n// --- Leaderboard ---\n\nexport async function viewerLeaderboard(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<LeaderboardEntry[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"leaderboard\", [tournamentId, offset, limit]);\n return (result as unknown[]).map(parseLeaderboardEntry);\n }, contract.address);\n}\n\n// --- Prizes ---\n\nexport async function viewerPrizes(\n contract: Contract,\n tournamentId: string,\n): Promise<Prize[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_prizes\", [tournamentId]);\n return (result as unknown[]).map(parsePrize);\n }, contract.address);\n}\n\n// --- Reward Claims ---\n\nimport type { RewardClaimKind } from \"../types/prize.js\";\n\n/**\n * Flat reward-claim shape returned by the on-chain viewer's\n * `tournament_reward_claims` view, after translating the Cairo\n * `RewardType` enum (deserialized as a CairoCustomEnum by starknet.js)\n * into the structured fields the API also exposes. Mirrors the\n * `RewardClaim` SDK type so the RPC and API paths are interchangeable.\n */\nexport interface ViewerRewardClaim {\n claimKind: RewardClaimKind;\n prizeId: string | null;\n payoutIndex: number | null;\n position: number | null;\n refundTokenId: string | null;\n claimed: boolean;\n}\n\nexport interface ViewerRewardClaimResult {\n claims: ViewerRewardClaim[];\n total: number;\n totalClaimed: number;\n totalUnclaimed: number;\n}\n\n/**\n * Translate the on-chain `RewardType` CairoCustomEnum (as returned by\n * starknet.js for the `tournament_reward_claims` view) into the same\n * structured fields the API exposes. Both starknet.js shapes are accepted —\n * one with `activeVariant()` and a `variant` bag, one with a flat record\n * keyed by variant name — depending on the contract ABI codegen.\n */\nfunction translateCairoRewardType(rewardType: unknown): {\n claimKind: RewardClaimKind;\n prizeId: string | null;\n payoutIndex: number | null;\n position: number | null;\n refundTokenId: string | null;\n} {\n if (!rewardType || typeof rewardType !== \"object\") {\n throw new Error(`Unexpected RewardType payload: ${JSON.stringify(rewardType)}`);\n }\n const rt = rewardType as Record<string, any>;\n const outer =\n typeof rt.activeVariant === \"function\" ? rt.activeVariant() : null;\n const innerBag = (typeof rt.activeVariant === \"function\" ? rt.variant : rt) as Record<string, any>;\n\n if (outer === \"Prize\" || innerBag.Prize !== undefined) {\n const prize = innerBag.Prize;\n const subVariant = typeof prize?.activeVariant === \"function\" ? prize.activeVariant() : null;\n const subBag = (typeof prize?.activeVariant === \"function\" ? prize.variant : prize) as Record<string, any>;\n\n if (subVariant === \"Single\" || subBag?.Single !== undefined) {\n return {\n claimKind: \"prize_single\",\n prizeId: BigInt(subBag.Single).toString(),\n payoutIndex: null,\n position: null,\n refundTokenId: null,\n };\n }\n if (subVariant === \"Distributed\" || subBag?.Distributed !== undefined) {\n const distributed = subBag.Distributed;\n const prizeId = distributed?.[\"0\"] ?? distributed?.[0];\n const payoutIndex = distributed?.[\"1\"] ?? distributed?.[1];\n return {\n claimKind: \"prize_distributed\",\n prizeId: BigInt(prizeId).toString(),\n payoutIndex: Number(payoutIndex),\n position: null,\n refundTokenId: null,\n };\n }\n }\n\n if (outer === \"EntryFee\" || innerBag.EntryFee !== undefined) {\n const entryFee = innerBag.EntryFee;\n const subVariant =\n typeof entryFee?.activeVariant === \"function\" ? entryFee.activeVariant() : null;\n const subBag = (typeof entryFee?.activeVariant === \"function\" ? entryFee.variant : entryFee) as Record<string, any>;\n\n if (subVariant === \"Position\" || subBag?.Position !== undefined) {\n return {\n claimKind: \"entry_fee_position\",\n prizeId: null,\n payoutIndex: null,\n position: Number(subBag.Position),\n refundTokenId: null,\n };\n }\n if (subVariant === \"TournamentCreator\" || subBag?.TournamentCreator !== undefined) {\n return {\n claimKind: \"entry_fee_tournament_creator\",\n prizeId: null,\n payoutIndex: null,\n position: null,\n refundTokenId: null,\n };\n }\n if (subVariant === \"GameCreator\" || subBag?.GameCreator !== undefined) {\n return {\n claimKind: \"entry_fee_game_creator\",\n prizeId: null,\n payoutIndex: null,\n position: null,\n refundTokenId: null,\n };\n }\n if (subVariant === \"Refund\" || subBag?.Refund !== undefined) {\n return {\n claimKind: \"entry_fee_refund\",\n prizeId: null,\n payoutIndex: null,\n position: null,\n refundTokenId: `0x${BigInt(subBag.Refund).toString(16)}`,\n };\n }\n }\n\n throw new Error(\n `Unrecognised on-chain RewardType variant: ${JSON.stringify(rewardType)}`,\n );\n}\n\nexport async function viewerRewardClaims(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<ViewerRewardClaimResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_reward_claims\", [tournamentId, offset, limit]);\n const obj = result as Record<string, unknown>;\n const claims: ViewerRewardClaim[] = (obj.claims as unknown[])?.map((raw) => {\n const claim = raw as Record<string, unknown>;\n return {\n ...translateCairoRewardType(claim.reward_type),\n claimed: Boolean(claim.claimed),\n };\n }) ?? [];\n return {\n claims,\n total: Number(obj.total ?? 0),\n totalClaimed: Number(obj.total_claimed ?? 0),\n totalUnclaimed: Number(obj.total_unclaimed ?? 0),\n };\n }, contract.address);\n}\n\n","[\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"BudokanViewerImpl\",\n \"interface_name\": \"budokan_interfaces::viewer::IBudokanViewer\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::TournamentFilterResult\",\n \"members\": [\n {\n \"name\": \"tournament_ids\",\n \"type\": \"core::array::Array::<core::integer::u64>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u64\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::Phase\",\n \"variants\": [\n {\n \"name\": \"Scheduled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Registration\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Staging\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Live\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Submission\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Finalized\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Metadata\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Schedule\",\n \"members\": [\n {\n \"name\": \"registration_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"registration_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"submission_duration\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::byte_array::ByteArray>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::GameConfig\",\n \"members\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"settings_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"soulbound\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"paymaster\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"client_url\",\n \"type\": \"core::option::Option::<core::byte_array::ByteArray>\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u16>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::distribution::Distribution\",\n \"variants\": [\n {\n \"name\": \"Linear\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Exponential\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Uniform\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Custom\",\n \"type\": \"core::array::Span::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::EntryFee\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"tournament_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"budokan_interfaces::budokan::EntryFee\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"metagame_extensions_interfaces::extension::ExtensionConfig\",\n \"members\": [\n {\n \"name\": \"address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"config\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirementType\",\n \"variants\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"extension\",\n \"type\": \"metagame_extensions_interfaces::extension::ExtensionConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirement\",\n \"members\": [\n {\n \"name\": \"entry_limit\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"entry_requirement_type\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirementType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirement\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"members\": [\n {\n \"name\": \"ascending\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"game_must_be_over\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Tournament\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::TournamentFullState\",\n \"members\": [\n {\n \"name\": \"tournament\",\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::registration::Registration\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RegistrationResult\",\n \"members\": [\n {\n \"name\": \"entries\",\n \"type\": \"core::array::Array::<game_components_interfaces::registration::Registration>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::LeaderboardEntryView\",\n \"members\": [\n {\n \"name\": \"position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u32>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC20Data\",\n \"members\": [\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC721Data\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::TokenTypeData\",\n \"variants\": [\n {\n \"name\": \"erc20\",\n \"type\": \"game_components_interfaces::prize::ERC20Data\"\n },\n {\n \"name\": \"erc721\",\n \"type\": \"game_components_interfaces::prize::ERC721Data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::PrizeData\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::PrizeType\",\n \"variants\": [\n {\n \"name\": \"Single\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"Distributed\",\n \"type\": \"(core::integer::u64, core::integer::u32)\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::EntryFeeRewardType\",\n \"variants\": [\n {\n \"name\": \"Position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"TournamentCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"GameCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Refund\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::RewardType\",\n \"variants\": [\n {\n \"name\": \"Prize\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n },\n {\n \"name\": \"EntryFee\",\n \"type\": \"budokan_interfaces::budokan::EntryFeeRewardType\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RewardClaimView\",\n \"members\": [\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\"\n },\n {\n \"name\": \"claimed\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RewardClaimResult\",\n \"members\": [\n {\n \"name\": \"claims\",\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::RewardClaimView>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"total_claimed\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"total_unclaimed\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"budokan_interfaces::viewer::IBudokanViewer\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"tournaments\",\n \"inputs\": [\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_game\",\n \"inputs\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_creator\",\n \"inputs\": [\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_phase\",\n \"inputs\": [\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_phases\",\n \"inputs\": [\n {\n \"name\": \"phases\",\n \"type\": \"core::array::Array::<budokan_interfaces::budokan::Phase>\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_game\",\n \"inputs\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_creator\",\n \"inputs\": [\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_phase\",\n \"inputs\": [\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_phases\",\n \"inputs\": [\n {\n \"name\": \"phases\",\n \"type\": \"core::array::Array::<budokan_interfaces::budokan::Phase>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_detail\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFullState\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_batch\",\n \"inputs\": [\n {\n \"name\": \"tournament_ids\",\n \"type\": \"core::array::Array::<core::integer::u64>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::TournamentFullState>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_registrations\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::RegistrationResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"leaderboard\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::LeaderboardEntryView>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_prizes\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<game_components_interfaces::prize::PrizeData>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_reward_claims\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::RewardClaimResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"player_tournaments\",\n \"inputs\": [\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableCamelOnlyImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnableCamelOnly\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnableCamelOnly\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"budokan_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan_viewer::budokan_viewer::BudokanViewer::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n }\n ]\n }\n]","[\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"GameContextImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::context::IMetagameContext\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::context::IMetagameContext\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"has_context\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"GameContextDetailsImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::context::IMetagameContextDetails\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u32>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::structs::metagame::GameContext\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<game_components_interfaces::structs::metagame::GameContext>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<game_components_interfaces::structs::metagame::GameContext>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::structs::metagame::GameContextDetails\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"id\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n },\n {\n \"name\": \"context\",\n \"type\": \"core::array::Span::<game_components_interfaces::structs::metagame::GameContext>\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::context::IMetagameContextDetails\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"context_details\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::structs::metagame::GameContextDetails\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"BudokanImpl\",\n \"interface_name\": \"budokan_interfaces::budokan::IBudokan\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Metadata\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Schedule\",\n \"members\": [\n {\n \"name\": \"registration_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"registration_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"submission_duration\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::byte_array::ByteArray>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::GameConfig\",\n \"members\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"settings_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"soulbound\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"paymaster\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"client_url\",\n \"type\": \"core::option::Option::<core::byte_array::ByteArray>\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u16>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::distribution::Distribution\",\n \"variants\": [\n {\n \"name\": \"Linear\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Exponential\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Uniform\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Custom\",\n \"type\": \"core::array::Span::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::EntryFee\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"tournament_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"budokan_interfaces::budokan::EntryFee\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"interfaces::extension::ExtensionConfig\",\n \"members\": [\n {\n \"name\": \"address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"config\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirementType\",\n \"variants\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"extension\",\n \"type\": \"interfaces::extension::ExtensionConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirement\",\n \"members\": [\n {\n \"name\": \"entry_limit\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"entry_requirement_type\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirementType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirement\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"members\": [\n {\n \"name\": \"ascending\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"game_must_be_over\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Tournament\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::Phase\",\n \"variants\": [\n {\n \"name\": \"Scheduled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Registration\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Staging\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Live\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Submission\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Finalized\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n {\n \"name\": \"low\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"high\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::NFTQualification\",\n \"members\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::QualificationProof\",\n \"variants\": [\n {\n \"name\": \"NFT\",\n \"type\": \"game_components_interfaces::entry_requirement::NFTQualification\"\n },\n {\n \"name\": \"Address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"Extension\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::QualificationProof>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::PrizeType\",\n \"variants\": [\n {\n \"name\": \"Single\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"Distributed\",\n \"type\": \"(core::integer::u64, core::integer::u32)\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::EntryFeeRewardType\",\n \"variants\": [\n {\n \"name\": \"Position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"TournamentCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"GameCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Refund\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::RewardType\",\n \"variants\": [\n {\n \"name\": \"Prize\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n },\n {\n \"name\": \"EntryFee\",\n \"type\": \"budokan_interfaces::budokan::EntryFeeRewardType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC20Data\",\n \"members\": [\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC721Data\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::TokenTypeData\",\n \"variants\": [\n {\n \"name\": \"erc20\",\n \"type\": \"game_components_interfaces::prize::ERC20Data\"\n },\n {\n \"name\": \"erc721\",\n \"type\": \"game_components_interfaces::prize::ERC721Data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::PrizeData\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"budokan_interfaces::budokan::IBudokan\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"total_tournaments\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_entries\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u32\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_leaderboard\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"current_phase\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_distribution_shares\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<core::integer::u16>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"create_tournament\",\n \"inputs\": [\n {\n \"name\": \"creator_rewards_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"metadata_value\",\n \"type\": \"core::integer::u16\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"enter_tournament\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"player_name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"qualification\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::QualificationProof>\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"metadata_value\",\n \"type\": \"core::integer::u16\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"(core::felt252, core::integer::u32)\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ban_entry\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"proof\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"submit_score\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"position\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim_reward\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"add_prize\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"position\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::prize::PrizeData\"\n }\n ],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"MetagameImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::core::IMetagame\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::core::IMetagame\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"context_address\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"default_token_address\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"SRC5Impl\",\n \"interface_name\": \"openzeppelin_interfaces::introspection::ISRC5\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::introspection::ISRC5\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"supports_interface\",\n \"inputs\": [\n {\n \"name\": \"interface_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"EntryFeeImpl\",\n \"interface_name\": \"game_components_interfaces::entry_fee::IEntryFee\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u16>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_fee::AdditionalShare\",\n \"members\": [\n {\n \"name\": \"recipient\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"share_bps\",\n \"type\": \"core::integer::u16\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<game_components_interfaces::entry_fee::AdditionalShare>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<game_components_interfaces::entry_fee::AdditionalShare>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_fee::EntryFeeConfig\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::option::Option::<core::integer::u16>\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::option::Option::<core::integer::u16>\"\n },\n {\n \"name\": \"additional_shares\",\n \"type\": \"core::array::Span::<game_components_interfaces::entry_fee::AdditionalShare>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_fee::EntryFeeConfig>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_fee::EntryFeeConfig\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::entry_fee::IEntryFee\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry_fee\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::option::Option::<game_components_interfaces::entry_fee::EntryFeeConfig>\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"EntryRequirementImpl\",\n \"interface_name\": \"game_components_interfaces::entry_requirement::IEntryRequirement\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::QualificationEntries\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"qualification_proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::entry_requirement::IEntryRequirement\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry_requirement\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_qualification_entries\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::entry_requirement::QualificationEntries\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"PrizeImpl\",\n \"interface_name\": \"game_components_interfaces::prize::IPrize\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::prize::IPrize\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_prize\",\n \"inputs\": [\n {\n \"name\": \"prize_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::prize::PrizeData\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_total_prizes\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_prize_claimed\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"prize_type\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"RegistrationImpl\",\n \"interface_name\": \"game_components_interfaces::registration::IRegistration\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::registration::Registration\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::registration::IRegistration\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::registration::Registration\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"entry_exists\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_entry_banned\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_entry_count\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u32\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"default_token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_embeddable_game_standard::metagame::metagame_component::MetagameComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_embeddable_game_standard::metagame::extensions::context::context::ContextComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::leaderboard::leaderboard_component::LeaderboardComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::registration::registration_component::RegistrationComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::entry_fee::entry_fee_component::EntryFeeComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::entry_requirement::entry_requirement_component::EntryRequirementComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::prize::prize_component::PrizeComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::TournamentCreated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::TournamentRegistration\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_number\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::LeaderboardUpdated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"token_ids\",\n \"type\": \"core::array::Span::<core::felt252>\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::PrizeAdded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"prize_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"payout_position\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::RewardClaimed\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"claimed\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::QualificationEntriesUpdated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"qualification_proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::budokan::Budokan::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"MetagameEvent\",\n \"type\": \"game_components_embeddable_game_standard::metagame::metagame_component::MetagameComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"ContextEvent\",\n \"type\": \"game_components_embeddable_game_standard::metagame::extensions::context::context::ContextComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"SRC5Event\",\n \"type\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"LeaderboardEvent\",\n \"type\": \"game_components_metagame::leaderboard::leaderboard_component::LeaderboardComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"RegistrationEvent\",\n \"type\": \"game_components_metagame::registration::registration_component::RegistrationComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"EntryFeeEvent\",\n \"type\": \"game_components_metagame::entry_fee::entry_fee_component::EntryFeeComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"EntryRequirementEvent\",\n \"type\": \"game_components_metagame::entry_requirement::entry_requirement_component::EntryRequirementComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"PrizeEvent\",\n \"type\": \"game_components_metagame::prize::prize_component::PrizeComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"TournamentCreated\",\n \"type\": \"budokan::events::TournamentCreated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"TournamentRegistration\",\n \"type\": \"budokan::events::TournamentRegistration\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"LeaderboardUpdated\",\n \"type\": \"budokan::events::LeaderboardUpdated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"PrizeAdded\",\n \"type\": \"budokan::events::PrizeAdded\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RewardClaimed\",\n \"type\": \"budokan::events::RewardClaimed\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"QualificationEntriesUpdated\",\n \"type\": \"budokan::events::QualificationEntriesUpdated\",\n \"kind\": \"nested\"\n }\n ]\n }\n]\n","import type { Contract } from \"starknet\";\nimport { RpcError } from \"../errors/index.js\";\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction wrapRpcCall<T>(fn: () => Promise<T>, contractAddress?: string): Promise<T> {\n return fn().catch((error: unknown) => {\n throw new RpcError(\n error instanceof Error ? error.message : \"RPC call failed\",\n contractAddress,\n );\n });\n}\n\n// =========================================================================\n// Budokan contract read calls\n// =========================================================================\n\n/**\n * Fetch the full Custom distribution shares array for a tournament via the\n * Budokan contract's `tournament_distribution_shares(id)` view.\n *\n * Returns an empty array for tournaments configured with Linear /\n * Exponential / Uniform (those don't have a custom shares array), or for\n * tournaments that aren't configured yet.\n *\n * Consumers going through the primary API path don't need this — the\n * indexer already sources the shares from the `TournamentCreated` event.\n * This is the RPC-fallback path for direct on-chain reads.\n */\nexport async function budokanTournamentDistributionShares(\n contract: Contract,\n tournamentId: string,\n): Promise<number[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_distribution_shares\", [tournamentId]);\n const arr = Array.isArray(result) ? (result as unknown[]) : [];\n return arr.map((v) => Number(v));\n }, contract.address);\n}\n","import type { RpcProvider, Contract, Abi } from \"starknet\";\nimport type { BudokanClientConfig } from \"./types/config.js\";\nimport type { Tournament, TournamentListParams } from \"./types/tournament.js\";\nimport type { LeaderboardEntry } from \"./types/leaderboard.js\";\nimport type { Registration } from \"./types/registration.js\";\nimport type { Prize, RewardClaim, RewardClaimSummary, PrizeAggregation } from \"./types/prize.js\";\nimport type { PlatformStats, PrizeStats } from \"./types/activity.js\";\nimport type { QualificationEntry } from \"./types/tournament.js\";\nimport type { PaginatedResult } from \"./types/common.js\";\nimport type { WSChannel, WSEventHandler } from \"./types/websocket.js\";\nimport type { ConnectionStatusState } from \"./datasource/health.js\";\n\nimport {\n getTournaments as apiGetTournaments,\n getTournament as apiGetTournament,\n getTournamentRegistrations as apiGetTournamentRegistrations,\n getTournamentPrizes as apiGetTournamentPrizes,\n getTournamentRewardClaims as apiGetTournamentRewardClaims,\n getTournamentRewardClaimsSummary as apiGetTournamentRewardClaimsSummary,\n getTournamentQualifications as apiGetTournamentQualifications,\n getTournamentPrizeAggregation as apiGetTournamentPrizeAggregation,\n} from \"./api/tournaments.js\";\nimport {\n getGameTournaments as apiGetGameTournaments,\n getGameStats as apiGetGameStats,\n} from \"./api/games.js\";\nimport {\n getActivityStats as apiGetActivityStats,\n getPrizeStats as apiGetPrizeStats,\n} from \"./api/activity.js\";\nimport { WSManager } from \"./ws/manager.js\";\nimport { getChainConfig } from \"./chains/constants.js\";\nimport { ConnectionStatus } from \"./datasource/health.js\";\nimport { withFallback } from \"./datasource/resolver.js\";\nimport { RpcError } from \"./errors/index.js\";\nimport { createProvider, createContract } from \"./rpc/provider.js\";\nimport {\n viewerTournaments,\n viewerTournamentsByGame,\n viewerTournamentsByCreator,\n viewerTournamentsByPhase,\n viewerTournamentDetail,\n viewerTournamentsBatch,\n viewerRegistrations,\n viewerRegistrationsByTokenIds,\n viewerLeaderboard,\n viewerPrizes,\n viewerRewardClaims,\n} from \"./rpc/viewer.js\";\n\nimport viewerAbi from \"./rpc/abis/budokanViewer.json\";\nimport budokanAbi from \"./rpc/abis/budokan.json\";\nimport { budokanTournamentDistributionShares } from \"./rpc/budokan.js\";\n\n/** Resolved config with all defaults applied */\ninterface ResolvedConfig extends BudokanClientConfig {\n rpcUrl: string;\n viewerAddress: string;\n budokanAddress: string;\n}\n\n/**\n * Main client for interacting with the Budokan tournament system.\n *\n * Provides methods for querying tournaments, registrations, leaderboards,\n * prizes, player stats, and activity events. Supports real-time updates\n * via WebSocket subscriptions and automatic RPC fallback when the API is\n * unavailable.\n *\n * @example\n * ```ts\n * // API-only (default, backward compatible)\n * const client = new BudokanClient({\n * apiBaseUrl: \"https://budokan-api.provable.games\",\n * });\n *\n * // With RPC fallback\n * const client = new BudokanClient({\n * chain: \"mainnet\",\n * apiBaseUrl: \"https://budokan-api.provable.games\",\n * viewerAddress: \"0x...\",\n * });\n *\n * // RPC-only (bypass API entirely)\n * const client = new BudokanClient({\n * primarySource: \"rpc\",\n * rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_10\",\n * viewerAddress: \"0x...\",\n * });\n * ```\n */\nexport class BudokanClient {\n private readonly resolvedConfig: ResolvedConfig;\n private readonly wsManager: WSManager;\n private readonly connectionStatus: ConnectionStatus;\n private cachedProvider: RpcProvider | null = null;\n private cachedViewerContract: Contract | null = null;\n private cachedBudokanContract: Contract | null = null;\n\n constructor(config: BudokanClientConfig) {\n // Merge user config with chain defaults\n const chainConfig = config.chain ? getChainConfig(config.chain) : undefined;\n this.resolvedConfig = {\n ...config,\n apiBaseUrl: config.apiBaseUrl ?? chainConfig?.apiBaseUrl ?? \"\",\n rpcUrl: config.rpcUrl ?? chainConfig?.rpcUrl ?? \"\",\n viewerAddress: config.viewerAddress ?? chainConfig?.viewerAddress ?? \"\",\n budokanAddress: config.budokanAddress ?? chainConfig?.budokanAddress ?? \"\",\n };\n\n const wsUrl = config.wsUrl ?? chainConfig?.wsUrl\n ?? this.resolvedConfig.apiBaseUrl.replace(/^http/, \"ws\").replace(/\\/$/, \"\") + \"/ws\";\n this.wsManager = new WSManager(wsUrl);\n\n this.connectionStatus = new ConnectionStatus(\n this.resolvedConfig.apiBaseUrl,\n this.resolvedConfig.rpcUrl,\n config.health,\n );\n\n // Start health monitoring if both sources are configured\n if (this.resolvedConfig.apiBaseUrl && this.resolvedConfig.rpcUrl) {\n this.connectionStatus.startMonitoring();\n }\n }\n\n // ---- Configuration ----\n\n /** Returns the resolved configuration. */\n get clientConfig(): BudokanClientConfig {\n return { ...this.resolvedConfig };\n }\n\n /** Whether the WebSocket is currently connected. */\n get wsConnected(): boolean {\n return this.wsManager.isConnected;\n }\n\n // ---- Connection status ----\n\n /** Returns the current connection status (API, RPC, mode). */\n getConnectionStatus(): ConnectionStatusState {\n return this.connectionStatus.getStatus();\n }\n\n /** Subscribe to connection status changes. Returns an unsubscribe function. */\n onConnectionStatusChange(listener: (status: ConnectionStatusState) => void): () => void {\n return this.connectionStatus.subscribe(listener);\n }\n\n // ---- Lazy RPC getters ----\n\n private async getProvider(): Promise<RpcProvider> {\n if (this.cachedProvider) return this.cachedProvider;\n if (!this.resolvedConfig.rpcUrl) {\n throw new RpcError(\"No rpcUrl configured\");\n }\n if (this.resolvedConfig.provider) {\n this.cachedProvider = this.resolvedConfig.provider;\n return this.cachedProvider;\n }\n this.cachedProvider = await createProvider(\n this.resolvedConfig.rpcUrl,\n this.resolvedConfig.rpcHeaders,\n );\n return this.cachedProvider;\n }\n\n private async getViewerContract(): Promise<Contract> {\n if (this.cachedViewerContract) return this.cachedViewerContract;\n if (!this.resolvedConfig.viewerAddress) {\n throw new RpcError(\"No viewerAddress configured. Set viewerAddress in config or use a chain preset with a deployed viewer contract.\");\n }\n const provider = await this.getProvider();\n this.cachedViewerContract = await createContract(\n viewerAbi as Abi,\n this.resolvedConfig.viewerAddress,\n provider,\n );\n return this.cachedViewerContract;\n }\n\n private async getBudokanContract(): Promise<Contract> {\n if (this.cachedBudokanContract) return this.cachedBudokanContract;\n if (!this.resolvedConfig.budokanAddress) {\n throw new RpcError(\"No budokanAddress configured. Set budokanAddress in config or use a chain preset with a deployed Budokan contract.\");\n }\n const provider = await this.getProvider();\n this.cachedBudokanContract = await createContract(\n budokanAbi as Abi,\n this.resolvedConfig.budokanAddress,\n provider,\n );\n return this.cachedBudokanContract;\n }\n\n // ---- API context ----\n\n private get apiCtx() {\n return {\n retryAttempts: this.resolvedConfig.retryAttempts,\n retryDelay: this.resolvedConfig.retryDelay,\n timeout: this.resolvedConfig.timeout,\n };\n }\n\n // ---- Tournament Queries ----\n\n /**\n * Fetch a paginated list of tournaments with optional filtering.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournaments(params?: TournamentListParams): Promise<PaginatedResult<Tournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<Tournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n\n // Choose the appropriate viewer filter function\n let filterResult: { tournamentIds: string[]; total: number };\n if (params?.phase) {\n filterResult = await viewerTournamentsByPhase(contract, params.phase, offset, limit);\n } else if (params?.gameAddress) {\n filterResult = await viewerTournamentsByGame(contract, params.gameAddress, offset, limit);\n } else if (params?.creator) {\n filterResult = await viewerTournamentsByCreator(contract, params.creator, offset, limit);\n } else {\n filterResult = await viewerTournaments(contract, offset, limit);\n }\n\n // Batch-fetch full tournament data for the returned IDs\n let data: Tournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n data = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n\n // Fetch prize aggregation if requested\n if (params?.includePrizeSummary) {\n const prizePromises = data.map((t) =>\n viewerPrizes(contract, t.id).catch(() => [] as Prize[]),\n );\n const allPrizes = await Promise.all(prizePromises);\n data = data.map((t, i) => {\n const prizes = allPrizes[i];\n if (prizes.length === 0) return t;\n // Build aggregation by token\n const tokenMap = new Map<string, { tokenAddress: string; tokenType: string; totalAmount: bigint; nftCount: number }>();\n for (const p of prizes) {\n const key = p.tokenAddress;\n const existing = tokenMap.get(key);\n if (existing) {\n existing.totalAmount += BigInt(p.amount ?? \"0\");\n if (p.tokenType === \"erc721\") existing.nftCount += 1;\n } else {\n tokenMap.set(key, {\n tokenAddress: p.tokenAddress,\n tokenType: p.tokenType,\n totalAmount: BigInt(p.amount ?? \"0\"),\n nftCount: p.tokenType === \"erc721\" ? 1 : 0,\n });\n }\n }\n return {\n ...t,\n prizeAggregation: Array.from(tokenMap.values()).map((v) => ({\n tokenAddress: v.tokenAddress,\n tokenType: v.tokenType,\n totalAmount: v.totalAmount.toString(),\n nftCount: v.nftCount,\n })),\n };\n });\n }\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournaments(this.resolvedConfig.apiBaseUrl, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch a single tournament by its ID.\n * Supports RPC fallback when API is unavailable.\n *\n * On the RPC-fallback path, Custom distribution shares are populated via\n * a follow-up call to `tournament_distribution_shares(id)` so callers see\n * the same shape regardless of data source (the API/indexer path fills\n * shares from the `TournamentCreated` event).\n */\n async getTournament(tournamentId: string): Promise<Tournament | null> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n const tournament = await viewerTournamentDetail(contract, tournamentId);\n if (tournament) {\n await this.fillCustomSharesIfEmpty(tournament);\n }\n return tournament;\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n try {\n return await apiGetTournament(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx);\n } catch {\n // API 404 or network error — try RPC fallback\n try {\n this.connectionStatus.markApiUnavailable();\n return await rpcFallback();\n } catch {\n return null;\n }\n }\n }\n\n /**\n * If the tournament's entry-fee distribution is `Custom` with an empty\n * shares array (the on-chain `tournament()` view returns empty spans by\n * design to keep the hot path small), fetch the shares via the\n * dedicated view and graft them back onto the distribution object.\n *\n * Detection is tolerant: the Distribution shape may appear as\n * `{ variant: { Custom: [] } }` or a flattened `{ Custom: [] }`\n * depending on the starknet.js version / serialization path.\n */\n private async fillCustomSharesIfEmpty(tournament: Tournament): Promise<void> {\n const dist = tournament.entryFee?.distribution as unknown;\n if (!dist || typeof dist !== \"object\") return;\n\n const bag =\n ((dist as { variant?: Record<string, unknown> }).variant ??\n (dist as Record<string, unknown>)) as Record<string, unknown>;\n const customValue = bag.Custom ?? bag.custom;\n if (!Array.isArray(customValue) || customValue.length > 0) return;\n\n try {\n const shares = await this.getTournamentDistributionShares(tournament.id);\n if (shares.length > 0) {\n // Overwrite in place — Distribution is typed as opaque, so cast.\n (bag as Record<string, unknown>).Custom = shares;\n }\n } catch {\n // Silent — caller gets the empty array; auto-fill is best-effort.\n }\n }\n\n /**\n * Fetch the Custom distribution shares for a tournament via the Budokan\n * contract's `tournament_distribution_shares(id)` view.\n *\n * Returns an empty array for tournaments configured with\n * `Linear` / `Exponential` / `Uniform` distributions (those don't have a\n * shares array), and for tournaments without an entry fee.\n *\n * This is a direct RPC call — consumers going through the primary API\n * path typically don't need it, since the indexer sources Custom shares\n * from the `TournamentCreated` event and exposes them via\n * `getTournament()`'s `entryFee.distribution`. Use this when you need a\n * fresh on-chain read or you're operating in RPC-only mode.\n */\n async getTournamentDistributionShares(tournamentId: string): Promise<number[]> {\n const contract = await this.getBudokanContract();\n return budokanTournamentDistributionShares(contract, tournamentId);\n }\n\n /**\n * Fetch the leaderboard for a tournament from the on-chain viewer\n * contract. Live leaderboard data for UIs is best sourced via\n * denshokan-sdk's `useLiveLeaderboard`; this method is kept for\n * one-shot RPC reads (e.g. server-side scoring scripts).\n */\n async getTournamentLeaderboard(tournamentId: string): Promise<LeaderboardEntry[]> {\n const contract = await this.getViewerContract();\n // Fetch a large page; on-chain leaderboards are typically small\n return viewerLeaderboard(contract, tournamentId, 0, 1000);\n }\n\n /**\n * Fetch registrations for a tournament.\n * Supports RPC fallback when API is unavailable.\n * Note: In RPC mode, `playerAddress` and `gameAddress` fields will be empty strings,\n * and filter params (`playerAddress`, `gameTokenIds`, `hasSubmitted`, `isBanned`)\n * are applied via on-chain viewer functions where supported.\n */\n async getTournamentRegistrations(\n tournamentId: string,\n params?: { gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n ): Promise<PaginatedResult<Registration>> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n if (params?.gameTokenIds?.length) {\n return viewerRegistrationsByTokenIds(contract, tournamentId, params.gameTokenIds, offset, limit);\n }\n return viewerRegistrations(contract, tournamentId, offset, limit);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRegistrations(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch prizes for a tournament.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournamentPrizes(tournamentId: string): Promise<Prize[]> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n return viewerPrizes(contract, tournamentId);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentPrizes(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n // ---- Game Queries ----\n\n /**\n * Fetch tournaments for a specific game.\n * Supports RPC fallback when API is unavailable.\n */\n async getGameTournaments(\n gameAddress: string,\n params?: Omit<TournamentListParams, \"gameAddress\">,\n ): Promise<PaginatedResult<Tournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<Tournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n const filterResult = await viewerTournamentsByGame(contract, gameAddress, offset, limit);\n\n let data: Tournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n data = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetGameTournaments(this.resolvedConfig.apiBaseUrl, gameAddress, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch tournament stats for a specific game.\n * API-only — no RPC fallback available.\n */\n async getGameStats(gameAddress: string): Promise<PlatformStats> {\n return apiGetGameStats(this.resolvedConfig.apiBaseUrl, gameAddress, this.apiCtx);\n }\n\n // ---- Reward Claims & Qualifications ----\n\n /**\n * Fetch reward claims for a tournament.\n * Supports RPC fallback via viewer contract.\n */\n async getTournamentRewardClaims(\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ): Promise<PaginatedResult<RewardClaim>> {\n const rpcFallback = async (): Promise<PaginatedResult<RewardClaim>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 100;\n const result = await viewerRewardClaims(contract, tournamentId, offset, limit);\n const data: RewardClaim[] = result.claims.map((c) => ({\n tournamentId,\n ...c,\n }));\n return { data, total: result.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRewardClaims(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch reward claims summary for a tournament.\n * Supports RPC fallback via viewer contract.\n */\n async getTournamentRewardClaimsSummary(tournamentId: string): Promise<RewardClaimSummary> {\n const rpcFallback = async (): Promise<RewardClaimSummary> => {\n const contract = await this.getViewerContract();\n const result = await viewerRewardClaims(contract, tournamentId, 0, 0);\n return {\n totalPrizes: result.total,\n totalClaimed: result.totalClaimed,\n totalUnclaimed: result.totalUnclaimed,\n };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRewardClaimsSummary(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch qualifications for a tournament.\n * API-only -- no RPC fallback available.\n */\n async getTournamentQualifications(\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ): Promise<PaginatedResult<QualificationEntry>> {\n return apiGetTournamentQualifications(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx);\n }\n\n /**\n * Fetch prize aggregation for a tournament.\n * API-only -- no RPC fallback available.\n */\n async getTournamentPrizeAggregation(tournamentId: string): Promise<PrizeAggregation[]> {\n return apiGetTournamentPrizeAggregation(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx);\n }\n\n // ---- Activity Queries (API-only, activity is indexed) ----\n\n /**\n * Fetch platform-wide activity stats.\n * API-only — no RPC fallback available.\n */\n async getActivityStats(): Promise<PlatformStats> {\n return apiGetActivityStats(this.resolvedConfig.apiBaseUrl, this.apiCtx);\n }\n\n /**\n * Fetch platform-wide prize stats.\n * API-only — no RPC fallback available.\n */\n async getPrizeStats(): Promise<PrizeStats> {\n return apiGetPrizeStats(this.resolvedConfig.apiBaseUrl, this.apiCtx);\n }\n\n // ---- WebSocket ----\n\n /**\n * Open a WebSocket connection for real-time updates.\n */\n connect(): void {\n this.wsManager.connect();\n }\n\n /**\n * Close the WebSocket connection.\n */\n disconnect(): void {\n this.wsManager.disconnect();\n }\n\n /**\n * Stop health monitoring and close all connections.\n */\n destroy(): void {\n this.connectionStatus.destroy();\n this.wsManager.disconnect();\n }\n\n /**\n * Subscribe to WebSocket channels with optional tournament filtering.\n * Returns an unsubscribe function.\n */\n subscribe(\n channels: WSChannel[],\n handler: WSEventHandler,\n tournamentIds?: string[],\n ): () => void {\n return this.wsManager.subscribe({ channels, tournamentIds }, handler);\n }\n\n /**\n * Register a listener for WebSocket connection state changes.\n * Returns an unsubscribe function.\n */\n onWsConnectionChange(listener: (connected: boolean) => void): () => void {\n return this.wsManager.onConnectionChange(listener);\n }\n}\n\n/**\n * Factory function for creating a BudokanClient instance.\n */\nexport function createBudokanClient(config: BudokanClientConfig): BudokanClient {\n return new BudokanClient(config);\n}\n","import { createContext, useContext, useMemo, useEffect, useRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { BudokanClient, createBudokanClient } from \"../client.js\";\nimport type { BudokanClientConfig } from \"../types/config.js\";\n\nconst BudokanContext = createContext<BudokanClient | null>(null);\n\nexport interface BudokanProviderProps {\n children: ReactNode;\n config?: BudokanClientConfig;\n client?: BudokanClient;\n}\n\n/**\n * Provides a BudokanClient instance to all child components via React context.\n * Supply either a `config` prop to auto-create a client, or an existing `client` instance.\n */\nexport function BudokanProvider({ children, config, client: existingClient }: BudokanProviderProps) {\n const client = useMemo(() => {\n if (existingClient) return existingClient;\n if (config) return createBudokanClient(config);\n throw new Error(\"BudokanProvider requires either 'config' or 'client' prop\");\n }, [existingClient, config]);\n\n const clientRef = useRef(client);\n\n useEffect(() => {\n // Cleanup previous client if it changed and was created internally\n return () => {\n if (!existingClient && clientRef.current !== client) {\n clientRef.current.destroy();\n }\n };\n }, [client, existingClient]);\n\n useEffect(() => {\n clientRef.current = client;\n }, [client]);\n\n return (\n <BudokanContext.Provider value={client}>\n {children}\n </BudokanContext.Provider>\n );\n}\n\n/**\n * Access the BudokanClient instance from context.\n * Must be used within a BudokanProvider.\n */\nexport function useBudokanClient(): BudokanClient {\n const client = useContext(BudokanContext);\n if (!client) {\n throw new Error(\"useBudokanClient must be used within a BudokanProvider\");\n }\n return client;\n}\n","import { useEffect } from \"react\";\nimport type { BudokanClient } from \"../client.js\";\n\n/**\n * Resets state setters to null/initial when the client reference changes (network switch).\n * Prevents stale data from a previous network being displayed while new data loads.\n */\nexport function useResetOnClient(\n client: BudokanClient,\n ...resetters: Array<(value: null) => void>\n): void {\n useEffect(() => {\n for (const reset of resetters) {\n reset(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client]);\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Tournament, TournamentListParams } from \"../types/tournament.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseTournamentsResult {\n tournaments: PaginatedResult<Tournament> | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch a paginated list of tournaments.\n * Pass `undefined` to skip fetching (useful for conditional queries).\n */\nexport function useTournaments(params?: TournamentListParams): UseTournamentsResult {\n const client = useBudokanClient();\n const [tournaments, setTournaments] = useState<PaginatedResult<Tournament> | null>(null);\n const [loading, setLoading] = useState(!!params);\n const [error, setError] = useState<Error | null>(null);\n\n const paramsKey = JSON.stringify(params);\n\n useResetOnClient(client, setTournaments, setError);\n\n const fetch = useCallback(async () => {\n if (params === undefined) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournaments(params);\n setTournaments(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, paramsKey]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { tournaments, loading, error, refetch: fetch };\n}\n\nexport interface UseTournamentResult {\n tournament: Tournament | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch a single tournament by ID.\n */\nexport function useTournament(tournamentId: string | undefined): UseTournamentResult {\n const client = useBudokanClient();\n const [tournament, setTournament] = useState<Tournament | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setTournament, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const data = await client.getTournament(tournamentId);\n setTournament(data);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { tournament, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Phase } from \"../types/tournament.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseTournamentCountResult {\n count: number | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch the total count of tournaments matching a phase filter.\n */\nexport function useTournamentCount(phase?: Phase): UseTournamentCountResult {\n const client = useBudokanClient();\n const [count, setCount] = useState<number | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setCount, setError);\n\n const fetch = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournaments({ phase, limit: 1 });\n setCount(result.total ?? 0);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, phase]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { count, loading, error, refetch: fetch };\n}\n\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { LeaderboardEntry } from \"../types/leaderboard.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseLeaderboardResult {\n leaderboard: LeaderboardEntry[] | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch the leaderboard for a tournament.\n */\nexport function useLeaderboard(tournamentId: string | undefined): UseLeaderboardResult {\n const client = useBudokanClient();\n const [leaderboard, setLeaderboard] = useState<LeaderboardEntry[] | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setLeaderboard, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentLeaderboard(tournamentId);\n setLeaderboard(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { leaderboard, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseRegistrationsResult {\n registrations: PaginatedResult<Registration> | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch registrations for a tournament.\n */\nexport function useRegistrations(\n tournamentId: string | undefined,\n params?: { gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n): UseRegistrationsResult {\n const client = useBudokanClient();\n const [registrations, setRegistrations] = useState<PaginatedResult<Registration> | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setRegistrations, setError);\n\n const paramsKey = JSON.stringify(params);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentRegistrations(tournamentId, params);\n setRegistrations(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, tournamentId, paramsKey]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { registrations, loading, error, refetch: fetch };\n}\n","import { useMemo } from \"react\";\nimport { useTokens } from \"@provable-games/denshokan-sdk/react\";\nimport type { Phase, Tournament, TournamentListParams } from \"../types/tournament.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useTournaments } from \"./useTournaments.js\";\nimport { useRegistrations } from \"./useRegistrations.js\";\nimport type { UseTournamentsResult } from \"./useTournaments.js\";\nimport type { UseTournamentCountResult } from \"./useTournamentCount.js\";\nimport type { UseRegistrationsResult } from \"./useRegistrations.js\";\n\n// Cap on the number of tokens we ask denshokan for in a single shot. Realistic\n// users own tokens across far fewer tournaments than this — the cap is here to\n// keep the fan-out bounded if a wallet is unusually saturated. Same number as\n// denshokan's per-call default elsewhere in the codebase.\nconst MAX_OWNED_TOKENS = 1000;\n\nconst emptyPage = <T,>(limit: number, offset: number): PaginatedResult<T> => ({\n data: [],\n total: 0,\n limit,\n offset,\n});\n\n/**\n * Resolve the unique tournament IDs an address currently holds Budokan-minted\n * tokens for. Returns `null` while denshokan is still loading or while the\n * inputs are insufficient to query, an empty array once we know the owner has\n * no Budokan tokens, or the deduped id list.\n *\n * `contextId` narrows the denshokan query to a single tournament so we don't\n * fan out across every Budokan token the owner holds when the caller only\n * cares about one tournament.\n */\nfunction useOwnedTournamentIds(\n owner: string | undefined,\n contextId?: number,\n): { tournamentIds: string[] | null; loading: boolean } {\n const client = useBudokanClient();\n const budokanAddress = client.clientConfig.budokanAddress;\n const enabled = !!owner && !!budokanAddress;\n\n const { data, isLoading } = useTokens(\n enabled\n ? {\n owner,\n minterAddress: budokanAddress,\n hasContext: true,\n ...(contextId != null ? { contextId } : {}),\n limit: MAX_OWNED_TOKENS,\n }\n : undefined,\n );\n\n const tournamentIds = useMemo(() => {\n if (!enabled) return null;\n if (!data?.data) return null;\n const ids = new Set<string>();\n for (const t of data.data) {\n if (t.contextId) ids.add(String(t.contextId));\n }\n return [...ids];\n }, [enabled, data]);\n\n return { tournamentIds, loading: isLoading };\n}\n\n/**\n * Tournaments where `owner` currently holds at least one Budokan-minted token.\n * Stitches denshokan ownership → unique `contextId`s → `useTournaments`\n * filtered by those IDs. Stays correct under transfers; transferred tokens\n * drop out of the result, received tokens appear.\n *\n * Requires the consuming app to wrap its tree in a `DenshokanProvider`\n * alongside the `BudokanProvider`.\n */\nexport function useTournamentsByOwner(\n owner: string | undefined,\n params?: {\n phase?: Phase;\n limit?: number;\n offset?: number;\n sort?: TournamentListParams[\"sort\"];\n includePrizeSummary?: TournamentListParams[\"includePrizeSummary\"];\n },\n): UseTournamentsResult {\n const { tournamentIds, loading: tokensLoading } = useOwnedTournamentIds(owner);\n\n const inner = useTournaments(\n tournamentIds && tournamentIds.length > 0\n ? {\n tournamentIds,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n sort: params?.sort,\n includePrizeSummary: params?.includePrizeSummary,\n }\n : undefined,\n );\n\n // Owner has no Budokan tokens → short-circuit to a fully-resolved empty\n // page rather than leaving the consumer in a stuck `null` state.\n if (tournamentIds !== null && tournamentIds.length === 0) {\n return {\n tournaments: emptyPage<Tournament>(\n params?.limit ?? 50,\n params?.offset ?? 0,\n ),\n loading: false,\n error: null,\n refetch: async () => {},\n };\n }\n\n return {\n tournaments: inner.tournaments,\n loading: tokensLoading || inner.loading,\n error: inner.error,\n refetch: inner.refetch,\n };\n}\n\n/**\n * Count of tournaments where `owner` currently holds a Budokan-minted token.\n * When `phase` is omitted the count comes for free from the denshokan result;\n * when phase-filtered it makes a second `useTournaments` call (with limit=1)\n * and reads `.total`.\n */\nexport function useTournamentsByOwnerCount(\n owner: string | undefined,\n params?: { phase?: Phase },\n): UseTournamentCountResult {\n const { tournamentIds, loading: tokensLoading } = useOwnedTournamentIds(owner);\n\n // For phase-filtered counts we still need to ask the API — denshokan tokens\n // don't carry tournament phase. Limit=1 keeps the response cheap; we only\n // care about `total`.\n const phaseFilter = params?.phase;\n const filtered = useTournaments(\n phaseFilter && tournamentIds && tournamentIds.length > 0\n ? { tournamentIds, phase: phaseFilter, limit: 1 }\n : undefined,\n );\n\n if (tournamentIds === null) {\n return {\n count: null,\n loading: tokensLoading,\n error: null,\n refetch: async () => {},\n };\n }\n if (tournamentIds.length === 0) {\n return {\n count: 0,\n loading: false,\n error: null,\n refetch: async () => {},\n };\n }\n if (!phaseFilter) {\n // Unfiltered count is just the unique-tournament-id count from denshokan.\n return {\n count: tournamentIds.length,\n loading: false,\n error: null,\n refetch: async () => {},\n };\n }\n return {\n count: filtered.tournaments?.total ?? null,\n loading: filtered.loading,\n error: filtered.error,\n refetch: async () => {},\n };\n}\n\n/**\n * Registrations in `tournamentId` for tokens that `owner` currently holds.\n * Source of truth is denshokan ownership scoped to the tournament's\n * `contextId`; registration metadata (ban / submission / entry-number) is\n * fetched by `gameTokenIds` filter against the tournament.\n */\nexport function useRegistrationsByOwner(\n tournamentId: string | undefined,\n owner: string | undefined,\n params?: {\n hasSubmitted?: boolean;\n isBanned?: boolean;\n limit?: number;\n offset?: number;\n },\n): UseRegistrationsResult {\n const client = useBudokanClient();\n const budokanAddress = client.clientConfig.budokanAddress;\n const contextId = tournamentId ? Number(tournamentId) : undefined;\n const enabled =\n !!owner && !!budokanAddress && tournamentId != null && contextId !== undefined;\n\n const { data: tokensResult, isLoading: tokensLoading } = useTokens(\n enabled\n ? {\n owner,\n minterAddress: budokanAddress,\n contextId,\n limit: MAX_OWNED_TOKENS,\n }\n : undefined,\n );\n\n const ownedGameTokenIds = useMemo(() => {\n if (!enabled) return null;\n if (!tokensResult?.data) return null;\n const ids: string[] = [];\n for (const t of tokensResult.data) {\n if (t.tokenId == null) continue;\n try {\n ids.push(BigInt(String(t.tokenId)).toString());\n } catch {\n // Non-numeric token id — skip rather than poison the filter.\n }\n }\n return ids;\n }, [enabled, tokensResult]);\n\n const inner = useRegistrations(\n ownedGameTokenIds && ownedGameTokenIds.length > 0 ? tournamentId : undefined,\n ownedGameTokenIds && ownedGameTokenIds.length > 0\n ? { ...params, gameTokenIds: ownedGameTokenIds }\n : undefined,\n );\n\n if (ownedGameTokenIds !== null && ownedGameTokenIds.length === 0) {\n return {\n registrations: emptyPage<Registration>(\n params?.limit ?? 50,\n params?.offset ?? 0,\n ),\n loading: false,\n error: null,\n refetch: async () => {},\n };\n }\n\n return {\n registrations: inner.registrations,\n loading: tokensLoading || inner.loading,\n error: inner.error,\n refetch: inner.refetch,\n };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { RewardClaim, RewardClaimSummary } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseRewardClaimsResult {\n rewardClaims: PaginatedResult<RewardClaim> | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch reward claims for a tournament.\n */\nexport function useRewardClaims(\n tournamentId: string | undefined,\n params?: { limit?: number; offset?: number },\n): UseRewardClaimsResult {\n const client = useBudokanClient();\n const [rewardClaims, setRewardClaims] = useState<PaginatedResult<RewardClaim> | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setRewardClaims, setError);\n\n const paramsKey = JSON.stringify(params);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentRewardClaims(tournamentId, params);\n setRewardClaims(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, tournamentId, paramsKey]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { rewardClaims, loading, error, refetch: fetch };\n}\n\nexport interface UseRewardClaimsSummaryResult {\n summary: RewardClaimSummary | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch reward claims summary for a tournament.\n */\nexport function useRewardClaimsSummary(tournamentId: string | undefined): UseRewardClaimsSummaryResult {\n const client = useBudokanClient();\n const [summary, setSummary] = useState<RewardClaimSummary | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setSummary, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentRewardClaimsSummary(tournamentId);\n setSummary(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { summary, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Prize } from \"../types/prize.js\";\nimport type { PrizeStats } from \"../types/activity.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UsePrizesResult {\n prizes: Prize[] | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch prizes for a tournament.\n */\nexport function usePrizes(tournamentId: string | undefined): UsePrizesResult {\n const client = useBudokanClient();\n const [prizes, setPrizes] = useState<Prize[] | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setPrizes, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentPrizes(tournamentId);\n setPrizes(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { prizes, loading, error, refetch: fetch };\n}\n\nexport interface UsePrizeStatsResult {\n prizeStats: PrizeStats | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch platform-wide prize stats.\n */\nexport function usePrizeStats(): UsePrizeStatsResult {\n const client = useBudokanClient();\n const [prizeStats, setPrizeStats] = useState<PrizeStats | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setPrizeStats, setError);\n\n const fetch = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await client.getPrizeStats();\n setPrizeStats(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { prizeStats, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { PrizeAggregation } from \"../types/prize.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UsePrizeAggregationResult {\n prizeAggregation: PrizeAggregation[] | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch prize aggregation for a tournament.\n */\nexport function usePrizeAggregation(tournamentId: string | undefined): UsePrizeAggregationResult {\n const client = useBudokanClient();\n const [prizeAggregation, setPrizeAggregation] = useState<PrizeAggregation[] | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setPrizeAggregation, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentPrizeAggregation(tournamentId);\n setPrizeAggregation(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { prizeAggregation, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { QualificationEntry } from \"../types/tournament.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseQualificationsResult {\n qualifications: PaginatedResult<QualificationEntry> | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch qualification entries for a tournament.\n */\nexport function useQualifications(\n tournamentId: string | undefined,\n params?: { limit?: number; offset?: number },\n): UseQualificationsResult {\n const client = useBudokanClient();\n const [qualifications, setQualifications] = useState<PaginatedResult<QualificationEntry> | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setQualifications, setError);\n\n const paramsKey = JSON.stringify(params);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentQualifications(tournamentId, params);\n setQualifications(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, tournamentId, paramsKey]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { qualifications, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { PlatformStats, PrizeStats } from \"../types/activity.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseActivityStatsResult {\n stats: PlatformStats | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch platform-wide activity stats.\n */\nexport function useActivityStats(): UseActivityStatsResult {\n const client = useBudokanClient();\n const [stats, setStats] = useState<PlatformStats | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setStats, setError);\n\n const fetch = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await client.getActivityStats();\n setStats(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { stats, loading, error, refetch: fetch };\n}\n\nexport interface UsePrizeStatsResult {\n prizeStats: PrizeStats | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type { WSChannel, WSEventMessage } from \"../types/websocket.js\";\nimport { useBudokanClient } from \"./context.js\";\n\nexport interface UseSubscriptionResult {\n lastMessage: WSEventMessage | null;\n isConnected: boolean;\n}\n\n/**\n * Hook to subscribe to WebSocket channels for real-time updates.\n * Automatically connects and subscribes on mount, and cleans up on unmount.\n */\nexport function useSubscription(\n channels: WSChannel[],\n tournamentIds?: string[],\n): UseSubscriptionResult {\n const client = useBudokanClient();\n const [lastMessage, setLastMessage] = useState<WSEventMessage | null>(null);\n const [isConnected, setIsConnected] = useState(client.wsConnected);\n const channelsRef = useRef(channels);\n const tournamentIdsRef = useRef(tournamentIds);\n\n // Keep refs updated for stable comparisons\n channelsRef.current = channels;\n tournamentIdsRef.current = tournamentIds;\n\n useEffect(() => {\n if (channels.length === 0) return;\n\n client.connect();\n\n const unsubscribe = client.subscribe(\n channels,\n (message) => setLastMessage(message),\n tournamentIds,\n );\n\n const unsubscribeConnection = client.onWsConnectionChange((connected) => {\n setIsConnected(connected);\n });\n\n return () => {\n unsubscribe();\n unsubscribeConnection();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, JSON.stringify(channels), JSON.stringify(tournamentIds)]);\n\n return { lastMessage, isConnected };\n}\n","import { useState, useEffect } from \"react\";\nimport { useBudokanClient } from \"./context.js\";\nimport type { ConnectionMode } from \"../datasource/health.js\";\n\n/**\n * Hook returning the current WebSocket connection status and datasource mode.\n *\n * `datasourceMode` indicates how data is being fetched:\n * - `\"api\"` — API is available and being used\n * - `\"rpc-fallback\"` — API is down, using direct on-chain RPC calls\n * - `\"offline\"` — both API and RPC are unavailable\n */\nexport function useConnectionStatus(): {\n isConnected: boolean;\n datasourceMode: ConnectionMode;\n} {\n const client = useBudokanClient();\n const [isConnected, setIsConnected] = useState(client.wsConnected);\n const [datasourceMode, setDatasourceMode] = useState<ConnectionMode>(\"api\");\n\n useEffect(() => {\n const unsubWs = client.onWsConnectionChange((connected) => {\n setIsConnected(connected);\n });\n const unsubDs = client.onConnectionStatusChange((status) => {\n setDatasourceMode(status.mode);\n });\n return () => {\n unsubWs();\n unsubDs();\n };\n }, [client]);\n\n return { isConnected, datasourceMode };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors/index.ts","../src/utils/retry.ts","../src/api/base.ts","../src/utils/mappers.ts","../src/api/tournaments.ts","../src/utils/address.ts","../src/api/games.ts","../src/api/activity.ts","../src/ws/manager.ts","../src/chains/constants.ts","../src/datasource/health.ts","../src/datasource/resolver.ts","../src/rpc/provider.ts","../src/rpc/viewer.ts","../src/rpc/abis/budokanViewer.json","../src/rpc/abis/budokan.json","../src/rpc/budokan.ts","../src/client.ts","../src/react/context.tsx","../src/react/useResetOnClient.ts","../src/react/useTournaments.ts","../src/react/useTournamentCount.ts","../src/react/useLeaderboard.ts","../src/react/useRegistrations.ts","../src/react/useByOwner.ts","../src/react/useRewardClaims.ts","../src/react/usePrizes.ts","../src/react/usePrizeAggregation.ts","../src/react/useQualifications.ts","../src/react/useActivityStats.ts","../src/react/usePlayerRewards.ts","../src/react/useSubscription.ts","../src/react/useConnectionStatus.ts"],"names":["fetchOpts","num","CairoCustomEnum","wrapRpcCall","createContext","useMemo","useRef","useEffect","useContext","useState","fetch","useCallback","useTokens","useDenshokanClient"],"mappings":"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","file":"react.cjs","sourcesContent":["export class BudokanError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"BudokanError\";\n }\n}\n\nexport class BudokanApiError extends BudokanError {\n readonly status: number;\n readonly statusText: string;\n\n constructor(message: string, status: number, statusText: string = \"\") {\n super(message);\n this.name = \"BudokanApiError\";\n this.status = status;\n this.statusText = statusText;\n }\n}\n\nexport class BudokanTimeoutError extends BudokanError {\n constructor(message = \"Request timed out\") {\n super(message);\n this.name = \"BudokanTimeoutError\";\n }\n}\n\nexport class BudokanConnectionError extends BudokanError {\n constructor(message = \"Connection failed\") {\n super(message);\n this.name = \"BudokanConnectionError\";\n }\n}\n\nexport class TournamentNotFoundError extends BudokanError {\n readonly tournamentId: string;\n\n constructor(tournamentId: string) {\n super(`Tournament not found: ${tournamentId}`);\n this.name = \"TournamentNotFoundError\";\n this.tournamentId = tournamentId;\n }\n}\n\nexport class RpcError extends BudokanError {\n readonly contractAddress?: string;\n\n constructor(message: string, contractAddress?: string) {\n super(message);\n this.name = \"RpcError\";\n this.contractAddress = contractAddress;\n }\n}\n\nexport class DataSourceError extends BudokanError {\n readonly primaryError: Error;\n readonly fallbackError: Error;\n\n constructor(primaryError: Error, fallbackError: Error) {\n super(`Both data sources failed. Primary: ${primaryError.message}. Fallback: ${fallbackError.message}`);\n this.name = \"DataSourceError\";\n this.primaryError = primaryError;\n this.fallbackError = fallbackError;\n }\n}\n\nexport function isNonRetryableError(error: unknown): boolean {\n if (error instanceof TournamentNotFoundError) return true;\n if (error instanceof BudokanApiError && error.status >= 400 && error.status < 500 && error.status !== 429) {\n return true;\n }\n return false;\n}\n","import { isNonRetryableError, BudokanTimeoutError } from \"../errors/index.js\";\n\nexport function calculateBackoff(\n attempt: number,\n baseDelay: number,\n maxDelay: number,\n): number {\n let delay = baseDelay * Math.pow(2, attempt);\n if (delay > maxDelay) delay = maxDelay;\n const minDelay = delay / 2;\n const jitter = Math.random() * (delay - minDelay);\n return minDelay + jitter;\n}\n\nexport function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n attempts: number = 3,\n delay: number = 1000,\n): Promise<T> {\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < attempts; attempt++) {\n try {\n return await fn();\n } catch (error) {\n lastError = error as Error;\n\n if (isNonRetryableError(error)) {\n throw error;\n }\n\n if (attempt === attempts - 1) break;\n\n const backoff = calculateBackoff(attempt, delay, delay * 8);\n await sleep(backoff);\n }\n }\n\n throw lastError ?? new BudokanTimeoutError(\"Unknown error after retries\");\n}\n","import { BudokanApiError, BudokanTimeoutError, BudokanConnectionError } from \"../errors/index.js\";\nimport { withRetry } from \"../utils/retry.js\";\n\nexport interface ApiFetchOptions {\n method?: string;\n headers?: Record<string, string>;\n body?: unknown;\n signal?: AbortSignal;\n timeout?: number;\n retryAttempts?: number;\n retryDelay?: number;\n}\n\nconst DEFAULT_TIMEOUT = 10_000;\nconst DEFAULT_RETRY_ATTEMPTS = 3;\nconst DEFAULT_RETRY_DELAY = 1000;\n\n/**\n * Fetch JSON from an API endpoint with retry logic, timeout, and error handling.\n */\nexport async function apiFetch<T>(url: string, options: ApiFetchOptions = {}): Promise<T> {\n const {\n method = \"GET\",\n headers = {},\n body,\n signal,\n timeout = DEFAULT_TIMEOUT,\n retryAttempts = DEFAULT_RETRY_ATTEMPTS,\n retryDelay = DEFAULT_RETRY_DELAY,\n } = options;\n\n return withRetry(\n async () => {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n // Link external signal\n if (signal) {\n if (signal.aborted) {\n clearTimeout(timeoutId);\n throw new BudokanTimeoutError(\"Request was aborted\");\n }\n signal.addEventListener(\"abort\", () => controller.abort(), { once: true });\n }\n\n try {\n const response = await fetch(url, {\n method,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n const errorBody = await response.json().catch(() => ({}));\n throw new BudokanApiError(\n (errorBody as Record<string, string>).error ?? `API error: ${response.status}`,\n response.status,\n response.statusText,\n );\n }\n\n return (await response.json()) as T;\n } catch (error) {\n clearTimeout(timeoutId);\n if (error instanceof BudokanApiError) {\n throw error;\n }\n if (error instanceof Error && error.name === \"AbortError\") {\n if (signal?.aborted) throw new BudokanTimeoutError(\"Request was aborted\");\n throw new BudokanTimeoutError();\n }\n throw new BudokanConnectionError(\n error instanceof Error ? error.message : \"Connection failed\",\n );\n }\n },\n retryAttempts,\n retryDelay,\n );\n}\n\n/**\n * Extract pagination from API response.\n * The API wraps pagination in a `pagination` object, but the SDK\n * PaginatedResult type uses flat fields (total, limit, offset).\n */\nexport function extractPagination(result: Record<string, unknown>, defaults?: { limit?: number; offset?: number }): {\n total: number | undefined;\n limit: number;\n offset: number;\n} {\n const pagination = result.pagination as { total?: number; limit?: number; offset?: number } | undefined;\n return {\n total: pagination?.total ?? (result.total as number | undefined),\n limit: pagination?.limit ?? (result.limit as number | undefined) ?? defaults?.limit ?? 50,\n offset: pagination?.offset ?? (result.offset as number | undefined) ?? defaults?.offset ?? 0,\n };\n}\n\n/**\n * Build a query string from a record of key-value pairs.\n * Undefined and null values are omitted.\n */\nexport function buildQueryString(params: Record<string, string | number | boolean | undefined | null>): string {\n const qs = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n if (value !== undefined && value !== null) {\n qs.set(key, String(value));\n }\n }\n const str = qs.toString();\n return str ? `?${str}` : \"\";\n}\n","/**\n * Convert a snake_case string to camelCase.\n */\nfunction toCamelCase(str: string): string {\n return str.replace(/_([a-z])/g, (_, letter: string) => letter.toUpperCase());\n}\n\n/**\n * Convert a camelCase string to snake_case.\n */\nfunction toSnakeCase(str: string): string {\n return str.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\n}\n\n/**\n * Deeply convert all keys in an object from snake_case to camelCase.\n */\nexport function snakeToCamel<T>(obj: unknown): T {\n if (Array.isArray(obj)) {\n return obj.map((item) => snakeToCamel(item)) as T;\n }\n if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n result[toCamelCase(key)] = snakeToCamel(value);\n }\n return result as T;\n }\n return obj as T;\n}\n\n/**\n * Deeply convert all keys in an object from camelCase to snake_case.\n */\nexport function camelToSnake<T>(obj: unknown): T {\n if (Array.isArray(obj)) {\n return obj.map((item) => camelToSnake(item)) as T;\n }\n if (obj !== null && typeof obj === \"object\" && !(obj instanceof Date)) {\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {\n result[toSnakeCase(key)] = camelToSnake(value);\n }\n return result as T;\n }\n return obj as T;\n}\n","import type { Tournament, TournamentListParams, QualificationEntry } from \"../types/tournament.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { Prize, RewardClaim, RewardClaimSummary, PrizeAggregation } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\n\n/** Normalize tournament: ensure both `id` and `tournamentId` exist */\nfunction normalizeTournament(raw: Record<string, unknown>): Tournament {\n const t = snakeToCamel<Tournament & { id?: string }>(raw);\n // API returns `id`, SDK type uses `tournamentId` — keep both in sync\n const id = t.id ?? t.tournamentId;\n return { ...t, id, tournamentId: id };\n}\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch a paginated list of tournaments.\n */\nexport async function getTournaments(\n baseUrl: string,\n params?: TournamentListParams,\n ctx?: ApiContext,\n): Promise<PaginatedResult<Tournament>> {\n const qs = buildQueryString({\n game_address: params?.gameAddress,\n creator: params?.creator,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n sort: params?.sort,\n from_id: params?.fromId,\n exclude_ids: params?.excludeIds?.join(\",\"),\n tournament_ids: params?.tournamentIds?.join(\",\"),\n whitelisted_extensions: params?.whitelistedExtensions?.join(\",\"),\n include_prizes: params?.includePrizeSummary,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => normalizeTournament(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch a single tournament by ID.\n */\nexport async function getTournament(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<Tournament> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/tournaments/${tournamentId}`,\n fetchOpts(ctx),\n );\n return normalizeTournament(result.data);\n}\n\n/**\n * Fetch registrations for a tournament.\n *\n * No `playerAddress` filter: registrations are keyed by token id, and\n * the original registrant goes stale on transfer. Callers wanting \"the\n * current user's registrations\" should resolve their owned token ids via\n * denshokan-sdk's useTokens and pass them as `gameTokenIds`.\n */\nexport async function getTournamentRegistrations(\n baseUrl: string,\n tournamentId: string,\n params?: { gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<Registration>> {\n const qs = buildQueryString({\n game_token_ids: params?.gameTokenIds?.length ? params.gameTokenIds.join(\",\") : undefined,\n has_submitted: params?.hasSubmitted,\n is_banned: params?.isBanned,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/registrations${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<Registration>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch prizes for a tournament.\n */\nexport async function getTournamentPrizes(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<Prize[]> {\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/prizes`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<Prize>(item));\n}\n\n/**\n * Fetch reward claims for a tournament.\n */\nexport async function getTournamentRewardClaims(\n baseUrl: string,\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<RewardClaim>> {\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/reward-claims${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<RewardClaim>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch reward claims summary for a tournament.\n */\nexport async function getTournamentRewardClaimsSummary(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<RewardClaimSummary> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/tournaments/${tournamentId}/reward-claims/summary`,\n fetchOpts(ctx),\n );\n return snakeToCamel<RewardClaimSummary>(result.data);\n}\n\n/**\n * Fetch qualifications for a tournament.\n */\nexport async function getTournamentQualifications(\n baseUrl: string,\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ctx?: ApiContext,\n): Promise<PaginatedResult<QualificationEntry>> {\n const qs = buildQueryString({\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/tournaments/${tournamentId}/qualifications${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<QualificationEntry>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch prize aggregation for a tournament.\n */\nexport async function getTournamentPrizeAggregation(\n baseUrl: string,\n tournamentId: string,\n ctx?: ApiContext,\n): Promise<PrizeAggregation[]> {\n const qs = buildQueryString({ include_aggregation: true });\n const result = await apiFetch<{ data: Record<string, unknown>[] }>(\n `${baseUrl}/tournaments/${tournamentId}/prizes${qs}`,\n fetchOpts(ctx),\n );\n return result.data.map((item) => snakeToCamel<PrizeAggregation>(item));\n}\n","/**\n * Normalize a Starknet address to a 0x-prefixed, 66-character lowercase hex string.\n */\nexport function normalizeAddress(address: string): string {\n const stripped = address.replace(/^0x0*/i, \"\");\n return (\"0x\" + stripped.padStart(64, \"0\")).toLowerCase();\n}\n","import type { Tournament, TournamentListParams } from \"../types/tournament.js\";\nimport type { PlatformStats } from \"../types/activity.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { apiFetch, buildQueryString, extractPagination } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\nimport { normalizeAddress } from \"../utils/address.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch tournaments for a specific game.\n */\nexport async function getGameTournaments(\n baseUrl: string,\n gameAddress: string,\n params?: Omit<TournamentListParams, \"gameAddress\">,\n ctx?: ApiContext,\n): Promise<PaginatedResult<Tournament>> {\n const normalized = normalizeAddress(gameAddress);\n const qs = buildQueryString({\n creator: params?.creator,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n });\n const result = await apiFetch<Record<string, unknown>>(`${baseUrl}/games/${normalized}/tournaments${qs}`, fetchOpts(ctx));\n const { total, limit: resLimit, offset: resOffset } = extractPagination(result, { limit: params?.limit, offset: params?.offset });\n return {\n data: (result.data as Record<string, unknown>[]).map((item) => snakeToCamel<Tournament>(item)),\n total,\n limit: resLimit,\n offset: resOffset,\n };\n}\n\n/**\n * Fetch tournament stats for a specific game.\n */\nexport async function getGameStats(\n baseUrl: string,\n gameAddress: string,\n ctx?: ApiContext,\n): Promise<PlatformStats> {\n const normalized = normalizeAddress(gameAddress);\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/games/${normalized}/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlatformStats>(result.data);\n}\n","import type { PlatformStats, PrizeStats } from \"../types/activity.js\";\nimport { apiFetch } from \"./base.js\";\nimport type { ApiFetchOptions } from \"./base.js\";\nimport { snakeToCamel } from \"../utils/mappers.js\";\n\ninterface ApiContext {\n retryAttempts?: number;\n retryDelay?: number;\n timeout?: number;\n}\n\nfunction fetchOpts(ctx?: ApiContext): Partial<ApiFetchOptions> {\n return {\n retryAttempts: ctx?.retryAttempts,\n retryDelay: ctx?.retryDelay,\n timeout: ctx?.timeout,\n };\n}\n\n/**\n * Fetch platform-wide activity stats.\n */\nexport async function getActivityStats(\n baseUrl: string,\n ctx?: ApiContext,\n): Promise<PlatformStats> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/activity/stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PlatformStats>(result.data);\n}\n\n/**\n * Fetch platform-wide prize stats.\n */\nexport async function getPrizeStats(\n baseUrl: string,\n ctx?: ApiContext,\n): Promise<PrizeStats> {\n const result = await apiFetch<{ data: Record<string, unknown> }>(\n `${baseUrl}/activity/prize-stats`,\n fetchOpts(ctx),\n );\n return snakeToCamel<PrizeStats>(result.data);\n}\n","import type { WSSubscribeOptions, WSEventHandler, WSEventMessage } from \"../types/websocket.js\";\n\ninterface WSManagerConfig {\n maxReconnectAttempts: number;\n reconnectBaseDelay: number;\n}\n\nconst DEFAULT_WS_CONFIG: WSManagerConfig = {\n maxReconnectAttempts: 10,\n reconnectBaseDelay: 1000,\n};\n\n/**\n * WebSocket manager with auto-reconnect and subscription management.\n */\nexport class WSManager {\n private ws: WebSocket | null = null;\n private readonly wsUrl: string;\n private readonly config: WSManagerConfig;\n private reconnectAttempts = 0;\n private reconnectTimeout: ReturnType<typeof setTimeout> | null = null;\n private subscriptions = new Map<string, { options: WSSubscribeOptions; handler: WSEventHandler }>();\n private nextSubId = 1;\n private connected = false;\n private connectionListeners = new Set<(connected: boolean) => void>();\n\n constructor(wsUrl: string, config?: Partial<WSManagerConfig>) {\n this.wsUrl = wsUrl;\n this.config = { ...DEFAULT_WS_CONFIG, ...config };\n }\n\n /**\n * Open a WebSocket connection. No-op if already connected.\n */\n connect(): void {\n if (this.ws) return;\n\n try {\n this.ws = new WebSocket(this.wsUrl);\n\n this.ws.onopen = () => {\n this.connected = true;\n this.reconnectAttempts = 0;\n this.notifyConnectionChange(true);\n // Re-subscribe all active subscriptions\n for (const [, sub] of this.subscriptions) {\n this.sendSubscribe(sub.options);\n }\n };\n\n this.ws.onmessage = (event) => {\n try {\n const message = JSON.parse(event.data as string) as WSEventMessage;\n if (message.type === \"event\") {\n for (const [, sub] of this.subscriptions) {\n sub.handler(message);\n }\n }\n } catch {\n // Ignore malformed messages\n }\n };\n\n this.ws.onclose = () => {\n this.connected = false;\n this.notifyConnectionChange(false);\n this.ws = null;\n this.attemptReconnect();\n };\n\n this.ws.onerror = () => {\n // onclose will fire after onerror\n };\n } catch {\n this.attemptReconnect();\n }\n }\n\n /**\n * Close the WebSocket connection and stop reconnecting.\n */\n disconnect(): void {\n if (this.reconnectTimeout) {\n clearTimeout(this.reconnectTimeout);\n this.reconnectTimeout = null;\n }\n if (this.ws) {\n this.ws.onclose = null;\n this.ws.close();\n this.ws = null;\n }\n this.connected = false;\n this.notifyConnectionChange(false);\n this.reconnectAttempts = 0;\n }\n\n /**\n * Subscribe to channels with an optional tournament filter.\n * Returns an unsubscribe function.\n */\n subscribe(options: WSSubscribeOptions, handler: WSEventHandler): () => void {\n const id = String(this.nextSubId++);\n this.subscriptions.set(id, { options, handler });\n\n if (this.connected) {\n this.sendSubscribe(options);\n }\n\n return () => {\n this.subscriptions.delete(id);\n if (this.connected && this.ws) {\n this.ws.send(JSON.stringify({\n type: \"unsubscribe\",\n channels: options.channels,\n }));\n }\n };\n }\n\n /**\n * Register a callback for a single message. Convenience wrapper around subscribe.\n * Returns an unsubscribe function.\n */\n onMessage(callback: WSEventHandler): () => void {\n const id = String(this.nextSubId++);\n // Subscribe to all channels by using a passthrough handler\n this.subscriptions.set(id, {\n options: { channels: [] },\n handler: callback,\n });\n\n return () => {\n this.subscriptions.delete(id);\n };\n }\n\n /**\n * Whether the WebSocket is currently connected.\n */\n get isConnected(): boolean {\n return this.connected;\n }\n\n /**\n * Register a listener for connection state changes.\n * Returns an unsubscribe function.\n */\n onConnectionChange(listener: (connected: boolean) => void): () => void {\n this.connectionListeners.add(listener);\n return () => {\n this.connectionListeners.delete(listener);\n };\n }\n\n private notifyConnectionChange(isConnected: boolean): void {\n for (const listener of this.connectionListeners) {\n try {\n listener(isConnected);\n } catch {\n // Ignore listener errors\n }\n }\n }\n\n private sendSubscribe(options: WSSubscribeOptions): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) return;\n if (options.channels.length === 0) return;\n this.ws.send(JSON.stringify({\n type: \"subscribe\",\n channels: options.channels,\n tournamentIds: options.tournamentIds,\n }));\n }\n\n private attemptReconnect(): void {\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) return;\n if (this.subscriptions.size === 0) return;\n\n const delay = this.config.reconnectBaseDelay * Math.pow(2, this.reconnectAttempts);\n this.reconnectAttempts++;\n\n this.reconnectTimeout = setTimeout(() => {\n this.connect();\n }, Math.min(delay, 30_000));\n }\n}\n","export interface ChainConfig {\n rpcUrl: string;\n apiBaseUrl: string;\n wsUrl: string;\n budokanAddress: string;\n viewerAddress: string;\n}\n\nexport const CHAINS: Record<string, ChainConfig> = {\n mainnet: {\n rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_10\",\n apiBaseUrl: \"https://budokan-api-production.up.railway.app\",\n wsUrl: \"wss://budokan-api-production.up.railway.app/ws\",\n budokanAddress: \"0x0596ced030e74ebc37f33607f07ecd5a62eff22cdc4ae31fe2d724040c1bdc0b\",\n viewerAddress: \"0x013c8239361fdbd7ec26db2c83f4ff270c5bba83a0bc105b4005b676ff57fdbe\",\n },\n sepolia: {\n rpcUrl: \"https://starknet-sepolia.public.blastapi.io\",\n apiBaseUrl: \"https://budokan-api-sepolia.up.railway.app\",\n wsUrl: \"wss://budokan-api-sepolia.up.railway.app/ws\",\n budokanAddress: \"0x017750a167b7c4968249d7db06dccc8b3908ef8954cb40cfe4d3c651ca0dcd1d\",\n viewerAddress: \"0x03d5febe0042b943967074f4ebd850a6b5d50850cd3fb84fbd0eb66dadd9ddec\",\n },\n} as const;\n\nexport function getChainConfig(chain: string): ChainConfig | undefined {\n return CHAINS[chain];\n}\n","export type ConnectionMode = \"api\" | \"rpc-fallback\" | \"offline\";\n\nexport interface ServiceStatus {\n available: boolean;\n lastChecked: number;\n latency: number | null;\n error: string | null;\n}\n\nexport interface ConnectionStatusState {\n api: ServiceStatus;\n rpc: ServiceStatus;\n mode: ConnectionMode;\n initialCheckComplete: boolean;\n}\n\ntype StatusListener = (status: ConnectionStatusState) => void;\n\nexport interface HealthTimingConfig {\n initialCheckDelay?: number;\n checkInterval?: number;\n checkTimeout?: number;\n}\n\nexport class ConnectionStatus {\n private status: ConnectionStatusState = {\n api: { available: true, lastChecked: 0, latency: null, error: null },\n rpc: { available: true, lastChecked: 0, latency: null, error: null },\n mode: \"api\",\n initialCheckComplete: false,\n };\n\n private listeners = new Set<StatusListener>();\n private checkInterval: ReturnType<typeof setInterval> | null = null;\n private initialCheckTimeout: ReturnType<typeof setTimeout> | null = null;\n private apiUrl: string;\n private rpcUrl: string;\n private readonly initialCheckDelay: number;\n private readonly checkIntervalMs: number;\n private readonly checkTimeoutMs: number;\n\n constructor(apiUrl: string, rpcUrl: string, config?: HealthTimingConfig) {\n this.apiUrl = apiUrl;\n this.rpcUrl = rpcUrl;\n this.initialCheckDelay = Math.max(config?.initialCheckDelay ?? 1_000, 100);\n this.checkIntervalMs = Math.max(config?.checkInterval ?? 30_000, 1_000);\n this.checkTimeoutMs = Math.max(config?.checkTimeout ?? 5_000, 1_000);\n }\n\n getStatus(): ConnectionStatusState {\n return { ...this.status };\n }\n\n get mode(): ConnectionMode {\n return this.status.mode;\n }\n\n subscribe(listener: StatusListener): () => void {\n this.listeners.add(listener);\n listener(this.status);\n return () => { this.listeners.delete(listener); };\n }\n\n startMonitoring(): void {\n if (this.checkInterval) return;\n this.initialCheckTimeout = setTimeout(() => {\n this.performHealthCheck();\n this.checkInterval = setInterval(() => this.performHealthCheck(), this.checkIntervalMs);\n }, this.initialCheckDelay);\n }\n\n stopMonitoring(): void {\n if (this.checkInterval) {\n clearInterval(this.checkInterval);\n this.checkInterval = null;\n }\n if (this.initialCheckTimeout) {\n clearTimeout(this.initialCheckTimeout);\n this.initialCheckTimeout = null;\n }\n }\n\n markApiUnavailable(error?: string): void {\n this.updateStatus({\n api: { ...this.status.api, available: false, lastChecked: Date.now(), error: error || \"Request failed\" },\n });\n }\n\n markRpcUnavailable(error?: string): void {\n this.updateStatus({\n rpc: { ...this.status.rpc, available: false, lastChecked: Date.now(), error: error || \"Request failed\" },\n });\n }\n\n async checkNow(): Promise<void> {\n await this.performHealthCheck();\n }\n\n destroy(): void {\n this.stopMonitoring();\n this.listeners.clear();\n }\n\n private async performHealthCheck(): Promise<void> {\n const [apiResult, rpcResult] = await Promise.all([\n this.checkApi(),\n this.checkRpc(),\n ]);\n this.updateStatus({ api: apiResult, rpc: rpcResult, initialCheckComplete: true });\n }\n\n private async checkApi(): Promise<ServiceStatus> {\n const startTime = Date.now();\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.checkTimeoutMs);\n const response = await fetch(`${this.apiUrl}/health`, { signal: controller.signal });\n clearTimeout(timeoutId);\n const latency = Date.now() - startTime;\n if (!response.ok) {\n return { available: false, lastChecked: Date.now(), latency, error: `HTTP ${response.status}` };\n }\n const data = await response.json() as Record<string, unknown>;\n const isAvailable = data.status === \"healthy\" || data.status === \"degraded\";\n return { available: isAvailable, lastChecked: Date.now(), latency, error: isAvailable ? null : `API status: ${data.status}` };\n } catch (error) {\n return { available: false, lastChecked: Date.now(), latency: null, error: error instanceof Error ? error.message : \"Network error\" };\n }\n }\n\n private async checkRpc(): Promise<ServiceStatus> {\n const startTime = Date.now();\n try {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.checkTimeoutMs);\n const response = await fetch(this.rpcUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ jsonrpc: \"2.0\", method: \"starknet_chainId\", params: [], id: 1 }),\n signal: controller.signal,\n });\n clearTimeout(timeoutId);\n const latency = Date.now() - startTime;\n if (!response.ok) {\n return { available: false, lastChecked: Date.now(), latency, error: `HTTP ${response.status}` };\n }\n const data = await response.json() as Record<string, unknown>;\n const isHealthy = data.result !== undefined && !data.error;\n return { available: isHealthy, lastChecked: Date.now(), latency, error: isHealthy ? null : \"RPC error\" };\n } catch (error) {\n return { available: false, lastChecked: Date.now(), latency: null, error: error instanceof Error ? error.message : \"Network error\" };\n }\n }\n\n private updateStatus(partial: Partial<ConnectionStatusState>): void {\n const newStatus = { ...this.status, ...partial };\n\n if (newStatus.api.available) {\n newStatus.mode = \"api\";\n } else if (newStatus.rpc.available) {\n newStatus.mode = \"rpc-fallback\";\n } else {\n newStatus.mode = \"offline\";\n }\n\n const changed =\n this.status.api.available !== newStatus.api.available ||\n this.status.rpc.available !== newStatus.rpc.available ||\n this.status.mode !== newStatus.mode ||\n this.status.initialCheckComplete !== newStatus.initialCheckComplete;\n\n this.status = newStatus;\n\n if (changed) {\n this.listeners.forEach((listener) => {\n try { listener(this.status); } catch { /* ignore */ }\n });\n }\n }\n}\n","import type { ConnectionStatus } from \"./health.js\";\nimport { DataSourceError } from \"../errors/index.js\";\n\nexport async function withFallback<T>(\n primary: () => Promise<T>,\n fallback: () => Promise<T>,\n health?: ConnectionStatus,\n): Promise<T> {\n // If health monitoring shows primary source is down, skip it\n if (health) {\n const mode = health.mode;\n if (mode === \"rpc-fallback\") {\n // API is known-down, go straight to RPC fallback\n try {\n return await fallback();\n } catch (fallbackError) {\n throw fallbackError;\n }\n }\n\n if (mode === \"offline\") {\n // Both are known-down, still try both in order\n }\n }\n\n let primaryError: Error;\n try {\n return await primary();\n } catch (error) {\n primaryError = error as Error;\n // Report failure to health service\n if (health) {\n health.markApiUnavailable(primaryError.message);\n }\n }\n\n try {\n return await fallback();\n } catch (fallbackError) {\n if (health) {\n health.markRpcUnavailable((fallbackError as Error).message);\n }\n throw new DataSourceError(primaryError, fallbackError as Error);\n }\n}\n","import type { RpcProvider, Contract, Abi } from \"starknet\";\n\nlet starknetModule: typeof import(\"starknet\") | null = null;\n\nasync function getStarknet(): Promise<typeof import(\"starknet\")> {\n if (!starknetModule) {\n starknetModule = await import(\"starknet\");\n }\n return starknetModule;\n}\n\nexport async function createProvider(\n rpcUrl: string,\n headers?: Record<string, string>,\n): Promise<RpcProvider> {\n const { RpcProvider: StarknetRpcProvider } = await getStarknet();\n const provider = new StarknetRpcProvider({\n nodeUrl: rpcUrl,\n ...(headers && { headers }),\n });\n return provider;\n}\n\nexport async function createContract(\n abi: Abi,\n address: string,\n provider: RpcProvider,\n): Promise<Contract> {\n // Handle case where ABI might be wrapped in a default export\n let resolvedAbi: Abi = abi;\n if (abi && !Array.isArray(abi) && typeof abi === \"object\" && \"default\" in abi) {\n resolvedAbi = (abi as { default: Abi }).default;\n }\n\n const starknet = await getStarknet();\n\n return new starknet.Contract({ abi: resolvedAbi, address, providerOrAccount: provider });\n}\n","import type { Contract } from \"starknet\";\nimport { CairoCustomEnum } from \"starknet\";\nimport type { Tournament } from \"../types/tournament.js\";\nimport type { EntryRequirement, Distribution } from \"@provable-games/metagame-sdk\";\nimport type { LeaderboardEntry } from \"../types/leaderboard.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { Prize } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport type { Phase } from \"../types/tournament.js\";\nimport { RpcError } from \"../errors/index.js\";\nimport { num } from \"starknet\";\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction wrapRpcCall<T>(fn: () => Promise<T>, contractAddress?: string): Promise<T> {\n return fn().catch((error: unknown) => {\n throw new RpcError(\n error instanceof Error ? error.message : \"RPC call failed\",\n contractAddress,\n );\n });\n}\n\nfunction decodeShortString(value: unknown): string {\n if (!value) return \"\";\n const hex = num.toHex(value as bigint);\n if (hex === \"0x0\") return \"\";\n const hexStr = hex.slice(2);\n let result = \"\";\n for (let i = 0; i < hexStr.length; i += 2) {\n const charCode = parseInt(hexStr.slice(i, i + 2), 16);\n if (charCode === 0) break;\n result += String.fromCharCode(charCode);\n }\n return result;\n}\n\nfunction decodeByteArray(value: unknown): string {\n if (!value) return \"\";\n // ByteArray from Cairo is serialized as { data: felt252[], pending_word: felt252, pending_word_len: u32 }\n const obj = value as Record<string, unknown>;\n const data = obj.data as unknown[] | undefined;\n const pendingWord = obj.pending_word;\n const pendingWordLen = Number(obj.pending_word_len ?? 0);\n\n let result = \"\";\n\n // Each data element is a 31-byte chunk encoded as felt252\n if (data) {\n for (const chunk of data) {\n const hex = num.toHex(chunk as bigint).slice(2).padStart(62, \"0\");\n for (let i = 0; i < 62; i += 2) {\n const charCode = parseInt(hex.slice(i, i + 2), 16);\n if (charCode !== 0) result += String.fromCharCode(charCode);\n }\n }\n }\n\n // Pending word contains remaining bytes (< 31)\n if (pendingWord && pendingWordLen > 0) {\n const hex = num.toHex(pendingWord as bigint).slice(2).padStart(pendingWordLen * 2, \"0\");\n for (let i = 0; i < pendingWordLen * 2; i += 2) {\n const charCode = parseInt(hex.slice(i, i + 2), 16);\n if (charCode !== 0) result += String.fromCharCode(charCode);\n }\n }\n\n return result;\n}\n\n/** All Phase variant names for CairoCustomEnum */\nconst PHASE_VARIANTS = [\"Scheduled\", \"Registration\", \"Staging\", \"Live\", \"Submission\", \"Finalized\"] as const;\n\nconst PHASE_NAME_MAP: Record<Phase, string> = {\n scheduled: \"Scheduled\",\n registration: \"Registration\",\n staging: \"Staging\",\n live: \"Live\",\n submission: \"Submission\",\n finalized: \"Finalized\",\n};\n\n/** Convert SDK Phase string to Cairo enum argument for RPC calls */\nfunction phaseToRpcArg(phase: Phase): CairoCustomEnum {\n const activeVariant = PHASE_NAME_MAP[phase];\n const variants: Record<string, unknown> = {};\n for (const v of PHASE_VARIANTS) {\n variants[v] = v === activeVariant ? {} : undefined;\n }\n return new CairoCustomEnum(variants);\n}\n\n// =========================================================================\n// Parsers — raw on-chain structs → SDK types\n// =========================================================================\n\nfunction parseTournament(\n raw: unknown,\n entryCount: number,\n): Tournament {\n const obj = raw as Record<string, unknown>;\n const id = String(obj.id ?? \"0\");\n const createdAt = Number(obj.created_at ?? 0);\n const createdBy = num.toHex(obj.created_by as bigint);\n const creatorTokenId = obj.creator_token_id ? num.toHex(obj.creator_token_id as bigint) : null;\n\n // Metadata\n const metadata = obj.metadata as Record<string, unknown> | undefined;\n const name = metadata ? decodeShortString(metadata.name) : \"\";\n const description = metadata ? decodeByteArray(metadata.description) : \"\";\n\n // Schedule\n const sched = obj.schedule as Record<string, unknown> | undefined;\n const registrationStartDelay = Number(sched?.registration_start_delay ?? 0);\n const registrationEndDelay = Number(sched?.registration_end_delay ?? 0);\n const gameStartDelay = Number(sched?.game_start_delay ?? 0);\n const gameEndDelay = Number(sched?.game_end_delay ?? 0);\n const submissionDuration = Number(sched?.submission_duration ?? 0);\n\n // Compute absolute timestamps (matching contract: each delay is relative to its anchor)\n const createdAtStr = String(createdAt);\n const regStart = createdAt + registrationStartDelay;\n const regEnd = regStart + registrationEndDelay;\n const gameStart = createdAt + gameStartDelay;\n const gameEnd = gameStart + gameEndDelay;\n const subEnd = gameEnd + submissionDuration;\n const registrationStartTime = String(regStart);\n const registrationEndTime = String(regEnd);\n const gameStartTime = String(gameStart);\n const gameEndTime = String(gameEnd);\n const submissionEndTime = String(subEnd);\n\n // GameConfig\n const gc = obj.game_config as Record<string, unknown> | undefined;\n const gameAddress = gc ? num.toHex(gc.game_address as bigint) : \"\";\n const settingsId = Number(gc?.settings_id ?? 0);\n const soulbound = Boolean(gc?.soulbound);\n const paymaster = Boolean(gc?.paymaster);\n const clientUrl = gc?.client_url ? decodeOptionalByteArray(gc.client_url) : null;\n const renderer = gc?.renderer ? parseOptionalAddress(gc.renderer) : null;\n\n // LeaderboardConfig\n const lc = obj.leaderboard_config as Record<string, unknown> | undefined;\n const ascending = Boolean(lc?.ascending);\n const gameMustBeOver = Boolean(lc?.game_must_be_over);\n\n // EntryFee (Option)\n const entryFeeRaw = parseOption(obj.entry_fee);\n let entryFeeToken: string | null = null;\n let entryFeeAmount: string | null = null;\n let entryFee: Tournament[\"entryFee\"] = null;\n if (entryFeeRaw) {\n const ef = entryFeeRaw as Record<string, unknown>;\n entryFeeToken = num.toHex(ef.token_address as bigint);\n entryFeeAmount = String(ef.amount ?? \"0\");\n entryFee = {\n tokenAddress: entryFeeToken,\n amount: entryFeeAmount,\n tournamentCreatorShare: Number(ef.tournament_creator_share ?? 0),\n gameCreatorShare: Number(ef.game_creator_share ?? 0),\n refundShare: Number(ef.refund_share ?? 0),\n distribution: (ef.distribution as Distribution) ?? null,\n distributionCount: Number(ef.distribution_count ?? 0),\n };\n }\n\n // EntryRequirement (Option)\n const entryRequirement = parseOption(obj.entry_requirement) as EntryRequirement | null;\n const hasEntryRequirement = entryRequirement !== null;\n\n return {\n id,\n tournamentId: id,\n gameAddress,\n createdAt: new Date(createdAt * 1000).toISOString(),\n createdBy,\n creatorTokenId,\n name,\n description,\n registrationStartDelay,\n registrationEndDelay,\n gameStartDelay,\n gameEndDelay,\n submissionDuration,\n createdAtOnchain: createdAtStr,\n registrationStartTime,\n registrationEndTime,\n gameStartTime,\n gameEndTime,\n submissionEndTime,\n settingsId,\n soulbound,\n paymaster,\n clientUrl,\n renderer,\n leaderboardAscending: ascending,\n leaderboardGameMustBeOver: gameMustBeOver,\n entryFeeToken,\n entryFeeAmount,\n hasEntryRequirement,\n schedule: {\n registrationStartDelay,\n registrationEndDelay,\n gameStartDelay,\n gameEndDelay,\n submissionDuration,\n },\n gameConfig: {\n gameAddress,\n settingsId,\n soulbound,\n paymaster,\n clientUrl,\n renderer,\n },\n entryFee,\n entryRequirement,\n leaderboardConfig: { ascending, gameMustBeOver },\n entryCount,\n prizeCount: 0, // Not available from viewer\n submissionCount: 0, // Not available from viewer\n metadata: null,\n };\n}\n\nfunction parseLeaderboardEntry(raw: unknown): LeaderboardEntry {\n const obj = raw as Record<string, unknown>;\n return {\n position: Number(obj.position ?? 0),\n tokenId: num.toHex(obj.token_id as bigint),\n };\n}\n\nfunction parseRegistration(raw: unknown, tournamentId: string): Registration {\n const obj = raw as Record<string, unknown>;\n return {\n tournamentId,\n gameTokenId: num.toHex(obj.game_token_id as bigint),\n gameAddress: \"\", // Not in on-chain struct\n entryNumber: Number(obj.entry_id ?? 0),\n hasSubmitted: Boolean(obj.has_submitted),\n isBanned: Boolean(obj.is_banned),\n };\n}\n\nfunction parsePrize(raw: unknown): Prize {\n const obj = raw as Record<string, unknown>;\n const tokenTypeData = obj.token_type as Record<string, unknown> | undefined;\n\n // TokenTypeData is a Cairo enum: { erc20: ERC20Data } or { erc721: ERC721Data }\n let tokenType: \"erc20\" | \"erc721\" = \"erc20\";\n let amount: string | null = null;\n let tokenId: string | null = null;\n let distributionType: string | null = null;\n let distributionWeight: number | null = null;\n let distributionShares: number[] | null = null;\n let distributionCount: number | null = null;\n let payoutPosition = 0;\n\n if (tokenTypeData) {\n // starknet.js v9 returns CairoCustomEnum with the active variant as a\n // non-undefined property. Check activeVariant() or the property value.\n const activeVariant = typeof tokenTypeData.activeVariant === \"function\"\n ? (tokenTypeData.activeVariant as () => string)()\n : tokenTypeData.erc20 !== undefined ? \"erc20\"\n : tokenTypeData.erc721 !== undefined ? \"erc721\"\n : null;\n\n // starknet.js v9 nests data under .variant.{name} or directly under .{name}\n const variantData = (tokenTypeData as Record<string, unknown>).variant as Record<string, unknown> | undefined;\n const unwrap = (name: string) =>\n (variantData?.[name] ?? tokenTypeData[name]) as Record<string, unknown> | undefined;\n\n if (activeVariant === \"erc20\") {\n const erc20 = unwrap(\"erc20\");\n tokenType = \"erc20\";\n amount = String(erc20?.amount ?? \"0\");\n\n // distribution is Option<Distribution> — unwrap the Option then the enum\n const distOption = erc20?.distribution as Record<string, unknown> | undefined;\n const distInner = distOption?.Some as Record<string, unknown> | undefined;\n if (distInner) {\n // Distribution enum: { variant: { Linear: n } } or { Linear: n }.\n // Custom carries a Span<u16>; the scalar variants carry a u32.\n const distVariant = (distInner.variant ?? distInner) as Record<string, unknown>;\n const distType = Object.keys(distVariant).find((k) => distVariant[k] !== undefined);\n if (distType) {\n distributionType = distType.toLowerCase();\n const distValue = distVariant[distType];\n if (distributionType === \"custom\") {\n distributionShares = Array.isArray(distValue)\n ? (distValue as unknown[]).map((v) => Number(v))\n : null;\n } else {\n distributionWeight = distValue != null ? Number(distValue) : null;\n }\n }\n }\n\n // distribution_count is Option<u32>\n const countOption = erc20?.distribution_count as Record<string, unknown> | undefined;\n distributionCount = countOption?.Some != null ? Number(countOption.Some) : null;\n } else if (activeVariant === \"erc721\") {\n const erc721 = unwrap(\"erc721\");\n tokenType = \"erc721\";\n tokenId = String(erc721?.id ?? \"0\");\n }\n }\n\n return {\n prizeId: String(obj.id ?? \"0\"),\n tournamentId: String(obj.context_id ?? \"0\"),\n payoutPosition,\n tokenAddress: num.toHex(obj.token_address as bigint),\n tokenType,\n amount,\n tokenId,\n distributionType,\n distributionWeight,\n distributionShares,\n distributionCount,\n sponsorAddress: num.toHex(obj.sponsor_address as bigint),\n };\n}\n\n/** Unwrap a Cairo Option — starknet.js may return { Some: value } / { None: {} } or just the value */\nfunction parseOption(raw: unknown): unknown | null {\n if (raw === undefined || raw === null) return null;\n const obj = raw as Record<string, unknown>;\n if (\"Some\" in obj) return obj.Some;\n if (\"None\" in obj) return null;\n // Some starknet.js versions flatten the option\n return raw;\n}\n\nfunction decodeOptionalByteArray(raw: unknown): string | null {\n const inner = parseOption(raw);\n if (!inner) return null;\n return decodeByteArray(inner);\n}\n\nfunction parseOptionalAddress(raw: unknown): string | null {\n const inner = parseOption(raw);\n if (!inner) return null;\n const hex = num.toHex(inner as bigint);\n return hex === \"0x0\" ? null : hex;\n}\n\n// =========================================================================\n// Viewer functions\n// =========================================================================\n\ninterface TournamentFilterResult {\n tournamentIds: string[];\n total: number;\n}\n\nfunction parseFilterResult(raw: unknown): TournamentFilterResult {\n const obj = raw as Record<string, unknown>;\n const ids = (obj.tournament_ids as unknown[])?.map((v) => String(v)) ?? [];\n const total = Number(obj.total ?? 0);\n return { tournamentIds: ids, total };\n}\n\nfunction parseTournamentFullState(raw: unknown): Tournament {\n const obj = raw as Record<string, unknown>;\n const entryCount = Number(obj.entry_count ?? 0);\n return parseTournament(obj.tournament, entryCount);\n}\n\n// --- Tournament listing ---\n\nexport async function viewerTournaments(\n contract: Contract,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments\", [offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\nexport async function viewerTournamentsByGame(\n contract: Contract,\n gameAddress: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_game\", [gameAddress, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\nexport async function viewerTournamentsByCreator(\n contract: Contract,\n creator: string,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_creator\", [creator, offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\n/**\n * Map a single SDK phase to the group of on-chain phases it represents.\n * \"scheduled\" includes Scheduled + Registration + Staging (all pre-game).\n * \"live\" includes Live + Submission (active gameplay).\n * \"finalized\" stays as-is.\n */\nconst PHASE_GROUPS: Record<Phase, Phase[]> = {\n scheduled: [\"scheduled\", \"registration\", \"staging\"],\n registration: [\"registration\"],\n staging: [\"staging\"],\n live: [\"live\", \"submission\"],\n submission: [\"submission\"],\n finalized: [\"finalized\"],\n};\n\nexport async function viewerTournamentsByPhase(\n contract: Contract,\n phase: Phase,\n offset: number,\n limit: number,\n): Promise<TournamentFilterResult> {\n const phases = PHASE_GROUPS[phase];\n if (phases.length === 1) {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_phase\", [phaseToRpcArg(phase), offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n }\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_by_phases\", [phases.map(phaseToRpcArg), offset, limit]);\n return parseFilterResult(result);\n }, contract.address);\n}\n\n// --- Tournament detail ---\n\nexport async function viewerTournamentDetail(\n contract: Contract,\n tournamentId: string,\n): Promise<Tournament | null> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_detail\", [tournamentId]);\n const tournament = parseTournamentFullState(result);\n // Viewer returns a zero-filled struct for non-existent tournaments\n if (!tournament.gameAddress || tournament.gameAddress === \"0x0\") return null;\n return tournament;\n }, contract.address);\n}\n\nexport async function viewerTournamentsBatch(\n contract: Contract,\n tournamentIds: string[],\n): Promise<Tournament[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournaments_batch\", [tournamentIds]);\n return (result as unknown[]).map(parseTournamentFullState);\n }, contract.address);\n}\n\n// --- Registrations ---\n\nexport async function viewerRegistrations(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations\", [tournamentId, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\nexport async function viewerRegistrationsByTokenIds(\n contract: Contract,\n tournamentId: string,\n tokenIds: string[],\n offset: number,\n limit: number,\n): Promise<PaginatedResult<Registration>> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_registrations_by_token_ids\", [tournamentId, tokenIds, offset, limit]);\n const obj = result as Record<string, unknown>;\n const entries = (obj.entries as unknown[]) ?? [];\n const total = Number(obj.total ?? 0);\n return {\n data: entries.map((e) => parseRegistration(e, tournamentId)),\n total,\n limit,\n offset,\n };\n }, contract.address);\n}\n\n// --- Leaderboard ---\n\nexport async function viewerLeaderboard(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<LeaderboardEntry[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"leaderboard\", [tournamentId, offset, limit]);\n return (result as unknown[]).map(parseLeaderboardEntry);\n }, contract.address);\n}\n\n// --- Prizes ---\n\nexport async function viewerPrizes(\n contract: Contract,\n tournamentId: string,\n): Promise<Prize[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_prizes\", [tournamentId]);\n return (result as unknown[]).map(parsePrize);\n }, contract.address);\n}\n\n// --- Reward Claims ---\n\nimport type { RewardClaimKind } from \"../types/prize.js\";\n\n/**\n * Flat reward-claim shape returned by the on-chain viewer's\n * `tournament_reward_claims` view, after translating the Cairo\n * `RewardType` enum (deserialized as a CairoCustomEnum by starknet.js)\n * into the structured fields the API also exposes. Mirrors the\n * `RewardClaim` SDK type so the RPC and API paths are interchangeable.\n */\nexport interface ViewerRewardClaim {\n claimKind: RewardClaimKind;\n prizeId: string | null;\n payoutIndex: number | null;\n position: number | null;\n refundTokenId: string | null;\n claimed: boolean;\n}\n\nexport interface ViewerRewardClaimResult {\n claims: ViewerRewardClaim[];\n total: number;\n totalClaimed: number;\n totalUnclaimed: number;\n}\n\n/**\n * Translate the on-chain `RewardType` CairoCustomEnum (as returned by\n * starknet.js for the `tournament_reward_claims` view) into the same\n * structured fields the API exposes. Both starknet.js shapes are accepted —\n * one with `activeVariant()` and a `variant` bag, one with a flat record\n * keyed by variant name — depending on the contract ABI codegen.\n */\nfunction translateCairoRewardType(rewardType: unknown): {\n claimKind: RewardClaimKind;\n prizeId: string | null;\n payoutIndex: number | null;\n position: number | null;\n refundTokenId: string | null;\n} {\n if (!rewardType || typeof rewardType !== \"object\") {\n throw new Error(`Unexpected RewardType payload: ${JSON.stringify(rewardType)}`);\n }\n const rt = rewardType as Record<string, any>;\n const outer =\n typeof rt.activeVariant === \"function\" ? rt.activeVariant() : null;\n const innerBag = (typeof rt.activeVariant === \"function\" ? rt.variant : rt) as Record<string, any>;\n\n if (outer === \"Prize\" || innerBag.Prize !== undefined) {\n const prize = innerBag.Prize;\n const subVariant = typeof prize?.activeVariant === \"function\" ? prize.activeVariant() : null;\n const subBag = (typeof prize?.activeVariant === \"function\" ? prize.variant : prize) as Record<string, any>;\n\n if (subVariant === \"Single\" || subBag?.Single !== undefined) {\n return {\n claimKind: \"prize_single\",\n prizeId: BigInt(subBag.Single).toString(),\n payoutIndex: null,\n position: null,\n refundTokenId: null,\n };\n }\n if (subVariant === \"Distributed\" || subBag?.Distributed !== undefined) {\n const distributed = subBag.Distributed;\n const prizeId = distributed?.[\"0\"] ?? distributed?.[0];\n const payoutIndex = distributed?.[\"1\"] ?? distributed?.[1];\n return {\n claimKind: \"prize_distributed\",\n prizeId: BigInt(prizeId).toString(),\n payoutIndex: Number(payoutIndex),\n position: null,\n refundTokenId: null,\n };\n }\n }\n\n if (outer === \"EntryFee\" || innerBag.EntryFee !== undefined) {\n const entryFee = innerBag.EntryFee;\n const subVariant =\n typeof entryFee?.activeVariant === \"function\" ? entryFee.activeVariant() : null;\n const subBag = (typeof entryFee?.activeVariant === \"function\" ? entryFee.variant : entryFee) as Record<string, any>;\n\n if (subVariant === \"Position\" || subBag?.Position !== undefined) {\n return {\n claimKind: \"entry_fee_position\",\n prizeId: null,\n payoutIndex: null,\n position: Number(subBag.Position),\n refundTokenId: null,\n };\n }\n if (subVariant === \"TournamentCreator\" || subBag?.TournamentCreator !== undefined) {\n return {\n claimKind: \"entry_fee_tournament_creator\",\n prizeId: null,\n payoutIndex: null,\n position: null,\n refundTokenId: null,\n };\n }\n if (subVariant === \"GameCreator\" || subBag?.GameCreator !== undefined) {\n return {\n claimKind: \"entry_fee_game_creator\",\n prizeId: null,\n payoutIndex: null,\n position: null,\n refundTokenId: null,\n };\n }\n if (subVariant === \"Refund\" || subBag?.Refund !== undefined) {\n return {\n claimKind: \"entry_fee_refund\",\n prizeId: null,\n payoutIndex: null,\n position: null,\n refundTokenId: `0x${BigInt(subBag.Refund).toString(16)}`,\n };\n }\n }\n\n throw new Error(\n `Unrecognised on-chain RewardType variant: ${JSON.stringify(rewardType)}`,\n );\n}\n\nexport async function viewerRewardClaims(\n contract: Contract,\n tournamentId: string,\n offset: number,\n limit: number,\n): Promise<ViewerRewardClaimResult> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_reward_claims\", [tournamentId, offset, limit]);\n const obj = result as Record<string, unknown>;\n const claims: ViewerRewardClaim[] = (obj.claims as unknown[])?.map((raw) => {\n const claim = raw as Record<string, unknown>;\n return {\n ...translateCairoRewardType(claim.reward_type),\n claimed: Boolean(claim.claimed),\n };\n }) ?? [];\n return {\n claims,\n total: Number(obj.total ?? 0),\n totalClaimed: Number(obj.total_claimed ?? 0),\n totalUnclaimed: Number(obj.total_unclaimed ?? 0),\n };\n }, contract.address);\n}\n\n","[\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"BudokanViewerImpl\",\n \"interface_name\": \"budokan_interfaces::viewer::IBudokanViewer\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::TournamentFilterResult\",\n \"members\": [\n {\n \"name\": \"tournament_ids\",\n \"type\": \"core::array::Array::<core::integer::u64>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u64\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::Phase\",\n \"variants\": [\n {\n \"name\": \"Scheduled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Registration\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Staging\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Live\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Submission\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Finalized\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Metadata\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Schedule\",\n \"members\": [\n {\n \"name\": \"registration_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"registration_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"submission_duration\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::byte_array::ByteArray>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::GameConfig\",\n \"members\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"settings_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"soulbound\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"paymaster\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"client_url\",\n \"type\": \"core::option::Option::<core::byte_array::ByteArray>\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u16>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::distribution::Distribution\",\n \"variants\": [\n {\n \"name\": \"Linear\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Exponential\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Uniform\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Custom\",\n \"type\": \"core::array::Span::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::EntryFee\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"tournament_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"budokan_interfaces::budokan::EntryFee\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"metagame_extensions_interfaces::extension::ExtensionConfig\",\n \"members\": [\n {\n \"name\": \"address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"config\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirementType\",\n \"variants\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"extension\",\n \"type\": \"metagame_extensions_interfaces::extension::ExtensionConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirement\",\n \"members\": [\n {\n \"name\": \"entry_limit\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"entry_requirement_type\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirementType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirement\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"members\": [\n {\n \"name\": \"ascending\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"game_must_be_over\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Tournament\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::TournamentFullState\",\n \"members\": [\n {\n \"name\": \"tournament\",\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::registration::Registration\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RegistrationResult\",\n \"members\": [\n {\n \"name\": \"entries\",\n \"type\": \"core::array::Array::<game_components_interfaces::registration::Registration>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::LeaderboardEntryView\",\n \"members\": [\n {\n \"name\": \"position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u32>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC20Data\",\n \"members\": [\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC721Data\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::TokenTypeData\",\n \"variants\": [\n {\n \"name\": \"erc20\",\n \"type\": \"game_components_interfaces::prize::ERC20Data\"\n },\n {\n \"name\": \"erc721\",\n \"type\": \"game_components_interfaces::prize::ERC721Data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::PrizeData\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::PrizeType\",\n \"variants\": [\n {\n \"name\": \"Single\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"Distributed\",\n \"type\": \"(core::integer::u64, core::integer::u32)\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::EntryFeeRewardType\",\n \"variants\": [\n {\n \"name\": \"Position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"TournamentCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"GameCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Refund\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::RewardType\",\n \"variants\": [\n {\n \"name\": \"Prize\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n },\n {\n \"name\": \"EntryFee\",\n \"type\": \"budokan_interfaces::budokan::EntryFeeRewardType\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RewardClaimView\",\n \"members\": [\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\"\n },\n {\n \"name\": \"claimed\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::viewer::RewardClaimResult\",\n \"members\": [\n {\n \"name\": \"claims\",\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::RewardClaimView>\"\n },\n {\n \"name\": \"total\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"total_claimed\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"total_unclaimed\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"budokan_interfaces::viewer::IBudokanViewer\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"tournaments\",\n \"inputs\": [\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_game\",\n \"inputs\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_creator\",\n \"inputs\": [\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_phase\",\n \"inputs\": [\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_by_phases\",\n \"inputs\": [\n {\n \"name\": \"phases\",\n \"type\": \"core::array::Array::<budokan_interfaces::budokan::Phase>\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_game\",\n \"inputs\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_creator\",\n \"inputs\": [\n {\n \"name\": \"creator\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_phase\",\n \"inputs\": [\n {\n \"name\": \"phase\",\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"count_tournaments_by_phases\",\n \"inputs\": [\n {\n \"name\": \"phases\",\n \"type\": \"core::array::Array::<budokan_interfaces::budokan::Phase>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_detail\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFullState\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournaments_batch\",\n \"inputs\": [\n {\n \"name\": \"tournament_ids\",\n \"type\": \"core::array::Array::<core::integer::u64>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::TournamentFullState>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_registrations\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::RegistrationResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"leaderboard\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<budokan_interfaces::viewer::LeaderboardEntryView>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_prizes\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<game_components_interfaces::prize::PrizeData>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_reward_claims\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::RewardClaimResult\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"player_tournaments\",\n \"inputs\": [\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"offset\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"limit\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::viewer::TournamentFilterResult\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableCamelOnlyImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnableCamelOnly\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnableCamelOnly\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"budokan_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan_viewer::budokan_viewer::BudokanViewer::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n }\n ]\n }\n]","[\n {\n \"type\": \"impl\",\n \"name\": \"UpgradeableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::upgrades::IUpgradeable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"upgrade\",\n \"inputs\": [\n {\n \"name\": \"new_class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"GameContextImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::context::IMetagameContext\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::bool\",\n \"variants\": [\n {\n \"name\": \"False\",\n \"type\": \"()\"\n },\n {\n \"name\": \"True\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::context::IMetagameContext\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"has_context\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"GameContextDetailsImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::context::IMetagameContextDetails\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::byte_array::ByteArray\",\n \"members\": [\n {\n \"name\": \"data\",\n \"type\": \"core::array::Array::<core::bytes_31::bytes31>\"\n },\n {\n \"name\": \"pending_word\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"pending_word_len\",\n \"type\": \"core::internal::bounded_int::BoundedInt::<0, 30>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u32>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::structs::metagame::GameContext\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"value\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<game_components_interfaces::structs::metagame::GameContext>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<game_components_interfaces::structs::metagame::GameContext>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::structs::metagame::GameContextDetails\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"id\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n },\n {\n \"name\": \"context\",\n \"type\": \"core::array::Span::<game_components_interfaces::structs::metagame::GameContext>\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::context::IMetagameContextDetails\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"context_details\",\n \"inputs\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::structs::metagame::GameContextDetails\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"BudokanImpl\",\n \"interface_name\": \"budokan_interfaces::budokan::IBudokan\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Metadata\",\n \"members\": [\n {\n \"name\": \"name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"description\",\n \"type\": \"core::byte_array::ByteArray\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Schedule\",\n \"members\": [\n {\n \"name\": \"registration_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"registration_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_start_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_end_delay\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"submission_duration\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::byte_array::ByteArray>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::byte_array::ByteArray\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::GameConfig\",\n \"members\": [\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"settings_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"soulbound\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"paymaster\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"client_url\",\n \"type\": \"core::option::Option::<core::byte_array::ByteArray>\"\n },\n {\n \"name\": \"renderer\",\n \"type\": \"core::option::Option::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::integer::u16>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::distribution::Distribution\",\n \"variants\": [\n {\n \"name\": \"Linear\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Exponential\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"Uniform\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Custom\",\n \"type\": \"core::array::Span::<core::integer::u16>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::EntryFee\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"tournament_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"budokan_interfaces::budokan::EntryFee\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::starknet::contract_address::ContractAddress>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::starknet::contract_address::ContractAddress>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<core::felt252>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"interfaces::extension::ExtensionConfig\",\n \"members\": [\n {\n \"name\": \"address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"config\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirementType\",\n \"variants\": [\n {\n \"name\": \"token\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"extension\",\n \"type\": \"interfaces::extension::ExtensionConfig\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::EntryRequirement\",\n \"members\": [\n {\n \"name\": \"entry_limit\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"entry_requirement_type\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirementType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::EntryRequirement\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"members\": [\n {\n \"name\": \"ascending\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"game_must_be_over\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"budokan_interfaces::budokan::Tournament\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::Phase\",\n \"variants\": [\n {\n \"name\": \"Scheduled\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Registration\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Staging\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Live\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Submission\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Finalized\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::integer::u256\",\n \"members\": [\n {\n \"name\": \"low\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"high\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::NFTQualification\",\n \"members\": [\n {\n \"name\": \"token_id\",\n \"type\": \"core::integer::u256\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::entry_requirement::QualificationProof\",\n \"variants\": [\n {\n \"name\": \"NFT\",\n \"type\": \"game_components_interfaces::entry_requirement::NFTQualification\"\n },\n {\n \"name\": \"Address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"Extension\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_requirement::QualificationProof>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::PrizeType\",\n \"variants\": [\n {\n \"name\": \"Single\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"Distributed\",\n \"type\": \"(core::integer::u64, core::integer::u32)\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::EntryFeeRewardType\",\n \"variants\": [\n {\n \"name\": \"Position\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"TournamentCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"GameCreator\",\n \"type\": \"()\"\n },\n {\n \"name\": \"Refund\",\n \"type\": \"core::felt252\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"budokan_interfaces::budokan::RewardType\",\n \"variants\": [\n {\n \"name\": \"Prize\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n },\n {\n \"name\": \"EntryFee\",\n \"type\": \"budokan_interfaces::budokan::EntryFeeRewardType\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::distribution::Distribution\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC20Data\",\n \"members\": [\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"distribution\",\n \"type\": \"core::option::Option::<game_components_interfaces::distribution::Distribution>\"\n },\n {\n \"name\": \"distribution_count\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::ERC721Data\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u128\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"game_components_interfaces::prize::TokenTypeData\",\n \"variants\": [\n {\n \"name\": \"erc20\",\n \"type\": \"game_components_interfaces::prize::ERC20Data\"\n },\n {\n \"name\": \"erc721\",\n \"type\": \"game_components_interfaces::prize::ERC721Data\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::prize::PrizeData\",\n \"members\": [\n {\n \"name\": \"id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"budokan_interfaces::budokan::IBudokan\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"total_tournaments\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_entries\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u32\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_leaderboard\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<core::felt252>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"current_phase\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Phase\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"tournament_distribution_shares\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::array::Array::<core::integer::u16>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"create_tournament\",\n \"inputs\": [\n {\n \"name\": \"creator_rewards_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"metadata_value\",\n \"type\": \"core::integer::u16\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"budokan_interfaces::budokan::Tournament\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"enter_tournament\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"player_name\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"qualification\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::QualificationProof>\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"metadata_value\",\n \"type\": \"core::integer::u16\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"(core::felt252, core::integer::u32)\"\n }\n ],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ban_entry\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"proof\",\n \"type\": \"core::array::Span::<core::felt252>\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"submit_score\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"position\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"claim_reward\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"add_prize\",\n \"inputs\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\"\n },\n {\n \"name\": \"position\",\n \"type\": \"core::option::Option::<core::integer::u32>\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::prize::PrizeData\"\n }\n ],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"MetagameImpl\",\n \"interface_name\": \"game_components_interfaces::metagame::core::IMetagame\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::metagame::core::IMetagame\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"context_address\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"default_token_address\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"SRC5Impl\",\n \"interface_name\": \"openzeppelin_interfaces::introspection::ISRC5\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::introspection::ISRC5\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"supports_interface\",\n \"inputs\": [\n {\n \"name\": \"interface_id\",\n \"type\": \"core::felt252\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"OwnableImpl\",\n \"interface_name\": \"openzeppelin_interfaces::access::ownable::IOwnable\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"openzeppelin_interfaces::access::ownable::IOwnable\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transfer_ownership\",\n \"inputs\": [\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounce_ownership\",\n \"inputs\": [],\n \"outputs\": [],\n \"state_mutability\": \"external\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"EntryFeeImpl\",\n \"interface_name\": \"game_components_interfaces::entry_fee::IEntryFee\"\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<core::integer::u16>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"core::integer::u16\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_fee::AdditionalShare\",\n \"members\": [\n {\n \"name\": \"recipient\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"share_bps\",\n \"type\": \"core::integer::u16\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"core::array::Span::<game_components_interfaces::entry_fee::AdditionalShare>\",\n \"members\": [\n {\n \"name\": \"snapshot\",\n \"type\": \"@core::array::Array::<game_components_interfaces::entry_fee::AdditionalShare>\"\n }\n ]\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_fee::EntryFeeConfig\",\n \"members\": [\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"core::integer::u128\"\n },\n {\n \"name\": \"game_creator_share\",\n \"type\": \"core::option::Option::<core::integer::u16>\"\n },\n {\n \"name\": \"refund_share\",\n \"type\": \"core::option::Option::<core::integer::u16>\"\n },\n {\n \"name\": \"additional_shares\",\n \"type\": \"core::array::Span::<game_components_interfaces::entry_fee::AdditionalShare>\"\n }\n ]\n },\n {\n \"type\": \"enum\",\n \"name\": \"core::option::Option::<game_components_interfaces::entry_fee::EntryFeeConfig>\",\n \"variants\": [\n {\n \"name\": \"Some\",\n \"type\": \"game_components_interfaces::entry_fee::EntryFeeConfig\"\n },\n {\n \"name\": \"None\",\n \"type\": \"()\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::entry_fee::IEntryFee\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry_fee\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::option::Option::<game_components_interfaces::entry_fee::EntryFeeConfig>\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"EntryRequirementImpl\",\n \"interface_name\": \"game_components_interfaces::entry_requirement::IEntryRequirement\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::entry_requirement::QualificationEntries\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"qualification_proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::entry_requirement::IEntryRequirement\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry_requirement\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_qualification_entries\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::entry_requirement::QualificationEntries\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"PrizeImpl\",\n \"interface_name\": \"game_components_interfaces::prize::IPrize\"\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::prize::IPrize\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_prize\",\n \"inputs\": [\n {\n \"name\": \"prize_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::prize::PrizeData\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_total_prizes\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"type\": \"core::integer::u64\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_prize_claimed\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"prize_type\",\n \"type\": \"game_components_interfaces::prize::PrizeType\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"impl\",\n \"name\": \"RegistrationImpl\",\n \"interface_name\": \"game_components_interfaces::registration::IRegistration\"\n },\n {\n \"type\": \"struct\",\n \"name\": \"game_components_interfaces::registration::Registration\",\n \"members\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\"\n }\n ]\n },\n {\n \"type\": \"interface\",\n \"name\": \"game_components_interfaces::registration::IRegistration\",\n \"items\": [\n {\n \"type\": \"function\",\n \"name\": \"get_entry\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"game_components_interfaces::registration::Registration\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"entry_exists\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"is_entry_banned\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n },\n {\n \"name\": \"entry_id\",\n \"type\": \"core::integer::u32\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::bool\"\n }\n ],\n \"state_mutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"get_entry_count\",\n \"inputs\": [\n {\n \"name\": \"context_id\",\n \"type\": \"core::integer::u64\"\n }\n ],\n \"outputs\": [\n {\n \"type\": \"core::integer::u32\"\n }\n ],\n \"state_mutability\": \"view\"\n }\n ]\n },\n {\n \"type\": \"constructor\",\n \"name\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n },\n {\n \"name\": \"default_token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_embeddable_game_standard::metagame::metagame_component::MetagameComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_embeddable_game_standard::metagame::extensions::context::context::ContextComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::leaderboard::leaderboard_component::LeaderboardComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"previous_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"new_owner\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"OwnershipTransferred\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferred\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"OwnershipTransferStarted\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::OwnershipTransferStarted\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"class_hash\",\n \"type\": \"core::starknet::class_hash::ClassHash\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"Upgraded\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Upgraded\",\n \"kind\": \"nested\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::registration::registration_component::RegistrationComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::entry_fee::entry_fee_component::EntryFeeComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::entry_requirement::entry_requirement_component::EntryRequirementComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"game_components_metagame::prize::prize_component::PrizeComponent::Event\",\n \"kind\": \"enum\",\n \"variants\": []\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::TournamentCreated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"created_at\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"created_by\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"creator_token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"metadata\",\n \"type\": \"budokan_interfaces::budokan::Metadata\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"schedule\",\n \"type\": \"budokan_interfaces::budokan::Schedule\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"game_config\",\n \"type\": \"budokan_interfaces::budokan::GameConfig\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_fee\",\n \"type\": \"core::option::Option::<budokan_interfaces::budokan::EntryFee>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_requirement\",\n \"type\": \"core::option::Option::<game_components_interfaces::entry_requirement::EntryRequirement>\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"leaderboard_config\",\n \"type\": \"budokan_interfaces::budokan::LeaderboardConfig\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::TournamentRegistration\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_token_id\",\n \"type\": \"core::felt252\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"game_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"player_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_number\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"has_submitted\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"is_banned\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::LeaderboardUpdated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"token_ids\",\n \"type\": \"core::array::Span::<core::felt252>\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::PrizeAdded\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"prize_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"payout_position\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"token_type\",\n \"type\": \"game_components_interfaces::prize::TokenTypeData\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"sponsor_address\",\n \"type\": \"core::starknet::contract_address::ContractAddress\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::RewardClaimed\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"reward_type\",\n \"type\": \"budokan_interfaces::budokan::RewardType\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"claimed\",\n \"type\": \"core::bool\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::events::QualificationEntriesUpdated\",\n \"kind\": \"struct\",\n \"members\": [\n {\n \"name\": \"tournament_id\",\n \"type\": \"core::integer::u64\",\n \"kind\": \"key\"\n },\n {\n \"name\": \"qualification_proof\",\n \"type\": \"game_components_interfaces::entry_requirement::QualificationProof\",\n \"kind\": \"data\"\n },\n {\n \"name\": \"entry_count\",\n \"type\": \"core::integer::u32\",\n \"kind\": \"data\"\n }\n ]\n },\n {\n \"type\": \"event\",\n \"name\": \"budokan::budokan::Budokan::Event\",\n \"kind\": \"enum\",\n \"variants\": [\n {\n \"name\": \"MetagameEvent\",\n \"type\": \"game_components_embeddable_game_standard::metagame::metagame_component::MetagameComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"ContextEvent\",\n \"type\": \"game_components_embeddable_game_standard::metagame::extensions::context::context::ContextComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"SRC5Event\",\n \"type\": \"openzeppelin_introspection::src5::SRC5Component::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"LeaderboardEvent\",\n \"type\": \"game_components_metagame::leaderboard::leaderboard_component::LeaderboardComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"OwnableEvent\",\n \"type\": \"openzeppelin_access::ownable::ownable::OwnableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"UpgradeableEvent\",\n \"type\": \"openzeppelin_upgrades::upgradeable::UpgradeableComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"RegistrationEvent\",\n \"type\": \"game_components_metagame::registration::registration_component::RegistrationComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"EntryFeeEvent\",\n \"type\": \"game_components_metagame::entry_fee::entry_fee_component::EntryFeeComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"EntryRequirementEvent\",\n \"type\": \"game_components_metagame::entry_requirement::entry_requirement_component::EntryRequirementComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"PrizeEvent\",\n \"type\": \"game_components_metagame::prize::prize_component::PrizeComponent::Event\",\n \"kind\": \"flat\"\n },\n {\n \"name\": \"TournamentCreated\",\n \"type\": \"budokan::events::TournamentCreated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"TournamentRegistration\",\n \"type\": \"budokan::events::TournamentRegistration\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"LeaderboardUpdated\",\n \"type\": \"budokan::events::LeaderboardUpdated\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"PrizeAdded\",\n \"type\": \"budokan::events::PrizeAdded\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"RewardClaimed\",\n \"type\": \"budokan::events::RewardClaimed\",\n \"kind\": \"nested\"\n },\n {\n \"name\": \"QualificationEntriesUpdated\",\n \"type\": \"budokan::events::QualificationEntriesUpdated\",\n \"kind\": \"nested\"\n }\n ]\n }\n]\n","import type { Contract } from \"starknet\";\nimport { RpcError } from \"../errors/index.js\";\n\n// =========================================================================\n// Helpers\n// =========================================================================\n\nfunction wrapRpcCall<T>(fn: () => Promise<T>, contractAddress?: string): Promise<T> {\n return fn().catch((error: unknown) => {\n throw new RpcError(\n error instanceof Error ? error.message : \"RPC call failed\",\n contractAddress,\n );\n });\n}\n\n// =========================================================================\n// Budokan contract read calls\n// =========================================================================\n\n/**\n * Fetch the full Custom distribution shares array for a tournament via the\n * Budokan contract's `tournament_distribution_shares(id)` view.\n *\n * Returns an empty array for tournaments configured with Linear /\n * Exponential / Uniform (those don't have a custom shares array), or for\n * tournaments that aren't configured yet.\n *\n * Consumers going through the primary API path don't need this — the\n * indexer already sources the shares from the `TournamentCreated` event.\n * This is the RPC-fallback path for direct on-chain reads.\n */\nexport async function budokanTournamentDistributionShares(\n contract: Contract,\n tournamentId: string,\n): Promise<number[]> {\n return wrapRpcCall(async () => {\n const result = await contract.call(\"tournament_distribution_shares\", [tournamentId]);\n const arr = Array.isArray(result) ? (result as unknown[]) : [];\n return arr.map((v) => Number(v));\n }, contract.address);\n}\n","import type { RpcProvider, Contract, Abi } from \"starknet\";\nimport type { BudokanClientConfig } from \"./types/config.js\";\nimport type { Tournament, TournamentListParams } from \"./types/tournament.js\";\nimport type { LeaderboardEntry } from \"./types/leaderboard.js\";\nimport type { Registration } from \"./types/registration.js\";\nimport type { Prize, RewardClaim, RewardClaimSummary, PrizeAggregation } from \"./types/prize.js\";\nimport type { PlatformStats, PrizeStats } from \"./types/activity.js\";\nimport type { QualificationEntry } from \"./types/tournament.js\";\nimport type { PaginatedResult } from \"./types/common.js\";\nimport type { WSChannel, WSEventHandler } from \"./types/websocket.js\";\nimport type { ConnectionStatusState } from \"./datasource/health.js\";\n\nimport {\n getTournaments as apiGetTournaments,\n getTournament as apiGetTournament,\n getTournamentRegistrations as apiGetTournamentRegistrations,\n getTournamentPrizes as apiGetTournamentPrizes,\n getTournamentRewardClaims as apiGetTournamentRewardClaims,\n getTournamentRewardClaimsSummary as apiGetTournamentRewardClaimsSummary,\n getTournamentQualifications as apiGetTournamentQualifications,\n getTournamentPrizeAggregation as apiGetTournamentPrizeAggregation,\n} from \"./api/tournaments.js\";\nimport {\n getGameTournaments as apiGetGameTournaments,\n getGameStats as apiGetGameStats,\n} from \"./api/games.js\";\nimport {\n getActivityStats as apiGetActivityStats,\n getPrizeStats as apiGetPrizeStats,\n} from \"./api/activity.js\";\nimport { WSManager } from \"./ws/manager.js\";\nimport { getChainConfig } from \"./chains/constants.js\";\nimport { ConnectionStatus } from \"./datasource/health.js\";\nimport { withFallback } from \"./datasource/resolver.js\";\nimport { RpcError } from \"./errors/index.js\";\nimport { createProvider, createContract } from \"./rpc/provider.js\";\nimport {\n viewerTournaments,\n viewerTournamentsByGame,\n viewerTournamentsByCreator,\n viewerTournamentsByPhase,\n viewerTournamentDetail,\n viewerTournamentsBatch,\n viewerRegistrations,\n viewerRegistrationsByTokenIds,\n viewerLeaderboard,\n viewerPrizes,\n viewerRewardClaims,\n} from \"./rpc/viewer.js\";\n\nimport viewerAbi from \"./rpc/abis/budokanViewer.json\";\nimport budokanAbi from \"./rpc/abis/budokan.json\";\nimport { budokanTournamentDistributionShares } from \"./rpc/budokan.js\";\n\n/** Resolved config with all defaults applied */\ninterface ResolvedConfig extends BudokanClientConfig {\n rpcUrl: string;\n viewerAddress: string;\n budokanAddress: string;\n}\n\n/**\n * Main client for interacting with the Budokan tournament system.\n *\n * Provides methods for querying tournaments, registrations, leaderboards,\n * prizes, player stats, and activity events. Supports real-time updates\n * via WebSocket subscriptions and automatic RPC fallback when the API is\n * unavailable.\n *\n * @example\n * ```ts\n * // API-only (default, backward compatible)\n * const client = new BudokanClient({\n * apiBaseUrl: \"https://budokan-api.provable.games\",\n * });\n *\n * // With RPC fallback\n * const client = new BudokanClient({\n * chain: \"mainnet\",\n * apiBaseUrl: \"https://budokan-api.provable.games\",\n * viewerAddress: \"0x...\",\n * });\n *\n * // RPC-only (bypass API entirely)\n * const client = new BudokanClient({\n * primarySource: \"rpc\",\n * rpcUrl: \"https://api.cartridge.gg/x/starknet/mainnet/rpc/v0_10\",\n * viewerAddress: \"0x...\",\n * });\n * ```\n */\nexport class BudokanClient {\n private readonly resolvedConfig: ResolvedConfig;\n private readonly wsManager: WSManager;\n private readonly connectionStatus: ConnectionStatus;\n private cachedProvider: RpcProvider | null = null;\n private cachedViewerContract: Contract | null = null;\n private cachedBudokanContract: Contract | null = null;\n\n constructor(config: BudokanClientConfig) {\n // Merge user config with chain defaults\n const chainConfig = config.chain ? getChainConfig(config.chain) : undefined;\n this.resolvedConfig = {\n ...config,\n apiBaseUrl: config.apiBaseUrl ?? chainConfig?.apiBaseUrl ?? \"\",\n rpcUrl: config.rpcUrl ?? chainConfig?.rpcUrl ?? \"\",\n viewerAddress: config.viewerAddress ?? chainConfig?.viewerAddress ?? \"\",\n budokanAddress: config.budokanAddress ?? chainConfig?.budokanAddress ?? \"\",\n };\n\n const wsUrl = config.wsUrl ?? chainConfig?.wsUrl\n ?? this.resolvedConfig.apiBaseUrl.replace(/^http/, \"ws\").replace(/\\/$/, \"\") + \"/ws\";\n this.wsManager = new WSManager(wsUrl);\n\n this.connectionStatus = new ConnectionStatus(\n this.resolvedConfig.apiBaseUrl,\n this.resolvedConfig.rpcUrl,\n config.health,\n );\n\n // Start health monitoring if both sources are configured\n if (this.resolvedConfig.apiBaseUrl && this.resolvedConfig.rpcUrl) {\n this.connectionStatus.startMonitoring();\n }\n }\n\n // ---- Configuration ----\n\n /** Returns the resolved configuration. */\n get clientConfig(): BudokanClientConfig {\n return { ...this.resolvedConfig };\n }\n\n /** Whether the WebSocket is currently connected. */\n get wsConnected(): boolean {\n return this.wsManager.isConnected;\n }\n\n // ---- Connection status ----\n\n /** Returns the current connection status (API, RPC, mode). */\n getConnectionStatus(): ConnectionStatusState {\n return this.connectionStatus.getStatus();\n }\n\n /** Subscribe to connection status changes. Returns an unsubscribe function. */\n onConnectionStatusChange(listener: (status: ConnectionStatusState) => void): () => void {\n return this.connectionStatus.subscribe(listener);\n }\n\n // ---- Lazy RPC getters ----\n\n private async getProvider(): Promise<RpcProvider> {\n if (this.cachedProvider) return this.cachedProvider;\n if (!this.resolvedConfig.rpcUrl) {\n throw new RpcError(\"No rpcUrl configured\");\n }\n if (this.resolvedConfig.provider) {\n this.cachedProvider = this.resolvedConfig.provider;\n return this.cachedProvider;\n }\n this.cachedProvider = await createProvider(\n this.resolvedConfig.rpcUrl,\n this.resolvedConfig.rpcHeaders,\n );\n return this.cachedProvider;\n }\n\n private async getViewerContract(): Promise<Contract> {\n if (this.cachedViewerContract) return this.cachedViewerContract;\n if (!this.resolvedConfig.viewerAddress) {\n throw new RpcError(\"No viewerAddress configured. Set viewerAddress in config or use a chain preset with a deployed viewer contract.\");\n }\n const provider = await this.getProvider();\n this.cachedViewerContract = await createContract(\n viewerAbi as Abi,\n this.resolvedConfig.viewerAddress,\n provider,\n );\n return this.cachedViewerContract;\n }\n\n private async getBudokanContract(): Promise<Contract> {\n if (this.cachedBudokanContract) return this.cachedBudokanContract;\n if (!this.resolvedConfig.budokanAddress) {\n throw new RpcError(\"No budokanAddress configured. Set budokanAddress in config or use a chain preset with a deployed Budokan contract.\");\n }\n const provider = await this.getProvider();\n this.cachedBudokanContract = await createContract(\n budokanAbi as Abi,\n this.resolvedConfig.budokanAddress,\n provider,\n );\n return this.cachedBudokanContract;\n }\n\n // ---- API context ----\n\n private get apiCtx() {\n return {\n retryAttempts: this.resolvedConfig.retryAttempts,\n retryDelay: this.resolvedConfig.retryDelay,\n timeout: this.resolvedConfig.timeout,\n };\n }\n\n // ---- Tournament Queries ----\n\n /**\n * Fetch a paginated list of tournaments with optional filtering.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournaments(params?: TournamentListParams): Promise<PaginatedResult<Tournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<Tournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n\n // Choose the appropriate viewer filter function\n let filterResult: { tournamentIds: string[]; total: number };\n if (params?.phase) {\n filterResult = await viewerTournamentsByPhase(contract, params.phase, offset, limit);\n } else if (params?.gameAddress) {\n filterResult = await viewerTournamentsByGame(contract, params.gameAddress, offset, limit);\n } else if (params?.creator) {\n filterResult = await viewerTournamentsByCreator(contract, params.creator, offset, limit);\n } else {\n filterResult = await viewerTournaments(contract, offset, limit);\n }\n\n // Batch-fetch full tournament data for the returned IDs\n let data: Tournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n data = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n\n // Fetch prize aggregation if requested\n if (params?.includePrizeSummary) {\n const prizePromises = data.map((t) =>\n viewerPrizes(contract, t.id).catch(() => [] as Prize[]),\n );\n const allPrizes = await Promise.all(prizePromises);\n data = data.map((t, i) => {\n const prizes = allPrizes[i];\n if (prizes.length === 0) return t;\n // Build aggregation by token\n const tokenMap = new Map<string, { tokenAddress: string; tokenType: string; totalAmount: bigint; nftCount: number }>();\n for (const p of prizes) {\n const key = p.tokenAddress;\n const existing = tokenMap.get(key);\n if (existing) {\n existing.totalAmount += BigInt(p.amount ?? \"0\");\n if (p.tokenType === \"erc721\") existing.nftCount += 1;\n } else {\n tokenMap.set(key, {\n tokenAddress: p.tokenAddress,\n tokenType: p.tokenType,\n totalAmount: BigInt(p.amount ?? \"0\"),\n nftCount: p.tokenType === \"erc721\" ? 1 : 0,\n });\n }\n }\n return {\n ...t,\n prizeAggregation: Array.from(tokenMap.values()).map((v) => ({\n tokenAddress: v.tokenAddress,\n tokenType: v.tokenType,\n totalAmount: v.totalAmount.toString(),\n nftCount: v.nftCount,\n })),\n };\n });\n }\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournaments(this.resolvedConfig.apiBaseUrl, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch a single tournament by its ID.\n * Supports RPC fallback when API is unavailable.\n *\n * On the RPC-fallback path, Custom distribution shares are populated via\n * a follow-up call to `tournament_distribution_shares(id)` so callers see\n * the same shape regardless of data source (the API/indexer path fills\n * shares from the `TournamentCreated` event).\n */\n async getTournament(tournamentId: string): Promise<Tournament | null> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n const tournament = await viewerTournamentDetail(contract, tournamentId);\n if (tournament) {\n await this.fillCustomSharesIfEmpty(tournament);\n }\n return tournament;\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n try {\n return await apiGetTournament(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx);\n } catch {\n // API 404 or network error — try RPC fallback\n try {\n this.connectionStatus.markApiUnavailable();\n return await rpcFallback();\n } catch {\n return null;\n }\n }\n }\n\n /**\n * If the tournament's entry-fee distribution is `Custom` with an empty\n * shares array (the on-chain `tournament()` view returns empty spans by\n * design to keep the hot path small), fetch the shares via the\n * dedicated view and graft them back onto the distribution object.\n *\n * Detection is tolerant: the Distribution shape may appear as\n * `{ variant: { Custom: [] } }` or a flattened `{ Custom: [] }`\n * depending on the starknet.js version / serialization path.\n */\n private async fillCustomSharesIfEmpty(tournament: Tournament): Promise<void> {\n const dist = tournament.entryFee?.distribution as unknown;\n if (!dist || typeof dist !== \"object\") return;\n\n const bag =\n ((dist as { variant?: Record<string, unknown> }).variant ??\n (dist as Record<string, unknown>)) as Record<string, unknown>;\n const customValue = bag.Custom ?? bag.custom;\n if (!Array.isArray(customValue) || customValue.length > 0) return;\n\n try {\n const shares = await this.getTournamentDistributionShares(tournament.id);\n if (shares.length > 0) {\n // Overwrite in place — Distribution is typed as opaque, so cast.\n (bag as Record<string, unknown>).Custom = shares;\n }\n } catch {\n // Silent — caller gets the empty array; auto-fill is best-effort.\n }\n }\n\n /**\n * Fetch the Custom distribution shares for a tournament via the Budokan\n * contract's `tournament_distribution_shares(id)` view.\n *\n * Returns an empty array for tournaments configured with\n * `Linear` / `Exponential` / `Uniform` distributions (those don't have a\n * shares array), and for tournaments without an entry fee.\n *\n * This is a direct RPC call — consumers going through the primary API\n * path typically don't need it, since the indexer sources Custom shares\n * from the `TournamentCreated` event and exposes them via\n * `getTournament()`'s `entryFee.distribution`. Use this when you need a\n * fresh on-chain read or you're operating in RPC-only mode.\n */\n async getTournamentDistributionShares(tournamentId: string): Promise<number[]> {\n const contract = await this.getBudokanContract();\n return budokanTournamentDistributionShares(contract, tournamentId);\n }\n\n /**\n * Fetch the leaderboard for a tournament from the on-chain viewer\n * contract. Live leaderboard data for UIs is best sourced via\n * denshokan-sdk's `useLiveLeaderboard`; this method is kept for\n * one-shot RPC reads (e.g. server-side scoring scripts).\n */\n async getTournamentLeaderboard(tournamentId: string): Promise<LeaderboardEntry[]> {\n const contract = await this.getViewerContract();\n // Fetch a large page; on-chain leaderboards are typically small\n return viewerLeaderboard(contract, tournamentId, 0, 1000);\n }\n\n /**\n * Fetch registrations for a tournament.\n * Supports RPC fallback when API is unavailable.\n * Note: In RPC mode, `playerAddress` and `gameAddress` fields will be empty strings,\n * and filter params (`playerAddress`, `gameTokenIds`, `hasSubmitted`, `isBanned`)\n * are applied via on-chain viewer functions where supported.\n */\n async getTournamentRegistrations(\n tournamentId: string,\n params?: { gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n ): Promise<PaginatedResult<Registration>> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n if (params?.gameTokenIds?.length) {\n return viewerRegistrationsByTokenIds(contract, tournamentId, params.gameTokenIds, offset, limit);\n }\n return viewerRegistrations(contract, tournamentId, offset, limit);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRegistrations(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch prizes for a tournament.\n * Supports RPC fallback when API is unavailable.\n */\n async getTournamentPrizes(tournamentId: string): Promise<Prize[]> {\n const rpcFallback = async () => {\n const contract = await this.getViewerContract();\n return viewerPrizes(contract, tournamentId);\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentPrizes(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n // ---- Game Queries ----\n\n /**\n * Fetch tournaments for a specific game.\n * Supports RPC fallback when API is unavailable.\n */\n async getGameTournaments(\n gameAddress: string,\n params?: Omit<TournamentListParams, \"gameAddress\">,\n ): Promise<PaginatedResult<Tournament>> {\n const rpcFallback = async (): Promise<PaginatedResult<Tournament>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 20;\n const filterResult = await viewerTournamentsByGame(contract, gameAddress, offset, limit);\n\n let data: Tournament[] = [];\n if (filterResult.tournamentIds.length > 0) {\n data = await viewerTournamentsBatch(contract, filterResult.tournamentIds);\n }\n\n return { data, total: filterResult.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetGameTournaments(this.resolvedConfig.apiBaseUrl, gameAddress, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch tournament stats for a specific game.\n * API-only — no RPC fallback available.\n */\n async getGameStats(gameAddress: string): Promise<PlatformStats> {\n return apiGetGameStats(this.resolvedConfig.apiBaseUrl, gameAddress, this.apiCtx);\n }\n\n // ---- Reward Claims & Qualifications ----\n\n /**\n * Fetch reward claims for a tournament.\n * Supports RPC fallback via viewer contract.\n */\n async getTournamentRewardClaims(\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ): Promise<PaginatedResult<RewardClaim>> {\n const rpcFallback = async (): Promise<PaginatedResult<RewardClaim>> => {\n const contract = await this.getViewerContract();\n const offset = params?.offset ?? 0;\n const limit = params?.limit ?? 100;\n const result = await viewerRewardClaims(contract, tournamentId, offset, limit);\n const data: RewardClaim[] = result.claims.map((c) => ({\n tournamentId,\n ...c,\n }));\n return { data, total: result.total, limit, offset };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRewardClaims(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch reward claims summary for a tournament.\n * Supports RPC fallback via viewer contract.\n */\n async getTournamentRewardClaimsSummary(tournamentId: string): Promise<RewardClaimSummary> {\n const rpcFallback = async (): Promise<RewardClaimSummary> => {\n const contract = await this.getViewerContract();\n const result = await viewerRewardClaims(contract, tournamentId, 0, 0);\n return {\n totalPrizes: result.total,\n totalClaimed: result.totalClaimed,\n totalUnclaimed: result.totalUnclaimed,\n };\n };\n\n if (this.resolvedConfig.primarySource === \"rpc\") {\n return rpcFallback();\n }\n\n return withFallback(\n () => apiGetTournamentRewardClaimsSummary(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx),\n rpcFallback,\n this.connectionStatus,\n );\n }\n\n /**\n * Fetch qualifications for a tournament.\n * API-only -- no RPC fallback available.\n */\n async getTournamentQualifications(\n tournamentId: string,\n params?: { limit?: number; offset?: number },\n ): Promise<PaginatedResult<QualificationEntry>> {\n return apiGetTournamentQualifications(this.resolvedConfig.apiBaseUrl, tournamentId, params, this.apiCtx);\n }\n\n /**\n * Fetch prize aggregation for a tournament.\n * API-only -- no RPC fallback available.\n */\n async getTournamentPrizeAggregation(tournamentId: string): Promise<PrizeAggregation[]> {\n return apiGetTournamentPrizeAggregation(this.resolvedConfig.apiBaseUrl, tournamentId, this.apiCtx);\n }\n\n // ---- Activity Queries (API-only, activity is indexed) ----\n\n /**\n * Fetch platform-wide activity stats.\n * API-only — no RPC fallback available.\n */\n async getActivityStats(): Promise<PlatformStats> {\n return apiGetActivityStats(this.resolvedConfig.apiBaseUrl, this.apiCtx);\n }\n\n /**\n * Fetch platform-wide prize stats.\n * API-only — no RPC fallback available.\n */\n async getPrizeStats(): Promise<PrizeStats> {\n return apiGetPrizeStats(this.resolvedConfig.apiBaseUrl, this.apiCtx);\n }\n\n // ---- WebSocket ----\n\n /**\n * Open a WebSocket connection for real-time updates.\n */\n connect(): void {\n this.wsManager.connect();\n }\n\n /**\n * Close the WebSocket connection.\n */\n disconnect(): void {\n this.wsManager.disconnect();\n }\n\n /**\n * Stop health monitoring and close all connections.\n */\n destroy(): void {\n this.connectionStatus.destroy();\n this.wsManager.disconnect();\n }\n\n /**\n * Subscribe to WebSocket channels with optional tournament filtering.\n * Returns an unsubscribe function.\n */\n subscribe(\n channels: WSChannel[],\n handler: WSEventHandler,\n tournamentIds?: string[],\n ): () => void {\n return this.wsManager.subscribe({ channels, tournamentIds }, handler);\n }\n\n /**\n * Register a listener for WebSocket connection state changes.\n * Returns an unsubscribe function.\n */\n onWsConnectionChange(listener: (connected: boolean) => void): () => void {\n return this.wsManager.onConnectionChange(listener);\n }\n}\n\n/**\n * Factory function for creating a BudokanClient instance.\n */\nexport function createBudokanClient(config: BudokanClientConfig): BudokanClient {\n return new BudokanClient(config);\n}\n","import { createContext, useContext, useMemo, useEffect, useRef } from \"react\";\nimport type { ReactNode } from \"react\";\nimport { BudokanClient, createBudokanClient } from \"../client.js\";\nimport type { BudokanClientConfig } from \"../types/config.js\";\n\nconst BudokanContext = createContext<BudokanClient | null>(null);\n\nexport interface BudokanProviderProps {\n children: ReactNode;\n config?: BudokanClientConfig;\n client?: BudokanClient;\n}\n\n/**\n * Provides a BudokanClient instance to all child components via React context.\n * Supply either a `config` prop to auto-create a client, or an existing `client` instance.\n */\nexport function BudokanProvider({ children, config, client: existingClient }: BudokanProviderProps) {\n const client = useMemo(() => {\n if (existingClient) return existingClient;\n if (config) return createBudokanClient(config);\n throw new Error(\"BudokanProvider requires either 'config' or 'client' prop\");\n }, [existingClient, config]);\n\n const clientRef = useRef(client);\n\n useEffect(() => {\n // Cleanup previous client if it changed and was created internally\n return () => {\n if (!existingClient && clientRef.current !== client) {\n clientRef.current.destroy();\n }\n };\n }, [client, existingClient]);\n\n useEffect(() => {\n clientRef.current = client;\n }, [client]);\n\n return (\n <BudokanContext.Provider value={client}>\n {children}\n </BudokanContext.Provider>\n );\n}\n\n/**\n * Access the BudokanClient instance from context.\n * Must be used within a BudokanProvider.\n */\nexport function useBudokanClient(): BudokanClient {\n const client = useContext(BudokanContext);\n if (!client) {\n throw new Error(\"useBudokanClient must be used within a BudokanProvider\");\n }\n return client;\n}\n","import { useEffect } from \"react\";\nimport type { BudokanClient } from \"../client.js\";\n\n/**\n * Resets state setters to null/initial when the client reference changes (network switch).\n * Prevents stale data from a previous network being displayed while new data loads.\n */\nexport function useResetOnClient(\n client: BudokanClient,\n ...resetters: Array<(value: null) => void>\n): void {\n useEffect(() => {\n for (const reset of resetters) {\n reset(null);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client]);\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Tournament, TournamentListParams } from \"../types/tournament.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseTournamentsResult {\n tournaments: PaginatedResult<Tournament> | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch a paginated list of tournaments.\n * Pass `undefined` to skip fetching (useful for conditional queries).\n */\nexport function useTournaments(params?: TournamentListParams): UseTournamentsResult {\n const client = useBudokanClient();\n const [tournaments, setTournaments] = useState<PaginatedResult<Tournament> | null>(null);\n const [loading, setLoading] = useState(!!params);\n const [error, setError] = useState<Error | null>(null);\n\n const paramsKey = JSON.stringify(params);\n\n useResetOnClient(client, setTournaments, setError);\n\n const fetch = useCallback(async () => {\n if (params === undefined) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournaments(params);\n setTournaments(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, paramsKey]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { tournaments, loading, error, refetch: fetch };\n}\n\nexport interface UseTournamentResult {\n tournament: Tournament | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch a single tournament by ID.\n */\nexport function useTournament(tournamentId: string | undefined): UseTournamentResult {\n const client = useBudokanClient();\n const [tournament, setTournament] = useState<Tournament | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setTournament, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const data = await client.getTournament(tournamentId);\n setTournament(data);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { tournament, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Phase } from \"../types/tournament.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseTournamentCountResult {\n count: number | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch the total count of tournaments matching a phase filter.\n */\nexport function useTournamentCount(phase?: Phase): UseTournamentCountResult {\n const client = useBudokanClient();\n const [count, setCount] = useState<number | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setCount, setError);\n\n const fetch = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournaments({ phase, limit: 1 });\n setCount(result.total ?? 0);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, phase]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { count, loading, error, refetch: fetch };\n}\n\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { LeaderboardEntry } from \"../types/leaderboard.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseLeaderboardResult {\n leaderboard: LeaderboardEntry[] | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch the leaderboard for a tournament.\n */\nexport function useLeaderboard(tournamentId: string | undefined): UseLeaderboardResult {\n const client = useBudokanClient();\n const [leaderboard, setLeaderboard] = useState<LeaderboardEntry[] | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setLeaderboard, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentLeaderboard(tournamentId);\n setLeaderboard(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { leaderboard, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseRegistrationsResult {\n registrations: PaginatedResult<Registration> | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch registrations for a tournament.\n */\nexport function useRegistrations(\n tournamentId: string | undefined,\n params?: { gameTokenIds?: string[]; hasSubmitted?: boolean; isBanned?: boolean; limit?: number; offset?: number },\n): UseRegistrationsResult {\n const client = useBudokanClient();\n const [registrations, setRegistrations] = useState<PaginatedResult<Registration> | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setRegistrations, setError);\n\n const paramsKey = JSON.stringify(params);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentRegistrations(tournamentId, params);\n setRegistrations(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, tournamentId, paramsKey]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { registrations, loading, error, refetch: fetch };\n}\n","import { useMemo } from \"react\";\nimport { useTokens } from \"@provable-games/denshokan-sdk/react\";\nimport type { Phase, Tournament, TournamentListParams } from \"../types/tournament.js\";\nimport type { Registration } from \"../types/registration.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useTournaments } from \"./useTournaments.js\";\nimport { useRegistrations } from \"./useRegistrations.js\";\nimport type { UseTournamentsResult } from \"./useTournaments.js\";\nimport type { UseTournamentCountResult } from \"./useTournamentCount.js\";\nimport type { UseRegistrationsResult } from \"./useRegistrations.js\";\n\n// Cap on the number of tokens we ask denshokan for in a single shot. Realistic\n// users own tokens across far fewer tournaments than this — the cap is here to\n// keep the fan-out bounded if a wallet is unusually saturated. Same number as\n// denshokan's per-call default elsewhere in the codebase.\nconst MAX_OWNED_TOKENS = 1000;\n\nconst emptyPage = <T,>(limit: number, offset: number): PaginatedResult<T> => ({\n data: [],\n total: 0,\n limit,\n offset,\n});\n\n/**\n * Resolve the unique tournament IDs an address currently holds Budokan-minted\n * tokens for. Returns `null` while denshokan is still loading or while the\n * inputs are insufficient to query, an empty array once we know the owner has\n * no Budokan tokens, or the deduped id list.\n *\n * `contextId` narrows the denshokan query to a single tournament so we don't\n * fan out across every Budokan token the owner holds when the caller only\n * cares about one tournament.\n */\nfunction useOwnedTournamentIds(\n owner: string | undefined,\n contextId?: number,\n): { tournamentIds: string[] | null; loading: boolean } {\n const client = useBudokanClient();\n const budokanAddress = client.clientConfig.budokanAddress;\n const enabled = !!owner && !!budokanAddress;\n\n // Don't pass `hasContext: true` here — same reason\n // `useRegistrationsByOwner` doesn't: the server-side intersection\n // drops tokens whose packed-ID `hasContext` bit is 0 even when they\n // have a real `contextId`, which on Sepolia loses every Budokan\n // token. We filter by `contextId !== 0` client-side instead, which\n // is the actual invariant we want.\n const { data, isLoading } = useTokens(\n enabled\n ? {\n owner,\n minterAddress: budokanAddress,\n ...(contextId != null ? { contextId } : {}),\n limit: MAX_OWNED_TOKENS,\n }\n : undefined,\n );\n\n const tournamentIds = useMemo(() => {\n if (!enabled) return null;\n if (!data?.data) return null;\n const ids = new Set<string>();\n for (const t of data.data) {\n // Filter to tokens with a real tournament context. `contextId === 0`\n // is the \"no context\" sentinel and should not produce a tournament\n // entry. Anything truthy is a valid tournament id.\n if (t.contextId) ids.add(String(t.contextId));\n }\n return [...ids];\n }, [enabled, data]);\n\n return { tournamentIds, loading: isLoading };\n}\n\n/**\n * Tournaments where `owner` currently holds at least one Budokan-minted token.\n * Stitches denshokan ownership → unique `contextId`s → `useTournaments`\n * filtered by those IDs. Stays correct under transfers; transferred tokens\n * drop out of the result, received tokens appear.\n *\n * Requires the consuming app to wrap its tree in a `DenshokanProvider`\n * alongside the `BudokanProvider`.\n */\nexport function useTournamentsByOwner(\n owner: string | undefined,\n params?: {\n phase?: Phase;\n limit?: number;\n offset?: number;\n sort?: TournamentListParams[\"sort\"];\n includePrizeSummary?: TournamentListParams[\"includePrizeSummary\"];\n },\n): UseTournamentsResult {\n const { tournamentIds, loading: tokensLoading } = useOwnedTournamentIds(owner);\n\n const inner = useTournaments(\n tournamentIds && tournamentIds.length > 0\n ? {\n tournamentIds,\n phase: params?.phase,\n limit: params?.limit,\n offset: params?.offset,\n sort: params?.sort,\n includePrizeSummary: params?.includePrizeSummary,\n }\n : undefined,\n );\n\n // Owner has no Budokan tokens → short-circuit to a fully-resolved empty\n // page rather than leaving the consumer in a stuck `null` state.\n if (tournamentIds !== null && tournamentIds.length === 0) {\n return {\n tournaments: emptyPage<Tournament>(\n params?.limit ?? 50,\n params?.offset ?? 0,\n ),\n loading: false,\n error: null,\n refetch: async () => {},\n };\n }\n\n return {\n tournaments: inner.tournaments,\n loading: tokensLoading || inner.loading,\n error: inner.error,\n refetch: inner.refetch,\n };\n}\n\n/**\n * Count of tournaments where `owner` currently holds a Budokan-minted token.\n * When `phase` is omitted the count comes for free from the denshokan result;\n * when phase-filtered it makes a second `useTournaments` call (with limit=1)\n * and reads `.total`.\n */\nexport function useTournamentsByOwnerCount(\n owner: string | undefined,\n params?: { phase?: Phase },\n): UseTournamentCountResult {\n const { tournamentIds, loading: tokensLoading } = useOwnedTournamentIds(owner);\n\n // For phase-filtered counts we still need to ask the API — denshokan tokens\n // don't carry tournament phase. Limit=1 keeps the response cheap; we only\n // care about `total`.\n const phaseFilter = params?.phase;\n const filtered = useTournaments(\n phaseFilter && tournamentIds && tournamentIds.length > 0\n ? { tournamentIds, phase: phaseFilter, limit: 1 }\n : undefined,\n );\n\n if (tournamentIds === null) {\n return {\n count: null,\n loading: tokensLoading,\n error: null,\n refetch: async () => {},\n };\n }\n if (tournamentIds.length === 0) {\n return {\n count: 0,\n loading: false,\n error: null,\n refetch: async () => {},\n };\n }\n if (!phaseFilter) {\n // Unfiltered count is just the unique-tournament-id count from denshokan.\n return {\n count: tournamentIds.length,\n loading: false,\n error: null,\n refetch: async () => {},\n };\n }\n return {\n count: filtered.tournaments?.total ?? null,\n loading: filtered.loading,\n error: filtered.error,\n refetch: async () => {},\n };\n}\n\n/**\n * Registrations in `tournamentId` for tokens that `owner` currently holds.\n * Source of truth is denshokan ownership scoped to the tournament's\n * `contextId`; registration metadata (ban / submission / entry-number) is\n * fetched by `gameTokenIds` filter against the tournament.\n */\nexport function useRegistrationsByOwner(\n tournamentId: string | undefined,\n owner: string | undefined,\n params?: {\n hasSubmitted?: boolean;\n isBanned?: boolean;\n limit?: number;\n offset?: number;\n },\n): UseRegistrationsResult {\n const client = useBudokanClient();\n const budokanAddress = client.clientConfig.budokanAddress;\n const contextId = tournamentId ? Number(tournamentId) : undefined;\n const enabled =\n !!owner && !!budokanAddress && tournamentId != null && contextId !== undefined;\n\n // Don't pass `hasContext: true` here — `contextId` alone is sufficient,\n // and the denshokan API treats `has_context=true & context_id=X` as an\n // intersection that drops tokens whose packed-ID `hasContext` bit is 0\n // even when they have a real `contextId`. Matches the call shape that\n // `useLiveLeaderboard` makes.\n const { data: tokensResult, isLoading: tokensLoading } = useTokens(\n enabled\n ? {\n owner,\n minterAddress: budokanAddress,\n contextId,\n limit: MAX_OWNED_TOKENS,\n }\n : undefined,\n );\n\n const ownedGameTokenIds = useMemo(() => {\n if (!enabled) return null;\n if (!tokensResult?.data) return null;\n const ids: string[] = [];\n for (const t of tokensResult.data) {\n if (t.tokenId == null) continue;\n try {\n ids.push(BigInt(String(t.tokenId)).toString());\n } catch {\n // Non-numeric token id — skip rather than poison the filter.\n }\n }\n return ids;\n }, [enabled, tokensResult]);\n\n // The registrations API defaults `limit` to 50 when omitted. Since we've\n // already collected up to MAX_OWNED_TOKENS owned-token ids upstream, default\n // the registrations fetch to the same size so we never silently truncate.\n // Consumer-supplied `params.limit` still takes precedence (spread runs after).\n const inner = useRegistrations(\n ownedGameTokenIds && ownedGameTokenIds.length > 0 ? tournamentId : undefined,\n ownedGameTokenIds && ownedGameTokenIds.length > 0\n ? {\n limit: Math.min(ownedGameTokenIds.length, MAX_OWNED_TOKENS),\n ...params,\n gameTokenIds: ownedGameTokenIds,\n }\n : undefined,\n );\n\n if (ownedGameTokenIds !== null && ownedGameTokenIds.length === 0) {\n return {\n registrations: emptyPage<Registration>(\n params?.limit ?? 50,\n params?.offset ?? 0,\n ),\n loading: false,\n error: null,\n refetch: async () => {},\n };\n }\n\n return {\n registrations: inner.registrations,\n loading: tokensLoading || inner.loading,\n error: inner.error,\n refetch: inner.refetch,\n };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { RewardClaim, RewardClaimSummary } from \"../types/prize.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseRewardClaimsResult {\n rewardClaims: PaginatedResult<RewardClaim> | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch reward claims for a tournament.\n */\nexport function useRewardClaims(\n tournamentId: string | undefined,\n params?: { limit?: number; offset?: number },\n): UseRewardClaimsResult {\n const client = useBudokanClient();\n const [rewardClaims, setRewardClaims] = useState<PaginatedResult<RewardClaim> | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setRewardClaims, setError);\n\n const paramsKey = JSON.stringify(params);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentRewardClaims(tournamentId, params);\n setRewardClaims(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, tournamentId, paramsKey]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { rewardClaims, loading, error, refetch: fetch };\n}\n\nexport interface UseRewardClaimsSummaryResult {\n summary: RewardClaimSummary | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch reward claims summary for a tournament.\n */\nexport function useRewardClaimsSummary(tournamentId: string | undefined): UseRewardClaimsSummaryResult {\n const client = useBudokanClient();\n const [summary, setSummary] = useState<RewardClaimSummary | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setSummary, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentRewardClaimsSummary(tournamentId);\n setSummary(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { summary, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { Prize } from \"../types/prize.js\";\nimport type { PrizeStats } from \"../types/activity.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UsePrizesResult {\n prizes: Prize[] | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch prizes for a tournament.\n */\nexport function usePrizes(tournamentId: string | undefined): UsePrizesResult {\n const client = useBudokanClient();\n const [prizes, setPrizes] = useState<Prize[] | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setPrizes, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentPrizes(tournamentId);\n setPrizes(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { prizes, loading, error, refetch: fetch };\n}\n\nexport interface UsePrizeStatsResult {\n prizeStats: PrizeStats | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch platform-wide prize stats.\n */\nexport function usePrizeStats(): UsePrizeStatsResult {\n const client = useBudokanClient();\n const [prizeStats, setPrizeStats] = useState<PrizeStats | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setPrizeStats, setError);\n\n const fetch = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await client.getPrizeStats();\n setPrizeStats(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { prizeStats, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { PrizeAggregation } from \"../types/prize.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UsePrizeAggregationResult {\n prizeAggregation: PrizeAggregation[] | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch prize aggregation for a tournament.\n */\nexport function usePrizeAggregation(tournamentId: string | undefined): UsePrizeAggregationResult {\n const client = useBudokanClient();\n const [prizeAggregation, setPrizeAggregation] = useState<PrizeAggregation[] | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setPrizeAggregation, setError);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentPrizeAggregation(tournamentId);\n setPrizeAggregation(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client, tournamentId]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { prizeAggregation, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { QualificationEntry } from \"../types/tournament.js\";\nimport type { PaginatedResult } from \"../types/common.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseQualificationsResult {\n qualifications: PaginatedResult<QualificationEntry> | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch qualification entries for a tournament.\n */\nexport function useQualifications(\n tournamentId: string | undefined,\n params?: { limit?: number; offset?: number },\n): UseQualificationsResult {\n const client = useBudokanClient();\n const [qualifications, setQualifications] = useState<PaginatedResult<QualificationEntry> | null>(null);\n const [loading, setLoading] = useState(!!tournamentId);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setQualifications, setError);\n\n const paramsKey = JSON.stringify(params);\n\n const fetch = useCallback(async () => {\n if (!tournamentId) return;\n setLoading(true);\n setError(null);\n try {\n const result = await client.getTournamentQualifications(tournamentId, params);\n setQualifications(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, tournamentId, paramsKey]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { qualifications, loading, error, refetch: fetch };\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport type { PlatformStats, PrizeStats } from \"../types/activity.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UseActivityStatsResult {\n stats: PlatformStats | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Hook to fetch platform-wide activity stats.\n */\nexport function useActivityStats(): UseActivityStatsResult {\n const client = useBudokanClient();\n const [stats, setStats] = useState<PlatformStats | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(client, setStats, setError);\n\n const fetch = useCallback(async () => {\n setLoading(true);\n setError(null);\n try {\n const result = await client.getActivityStats();\n setStats(result);\n } catch (e) {\n setError(e as Error);\n } finally {\n setLoading(false);\n }\n }, [client]);\n\n useEffect(() => { fetch(); }, [fetch]);\n\n return { stats, loading, error, refetch: fetch };\n}\n\nexport interface UsePrizeStatsResult {\n prizeStats: PrizeStats | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n","import { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport {\n useDenshokanClient,\n useTokens,\n} from \"@provable-games/denshokan-sdk/react\";\nimport type { Tournament } from \"../types/tournament.js\";\nimport type { Prize, RewardClaim } from \"../types/prize.js\";\nimport type { PlayerRewards, PlayerPlacement } from \"../types/player.js\";\nimport { useBudokanClient } from \"./context.js\";\nimport { useTournaments } from \"./useTournaments.js\";\nimport { useResetOnClient } from \"./useResetOnClient.js\";\n\nexport interface UsePlayerRewardsResult {\n rewards: PlayerRewards | null;\n loading: boolean;\n error: Error | null;\n refetch: () => Promise<void>;\n}\n\n/**\n * Aggregate a player's placement/earnings data across finalized Budokan\n * tournaments they currently hold tokens in.\n *\n * Composition:\n *\n * denshokan useTokens (current ownership)\n * ↓ group by contextId (= tournament id)\n * budokan useTournaments({ tournamentIds })\n * ↓ filter to finalized\n * for each finalized tournament (parallel):\n * budokan getTournamentPrizes — full prize records\n * budokan getTournamentRewardClaims — paginated, all pages\n * denshokan getTokenRanks (bulk) — final ranks for owned tokens\n * ↓ filter ranks to paid positions (max position derived from prizes\n * + entry-fee distribution_count)\n *\n * Per-tournament failures are tolerated: a 5xx on one tournament's prize/\n * claim/rank fetch skips that tournament and continues, rather than\n * failing the whole hook. Failures are logged via `console.warn`.\n *\n * Why source ownership from denshokan: PR #243 dropped\n * `registrations.player_address` because the indexed value goes stale on\n * transfer. The contract keys registrations by token_id only, so the only\n * trustworthy answer to \"what tournaments has this wallet placed in\" is\n * to ask denshokan who currently holds Budokan-minted tokens.\n *\n * Staleness: the hook only re-fetches when the player's owned token set\n * changes (transfers/new mints) or when the underlying tournament list\n * changes. It does *not* observe time-based finalization transitions on\n * its own — if a tournament's submission window closes while the\n * consumer is mounted, call `refetch()` to pick up the new placement.\n *\n * Pass `undefined` to skip fetching.\n */\nexport function usePlayerRewards(\n address: string | undefined,\n): UsePlayerRewardsResult {\n const budokan = useBudokanClient();\n const denshokan = useDenshokanClient();\n const budokanAddress = budokan.clientConfig.budokanAddress;\n\n const [rewards, setRewards] = useState<PlayerRewards | null>(null);\n const [aggregating, setAggregating] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n useResetOnClient(budokan, setRewards, setError);\n\n // 1. Player's currently-owned Budokan tokens.\n const tokensEnabled = !!address && !!budokanAddress;\n const { data: tokensResult, isLoading: tokensLoading } = useTokens(\n tokensEnabled\n ? {\n owner: address,\n minterAddress: budokanAddress,\n limit: 1000,\n }\n : undefined,\n );\n\n // 2. Group by tournament id (skip creator tokens whose contextId is null).\n const tokensByTournament = useMemo(() => {\n if (!tokensResult?.data) return null;\n const map = new Map<string, string[]>();\n for (const t of tokensResult.data) {\n if (t.contextId == null || !t.tokenId) continue;\n const tid = String(t.contextId);\n let list = map.get(tid);\n if (!list) {\n list = [];\n map.set(tid, list);\n }\n list.push(t.tokenId);\n }\n return map;\n }, [tokensResult]);\n\n // 3. Tournament data for those ids.\n const tournamentIds = useMemo(\n () => (tokensByTournament ? Array.from(tokensByTournament.keys()) : []),\n [tokensByTournament],\n );\n const { tournaments: tournamentsPage, loading: tournamentsLoading } =\n useTournaments(\n tournamentIds.length > 0\n ? { tournamentIds, limit: 1000 }\n : undefined,\n );\n\n // 4. Fan out per finalized tournament: prizes + claims + ranks. Once all\n // resolved, derive placements + aggregate.\n const tournamentIdsKey = tournamentIds.join(\",\");\n\n const fetch = useCallback(async () => {\n if (!tokensEnabled) {\n setRewards(null);\n return;\n }\n if (!tokensByTournament) return; // tokens still loading\n if (tokensByTournament.size === 0) {\n setRewards(emptyRewards());\n return;\n }\n if (!tournamentsPage?.data) return; // tournaments still loading\n\n const now = Math.floor(Date.now() / 1000);\n const finalized = tournamentsPage.data.filter((t) => {\n const sub = Number(t.submissionEndTime ?? 0);\n return sub > 0 && sub <= now;\n });\n\n if (finalized.length === 0) {\n setRewards(emptyRewards());\n return;\n }\n\n setAggregating(true);\n setError(null);\n\n try {\n // `allSettled` so a single tournament's API/RPC failure doesn't blank\n // the whole profile — log the per-tournament error and aggregate from\n // the rest.\n const settled = await Promise.allSettled(\n finalized.map(async (t) => {\n const tid = t.id;\n const tokenIds = tokensByTournament.get(tid) ?? [];\n if (tokenIds.length === 0) return null;\n\n // Fetch prizes / claims / ranks in parallel — independent calls.\n // Reward claims paginate until exhausted; the budokan API caps\n // page size at 100 server-side, so a 100-claim default would\n // silently miss the player's claim in larger tournaments.\n const [prizes, allClaims, ranksResult] = await Promise.all([\n budokan.getTournamentPrizes(tid),\n fetchAllRewardClaims(budokan, tid),\n denshokan.getTokenRanks(tokenIds, {\n contextId: Number(tid),\n minterAddress: budokanAddress!,\n }),\n ]);\n\n // Max paid position = max across sponsor prize positions / counts\n // + entry-fee distribution count.\n let maxPaid = 0;\n for (const p of prizes) {\n if ((p.payoutPosition ?? 0) > 0) {\n maxPaid = Math.max(maxPaid, p.payoutPosition!);\n }\n if ((p.distributionCount ?? 0) > 0) {\n maxPaid = Math.max(maxPaid, p.distributionCount!);\n }\n }\n const efDistCount = Number(t.entryFee?.distributionCount ?? 0);\n if (efDistCount > 0) maxPaid = Math.max(maxPaid, efDistCount);\n\n if (maxPaid === 0) return null;\n\n const placements: PlayerPlacement[] = ranksResult.data\n .filter((r) => r.rank > 0 && r.rank <= maxPaid)\n .map((r) => ({\n tournamentId: tid,\n tokenId: r.tokenId,\n position: r.rank,\n score: String(r.score ?? \"0\"),\n }));\n\n if (placements.length === 0) return null;\n\n return {\n tournament: t,\n prizes,\n rewardClaims: allClaims,\n placements,\n };\n }),\n );\n\n const valid = settled\n .map((s, i) => {\n if (s.status === \"fulfilled\") return s.value;\n // Skip the failed tournament; log so the consumer can wire\n // observability if they want, but don't fail the whole hook.\n console.warn(\n `usePlayerRewards: tournament ${finalized[i].id} fetch failed; skipping`,\n s.reason,\n );\n return null;\n })\n .filter((r): r is NonNullable<typeof r> => r !== null);\n\n const allPlacements: PlayerPlacement[] = valid.flatMap(\n (r) => r.placements,\n );\n const wins = allPlacements.length;\n const bestPlacement =\n wins > 0 ? Math.min(...allPlacements.map((p) => p.position)) : null;\n\n const tournamentsList: Tournament[] = valid.map((r) => r.tournament);\n const prizesList: Prize[] = valid.flatMap((r) => r.prizes);\n const rewardClaimsList: RewardClaim[] = valid.flatMap(\n (r) => r.rewardClaims,\n );\n\n setRewards({\n wins,\n bestPlacement,\n placements: allPlacements,\n tournaments: tournamentsList,\n prizes: prizesList,\n rewardClaims: rewardClaimsList,\n });\n } catch (e) {\n setError(e as Error);\n } finally {\n setAggregating(false);\n }\n // setRewards / setError / setAggregating come from useState and have\n // stable identities — intentionally omitted from the dependency list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n tokensEnabled,\n tokensByTournament,\n tournamentsPage,\n tournamentIdsKey,\n budokan,\n denshokan,\n budokanAddress,\n ]);\n\n // Avoid duplicate fan-outs when nothing material changed between renders.\n const lastRunRef = useRef<string>(\"\");\n useEffect(() => {\n if (!tokensEnabled) {\n setRewards(null);\n return;\n }\n if (!tokensByTournament || !tournamentsPage?.data) return;\n const fingerprint = `${address}|${tournamentIdsKey}|${tournamentsPage.data.length}`;\n if (fingerprint === lastRunRef.current) return;\n lastRunRef.current = fingerprint;\n fetch();\n }, [\n address,\n tokensEnabled,\n tokensByTournament,\n tournamentsPage,\n tournamentIdsKey,\n fetch,\n ]);\n\n const loading =\n (tokensEnabled && (tokensLoading || tournamentsLoading)) || aggregating;\n\n return { rewards, loading, error, refetch: fetch };\n}\n\nfunction emptyRewards(): PlayerRewards {\n return {\n wins: 0,\n bestPlacement: null,\n placements: [],\n tournaments: [],\n prizes: [],\n rewardClaims: [],\n };\n}\n\n/**\n * Fetch every reward-claim row for a tournament, paginating until the\n * accumulated length matches `total` reported by the API.\n *\n * The budokan-api caps `/tournaments/:id/reward-claims` at 100 rows per\n * page server-side; the default cap on the SDK helper is 50. Without\n * pagination, a tournament with > 100 claims silently truncates and\n * `usePlayerRewards` would miss any of the player's placements whose\n * claim row falls in the unfetched tail.\n */\nasync function fetchAllRewardClaims(\n client: ReturnType<typeof useBudokanClient>,\n tournamentId: string,\n): Promise<RewardClaim[]> {\n // First page also tells us `total`, which drives the loop bound.\n const first = await client.getTournamentRewardClaims(tournamentId, {\n limit: 100,\n });\n const accumulated: RewardClaim[] = [...first.data];\n const total = first.total ?? accumulated.length;\n\n if (accumulated.length >= total) return accumulated;\n\n // Match whatever page size the server returned for the first page so we\n // ride whatever cap is live (API currently caps at 100; if that rises\n // later, the page size adapts automatically).\n const pageSize = Math.max(first.data.length, 1);\n let offset = accumulated.length;\n while (offset < total) {\n const next = await client.getTournamentRewardClaims(tournamentId, {\n limit: pageSize,\n offset,\n });\n if (next.data.length === 0) break;\n accumulated.push(...next.data);\n offset += next.data.length;\n }\n return accumulated;\n}\n","import { useEffect, useRef, useState } from \"react\";\nimport type { WSChannel, WSEventMessage } from \"../types/websocket.js\";\nimport { useBudokanClient } from \"./context.js\";\n\nexport interface UseSubscriptionResult {\n lastMessage: WSEventMessage | null;\n isConnected: boolean;\n}\n\n/**\n * Hook to subscribe to WebSocket channels for real-time updates.\n * Automatically connects and subscribes on mount, and cleans up on unmount.\n */\nexport function useSubscription(\n channels: WSChannel[],\n tournamentIds?: string[],\n): UseSubscriptionResult {\n const client = useBudokanClient();\n const [lastMessage, setLastMessage] = useState<WSEventMessage | null>(null);\n const [isConnected, setIsConnected] = useState(client.wsConnected);\n const channelsRef = useRef(channels);\n const tournamentIdsRef = useRef(tournamentIds);\n\n // Keep refs updated for stable comparisons\n channelsRef.current = channels;\n tournamentIdsRef.current = tournamentIds;\n\n useEffect(() => {\n if (channels.length === 0) return;\n\n client.connect();\n\n const unsubscribe = client.subscribe(\n channels,\n (message) => setLastMessage(message),\n tournamentIds,\n );\n\n const unsubscribeConnection = client.onWsConnectionChange((connected) => {\n setIsConnected(connected);\n });\n\n return () => {\n unsubscribe();\n unsubscribeConnection();\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, JSON.stringify(channels), JSON.stringify(tournamentIds)]);\n\n return { lastMessage, isConnected };\n}\n","import { useState, useEffect } from \"react\";\nimport { useBudokanClient } from \"./context.js\";\nimport type { ConnectionMode } from \"../datasource/health.js\";\n\n/**\n * Hook returning the current WebSocket connection status and datasource mode.\n *\n * `datasourceMode` indicates how data is being fetched:\n * - `\"api\"` — API is available and being used\n * - `\"rpc-fallback\"` — API is down, using direct on-chain RPC calls\n * - `\"offline\"` — both API and RPC are unavailable\n */\nexport function useConnectionStatus(): {\n isConnected: boolean;\n datasourceMode: ConnectionMode;\n} {\n const client = useBudokanClient();\n const [isConnected, setIsConnected] = useState(client.wsConnected);\n const [datasourceMode, setDatasourceMode] = useState<ConnectionMode>(\"api\");\n\n useEffect(() => {\n const unsubWs = client.onWsConnectionChange((connected) => {\n setIsConnected(connected);\n });\n const unsubDs = client.onConnectionStatusChange((status) => {\n setDatasourceMode(status.mode);\n });\n return () => {\n unsubWs();\n unsubDs();\n };\n }, [client]);\n\n return { isConnected, datasourceMode };\n}\n"]}
|