@devlab.group/agent-commerce 2.4.1 → 2.5.0
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/README.md +115 -15
- package/dist/ap2.d.ts +24 -12
- package/dist/ap2.js +31 -13
- package/dist/ap2.js.map +1 -1
- package/dist/{chunk-DTKU3Z2M.js → chunk-3OTCFFFT.js} +37 -4
- package/dist/chunk-3OTCFFFT.js.map +1 -0
- package/dist/{chunk-QPV3EGJO.js → chunk-4K7FIBJM.js} +25 -4
- package/dist/chunk-4K7FIBJM.js.map +1 -0
- package/dist/{chunk-CXWC5LWM.js → chunk-FKQK5XZA.js} +652 -68
- package/dist/chunk-FKQK5XZA.js.map +1 -0
- package/dist/chunk-GA3O2A7R.js +92 -0
- package/dist/chunk-GA3O2A7R.js.map +1 -0
- package/dist/{chunk-WZW5ORZH.js → chunk-VUCMBGUR.js} +3 -3
- package/dist/{chunk-WZW5ORZH.js.map → chunk-VUCMBGUR.js.map} +1 -1
- package/dist/cli/{ap2-GWSP4LYY.js → ap2-YAPLERSC.js} +34 -15
- package/dist/cli/ap2-YAPLERSC.js.map +1 -0
- package/dist/cli/{chunk-G2JEY7MB.js → chunk-2J2IQQ4X.js} +8 -7
- package/dist/cli/chunk-2J2IQQ4X.js.map +1 -0
- package/dist/cli/chunk-2UPPX3FJ.js +311 -0
- package/dist/cli/chunk-2UPPX3FJ.js.map +1 -0
- package/dist/cli/{chunk-WYOGIANL.js → chunk-4H2QLHQI.js} +4 -4
- package/dist/cli/{chunk-WYOGIANL.js.map → chunk-4H2QLHQI.js.map} +1 -1
- package/dist/cli/{chunk-OZ4LAWBK.js → chunk-5R7DM5LM.js} +25 -4
- package/dist/cli/chunk-5R7DM5LM.js.map +1 -0
- package/dist/cli/chunk-663ALDZA.js +92 -0
- package/dist/cli/chunk-663ALDZA.js.map +1 -0
- package/dist/cli/{chunk-QQ3WY5L3.js → chunk-IDY2735M.js} +36 -104
- package/dist/cli/chunk-IDY2735M.js.map +1 -0
- package/dist/cli/chunk-JFVRG2HH.js +107 -0
- package/dist/cli/chunk-JFVRG2HH.js.map +1 -0
- package/dist/cli/chunk-M7NXVRU5.js +8 -0
- package/dist/cli/{chunk-ITWNSS2B.js.map → chunk-M7NXVRU5.js.map} +1 -1
- package/dist/cli/chunk-NIU5EMSB.js +119 -0
- package/dist/cli/chunk-NIU5EMSB.js.map +1 -0
- package/dist/cli/{chunk-TNMLDPUO.js → chunk-QA2OPHBF.js} +655 -70
- package/dist/cli/chunk-QA2OPHBF.js.map +1 -0
- package/dist/cli/{chunk-GJIMDMYT.js → chunk-QLUCNPRT.js} +404 -161
- package/dist/cli/chunk-QLUCNPRT.js.map +1 -0
- package/dist/cli/chunk-SYQLJXIU.js +105 -0
- package/dist/cli/chunk-SYQLJXIU.js.map +1 -0
- package/dist/cli/{chunk-3MGAJ5FX.js → chunk-VJ4EO4LE.js} +3 -3
- package/dist/cli/{chunk-3MGAJ5FX.js.map → chunk-VJ4EO4LE.js.map} +1 -1
- package/dist/cli/{chunk-PIMFPCNZ.js → chunk-Z34UMZBB.js} +234 -85
- package/dist/cli/chunk-Z34UMZBB.js.map +1 -0
- package/dist/cli/config-BWFMN2ZB.js +12 -0
- package/dist/cli/{config-UI4EDG4L.js.map → config-BWFMN2ZB.js.map} +1 -1
- package/dist/cli/index.js +258 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/{mcp-PGBRWZVA.js → mcp-KZEMXLHR.js} +5 -4
- package/dist/cli/mcp-KZEMXLHR.js.map +1 -0
- package/dist/cli/{near-5AY3HWYF.js → near-U6365VFX.js} +15 -4
- package/dist/cli/near-U6365VFX.js.map +1 -0
- package/dist/cli/payment-providers-SZL36H3Y.js +6 -0
- package/dist/cli/payment-providers-SZL36H3Y.js.map +1 -0
- package/dist/cli/{provider-I2ESL6RS.js → provider-6TKB5ADJ.js} +26 -15
- package/dist/cli/provider-6TKB5ADJ.js.map +1 -0
- package/dist/cli/receipts-ZGLJWMQG.js +8 -0
- package/dist/cli/receipts-ZGLJWMQG.js.map +1 -0
- package/dist/cli/reconcile-IC22MJD5.js +4 -0
- package/dist/cli/reconcile-IC22MJD5.js.map +1 -0
- package/dist/cli/{run-JK4ERPJV.js → run-ZTYPQI4D.js} +151 -115
- package/dist/cli/run-ZTYPQI4D.js.map +1 -0
- package/dist/cli/svm-KDSPDFJG.js +48 -0
- package/dist/cli/svm-KDSPDFJG.js.map +1 -0
- package/dist/cli/{x402-7WBFZQXV.js → x402-WLYBLODI.js} +10 -9
- package/dist/cli/x402-WLYBLODI.js.map +1 -0
- package/dist/index.d.ts +112 -12
- package/dist/index.js +948 -157
- package/dist/index.js.map +1 -1
- package/dist/mcp.d.ts +1 -2
- package/dist/mcp.js +1 -1
- package/dist/mpp.js +20 -10
- package/dist/mpp.js.map +1 -1
- package/dist/{near-D6C42VPE.js → near-FH7HPZV3.js} +15 -4
- package/dist/near-FH7HPZV3.js.map +1 -0
- package/dist/{protocol-adapter-C9odYl6l.d.ts → protocol-adapter-DEXpdp8m.d.ts} +102 -48
- package/dist/{runtime-Cl_BLVZV.d.ts → runtime-Dz2fSO-P.d.ts} +220 -2
- package/dist/svm-KNC3PHMS.js +48 -0
- package/dist/svm-KNC3PHMS.js.map +1 -0
- package/dist/x402.js +5 -5
- package/package.json +1 -1
- package/dist/authorization-DjAecwuW.d.ts +0 -115
- package/dist/chunk-CXWC5LWM.js.map +0 -1
- package/dist/chunk-DTKU3Z2M.js.map +0 -1
- package/dist/chunk-KA2AX5FH.js +0 -44
- package/dist/chunk-KA2AX5FH.js.map +0 -1
- package/dist/chunk-QPV3EGJO.js.map +0 -1
- package/dist/cli/ap2-GWSP4LYY.js.map +0 -1
- package/dist/cli/chunk-G2JEY7MB.js.map +0 -1
- package/dist/cli/chunk-GJIMDMYT.js.map +0 -1
- package/dist/cli/chunk-ITWNSS2B.js +0 -8
- package/dist/cli/chunk-OSTCU6ZK.js +0 -44
- package/dist/cli/chunk-OSTCU6ZK.js.map +0 -1
- package/dist/cli/chunk-OZ4LAWBK.js.map +0 -1
- package/dist/cli/chunk-PIMFPCNZ.js.map +0 -1
- package/dist/cli/chunk-QQ3WY5L3.js.map +0 -1
- package/dist/cli/chunk-TNMLDPUO.js.map +0 -1
- package/dist/cli/config-UI4EDG4L.js +0 -11
- package/dist/cli/mcp-PGBRWZVA.js.map +0 -1
- package/dist/cli/near-5AY3HWYF.js.map +0 -1
- package/dist/cli/provider-I2ESL6RS.js.map +0 -1
- package/dist/cli/run-JK4ERPJV.js.map +0 -1
- package/dist/cli/svm-3MMYFPC7.js +0 -33
- package/dist/cli/svm-3MMYFPC7.js.map +0 -1
- package/dist/cli/x402-7WBFZQXV.js.map +0 -1
- package/dist/near-D6C42VPE.js.map +0 -1
- package/dist/svm-QEUAUNPQ.js +0 -33
- package/dist/svm-QEUAUNPQ.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/payments/x402/provider/constants.ts","../src/payments/x402/provider/fee-payer.ts","../src/payments/x402/json-rpc.ts","../src/payments/x402/provider/health.ts","../src/payments/x402/chain.ts","../src/payments/x402/facilitator.ts","../src/payments/x402/local-facilitator.ts","../src/payments/x402/provider/reasons.ts","../src/payments/x402/provider/offers.ts","../src/payments/x402/provider/quote.ts","../src/payments/x402/reconcile/evm.ts","../src/payments/x402/reconcile/near.ts","../src/payments/x402/reconcile/svm.ts","../src/payments/x402/provider/reconcile.ts","../src/payments/x402/amount.ts","../src/payments/x402/payload.ts","../src/payments/x402/provider/requirement.ts","../src/payments/x402/provider/transfer.ts","../src/payments/x402/provider/settle.ts","../src/payments/x402/provider/verify.ts","../src/payments/x402/provider/index.ts"],"names":["privateKeyToAccount","isAddress","PERMIT2_ADDRESS","UINT","rpc","CLOCK_MARGIN_SECONDS","carries","offer","index","from","nonce","x402ExactPermit2ProxyAddress","getAddress"],"mappings":";;;;;;;;;;;;;;;AAGO,IAAM,YAAA,GAAe,CAAA;AACrB,IAAM,qBAAA,GAAwB,OAAO,YAAY,CAAA;AACjD,IAAM,2BAAA,GAA8B,EAAA;AACpC,IAAM,iBAAA,GAAoB,kBAAA;AAC1B,IAAM,iBAAA,GAAoB,GAAA;AAG1B,IAAM,WAAA,GAA2B;AAAA,EACtC,IAAA,EAAM,CAAC,MAAA,KAAoB,CAAA,EAAG,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA,EAAG,MAAA,CAAO,UAAA,EAAY,CAAA;AAChF;;;ACFA,IAAM,gBAAA,GAAmB,GAAA;AAKlB,SAAS,sBAAsB,GAAA,EAAuC;AAC3E,EAAA,MAAM,EAAE,KAAA,EAAO,aAAA,EAAc,GAAI,GAAA;AACjC,EAAA,IAAI,iBAAA;AAIJ,EAAA,SAAS,gBAAA,GAA+C;AACtD,IAAA,MAAM,GAAA,GAAM,MAAM,WAAA,EAAY;AAC9B,IAAA,IAAI,iBAAA,IAAqB,GAAA,GAAM,iBAAA,CAAkB,EAAA,GAAK,gBAAA,EAAkB;AACtE,MAAA,OAAO,iBAAA,CAAkB,QAAA;AAAA,IAC3B;AACA,IAAA,MAAM,MAAA,GAAS,aAAA;AACf,IAAA,MAAM,QAAA,GAAW,OAAO,SAAA,EAAU;AAClC,IAAA,MAAM,QAAA,GAAW,EAAE,EAAA,EAAI,GAAA,EAAK,QAAA,EAAS;AACrC,IAAA,iBAAA,GAAoB,QAAA;AAEpB,IAAA,QAAA,CAAS,MAAM,MAAM;AACnB,MAAA,IAAI,iBAAA,KAAsB,UAAU,iBAAA,GAAoB,MAAA;AAAA,IAC1D,CAAC,CAAA;AACD,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,gBAAA;AACT;AAGO,SAAS,wBACd,gBAAA,EACsC;AAGtC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAoB;AAE1C,EAAA,eAAe,YAAY,KAAA,EAAkC;AAC3D,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,MAAM,gBAAA,EAAiB;AAAA,IACrC,SAAS,KAAA,EAAO;AACd,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,8BAAA;AAAA,QACA,CAAA,2BAAA,EAA8B,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,4DAAA,CAAA;AAAA,QACpD,EAAE,KAAA;AAAM,OACV;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAS,UAAU,KAAA,CAAM,IAAA;AAAA,MAC7B,CAAC,IAAA,KACC,IAAA,CAAK,WAAA,KAAgB,YAAA,IACrB,KAAK,MAAA,KAAW,OAAA,IAChB,IAAA,CAAK,OAAA,KAAY,KAAA,CAAM;AAAA,KAC3B,EAAG,QAAQ,UAAU,CAAA;AACrB,IAAA,MAAM,QAAA,GAAW,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,OAAO,CAAA;AAC5C,IAAA,MAAM,aACJ,QAAA,KAAa,MAAA,KACZ,QAAA,KAAa,MAAA,IAAU,OAAO,MAAA,CAAO,SAAA,CAAU,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAA,CAAS,QAAQ,CAAC,CAAA,CAAA;AAC3F,IAAA,MAAM,QAAA,GAAW,aAAa,QAAA,GAAW,MAAA;AACzC,IAAA,IAAI,OAAO,aAAa,QAAA,IAAY,gBAAA,CAAiB,MAAM,OAAA,EAAS,QAAQ,MAAM,MAAA,EAAW;AAC3F,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,8BAAA;AAAA,QACA,8BAA8B,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,+BAAA,EAAkC,MAAM,OAAO,CAAA;AAAA,OACrG;AAAA,IACF;AACA,IAAA,SAAA,CAAU,GAAA,CAAI,KAAA,CAAM,OAAA,EAAS,QAAQ,CAAA;AACrC,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,OAAO,WAAA;AACT;AAOO,SAAS,uBAAA,CACd,kBACA,MAAA,EACkD;AAClD,EAAA,OAAO,OAAO,KAAA,KAAU;AACtB,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,MAAM,gBAAA,EAAiB;AAAA,IACrC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,EAAE,GAAA,EAAK,iBAAA,CAAkB,GAAG,CAAA,EAAE;AAAA,QAC9B,CAAA,2BAAA,EAA8B,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,6DAAA;AAAA,OACtD;AACA,MAAA,OAAO,EAAC;AAAA,IACV;AAEA,IAAA,MAAM,EAAE,SAAQ,GAAI,SAAA;AACpB,IAAA,OAAO,CAAC,mBAAG,IAAI,IAAI,CAAC,GAAI,QAAQ,KAAA,CAAM,OAAO,KAAK,EAAC,EAAI,GAAI,OAAA,CAAQ,QAAQ,KAAK,EAAG,CAAC,CAAC,CAAA;AAAA,EACvF,CAAA;AACF;;;ACpGA,eAAsB,OAAA,CACpB,MAAA,EACA,MAAA,EACA,MAAA,EACA,SAAA,EACkB;AAClB,EAAA,MAAM,QAAA,GAAW,MAAM,KAAA,CAAM,MAAA,EAAQ;AAAA,IACnC,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,IAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,OAAO,EAAA,EAAI,CAAA,EAAG,MAAA,EAAQ,MAAA,EAAQ,CAAA;AAAA,IAC9D,MAAA,EAAQ,WAAA,CAAY,OAAA,CAAQ,SAAS;AAAA,GACtC,CAAA;AACD,EAAA,MAAM,IAAA,GAAQ,MAAM,QAAA,CAAS,IAAA,EAAK;AAClC,EAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAW;AAC5B,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,8BAAA;AAAA,MACA,OAAO,MAAM,CAAA,SAAA,EAAY,KAAK,SAAA,CAAU,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AAAA,MACnD,EAAE,OAAA,EAAS,EAAE,QAAA,EAAU,IAAA,CAAK,OAAM;AAAE,KACtC;AAAA,EACF;AACA,EAAA,OAAO,IAAA,CAAK,MAAA;AACd;;;ACVO,SAAS,kBAAkB,GAAA,EAAoD;AACpF,EAAA,MAAM,EAAE,MAAA,EAAQ,KAAA,EAAO,gBAAgB,aAAA,EAAe,GAAA,EAAK,MAAK,GAAI,GAAA;AAIpE,EAAA,eAAe,WAAA,CACb,OACA,KAAA,EACwE;AACxE,IAAA,IAAI,MAAM,MAAA,KAAW,KAAA,EAAO,OAAO,cAAA,CAAe,OAAO,KAAK,CAAA;AAC9D,IAAA,IAAI,MAAM,MAAA,KAAW,MAAA,EAAQ,OAAO,eAAA,CAAgB,OAAO,KAAK,CAAA;AAChE,IAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,YAAA,EAAc,SAAQ,GAAI,KAAA;AACtD,IAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,UAAA,EAAW;AAC9C,IAAA,IAAI,OAAA,KAAY,QAAQ,OAAA,EAAS;AAC/B,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,CAAA,OAAA,EAAU,SAAS,CAAA,kBAAA,EAAqB,OAAO,cAAc,OAAA,CAAQ,OAAO,CAAA,EAAA,EAAK,OAAA,CAAQ,WAAW,CAAA,CAAA;AAAA,OAC9G;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,YAAA,CAAa,OAAA,CAAQ,EAAE,OAAA,EAAS,KAAA,CAAM,OAAO,CAAA;AAChE,IAAA,IAAI,CAAC,IAAA,IAAQ,IAAA,KAAS,IAAA,EAAM;AAC1B,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,CAAA,mDAAA,EAAsD,KAAA,CAAM,KAAK,CAAA;AAAA,OAC3E;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,YAAA,CAAa,YAAA,CAAa;AAAA,MAC/C,SAAS,KAAA,CAAM,KAAA;AAAA,MACf,GAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,IAAI,QAAA,KAAa,MAAM,aAAA,EAAe;AACpC,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,SAAS,KAAA,CAAM,KAAK,QAAQ,QAAQ,CAAA,sBAAA,EAAyB,MAAM,aAAa,CAAA;AAAA,OAC1F;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,WAAW,SAAA,EAAW;AAC9B,MAAA,KAAA,MAAW,CAAC,IAAA,EAAM,OAAO,CAAA,IAAK,iBAAA,EAAmB;AAC/C,QAAA,MAAM,WAAW,MAAM,YAAA,CAAa,OAAA,CAAQ,EAAE,SAAS,CAAA;AACvD,QAAA,IAAI,CAAC,QAAA,IAAY,QAAA,KAAa,IAAA,EAAM;AAClC,UAAA,OAAO;AAAA,YACL,MAAA,EAAQ,MAAA;AAAA,YACR,QAAQ,CAAA,GAAA,EAAM,IAAI,2BAA2B,OAAO,CAAA,IAAA,EAAO,QAAQ,WAAW,CAAA;AAAA,WAChF;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,SAAS,KAAA,CAAM,KAAK,GAAG,KAAA,CAAM,MAAA,KAAW,SAAA,GAAY,8BAAA,GAAiC,EAAE,CAAA,CAAA;AAEzG,IAAA,IAAI,OAAA,CAAQ,SAAS,QAAA,EAAU;AAG7B,MAAA,MAAM,UAAA,GAAA,CAAc,MAAM,KAAA,EAAM,EAAG,IAAA;AAAA,QACjC,CAAC,IAAA,KACC,IAAA,CAAK,WAAA,KAAgB,YAAA,IACrB,KAAK,MAAA,KAAW,OAAA,IAChB,IAAA,CAAK,OAAA,KAAY,KAAA,CAAM;AAAA,OAC3B;AACA,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,OAAO;AAAA,UACL,MAAA,EAAQ,MAAA;AAAA,UACR,MAAA,EACE,CAAA,YAAA,EAAe,OAAA,CAAQ,QAAQ,CAAA,0BAAA,EAA6B,YAAY,CAAA,iBAAA,EAClE,KAAA,CAAM,OAAO,CAAA,EAAA,EAAK,OAAA,CAAQ,WAAW,CAAA,2CAAA;AAAA,SAC/C;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EACE,GAAG,sBAAA,CAAuB,cAAc,CAAC,CAAA,MAAA,EAAS,SAAS,wBACxD,OAAA,CAAQ,OAAO,KAAK,OAAA,CAAQ,WAAW,MAAM,SAAS,CAAA,wBAAA,EAC1C,QAAQ,QAAQ,CAAA,gBAAA,EAAmB,MAAM,OAAO,CAAA;AAAA,OACnE;AAAA,IACF;AAKA,IAAA,MAAM,OAAA,GAAU,MAAM,gBAAA,CAAiB,YAAY,CAAA;AACnD,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EACE,CAAA,OAAA,EAAU,SAAS,CAAA,kBAAA,EAAqB,QAAQ,OAAO,CAAA,qJAAA;AAAA,OAG3D;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EACE,CAAA,EAAG,sBAAA,CAAuB,cAAc,CAAC,CAAA,MAAA,EAAS,SAAS,CAAA,qBAAA,EACxD,OAAA,CAAQ,OAAO,CAAA,EAAA,EAAK,SAAS,CAAA,oCAAA;AAAA,KACpC;AAAA,EACF;AAIA,EAAA,eAAe,cAAA,CACb,OACA,KAAA,EACwE;AACxE,IAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,OAAA,EAAQ,GAAI,KAAA;AAExC,IAAA,MAAM,SAAA,GAAY,MAAM,GAAA,EAAI;AAC5B,IAAA,MAAM,UAAU,MAAM,GAAA,CAAI,MAAM,MAAA,EAAQ,gBAAA,EAAkB,EAAE,CAAA;AAC5D,IAAA,MAAM,OAAA,GAAU,OAAO,OAAA,KAAY,QAAA,GAAW,CAAA,OAAA,EAAU,QAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA,GAAK,MAAA;AACjF,IAAA,IAAI,OAAA,KAAY,MAAM,OAAA,EAAS;AAC7B,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,CAAA,OAAA,EAAU,SAAS,CAAA,QAAA,EAAW,OAAA,IAAW,oBAAoB,CAAA,WAAA,EAAc,KAAA,CAAM,OAAO,CAAA,EAAA,EAAK,OAAA,CAAQ,WAAW,CAAA,CAAA;AAAA,OAC1H;AAAA,IACF;AACA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,gBAAA,EAAkB,CAAC,KAAA,CAAM,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAU,CAAC,CAAA;AAC5F,IAAA,MAAM,QAAA,GAAW,SAAS,IAAI,CAAA;AAC9B,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,CAAA,4DAAA,EAA+D,KAAA,CAAM,KAAK,CAAA;AAAA,OACpF;AAAA,IACF;AACA,IAAA,MAAM,EAAE,QAAA,EAAU,YAAA,EAAa,GAAI,QAAA;AACnC,IAAA,IAAI,QAAA,KAAa,MAAM,aAAA,EAAe;AACpC,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,QAAQ,KAAA,CAAM,KAAK,QAAQ,QAAQ,CAAA,sBAAA,EAAyB,MAAM,aAAa,CAAA;AAAA,OACzF;AAAA,IACF;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,SAAA,CAAU,sBAAA;AAAA,MACnC,KAAA,CAAM,KAAA;AAAA,MACN,KAAA,CAAM,KAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,MAAM,OAAA,GAAU,MAAM,GAAA,CAAI,KAAA,CAAM,QAAQ,gBAAA,EAAkB;AAAA,MACxD,YAAA;AAAA,MACA,EAAE,UAAU,QAAA;AAAS,KACtB,CAAA;AACD,IAAA,MAAM,eAAe,QAAA,CAAS,OAAO,CAAA,GAAI,OAAA,CAAQ,OAAO,CAAA,GAAI,MAAA;AAC5D,IAAA,IAAI,CAAC,QAAA,CAAS,YAAY,KAAK,YAAA,CAAa,OAAO,MAAM,YAAA,EAAc;AACrE,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,SAAS,KAAA,CAAM,KAAK,kCAAkC,KAAA,CAAM,KAAK,0CAA0C,YAAY,CAAA,wBAAA;AAAA,OACjI;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAA,CAAY,MAAM,KAAA,EAAM,EAAG,IAAA;AAAA,MAC/B,CAAC,IAAA,KACC,IAAA,CAAK,WAAA,KAAgB,YAAA,IACrB,KAAK,MAAA,KAAW,OAAA,IAChB,IAAA,CAAK,OAAA,KAAY,KAAA,CAAM;AAAA,KAC3B,EAAG,QAAQ,UAAU,CAAA;AACrB,IAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,iBAAiB,OAAA,EAAS,QAAQ,MAAM,MAAA,EAAW;AACrF,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EACE,CAAA,YAAA,EAAe,OAAA,CAAQ,QAAQ,CAAA,0BAAA,EAA6B,YAAY,CAAA,iBAAA,EAClE,KAAA,CAAM,OAAO,CAAA,EAAA,EAAK,OAAA,CAAQ,WAAW,CAAA,4DAAA;AAAA,OAC/C;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EACE,CAAA,EAAG,sBAAA,CAAuB,cAAc,CAAC,SAAS,SAAS,CAAA,QAAA,EAAW,OAAA,CAAQ,WAAW,CAAA,OAAA,EACjF,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,QAAQ,CAAA,kCAAA,EAAqC,KAAA,CAAM,KAAK,CAAA,cAAA,EACpE,OAAA,CAAQ,QAAQ,CAAA,gBAAA,EACtB,KAAA,CAAM,OAAO,CAAA,gBAAA,EAAmB,QAAQ,CAAA;AAAA,KACrD;AAAA,EACF;AAIA,EAAA,eAAe,eAAA,CACb,OACA,KAAA,EACwE;AACxE,IAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS,QAAO,GAAI,KAAA;AAEhD,IAAA,MAAM,IAAA,EAAK;AACX,IAAA,MAAM,SAAS,MAAM,GAAA,CAAI,MAAA,EAAQ,QAAA,EAAU,EAAE,CAAA;AAC7C,IAAA,MAAM,UAAU,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,CAAO,UAAU,CAAA,GAAI,MAAA;AACxD,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,QAAQ,MAAM,CAAA;AACnD,IAAA,IAAI,YAAY,QAAA,EAAU;AACxB,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,CAAA,OAAA,EAAU,SAAS,CAAA,cAAA,EAAiB,MAAA,CAAO,OAAA,IAAW,SAAS,CAAC,CAAA,WAAA,EAAc,QAAQ,CAAA,EAAA,EAAK,OAAA,CAAQ,WAAW,CAAA,CAAA;AAAA,OACxH;AAAA,IACF;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS;AAAA,MACvC,YAAA,EAAc,cAAA;AAAA,MACd,QAAA,EAAU,OAAA;AAAA,MACV,YAAY,KAAA,CAAM;AAAA,KACnB,CAAA;AACD,IAAA,IAAI,CAAC,QAAA,CAAS,KAAK,KAAK,KAAA,CAAM,WAAW,MAAM,oBAAA,EAAsB;AACnE,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,CAAA,mDAAA,EAAsD,KAAA,CAAM,KAAK,CAAA;AAAA,OAC3E;AAAA,IACF;AACA,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,CAAS,MAAA,EAAQ,MAAM,KAAA,EAAO,aAAA,EAAe,EAAE,CAAA;AACtE,IAAA,MAAM,WAAW,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,CAAS,UAAU,CAAA,GAAI,MAAA;AAC7D,IAAA,IAAI,QAAA,KAAa,MAAM,aAAA,EAAe;AACpC,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EAAQ,CAAA,MAAA,EAAS,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,OAAO,QAAQ,CAAC,CAAA,sBAAA,EAAyB,KAAA,CAAM,aAAa,CAAA;AAAA,OAClG;AAAA,IACF;AAGA,IAAA,IAAI,UAAA,GAAa,IAAA;AACjB,IAAA,IAAI;AACF,MAAA,UAAA,GACG,MAAM,QAAA,CAAS,MAAA,EAAQ,KAAA,CAAM,OAAO,oBAAA,EAAsB;AAAA,QACzD,YAAY,KAAA,CAAM;AAAA,OACnB,CAAA,KAAO,IAAA;AAAA,IACZ,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,CAAC,oCAAA,CAAqC,IAAA,CAAK,kBAAkB,GAAG,CAAC,GAAG,MAAM,GAAA;AAAA,IAChF;AACA,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,QAAQ,CAAA,MAAA,EAAS,KAAA,CAAM,KAAK,CAAA,sCAAA,EAAyC,MAAM,KAAK,CAAA,8DAAA;AAAA,OAClF;AAAA,IACF;AACA,IAAA,MAAM,MAAA,GAAA,CAAU,MAAM,KAAA,EAAM,EAAG,IAAA;AAAA,MAC7B,CAAC,IAAA,KACC,IAAA,CAAK,WAAA,KAAgB,YAAA,IACrB,KAAK,MAAA,KAAW,OAAA,IAChB,IAAA,CAAK,OAAA,KAAY,KAAA,CAAM;AAAA,KAC3B;AACA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,MAAA;AAAA,QACR,MAAA,EACE,CAAA,YAAA,EAAe,OAAA,CAAQ,QAAQ,CAAA,0BAAA,EAA6B,YAAY,CAAA,iBAAA,EAClE,KAAA,CAAM,OAAO,CAAA,EAAA,EAAK,OAAA,CAAQ,WAAW,CAAA,2CAAA;AAAA,OAC/C;AAAA,IACF;AACA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,MAAA;AAAA,MACR,MAAA,EACE,GAAG,sBAAA,CAAuB,cAAc,CAAC,CAAA,MAAA,EAAS,SAAS,CAAA,QAAA,EAAW,QAAQ,CAAA,QAAA,EACrE,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,QAAQ,6BAA6B,KAAA,CAAM,KAAK,iBAC7D,OAAA,CAAQ,QAAQ,CAAA,gBAAA,EAAmB,KAAA,CAAM,OAAO,CAAA;AAAA,KACnE;AAAA,EACF;AAIA,EAAA,eAAe,aAAA,GAAwC;AACrD,IAAA,MAAM,SAAA,GAAY,MAAM,WAAA,EAAY;AACpC,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,EAAO;AAC/B,IAAA,IAAI,SAAA;AACJ,IAAA,MAAM,QAAQ,MAAM;AAClB,MAAA,SAAA,KAAe,cACZ,SAAA,EAAU,CACV,KAAK,CAAC,QAAA,KAAa,SAAS,KAAK,CAAA;AACpC,MAAA,OAAO,SAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC5B,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,UACV,WAAA,CAAY,KAAA,EAAO,KAAK,CAAA,CAAE,KAAA,CAAM,CAAC,GAAA,MAAkB;AAAA,UACjD,MAAA,EAAQ,MAAA;AAAA,UACR,MAAA,EAAQ,CAAA,0BAAA,EAA6B,iBAAA,CAAkB,GAAG,CAAC,CAAA;AAAA,SAC7D,CAAE;AAAA;AACJ,KACF;AACA,IAAA,MAAM,SAAS,OAAA,CAAQ,IAAA,CAAK,CAAC,MAAA,KAAW,MAAA,CAAO,WAAW,MAAM,CAAA;AAChE,IAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,CAAQ,CAAC,OAAO,KAAA,KAAU;AAC/C,MAAA,MAAM,MAAA,GAAS,QAAQ,KAAK,CAAA;AAC5B,MAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,MAAA,SAAe,EAAC;AAChD,MAAA,OAAO,CAAC,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,aAAA,CAAc,KAAK,CAAC,CAAA,EAAA,EAAK,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAAA,IAC3F,CAAC,CAAA;AACD,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,SAAS,MAAA,GAAS,MAAA;AAAA,MAC1B,MAAA,EAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA;AAAA,MACzB,UAAA,EAAY,MAAA,CAAO,GAAA,CAAI,CAAC,OAAO,KAAA,MAAW;AAAA,QACxC,IAAA,EAAM,cAAc,KAAK,CAAA;AAAA,QACzB,MAAA,EAAS,OAAA,CAAQ,KAAK,CAAA,CAA+B;AAAA,OACvD,CAAE,CAAA;AAAA,MACF,SAAA;AAAA,MACA,UAAA,EAAY,KAAA,CAAM,WAAA,EAAY,GAAI;AAAA,KACpC;AAAA,EACF;AAQA,EAAA,MAAM,eAAA,GAAkB,GAAA;AACxB,EAAA,IAAI,YAAA;AACJ,EAAA,IAAI,cAAA;AAEJ,EAAA,eAAe,MAAA,GAAiC;AAC9C,IAAA,MAAM,GAAA,GAAM,MAAM,WAAA,EAAY;AAC9B,IAAA,IAAI,YAAA,IAAgB,GAAA,GAAM,YAAA,CAAa,EAAA,GAAK,eAAA,EAAiB;AAC3D,MAAA,OAAO,YAAA,CAAa,KAAA;AAAA,IACtB;AACA,IAAA,IAAI,gBAAgB,OAAO,cAAA;AAE3B,IAAA,cAAA,GAAiB,aAAA,EAAc,CAC5B,IAAA,CAAK,CAAC,KAAA,KAAU;AACf,MAAA,YAAA,GAAe,EAAE,EAAA,EAAI,KAAA,CAAM,WAAA,IAAe,KAAA,EAAM;AAChD,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA,CACA,OAAA,CAAQ,MAAM;AACb,MAAA,cAAA,GAAiB,MAAA;AAAA,IACnB,CAAC,CAAA;AACH,IAAA,OAAO,cAAA;AAAA,EACT;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,IAAM,iBAAA,GAAoB;AAAA,EACxB,CAAC,WAAW,eAAe,CAAA;AAAA,EAC3B,CAAC,4BAA4B,4BAA4B;AAC3D,CAAA;AAEA,IAAM,cAAA,uBAA0C,GAAA,CAAI;AAAA,EAClD,6CAAA;AAAA,EACA;AACF,CAAC,CAAA;AAKD,SAAS,SACP,MAAA,EAC0E;AAC1E,EAAA,MAAM,QAAQ,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA;AACnD,EAAA,IAAI,CAAC,QAAA,CAAS,KAAK,CAAA,EAAG,OAAO,MAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAO,CAAA;AAC3B,EAAA,IAAI,OAAO,UAAU,QAAA,IAAY,CAAC,eAAe,GAAA,CAAI,KAAK,GAAG,OAAO,MAAA;AACpE,EAAA,MAAM,IAAA,GAAO,MAAM,MAAM,CAAA;AACzB,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,IAAK,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,EAAU,OAAO,MAAA;AAChE,EAAA,MAAM,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,CAAC,GAAG,QAAQ,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,MAAM,EAAE,CAAA;AACzB,EAAA,OAAO,KAAA,CAAM,MAAA,IAAU,EAAA,IAAM,KAAA,CAAM,EAAE,CAAA,KAAM,CAAA,IAAK,QAAA,KAAa,MAAA,GACzD,EAAE,QAAA,EAAU,YAAA,EAAc,OAAM,GAChC,MAAA;AACN;AAGA,IAAM,GAAA,GAAM,CAAC,MAAA,EAAgB,MAAA,EAAgB,WAC3C,OAAA,CAAQ,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,iBAAiB,CAAA;AAGnD,eAAe,QAAA,CACb,MAAA,EACA,SAAA,EACA,MAAA,EACA,IAAA,EACkB;AAClB,EAAA,MAAM,MAAA,GAAS,MAAM,GAAA,CAAI,MAAA,EAAQ,OAAA,EAAS;AAAA,IACxC,YAAA,EAAc,eAAA;AAAA,IACd,QAAA,EAAU,OAAA;AAAA,IACV,UAAA,EAAY,SAAA;AAAA,IACZ,WAAA,EAAa,MAAA;AAAA,IACb,WAAA,EAAa,OAAO,IAAA,CAAK,IAAA,CAAK,UAAU,IAAI,CAAC,CAAA,CAAE,QAAA,CAAS,QAAQ;AAAA,GACjE,CAAA;AACD,EAAA,MAAM,QAAQ,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,CAAO,QAAQ,CAAA,GAAI,MAAA;AACpD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,EAAG;AACzB,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,8BAAA;AAAA,MACA,aAAa,MAAM,CAAA,mBAAA;AAAA,KACrB;AAAA,EACF;AACA,EAAA,OAAO,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,KAAiB,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AACnE;AAGA,IAAM,oBAAA,GAAuB,kCAAA;AAM7B,eAAe,iBACb,MAAA,EACkB;AAElB,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA;AAIvB,EAAA,IAAI;AACF,IAAA,MAAM,QAAQ,EAAE,MAAA,EAAQ,kBAAkB,MAAA,EAAQ,IAAI,CAAA;AACtD,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;ACvXO,SAAS,iBAAiB,OAAA,EAAqC;AACpE,EAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,IAAA,CAAK,OAAO,CAAA;AAC3C,EAAA,IAAI,CAAC,KAAA,GAAQ,CAAC,CAAA,EAAG,OAAO,MAAA;AACxB,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AAC/B,EAAA,OAAO,OAAO,aAAA,CAAc,OAAO,CAAA,IAAK,OAAA,GAAU,IAAI,OAAA,GAAU,MAAA;AAClE;AAGA,SAAS,eAAA,CAAgB,MAAA,EAAgB,OAAA,GAAkB,cAAA,EAAuB;AAChF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,OAAA;AAAA,IACJ,IAAA,EAAM,sBAAA;AAAA,IACN,gBAAgB,EAAE,IAAA,EAAM,SAAS,MAAA,EAAQ,KAAA,EAAO,UAAU,EAAA,EAAG;AAAA,IAC7D,OAAA,EAAS;AAAA,MACP,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,MAAM,CAAA;AAAE;AAC5B,GACF;AACF;AASO,SAAS,uBAAA,CACd,MAAA,EACA,SAAA,EACA,OAAA,EACc;AACd,EAAA,OAAO,kBAAA,CAAmB;AAAA,IACxB,KAAA,EAAO,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA;AAAA,IACtC,SAAA,EAAW,KAAK,MAAA,EAAQ,SAAA,KAAc,SAAY,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,MAAS;AAAA,GACrF,CAAA;AACH;AAWO,SAAS,4BAAA,CACd,MAAA,EACA,gBAAA,EACA,OAAA,EACwB;AACxB,EAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,MAAA,EAAQ,OAAO,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,oBAAoB,gBAAgB,CAAA;AACpD,EAAA,OAAO,kBAAA,CAAmB;AAAA,IACxB,OAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA,EAAW,KAAK,MAAM;AAAA,GACvB,CAAA,CAAE,MAAA,CAAO,aAAa,CAAA;AACzB;AC1CO,IAAM,kCAAA,GAAqC,GAAA;AAK3C,IAAM,oBAAA,GAAuB,GAAA;AAoBpC,SAAS,cAAA,CAAe,UAAkB,YAAA,EAAyC;AACjF,EAAA,MAAM,OAAA,GAAU,OAAO,gBAAgB,CAAA,CAAE,IAAA;AAAA,IACvC,CAAC,GAAA,KAAQ,GAAA,CAAI,oBAAA,CAAqB,UAAU,YAAY,CAAA;AAAA,IACxD,CAAC,KAAA,KAAmB;AAClB,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,gBAAA;AAAA,QACA,mNAAA;AAAA,QAGA,EAAE,KAAA;AAAM,OACV;AAAA,IACF;AAAA,GACF;AAGA,EAAA,OAAA,CAAQ,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AAEtB,EAAA,OAAO,YAAY;AACjB,IAAA,MAAM,SAAS,MAAM,OAAA;AACrB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,8BAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAQ,MAAM,MAAA,EAAO;AAAA,EACvB,CAAA;AACF;AASA,SAAS,uBAAuB,GAAA,EAA8B;AAC5D,EAAA,IACE,GAAA,YAAe,eACf,GAAA,CAAI,UAAA,KAAe,OACnB,OAAO,GAAA,CAAI,kBAAkB,QAAA,EAC7B;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,eAAe,GAAA,CAAI,aAAA;AAAA,MACnB,GAAI,IAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM,GAAI;AAAC,KACxD;AAAA,EACF;AACA,EAAA,MAAM,GAAA;AACR;AAOA,SAAS,sBAAA,CAAuB,KAAc,OAAA,EAAkC;AAC9E,EAAA,IACE,GAAA,YAAe,WAAA,IACf,GAAA,CAAI,UAAA,KAAe,OACnB,OAAO,GAAA,CAAI,WAAA,KAAgB,QAAA,IAC3B,GAAA,CAAI,WAAA,KAAgB,EAAA,IACpB,CAAC,IAAI,WAAA,EACL;AACA,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,aAAa,GAAA,CAAI,WAAA;AAAA,MACjB,WAAA,EAAa,EAAA;AAAA,MACb,OAAA,EAAS,IAAI,OAAA,IAAW,OAAA;AAAA,MACxB,GAAI,IAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,GAAA,CAAI,KAAA,EAAM,GAAI;AAAC,KACxD;AAAA,EACF;AACA,EAAA,MAAM,GAAA;AACR;AAOO,SAAS,+BACd,OAAA,EACoB;AACpB,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AACrB,EAAA,IAAI,iBAAA;AACJ,EAAA,IAAI,IAAA,CAAK,SAAS,QAAA,EAAU;AAC1B,IAAA,iBAAA,GAAoB,YAAY;AAE9B,MAAA,MAAM,UAAU,EAAE,aAAA,EAAe,CAAA,OAAA,EAAU,IAAA,CAAK,KAAK,CAAA,CAAA,EAAG;AACxD,MAAA,OAAO,EAAE,MAAA,EAAQ,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,WAAW,OAAA,EAAQ;AAAA,IAChE,CAAA;AAAA,EACF,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,KAAS,KAAA,EAAO;AAC9B,IAAA,iBAAA,GAAoB,cAAA,CAAe,IAAA,CAAK,QAAA,EAAU,IAAA,CAAK,YAAY,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,MAAA,GAAS,IAAI,qBAAA,CAAsB;AAAA,IACvC,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,SAAA,EAAW,kCAAA;AAAA,IACX,GAAI,iBAAA,GAAoB,EAAE,iBAAA,KAAsB;AAAC,GAClD,CAAA;AACD,EAAA,MAAM,eAAA,GAAkB,IAAI,qBAAA,CAAsB;AAAA,IAChD,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,SAAA,EAAW,oBAAA;AAAA,IACX,GAAI,iBAAA,GAAoB,EAAE,iBAAA,KAAsB;AAAC,GAClD,CAAA;AAED,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,QAAA,EAAU,CAAA,OAAA,EAAU,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA,CAAE,MAAM,CAAA,OAAA,EAAU,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA;AAAA,IAClE,IAAA,GAA2B;AACzB,MAAA,IAAI,MAAA,GAAS,KAAA;AACb,MAAA,MAAM,KAAA,GAAQ,OAAU,IAAA,KAAuC;AAC7D,QAAA,IAAI;AACF,UAAA,OAAO,MAAM,IAAA,EAAK;AAAA,QACpB,SAAS,GAAA,EAAK;AAIZ,UAAA,MAAA,GAAS,IAAA;AACT,UAAA,MAAM,GAAA;AAAA,QACR;AAAA,MACF,CAAA;AACA,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,CAAC,OAAA,EAAS,YAAA,KAChB,KAAA,CAAM,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,EAAS,YAAY,CAAA,CAAE,KAAA,CAAM,sBAAsB,CAAC,CAAA;AAAA,QAChF,MAAA,EAAQ,CAAC,OAAA,EAAS,YAAA,KAChB,KAAA;AAAA,UAAM,MACJ,MAAA,CACG,MAAA,CAAO,OAAA,EAAS,YAAY,CAAA,CAC5B,KAAA,CAAM,CAAC,GAAA,KAAiB,sBAAA,CAAuB,GAAA,EAAK,YAAA,CAAa,OAAO,CAAC;AAAA,SAC9E;AAAA,QACF,iBAAiB,MAAM;AAAA,OACzB;AAAA,IACF,CAAA;AAAA,IACA,WAAW,MAAM,YAAA,CAAa,eAAA,CAAgB,YAAA,IAAgB,oBAAoB;AAAA,GACpF;AACF;AAIA,SAAS,YAAA,CAAgB,MAAkB,EAAA,EAAwB;AACjE,EAAA,IAAI,KAAA;AACJ,EAAA,MAAM,QAAA,GAAW,IAAI,OAAA,CAAe,CAAC,GAAG,MAAA,KAAW;AACjD,IAAA,KAAA,GAAQ,UAAA;AAAA,MACN,MACE,MAAA;AAAA,QACE,IAAI,aAAA;AAAA,UACF,8BAAA;AAAA,UACA,CAAA,4DAAA,EAA+D,KAAK,GAAI,CAAA,EAAA;AAAA;AAC1E,OACF;AAAA,MACF;AAAA,KACF;AACA,IAAA,KAAA,CAAM,KAAA,EAAM;AAAA,EACd,CAAC,CAAA;AACD,EAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,IAAA,EAAM,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,YAAA,CAAa,KAAK,CAAC,CAAA;AACzE;AC7NO,SAAS,6BAAA,CACd,MAAA,EACA,OAAA,EACA,gBAAA,EACoB;AACpB,EAAA,MAAM,QAAQ,MAA+D;AAC3E,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,MAAM,QAAQ,CAAI,OAAA,KAChB,OAAA,CAAQ,KAAA,CAAM,CAAC,GAAA,KAAiB;AAC9B,MAAA,IAAI,gBAAA,CAAiB,GAAG,CAAA,EAAG,MAAA,GAAS,IAAA;AACpC,MAAA,MAAM,GAAA;AAAA,IACR,CAAC,CAAA;AAIH,IAAA,MAAM,MAAA,GAAS;AAAA,MACb,OAAA,EAAS,OAAO,OAAA,CAAQ,OAAA;AAAA,MACxB,cAAc,CAAC,IAAA,KACb,MAAM,MAAA,CAAO,YAAA,CAAa,IAAI,CAAC,CAAA;AAAA,MACjC,iBAAiB,CAAC,IAAA,KAChB,MAAM,MAAA,CAAO,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,MACpC,eAAe,CAAC,IAAA,KACd,MAAM,MAAA,CAAO,aAAA,CAAc,IAAI,CAAC,CAAA;AAAA,MAClC,iBAAiB,CAAC,IAAA,KAChB,MAAM,MAAA,CAAO,eAAA,CAAgB,IAAI,CAAC,CAAA;AAAA,MACpC,2BAA2B,CACzB,IAAA,KACG,MAAM,MAAA,CAAO,yBAAA,CAA0B,IAAI,CAAC,CAAA;AAAA,MACjD,SAAS,CAAC,IAAA,KACR,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAC;AAAA,KAC9B;AAIA,IAAA,MAAM,WAAA,GAAc,sBAAA,CAAuB,IAAI,eAAA,EAAgB,EAAG;AAAA,MAChE,MAAA,EAAQ,uBAAuB,MAAA,EAAQ;AAAA,QACrC,qBAAA,EAAuB;AAAA,OACxB,CAAA;AAAA,MACD,QAAA,EAAU;AAAA,KACX,CAAA;AAED,IAAA,OAAO,EAAE,WAAA,EAAa,MAAA,EAAQ,MAAM,MAAA,EAAO;AAAA,EAC7C,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,QAAA,EAAU,oBAAA;AAAA,IACV,IAAA,GAA2B;AACzB,MAAA,MAAM,EAAE,WAAA,EAAa,MAAA,EAAO,GAAI,KAAA,EAAM;AACtC,MAAA,OAAO;AAAA,QACL,QAAQ,CAAC,OAAA,EAAS,iBAAiB,WAAA,CAAY,MAAA,CAAO,SAAS,YAAY,CAAA;AAAA,QAC3E,QAAQ,CAAC,OAAA,EAAS,iBAAiB,WAAA,CAAY,MAAA,CAAO,SAAS,YAAY,CAAA;AAAA,QAC3E,eAAA,EAAiB;AAAA,OACnB;AAAA,IACF;AAAA,GACF;AACF;AC5DO,IAAM,yBAAA,GAA4B,oBAAA;AAQzC,IAAM,0BAAA,GAA6B;AAAA,EACjC,sCAAA;AAAA,EACA,sCAAA;AAAA,EACA;AACF,CAAA;AACO,IAAM,4BAA4B,CAAC,MAAA,KACxC,MAAA,KAAW,MAAA,IACX,2BAA2B,IAAA,CAAK,CAAC,KAAA,KAAU,MAAA,KAAW,SAAS,MAAA,CAAO,UAAA,CAAW,CAAA,EAAG,KAAK,GAAG,CAAC,CAAA;AAQxF,IAAM,wBAAA,GAA6E;AAAA,EACxF,GAAA,EAAK,sCAAA;AAAA,EACL,GAAA,EAAK,sCAAA;AAAA,EACL,IAAA,EAAM;AACR,CAAA;AAMO,IAAM,uBAAA,uBAAmD,GAAA,CAAI;AAAA,EAClE,sBAAA;AAAA,EACA;AACF,CAAC,CAAA;AAQM,IAAM,kBAAA,uBAA8C,GAAA,CAAI;AAAA,EAC7D,yBAAA;AAAA,EACA,0CAAA;AAAA,EACA,qDAAA;AAAA,EACA,6CAAA;AAAA,EACA,0CAAA;AAAA,EACA,gDAAA;AAAA,EACA,yCAAA;AAAA,EACA,yCAAA;AAAA,EACA,6CAAA;AAAA,EACA,wDAAA;AAAA,EACA,sCAAA;AAAA,EACA;AACF,CAAC,CAAA;AAOD,IAAM,2BAAA,uBAAuD,GAAA,CAAI;AAAA,EAC/D,sBAAA;AAAA,EACA,oBAAA;AAAA,EACA,iBAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAC,CAAA;AACM,IAAM,aAAA,GAAgB,CAAC,MAAA,KAC5B,MAAA,KAAW,MAAA,KACV,MAAA,KAAW,mBAAA,IACV,MAAA,CAAO,UAAA,CAAW,qBAAqB,CAAA,IACvC,2BAAA,CAA4B,IAAI,MAAM,CAAA,CAAA;AAQ1C,IAAM,iBAAA,GAAoB,GAAA;AAC1B,IAAM,YAAA,GAAe,iBAAA;AAEd,SAAS,cAAA,CAAe,QAA4B,QAAA,EAA0B;AACnF,EAAA,IAAI,MAAA,KAAW,QAAW,OAAO,QAAA;AACjC,EAAA,MAAM,OAAA,GAAU,OAAO,IAAA,EAAK;AAC5B,EAAA,IAAI,QAAQ,MAAA,KAAW,CAAA,IAAK,OAAA,CAAQ,MAAA,GAAS,mBAAmB,OAAO,QAAA;AACvE,EAAA,OAAO,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA,GAAI,OAAA,GAAU,QAAA;AAChD;AAMO,SAAS,qBAAqB,GAAA,EAAuB;AAC1D,EAAA,OACE,GAAA,YAAe,aAAa,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,YAAa,6BAA6B,CAAA,KAAM,IAAA;AAEhG;AAUO,SAAS,2BAA2B,GAAA,EAAuB;AAChE,EAAA,IACE,GAAA,YAAe,gBAAA,IACf,GAAA,YAAe,YAAA,IACf,eAAe,qCAAA,EACf;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,GAAG,CAAA,CAAE,WAAA,EAAY;AACnD,EAAA,OACE,OAAA,CAAQ,SAAS,cAAc,CAAA,IAC/B,QAAQ,QAAA,CAAS,cAAc,CAAA,IAC/B,OAAA,CAAQ,QAAA,CAAS,WAAW,KAC5B,OAAA,CAAQ,QAAA,CAAS,WAAW,CAAA,IAC5B,OAAA,CAAQ,SAAS,WAAW,CAAA,IAC5B,OAAA,CAAQ,QAAA,CAAS,eAAe,CAAA;AAEpC;;;ACnHO,SAAS,aAAA,CACd,QACA,OAAA,EAQA;AAEA,EAAA,IAAI,aAAA;AAEJ,EAAA,IAAI,IAAA;AAEJ,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAmB;AACrC,EAAA,MAAM,WAAA,GAAc,CAClB,IAAA,EACA,KAAA,KACqB;AACrB,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAiB;AACvC,MAAA,MAAM,EAAA,GAAK,CAAC,IAAA,KAAiB,KAAA,CAAM,OAAO,IAAI,CAAA;AAG9C,MAAA,MAAM,KAAA,GAAQ,eAAA,CAAgB,KAAA,CAAM,OAAA,EAAS,QAAQ,cAAc,CAAA;AACnE,MAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,CAAM,MAAA,KAAW,KAAA,EAAO;AACjD,QAAA,MAAM,KAAA,GACJ,KAAA,CAAM,MAAA,KAAW,KAAA,GAAQ,qCAAA,GAAwC,mBAAA;AACnE,QAAA,KAAA,MAAW,IAAA,IAAQ,CAAC,OAAA,EAAS,OAAO,CAAA,EAAY;AAC9C,UAAA,IAAI,iBAAiB,KAAA,EAAO,KAAA,CAAM,IAAI,CAAC,MAAM,MAAA,EAAW;AACtD,YAAA,MAAM,IAAI,cAAc,gBAAA,EAAkB,CAAA,eAAA,EAAkB,GAAG,IAAI,CAAC,CAAA,QAAA,EAAW,KAAK,CAAA,CAAE,CAAA;AAAA,UACxF;AAAA,QACF;AACA,QAAA,IAAI,KAAA,CAAM,wBAAwB,MAAA,EAAW;AAC3C,UAAA,MAAM,IAAI,aAAA;AAAA,YACR,gBAAA;AAAA,YACA,CAAA,eAAA,EAAkB,EAAA,CAAG,qBAAqB,CAAC,CAAA,6BAAA;AAAA,WAC7C;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AAGL,QAAA,IAAI,CAAC,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3B,UAAA,MAAM,IAAI,aAAA;AAAA,YACR,gBAAA;AAAA,YACA,CAAA,eAAA,EAAkB,EAAA,CAAG,OAAO,CAAC,CAAA,0GAAA;AAAA,WAC/B;AAAA,QACF;AACA,QAAA,IAAI,CAAC,SAAA,CAAU,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3B,UAAA,MAAM,IAAI,aAAA;AAAA,YACR,gBAAA;AAAA,YACA,CAAA,eAAA,EAAkB,EAAA,CAAG,OAAO,CAAC,CAAA,0GAAA;AAAA,WAC/B;AAAA,QACF;AAGA,QAAA,0BAAA,CAA2B,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,KAAK,CAAA;AAGpD,QAAA,IAAA,CACG,KAAA,CAAM,uBAAuB,SAAA,MAAe,SAAA,KAC5C,CAAC,KAAA,CAAM,SAAA,IAAa,CAAC,KAAA,CAAM,YAAA,CAAA,EAC5B;AACA,UAAA,MAAM,IAAI,aAAA;AAAA,YACR,gBAAA;AAAA,YACA,0CAA0C,EAAA,CAAG,WAAW,CAAC,CAAA,KAAA,EAAQ,EAAA,CAAG,cAAc,CAAC,CAAA,4BAAA;AAAA,WACrF;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,CAAC,OAAO,SAAA,CAAU,KAAA,CAAM,aAAa,CAAA,IAAK,KAAA,CAAM,gBAAgB,CAAA,EAAG;AACrE,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,gBAAA;AAAA,UACA,CAAA,eAAA,EAAkB,EAAA,CAAG,eAAe,CAAC,CAAA,+BAAA;AAAA,SACvC;AAAA,MACF;AAGA,MAAA,MAAM,aAAa,qBAAA,CAAsB;AAAA,QACvC,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,GAAI,QAAQ,cAAA,KAAmB,MAAA,GAAY,EAAE,cAAA,EAAgB,OAAA,CAAQ,cAAA,EAAe,GAAI,EAAC;AAAA,QACzF,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,GAAI,MAAM,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,KAAA,CAAM,SAAA,EAAU,GAAI,EAAC;AAAA,QACtE,GAAI,MAAM,YAAA,KAAiB,MAAA,GAAY,EAAE,YAAA,EAAc,KAAA,CAAM,YAAA,EAAa,GAAI,EAAC;AAAA,QAC/E,aAAa,OAAA,CAAQ,WAAA;AAAA,QACrB,GAAI,QAAQ,YAAA,KAAiB,MAAA,GAAY,EAAE,YAAA,EAAc,OAAA,CAAQ,YAAA,EAAa,GAAI,EAAC;AAAA,QACnF,GAAI,QAAQ,+BAAA,KAAoC,MAAA,GAC5C,EAAE,+BAAA,EAAiC,OAAA,CAAQ,+BAAA,EAAgC,GAC3E,EAAC;AAAA;AAAA,QAEL,kBAAA,EAAoB;AAAA,OACrB,CAAA;AACD,MAAA,MAAM,UAAU,UAAA,CAAW,OAAA;AAE3B,MAAA,IAAI,IAAA,KAAS,MAAA,IAAa,UAAA,CAAW,IAAA,KAAS,IAAA,EAAM;AAClD,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,gBAAA;AAAA,UACA,6BAA6B,IAAI,CAAA,KAAA,EAAQ,UAAA,CAAW,IAAI,uCAAuC,IAAI,CAAA,QAAA;AAAA,SACrG;AAAA,MACF;AACA,MAAA,IAAA,GAAO,UAAA,CAAW,IAAA;AAElB,MAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAClB,OAAA,CAAQ,WAAW,KAAA,GAAQ,KAAA,CAAM,aAAY,GAAI,KAAA;AACnD,MAAA,MAAM,GAAA,GAAM,CAAA,EAAG,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI,UAAA,CAAW,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA,EAAI,UAAA,CAAW,KAAA,CAAM,KAAK,CAAC,CAAA,CAAA;AAClF,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAG,CAAA,EAAG;AACjB,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,gBAAA;AAAA,UACA,kBAAkB,EAAA,CAAG,SAAS,CAAC,CAAA,iEAAA,EAAoE,MAAM,OAAO,CAAA;AAAA,SAClH;AAAA,MACF;AACA,MAAA,IAAA,CAAK,IAAI,GAAG,CAAA;AACZ,MAAA,MAAM,QAAA,GAAW;AAAA,QACf,GAAA;AAAA,QACA,MAAM,mBAAA,IAAuB,SAAA;AAAA,QAC7B,KAAA,CAAM,SAAA;AAAA,QACN,KAAA,CAAM,YAAA;AAAA,QACN,KAAA,CAAM,aAAA;AAAA,QACN,KAAA,CAAM;AAAA,OACR,CAAE,KAAK,GAAG,CAAA;AACV,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,GAAA,CAAI,QAAQ,CAAA;AACnC,MAAA,IAAI,QAAA,KAAa,QAAW,OAAO,QAAA;AAInC,MAAA,IAAI,OAAA;AACJ,MAAA,IAAI,OAAA,CAAQ,WAAA,CAAY,IAAA,KAAS,OAAA,EAAS;AACxC,QAAA,uBAAA,CAAwB,KAAA,CAAM,MAAA,EAAQ,OAAA,CAAQ,WAAA,CAAY,gBAAgB,CAAA;AAC1E,QAAA,IAAI,MAAA;AACJ,QAAA,IAAI;AACF,UAAA,MAAA,GAAS,4BAAA;AAAA,YACP,KAAA,CAAM,MAAA;AAAA,YACN,QAAQ,WAAA,CAAY;AAAA,WACtB;AAAA,QACF,SAAS,KAAA,EAAO;AACd,UAAA,MAAM,IAAI,aAAA;AAAA,YACR,gBAAA;AAAA,YACA,8IAAA;AAAA,YAEA,EAAE,KAAA;AAAM,WACV;AAAA,QACF;AACA,QAAA,OAAA,GAAU,6BAAA,CAA8B,MAAA,EAAQ,KAAA,CAAM,OAAA,EAAS,0BAA0B,CAAA;AAAA,MAC3F,CAAA,MAAO;AACL,QAAA,aAAA,KAAkB,8BAAA,CAA+B;AAAA,UAC/C,GAAA,EAAK,QAAQ,WAAA,CAAY,GAAA;AAAA,UACzB,IAAA,EAAM,QAAQ,WAAA,CAAY;AAAA,SAC3B,CAAA;AACD,QAAA,OAAA,GAAU,aAAA;AAAA,MACZ;AAKA,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,SAAA,EAAW,WAAA,CAAY,KAAA,CAAM,MAAM,CAAA;AAAA,QACnC;AAAA,OACF;AACA,MAAA,MAAM,KAAA,GACJ,OAAA,CAAQ,MAAA,KAAW,KAAA,GACf,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,OAAO,KAAA,CAAM,KAAA,EAAM,GAC1E,OAAA,CAAQ,MAAA,KAAW,MAAA,GACjB,EAAE,GAAG,MAAM,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS,KAAA,EAAO,KAAA,CAAM,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,OAAM,GAC3E;AAAA,QACE,GAAG,IAAA;AAAA,QACH,MAAA,EAAQ,KAAA;AAAA,QACR,OAAA;AAAA,QACA,MAAA,EAAQ,MAAM,mBAAA,IAAuB,SAAA;AAAA,QACrC,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,YAAA,EAAc,uBAAA;AAAA,UACZ,KAAA,CAAM,MAAA;AAAA,UACN,iBAAA;AAAA,UACA,OAAA,CAAQ;AAAA;AACV,OACF;AACR,MAAA,KAAA,CAAM,GAAA,CAAI,UAAU,KAAK,CAAA;AACzB,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAAA,EACH,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,WAAA;AAAA,IAAY,MAAA;AAAA,IAAQ,CAAC,KAAA,EAAO,IAAA,KACzC,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,CAAA,GAAM,CAAA,QAAA,EAAW,KAAK,CAAA,EAAA,EAAK,IAAI,CAAA,CAAA;AAAA,GAC/D;AACA,EAAA,MAAM,iBAAiB,IAAI,GAAA;AAAA,IACzB,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,cAAA,IAAkB,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,EAAA,EAAI,IAAI,CAAA,KAAM;AAC/D,MAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,QAAA,MAAM,IAAI,aAAA,CAAc,gBAAA,EAAkB,CAAA,+BAAA,EAAkC,EAAE,CAAA,UAAA,CAAY,CAAA;AAAA,MAC5F;AACA,MAAA,OAAO,CAAC,EAAA,EAAI,WAAA,CAAY,IAAA,EAAM,CAAC,KAAA,EAAO,IAAA,KAAS,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,IAAI,GAAG,CAAC,CAAA;AAAA,IAC5F,CAAC;AAAA,GACH;AACA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,cAAA;AAAA,IACA,IAAA,EAAM,CAAC,GAAG,KAAA,CAAM,QAAQ,CAAA;AAAA,IACxB,cAAA,EAAgB,IAAA;AAAA,IAChB;AAAA,GACF;AACF;AAMO,SAAS,aAAA,CAAc,OAAc,MAAA,EAAwB;AAClE,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,cAAA;AAChC,EAAA,OAAO,SAAA,KAAc,MAAA,IAAa,WAAA,CAAY,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,KAAA,EAAO,SAAA,CAAU,OAAO,CAAA,GACvF,SAAA,CAAU,MAAA,GACV,MAAA;AACN;AClOO,IAAM,eAAA,GAAkB,UAAA;AAQxB,IAAM,oBAAA,GAAuB,2BAAA;AAG7B,IAAM,YAAA,GAAe,EAAE,IAAA,EAAM,+BAAA,EAAiC,SAAS,GAAA,EAAI;AAG3E,IAAM,WAAA,GAAc;AAAA,EACzB,mBAAA,EAAqB;AAAA,IACnB,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,SAAA,EAAU;AAAA,IAClC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,IACjC,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,SAAA,EAAU;AAAA,IACrC,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,SAAA,EAAU;AAAA,IACjC,EAAE,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,SAAA,EAAU;AAAA,IAClC,EAAE,IAAA,EAAM,eAAA,EAAiB,IAAA,EAAM,QAAA,EAAS;AAAA,IACxC,EAAE,IAAA,EAAM,aAAA,EAAe,IAAA,EAAM,SAAA,EAAU;AAAA,IACvC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,EAAM,SAAA,EAAU;AAAA,IACnC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,QAAA,EAAS;AAAA,IACrC,EAAE,IAAA,EAAM,YAAA,EAAc,IAAA,EAAM,QAAA;AAAS;AAEzC,CAAA;AAGA,IAAM,MAAA,GAAS,4CAAA;AAGf,IAAM,iBAAA,GAAoB;AAAA,EACxB,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,CAAC,QAAQ,CAAA;AAAA,EACnB,UAAA,EAAY;AAAA,IACV,MAAA,EAAQ;AAAA,MACN,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,QAAA,EAAU,CAAC,SAAA,EAAW,OAAA,EAAS,WAAW,CAAA;AAAA,QAC1C,UAAA,EAAY;AAAA,UACV,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA;AAAA,UAE1B,KAAA,EAAO;AAAA,YACL,IAAA,EAAM,QAAA;AAAA,YACN,UAAU,WAAA,CAAY,mBAAA,CAAoB,IAAI,CAAC,KAAA,KAAU,MAAM,IAAI,CAAA;AAAA,YACnE,YAAY,MAAA,CAAO,WAAA;AAAA,cACjB,WAAA,CAAY,mBAAA,CAAoB,GAAA,CAAI,CAAC,KAAA,KAAU,CAAC,KAAA,CAAM,IAAA,EAAM,EAAE,IAAA,EAAM,QAAA,EAAU,CAAC;AAAA;AACjF,WACF;AAAA,UACA,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA;AAAS;AAC9B;AACF;AACF;AAEJ,CAAA;AAGA,IAAM,iBAAA,GAAoB,IAAA;AA4CnB,SAAS,kBAAkB,OAAA,EAMlB;AACd,EAAA,MAAM,EAAE,gBAAA,EAAkB,MAAA,EAAQ,cAAA,EAAgB,KAAA,EAAO,mBAAkB,GAAI,OAAA;AAC/E,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAUA,oBAAoB,gBAAuB,CAAA;AAAA,EACvD,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,gBAAA;AAAA,MACA,gHAAA;AAAA,MACA,EAAE,KAAA;AAAM,KACV;AAAA,EACF;AACA,EAAA,IAAI,cAAA,KAAmB,OAAA,IAAW,iBAAA,CAAkB,gBAAgB,CAAA,EAAG;AACrE,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,YAAY,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAA6B,KAAA,CAAM,WAAW,KAAK,CAAA;AACpF,EAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,MAAM,SAAS,OAAA,CAAQ,OAAA;AACvB,EAAA,IAAI,SAAA,CAAU,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,KAAA,CAAM,WAAA,EAAY,KAAM,MAAA,CAAO,WAAA,EAAa,CAAA,EAAG;AACjF,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,gBAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAyB;AAE3C,EAAA,eAAe,QAAA,CAAS,KAAA,EAAiB,MAAA,EAAgB,WAAA,EAAwC;AAC/F,IAAA,MAAM,GAAA,GAAM,KAAK,KAAA,CAAM,KAAA,CAAM,KAAI,CAAE,OAAA,KAAY,GAAI,CAAA;AACnD,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,KAAA,CAAM,OAAA;AAC1B,IAAA,MAAM,GAAA,GAAM;AAAA,MACV,OAAA;AAAA,MACA,KAAA,CAAM,MAAM,WAAA,EAAY;AAAA,MACxB,KAAA,CAAM,MAAM,WAAA,EAAY;AAAA,MACxB,MAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AACV,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,GAAA,CAAI,GAAG,CAAA;AAG5B,IAAA,IAAI,MAAA,KAAW,UAAa,MAAA,CAAO,MAAA,CAAO,MAAM,UAAU,CAAA,GAAI,OAAO,iBAAA,EAAmB;AACtF,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,MAAM,UAAA,GAAa,MAAM,CAAA,GAAI,iBAAA;AAC7B,IAAA,MAAM,KAAA,GAAQ;AAAA,MACZ,MAAA;AAAA,MACA,KAAA,EAAO,MAAA;AAAA,MACP,WAAW,KAAA,CAAM,KAAA;AAAA,MACjB,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,MAAA;AAAA,MACA,aAAA,EAAe,oBAAA;AAAA,MACf,WAAA;AAAA;AAAA,MAEA,SAAS,CAAA,EAAA,EAAK,WAAA,CAAY,EAAE,CAAA,CAAE,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAAA,MAC7C,UAAA,EAAY,OAAO,GAAG,CAAA;AAAA,MACtB,UAAA,EAAY,OAAO,UAAU;AAAA,KAC/B;AACA,IAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,aAAA,CAAc;AAAA,MAC5C,MAAA,EAAQ,EAAE,GAAG,YAAA,EAAc,OAAA,EAAQ;AAAA,MACnC,KAAA,EAAO,WAAA;AAAA,MACP,WAAA,EAAa,qBAAA;AAAA,MACb,OAAA,EAAS;AAAA,QACP,GAAG,KAAA;AAAA,QACH,MAAA,EAAQ,OAAO,MAAM,CAAA;AAAA,QACrB,UAAA,EAAY,OAAO,GAAG,CAAA;AAAA,QACtB,UAAA,EAAY,OAAO,UAAU;AAAA;AAC/B,KACD,CAAA;AACD,IAAA,MAAM,SAAsB,EAAE,OAAA,EAAS,OAAO,OAAO,CAAA,EAAG,OAAO,SAAA,EAAU;AACzE,IAAA,KAAA,CAAM,OAAO,GAAG,CAAA;AAChB,IAAA,IAAI,KAAA,CAAM,QAAQ,iBAAA,EAAmB;AACnC,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,EAAK,CAAE,MAAK,CAAE,KAAA;AACnC,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AAAA,IAC/C;AACA,IAAA,KAAA,CAAM,GAAA,CAAI,KAAK,MAAM,CAAA;AACrB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,MAAM,aAAA,CAAc,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ;AAC7C,MAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAGhC,MAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,UAAA,EAAY,KAAK,CAAA;AACtD,MAAA,IAAI,WAAA,KAAgB,QAAW,OAAO,MAAA;AACtC,MAAA,MAAM,SAAwB,EAAC;AAC/B,MAAA,KAAA,MAAW,EAAE,KAAA,EAAO,MAAA,EAAO,IAAK,MAAA,EAAQ;AACtC,QAAA,MAAA,CAAO,KAAK,MAAM,QAAA,CAAS,KAAA,EAAO,MAAA,EAAQ,WAAW,CAAC,CAAA;AAAA,MACxD;AACA,MAAA,OAAO,EAAE,CAAC,eAAe,GAAG,EAAE,IAAA,EAAM,EAAE,MAAA,EAAO,EAAG,MAAA,EAAQ,iBAAA,EAAkB,EAAE;AAAA,IAC9E;AAAA,GACF;AACF;AAGO,SAAS,gBAAA,CAAiB,YAAoB,KAAA,EAAiC;AACpF,EAAA,MAAM,YAAY,aAAA,CAAc,EAAE,KAAA,EAAO,QAAA,EAAU,YAAY,CAAA;AAC/D,EAAA,OAAO,cAAc,MAAA,GAAY,MAAA,GAAY,SAAA,CAAU,aAAA,CAAc,SAAS,CAAC,CAAA;AACjF;AClNA,IAAM,SAAS,QAAA,CAAS;AAAA,EACtB,4EAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,mBAAmB,QAAA,CAAS;AAAA,EAChC;AACF,CAAC,CAAA;AAID,IAAM,oBAAA,GAAuB,IAAA;AAE7B,IAAM,gBAAA,GAAmB,MAAA;AACzB,IAAM,iBAAA,GAAoB,OAAA;AAE1B,IAAM,IAAA,GAAO,YAAA;AAiCN,SAAS,gBACd,OAAA,EACwB;AACxB,EAAA,MAAM,OAAA,GAAU,CAAC,GAAA,KAAgB;AAC/B,IAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,IAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAYC,SAAAA,CAAU,KAAK,IAAI,KAAA,GAAQ,MAAA;AAAA,EACjE,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAgB;AAC5B,IAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,IAAA,OAAO,OAAO,UAAU,QAAA,IAAY,IAAA,CAAK,KAAK,KAAK,CAAA,GAAI,MAAA,CAAO,KAAK,CAAA,GAAI,MAAA;AAAA,EACzE,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,OAAO,OAAA,CAAQ,WAAW,MAAM,QAAA,GAAW,OAAA,CAAQ,WAAW,CAAA,GAAI,MAAA;AACpF,EAAA,IAAI,OAAA,CAAQ,QAAQ,CAAA,KAAM,SAAA,EAAW;AACnC,IAAA,MAAM,CAAC,KAAA,EAAO,IAAA,EAAM,EAAE,IAAI,CAAC,OAAA,CAAQ,OAAO,CAAA,EAAG,OAAA,CAAQ,MAAM,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAC,CAAA;AAC3E,IAAA,MAAM,CAAC,KAAA,EAAO,UAAA,EAAY,WAAW,CAAA,GAAI;AAAA,MACvC,KAAK,OAAO,CAAA;AAAA,MACZ,KAAK,YAAY,CAAA;AAAA,MACjB,KAAK,aAAa;AAAA,KACpB;AACA,IAAA,MAAM,KAAA,GAAQ,QAAQ,OAAO,CAAA;AAC7B,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,IAAQ,CAAC,MAAM,KAAA,KAAU,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW,OAAO,MAAA;AACtF,IAAA,IAAI,WAAA,KAAgB,UAAa,OAAO,KAAA,KAAU,YAAY,CAAC,MAAA,CAAO,KAAK,CAAA,EAAG,OAAO,MAAA;AACrF,IAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,IAAA,EAAM,IAAI,KAAA,EAAO,KAAA,EAAO,UAAA,EAAY,WAAA,EAAa,SAAA,EAAU;AAAA,EAChG;AACA,EAAA,IAAI,OAAA,CAAQ,QAAQ,CAAA,KAAM,SAAA,EAAW;AACnC,IAAA,MAAM,CAAC,KAAA,EAAO,KAAA,EAAO,EAAA,EAAI,KAAK,CAAA,GAAI;AAAA,MAChC,QAAQ,OAAO,CAAA;AAAA,MACf,QAAQ,OAAO,CAAA;AAAA,MACf,QAAQ,IAAI,CAAA;AAAA,MACZ,QAAQ,OAAO;AAAA,KACjB;AACA,IAAA,MAAM,CAAC,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAU,UAAU,CAAA,GAAI;AAAA,MAC5C,KAAK,QAAQ,CAAA;AAAA,MACb,KAAK,OAAO,CAAA;AAAA,MACZ,KAAK,UAAU,CAAA;AAAA,MACf,KAAK,YAAY;AAAA,KACnB;AACA,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,KAAA,IAAS,CAAC,EAAA,IAAM,CAAC,KAAA,IAAS,MAAA,KAAW,MAAA,IAAa,KAAA,KAAU,MAAA,EAAW;AACpF,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAI,QAAA,KAAa,MAAA,IAAa,UAAA,KAAe,MAAA,EAAW,OAAO,MAAA;AAC/D,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,SAAA;AAAA,MACR,KAAA;AAAA,MACA,KAAA;AAAA,MACA,EAAA;AAAA,MACA,MAAA;AAAA,MACA,KAAA;AAAA,MACA,QAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAqBA,eAAsB,gBACpB,KAAA,EACsC;AACtC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,SAAQ,GAAI,KAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,UAAA,EAAW;AACzC,EAAA,IAAI,aAAa,OAAA,EAAS;AACxB,IAAA,OAAO,QAAQ,gBAAA,EAAkB,EAAE,SAAS,QAAA,EAAU,eAAA,EAAiB,SAAS,CAAA;AAAA,EAClF;AACA,EAAA,MAAM,YAAY,MAAM,MAAA,CAAO,SAAS,EAAE,QAAA,EAAU,aAAa,CAAA;AACjE,EAAA,MAAM,WAAA,GAAc,cAAA,CAAe,MAAA,CAAO,SAAA,CAAU,SAAS,CAAC,CAAA;AAC9D,EAAA,MAAM,QAAA,GAAW;AAAA,IACf,cAAA,EAAgB,MAAA,CAAO,SAAA,CAAU,MAAM,CAAA;AAAA,IACvC,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB;AAAC,GACrD;AACA,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,KAAW,SAAA,GAAY,OAAA,CAAQ,QAAQ,OAAO,CAAA,GAAI,OAAA,CAAQ,MAAA,EAAQ,OAAO,CAAA;AAChG,EAAA,MAAM,UAAU,CAAC,IAAA,EAAY,KAAA,KAC3B,KAAA,IAAS,UAAU,MAAA,GACf;AAAA,IACE,OAAA,EAAS,SAAA;AAAA,IACT,MAAA,EAAQ,gBAAA;AAAA,IACR,iBAAA,EAAmB,IAAA;AAAA,IACnB,QAAA,EAAU,EAAE,eAAA,EAAiB,IAAA,EAAM,aAAa,MAAA,CAAO,KAAK,CAAA,EAAG,GAAG,QAAA;AAAS,GAC7E,GACA,OAAA,CAAQ,WAAA,EAAa,EAAE,eAAA,EAAiB,IAAA,EAAM,WAAA,EAAa,MAAA,CAAO,KAAK,CAAA,EAAG,GAAG,QAAA,EAAU,CAAA;AAE7F,EAAA,MAAM,YAAY,OAAA,CAAQ,iBAAA;AAC1B,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,MAAA,CAAO,SAAS,CAAA,EAAG;AAChD,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,OAAA,CAAQ,SAAS,CAAA;AAC5C,IAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,OAAA,CAAQ,WAAW,KAAK,CAAA;AAAA,EAC1D;AAEA,EAAA,IAAI,CAAE,MAAM,MAAA,CAAO,IAAA,CAAK,SAAA,CAAU,MAAM,CAAA,EAAI;AAC1C,IAAA,IAAI,SAAA,CAAU,SAAA,IAAa,MAAA,CAAO,MAAA,EAAQ;AACxC,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,aAAA;AAAA,QACT,MAAA,EAAQ,gBAAA;AAAA,QACR,QAAA,EAAU,EAAE,SAAA,EAAW,KAAA,EAAO,GAAG,QAAA;AAAS,OAC5C;AAAA,IACF;AACA,IAAA,IAAI,MAAM,MAAA,CAAO,IAAA,IAAQ,OAAO,OAAA,CAAQ,aAAa,QAAQ,CAAA;AAC7D,IAAA,OAAO;AAAA,MACL,GAAG,OAAA,CAAQ,aAAA,EAAe,QAAQ,CAAA;AAAA,MAClC,GAAI,QAAQ,SAAA,KAAc,MAAA,GAAY,EAAE,UAAA,EAAY,OAAA,CAAQ,SAAA,EAAU,GAAI;AAAC,KAC7E;AAAA,EACF;AAKA,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,MAAM,OAAA,CAAQ,SAAS,CAAA,GAAI,GAAI,CAAC,CAAA;AACzE,EAAA,MAAM,WAAA,GAAc,GAAA,CAAI,MAAA,CAAO,UAAA,EAAY,YAAY,oBAAoB,CAAA;AAC3E,EAAA,MAAM,SAAA,GAAY,MAAM,YAAA,CAAa,MAAA,EAAQ,aAAa,SAAS,CAAA;AACnE,EAAA,MAAM,WAAY,MAAM,YAAA,CAAa,QAAQ,MAAA,CAAO,MAAA,EAAQ,SAAS,CAAA,GAAK,EAAA;AAC1E,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,QAAA,EAAU,SAAA,GAAY,oBAAoB,EAAE,CAAA;AAChE,EAAA,MAAM,MAAA,GAAS,EAAE,SAAA,EAAW,MAAA,CAAO,SAAS,CAAA,EAAG,OAAA,EAAS,MAAA,CAAO,OAAO,CAAA,EAAG,GAAG,QAAA,EAAS;AACrF,EAAA,KAAA,MAAW,CAAC,KAAA,EAAO,GAAG,KAAK,SAAA,CAAU,SAAA,EAAW,OAAO,CAAA,EAAG;AACxD,IAAA,KAAA,MAAW,QAAQ,MAAM,MAAA,CAAO,UAAA,CAAW,KAAA,EAAO,GAAG,CAAA,EAAG;AACtD,MAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AACvC,MAAA,IAAI,KAAA,KAAU,MAAA,EAAW,OAAO,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,IACrD;AAAA,EACF;AACA,EAAA,IAAI,UAAU,QAAA,EAAU;AACtB,IAAA,OAAO,OAAA,CAAQ,0BAA0B,EAAE,GAAG,QAAQ,QAAA,EAAU,MAAA,CAAO,QAAQ,CAAA,EAAG,CAAA;AAAA,EACpF;AAGA,EAAA,OAAO,QAAQ,qBAAA,EAAuB,EAAE,WAAW,IAAA,EAAM,GAAG,QAAQ,CAAA;AACtE;AAEA,SAAS,OAAA,CAAQ,QAAsB,OAAA,EAAiC;AACtE,EAAA,MAAM,EAAE,KAAA,EAAO,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,OAAM,GAAI,OAAA;AAC1C,EAAA,OAAO;AAAA,IACL,QAAQ,OAAA,CAAQ,WAAA;AAAA,IAChB,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,IAAA,EAAM,CAAC,WAAA,KACL,MAAA,CAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,KAAA;AAAA,MACT,GAAA,EAAK,UAAA;AAAA,MACL,YAAA,EAAc,oBAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,EAAM,KAAK,CAAA;AAAA,MAClB,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB;AAAC,KACpD,CAAA;AAAA,IACH,MAAM,UAAA,CAAW,SAAA,EAAW,OAAA,EAAS;AACnC,MAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,QAChC,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,QACf,IAAA,EAAM,EAAE,UAAA,EAAY,IAAA,EAAM,KAAA,EAAM;AAAA,QAChC,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AACD,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,IAAI,eAAe,CAAA;AAAA,IAC9C,CAAA;AAAA,IACA,MAAM,QAAQ,IAAA,EAAM;AAClB,MAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,MAAA,EAAQ,IAAI,CAAA;AAC5C,MAAA,IAAI,OAAA,EAAS,MAAA,KAAW,SAAA,EAAW,OAAO,MAAA;AAC1C,MAAA,MAAM,IAAA,GAAO,eAAe,EAAE,GAAA,EAAK,QAAQ,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,CAAA,CAAE,MAAA;AAAA,QAAO,CAAC,GAAA,KACvE,cAAA,CAAe,GAAA,CAAI,SAAS,KAAK;AAAA,OACnC;AACA,MAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAAA,QAChB,CAAC,GAAA,KACC,GAAA,CAAI,SAAA,KAAc,mBAAA,IAClB,eAAe,GAAA,CAAI,IAAA,CAAK,UAAA,EAAY,IAAI,KACxC,GAAA,CAAI,IAAA,CAAK,MAAM,WAAA,EAAY,KAAM,MAAM,WAAA;AAAY,OACvD;AACA,MAAA,OAAO,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,GAAA,KAAQ,UAAA,CAAW,GAAA,EAAK,IAAA,EAAM,EAAA,EAAI,KAAK,CAAC,CAAA,GAC9D,QAAQ,WAAA,GACR,MAAA;AAAA,IACN;AAAA,GACF;AACF;AAEA,SAAS,OAAA,CAAQ,QAAsB,OAAA,EAAiC;AACtE,EAAA,MAAM,EAAE,KAAA,EAAO,KAAA,EAAO,IAAI,MAAA,EAAQ,KAAA,EAAO,OAAM,GAAI,OAAA;AACnD,EAAA,OAAO;AAAA;AAAA,IAEL,MAAA,EAAQ,QAAQ,QAAA,GAAW,EAAA;AAAA,IAC3B,YAAY,OAAA,CAAQ,UAAA;AAAA,IACpB,MAAM,KAAK,WAAA,EAAa;AACtB,MAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,QACvC,OAAA,EAASC,eAAAA;AAAA,QACT,GAAA,EAAK,gBAAA;AAAA,QACL,YAAA,EAAc,aAAA;AAAA,QACd,IAAA,EAAM,CAAC,KAAA,EAAO,KAAA,IAAS,EAAE,CAAA;AAAA,QACzB,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB;AAAC,OACpD,CAAA;AACD,MAAA,OAAA,CAAS,MAAA,KAAW,KAAA,GAAQ,KAAA,CAAA,GAAU,EAAA,MAAQ,EAAA;AAAA,IAChD,CAAA;AAAA;AAAA;AAAA,IAGA,MAAM,UAAA,CAAW,SAAA,EAAW,OAAA,EAAS;AACnC,MAAA,MAAM,IAAA,GAAO,MAAM,MAAA,CAAO,OAAA,CAAQ;AAAA,QAChC,OAAA,EAAS,KAAA;AAAA,QACT,KAAA,EAAO,OAAO,CAAC,CAAA;AAAA,QACf,IAAA,EAAM,EAAE,IAAA,EAAM,KAAA,EAAO,EAAA,EAAG;AAAA,QACxB,SAAA;AAAA,QACA;AAAA,OACD,CAAA;AAED,MAAA,OAAO,CAAC,GAAG,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAA,CAAI,eAAe,CAAC,CAAC,CAAA;AAAA,IAC5D,CAAA;AAAA,IACA,MAAM,QAAQ,IAAA,EAAM;AAClB,MAAA,MAAM,OAAA,GAAU,MAAM,SAAA,CAAU,MAAA,EAAQ,IAAI,CAAA;AAC5C,MAAA,IAAI,OAAA,EAAS,MAAA,KAAW,SAAA,IAAa,CAAC,OAAA,CAAQ,EAAA,IAAM,CAAC,cAAA,CAAe,OAAA,CAAQ,EAAA,EAAI,KAAK,CAAA,EAAG;AACtF,QAAA,OAAO,MAAA;AAAA,MACT;AAEA,MAAA,MAAM,IAAA,GAAO,WAAW,MAAM,MAAA,CAAO,eAAe,EAAE,IAAA,EAAM,CAAA,EAAG,KAAK,CAAA;AACpE,MAAA,MAAM,QACJ,IAAA,KAAS,MAAA,IACT,eAAe,IAAA,CAAK,KAAA,EAAO,KAAK,CAAA,IAChC,IAAA,CAAK,UAAU,KAAA,IACf,cAAA,CAAe,KAAK,KAAA,EAAO,KAAK,KAChC,cAAA,CAAe,IAAA,CAAK,IAAI,EAAE,CAAA;AAC5B,MAAA,MAAM,WAAA,GAAc,eAAe,EAAE,GAAA,EAAK,QAAQ,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAM,CAAA,CAAE,IAAA;AAAA,QACtE,CAAC,GAAA,KAAQ,cAAA,CAAe,GAAA,CAAI,OAAA,EAAS,KAAK,CAAA,IAAK,UAAA,CAAW,GAAA,EAAK,KAAA,EAAO,EAAA,EAAI,MAAM;AAAA,OAClF;AACA,MAAA,OAAO,KAAA,IAAS,WAAA,GAAc,OAAA,CAAQ,WAAA,GAAc,MAAA;AAAA,IACtD;AAAA,GACF;AACF;AAGO,SAAS,UAAU,KAAA,EAAY;AACpC,EAAA,IAAI,IAAA;AACJ,EAAA,IAAI;AACF,IAAA,IAAA,GAAO,iBAAiB,KAAK,CAAA;AAAA,EAC/B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,MAAM,KAAA,GACJ,KAAK,YAAA,KAAiB,QAAA,GAClB,KAAK,IAAA,GACL,IAAA,CAAK,YAAA,KAAiB,kBAAA,GACnB,CAAC,IAAA,CAAK,KAAK,CAAC,CAAA,EAAG,KAAK,IAAA,CAAK,CAAC,GAAG,IAAA,CAAK,IAAA,CAAK,CAAC,CAAC,CAAA,GAC1C,MAAA;AACR,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,MAAA;AAChC,EAAA,MAAM,CAAC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA,GAAI,KAAA;AACjC,EAAA,OAAO,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,KAAA,EAAO,KAAA,EAAO,MAAA,CAAO,SAAA,CAAU,KAAA,EAAO,EAAA,EAAI,OAAA,CAAQ,EAAA,EAAG;AACrF;AAEA,IAAM,gBAAA,GAAmB,CAAC,IAAA,KAAc,kBAAA,CAAmB,EAAE,GAAA,EAAK,wBAAA,EAA0B,MAAM,CAAA;AAIlG,SAAS,UAAA,CAAW,GAAA,EAAe,IAAA,EAAe,EAAA,EAAa,KAAA,EAAwB;AACrF,EAAA,OACE,IAAI,SAAA,KAAc,UAAA,IAClB,cAAA,CAAe,GAAA,CAAI,KAAK,IAAA,EAAM,IAAI,CAAA,IAClC,cAAA,CAAe,IAAI,IAAA,CAAK,EAAA,EAAI,EAAE,CAAA,IAC9B,GAAA,CAAI,KAAK,KAAA,KAAU,KAAA;AAEvB;AAEA,eAAe,SAAA,CAAU,QAAsB,IAAA,EAAY;AACzD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,MAAA,CAAO,qBAAA,CAAsB,EAAE,MAAM,CAAA;AAAA,EACpD,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,GAAA,YAAe,iCAAiC,OAAO,MAAA;AAC3D,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAGO,SAAS,SAAA,CAAU,WAAmB,OAAA,EAAqC;AAChF,EAAA,MAAM,SAA6B,EAAC;AACpC,EAAA,KAAA,IAAS,KAAA,GAAQ,SAAA,EAAW,KAAA,IAAS,OAAA,EAAS,SAAS,gBAAA,EAAkB;AACvE,IAAA,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,EAAO,GAAA,CAAI,QAAQ,gBAAA,GAAmB,EAAA,EAAI,OAAO,CAAC,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,MAAA;AACT;AAOA,eAAsB,YAAA,CACpB,MAAA,EACA,OAAA,EACA,SAAA,EACiB;AACjB,EAAA,IAAI,OAAA,GAAU,SAAA,CAAU,SAAA,EAAW,OAAO,UAAU,MAAA,GAAS,EAAA;AAC7D,EAAA,MAAM,WAAA,GAAc,OAAO,WAAA,KAAA,CACxB,MAAM,OAAO,QAAA,CAAS,EAAE,WAAA,EAAa,CAAA,EAAG,SAAA;AAC3C,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,OAAA,GAAU,MAAM,WAAA,CAAY,GAAG,CAAA;AACnC,EAAA,IAAI,OAAA,IAAW,SAAS,OAAO,EAAA;AAE/B,EAAA,IAAI,OAAO,SAAA,CAAU,MAAA;AACrB,EAAA,IAAI,WAAW,SAAA,CAAU,SAAA;AACzB,EAAA,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,GAAO,GAAA,GAAM,IAAI,IAAA,EAAA,EAAQ;AAC1C,IAAA,IAAI,MAAA,GAAA,CAAU,MAAM,IAAA,IAAQ,EAAA;AAC5B,IAAA,IAAI,IAAA,GAAO,CAAA,KAAM,CAAA,IAAK,QAAA,GAAW,OAAA,EAAS;AACxC,MAAA,MAAM,QAAQ,GAAA,GAAA,CAAQ,OAAA,GAAU,OAAA,KAAY,IAAA,GAAO,QAAS,QAAA,GAAW,OAAA,CAAA;AACvE,MAAA,MAAA,GAAS,IAAI,GAAA,CAAI,KAAA,EAAO,MAAM,EAAE,CAAA,EAAG,OAAO,EAAE,CAAA;AAAA,IAC9C;AACA,IAAA,MAAM,SAAA,GAAY,MAAM,WAAA,CAAY,MAAM,CAAA;AAC1C,IAAA,IAAI,SAAA,IAAa,SAAS,CAAC,IAAA,EAAM,QAAQ,CAAA,GAAI,CAAC,QAAQ,SAAS,CAAA;AAAA,UACzD,GAAA,EAAK,OAAO,CAAA,GAAI,CAAC,QAAQ,SAAS,CAAA;AAAA,EAC1C;AACA,EAAA,OAAO,IAAA;AACT;AAGO,SAAS,OAAA,CACd,QACA,QAAA,EAC6B;AAC7B,EAAA,OAAO,EAAE,OAAA,EAAS,SAAA,EAAW,MAAA,EAAQ,GAAI,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAS,GAAI,EAAC,EAAG;AACvF;AAEA,IAAM,MAAM,CAAC,CAAA,EAAW,CAAA,KAAe,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;AACnD,IAAM,MAAM,CAAC,CAAA,EAAW,CAAA,KAAe,CAAA,GAAI,IAAI,CAAA,GAAI,CAAA;;;AClYnD,IAAMC,KAAAA,GAAO,YAAA;AACb,IAAM,OAAA,GAAU,+BAAA;AAiBT,SAAS,iBACd,OAAA,EACyB;AACzB,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAgB;AAC5B,IAAA,MAAM,KAAA,GAAQ,QAAQ,GAAG,CAAA;AACzB,IAAA,OAAO,OAAO,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU,KAAK,KAAA,GAAQ,MAAA;AAAA,EAC7D,CAAA;AACA,EAAA,MAAM,IAAA,GAAO,CAAC,GAAA,KAAgB;AAC5B,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAG,CAAA;AACtB,IAAA,OAAO,UAAU,MAAA,IAAaA,KAAAA,CAAK,IAAA,CAAK,KAAK,IAAI,KAAA,GAAQ,MAAA;AAAA,EAC3D,CAAA;AACA,EAAA,MAAM,CAAC,QAAA,EAAU,SAAA,EAAW,KAAA,EAAO,QAAQ,CAAA,GAAI;AAAA,IAC7C,KAAK,UAAU,CAAA;AAAA,IACf,KAAK,WAAW,CAAA;AAAA,IAChB,KAAK,OAAO,CAAA;AAAA,IACZ,KAAK,UAAU;AAAA,GACjB;AACA,EAAA,MAAM,CAAC,KAAA,EAAO,cAAA,EAAgB,MAAM,IAAI,CAAC,IAAA,CAAK,OAAO,CAAA,EAAG,IAAA,CAAK,gBAAgB,CAAA,EAAG,IAAA,CAAK,QAAQ,CAAC,CAAA;AAC9F,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,UAAU,CAAA,IAAK,EAAC;AACzC,EAAA,IAAI,CAAC,QAAA,IAAY,CAAC,SAAA,IAAa,CAAC,KAAA,IAAS,CAAC,QAAA,IAAY,CAAC,KAAA,IAAS,CAAC,cAAA,IAAkB,CAAC,MAAA,EAAQ;AAC1F,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,IAAK,CAAC,QAAA,CAAS,KAAA,CAAM,CAAC,EAAA,KAAO,OAAO,EAAA,KAAO,QAAQ,CAAA,EAAG;AAC/E,IAAA,OAAO,MAAA;AAAA,EACT;AACA,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,IACnB,cAAA,EAAgB,OAAO,cAAc,CAAA;AAAA,IACrC,KAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AACF;AASA,eAAsB,iBACpB,KAAA,EACsC;AACtC,EAAA,MAAM,EAAE,GAAA,EAAAC,IAAAA,EAAK,OAAA,EAAS,OAAA,EAAS,SAAQ,GAAI,KAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,MAAMA,IAAAA,CAAI,QAAA,EAAU,EAAE,CAAA;AACrC,EAAA,MAAM,UAAU,QAAA,CAAS,MAAM,CAAA,GAAI,MAAA,CAAO,UAAU,CAAA,GAAI,MAAA;AACxD,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAC7C,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,OAAO,QAAQ,gBAAA,EAAkB,EAAE,OAAA,EAAS,eAAA,EAAiB,UAAU,CAAA;AAAA,EACzE;AAGA,EAAA,MAAM,YAAY,OAAA,CAAQ,iBAAA;AAC1B,EAAA,IAAI,SAAA,KAAc,MAAA,IAAa,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,EAAG;AACtD,IAAA,KAAA,MAAW,OAAA,IAAW,QAAQ,QAAA,EAAU;AACtC,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAASA,IAAAA,EAAK,WAAW,OAAO,CAAA;AACtD,MAAA,IAAI,YAAY,MAAA,EAAW;AAC3B,MAAA,IAAI,OAAA,CAAQ,2BAA2B,OAAA,EAAS;AAC9C,QAAA,OAAO,OAAA,CAAQ,WAAA,EAAa,EAAE,eAAA,EAAiB,WAAW,CAAA;AAAA,MAC5D;AACA,MAAA,IAAI,OAAA,CAAQ,OAAA,EAAS,OAAO,CAAA,EAAG;AAC7B,QAAA,OAAO;AAAA,UACL,OAAA,EAAS,SAAA;AAAA,UACT,MAAA,EAAQ,gBAAA;AAAA,UACR,iBAAA,EAAmB,SAAA;AAAA,UACnB,QAAA,EAAU,EAAE,eAAA,EAAiB,SAAA,EAAW,OAAA;AAAQ,SAClD;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,QAAS,MAAMA,IAAAA,CAAI,SAAS,EAAE,QAAA,EAAU,SAAS,CAAA;AACvD,EAAA,MAAM,MAAA,GAAS,MAAM,MAAA,EAAQ,MAAA;AAC7B,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,CAAC,MAAA,CAAO,aAAA,CAAc,MAAM,CAAA,EAAG;AAC/D,IAAA,MAAM,IAAI,aAAA,CAAc,8BAAA,EAAgC,0BAA0B,CAAA;AAAA,EACpF;AACA,EAAA,MAAM,QAAA,GAAW,EAAE,UAAA,EAAY,MAAA,CAAO,MAAM,CAAA,EAAE;AAC9C,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAO,MAAMA,KAAI,OAAA,EAAS;AAAA,MACxB,YAAA,EAAc,iBAAA;AAAA,MACd,QAAA,EAAU,MAAA;AAAA,MACV,YAAY,OAAA,CAAQ,QAAA;AAAA,MACpB,YAAY,OAAA,CAAQ;AAAA,KACrB,CAAA;AAAA,EACH,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,aAAa,GAAG,CAAA,KAAM,sBAAsB,OAAO,OAAA,CAAQ,sBAAsB,QAAQ,CAAA;AAC7F,IAAA,MAAM,GAAA;AAAA,EACR;AAEA,EAAA,IAAI,OAAO,GAAA,CAAI,KAAA,KAAU,UAAU,OAAO,OAAA,CAAQ,sBAAsB,QAAQ,CAAA;AAChF,EAAA,IAAI,OAAO,IAAI,KAAA,KAAU,QAAA,IAAY,CAAC,MAAA,CAAO,aAAA,CAAc,GAAA,CAAI,KAAK,CAAA,EAAG;AACrE,IAAA,MAAM,IAAI,aAAA,CAAc,8BAAA,EAAgC,mCAAmC,CAAA;AAAA,EAC7F;AACA,EAAA,MAAM,QAAA,GAAW,EAAE,QAAA,EAAU,MAAA,CAAO,IAAI,KAAK,CAAA,EAAG,GAAG,QAAA,EAAS;AAE5D,EAAA,IAAI,MAAA,CAAO,IAAI,KAAK,CAAA,IAAK,QAAQ,KAAA,EAAO,OAAO,OAAA,CAAQ,qBAAA,EAAuB,QAAQ,CAAA;AACtF,EAAA,IAAI,MAAA,CAAO,MAAM,CAAA,GAAI,OAAA,CAAQ,cAAA,EAAgB;AAC3C,IAAA,OAAO,EAAE,OAAA,EAAS,aAAA,EAAe,MAAA,EAAQ,kBAAkB,QAAA,EAAS;AAAA,EACtE;AACA,EAAA,OAAO,OAAA,CAAQ,aAAA,EAAe,EAAE,cAAA,EAAgB,MAAA,CAAO,QAAQ,cAAc,CAAA,EAAG,GAAG,QAAA,EAAU,CAAA;AAC/F;AAkCA,eAAe,QAAA,CACbA,IAAAA,EACA,IAAA,EACA,MAAA,EACgC;AAChC,EAAA,IAAI;AACF,IAAA,OAAQ,MAAMA,KAAI,wBAAA,EAA0B;AAAA,MAC1C,OAAA,EAAS,IAAA;AAAA,MACT,iBAAA,EAAmB,MAAA;AAAA,MACnB,UAAA,EAAY;AAAA,KACb,CAAA;AAAA,EACH,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,YAAA,CAAa,GAAG,CAAA,KAAM,qBAAA,EAAuB,OAAO,MAAA;AACxD,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAGA,SAAS,OAAA,CAAQ,SAAoB,OAAA,EAA+B;AAClE,EAAA,MAAM,SAAA,GAAA,CAAa,QAAQ,WAAA,EAAa,OAAA,IAAW,EAAC,EAAG,IAAA,CAAK,CAAC,MAAA,KAAW;AACtE,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,EAAU,eAAA;AAClC,IAAA,OACE,QAAA,EAAU,SAAA,KAAc,OAAA,CAAQ,QAAA,IAChC,SAAS,UAAA,KAAe,OAAA,CAAQ,SAAA,IAChC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,KAAM,MAAA,CAAO,QAAQ,KAAK,CAAA;AAAA,EAEnD,CAAC,CAAA;AACD,EAAA,MAAM,YAAY,IAAI,GAAA;AAAA,IAAA,CACnB,OAAA,CAAQ,oBAAoB,EAAC,EAC3B,OAAO,CAAC,KAAA,KAAU,SAAS,KAAA,CAAM,OAAA,EAAS,MAAM,CAAA,IAAK,cAAA,IAAkB,MAAM,OAAA,CAAQ,MAAM,EAC3F,GAAA,CAAI,CAAC,KAAA,KAAU,KAAA,CAAM,EAAE;AAAA,GAC5B;AACA,EAAA,MAAM,WAAA,GAAA,CAAe,OAAA,CAAQ,QAAA,IAAY,EAAC,EAAG,IAAA;AAAA,IAC3C,CAAC,YACC,OAAA,CAAQ,WAAA,KAAgB,QAAQ,KAAA,IAChC,OAAA,CAAQ,cAAA,KAAmB,OAAA,CAAQ,QAAA,IACnC,SAAA,CAAU,IAAI,OAAA,CAAQ,UAAU,CAAA,IAAA,CAC/B,OAAA,CAAQ,OAAA,EAAS,MAAA,EAAQ,WAAW,EAAC,EAAG,IAAA,CAAK,CAAC,MAAA,KAAW;AACxD,MAAA,MAAM,OAAO,MAAA,CAAO,YAAA;AACpB,MAAA,IAAI,MAAM,WAAA,KAAgB,aAAA,IAAiB,OAAO,IAAA,CAAK,IAAA,KAAS,UAAU,OAAO,KAAA;AACjF,MAAA,MAAM,IAAA,GAAO,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAChC,MAAA,OAAO,IAAA,GAAO,aAAa,CAAA,KAAM,OAAA,CAAQ,YAAY,IAAA,CAAK,QAAQ,MAAM,OAAA,CAAQ,MAAA;AAAA,IAClF,CAAC;AAAA,GACL;AACA,EAAA,OAAO,SAAA,IAAa,WAAA;AACtB;AAEA,SAAS,UAAU,MAAA,EAAqD;AACtE,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAgB,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,QAAQ,QAAQ,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AAC/E,IAAA,OAAO,QAAA,CAAS,IAAI,CAAA,GAAI,IAAA,GAAO,KAAA,CAAA;AAAA,EACjC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAGA,SAAS,aAAa,GAAA,EAAuB;AAC3C,EAAA,MAAM,WAAW,eAAA,CAAgB,GAAG,IAAI,GAAA,CAAI,OAAA,GAAU,UAAU,CAAA,GAAI,MAAA;AACpE,EAAA,OAAO,QAAA,CAAS,QAAQ,CAAA,IAAK,QAAA,CAAS,QAAA,CAAS,OAAO,CAAC,CAAA,GAAI,QAAA,CAAS,OAAO,CAAA,CAAE,MAAM,CAAA,GAAI,MAAA;AACzF;;;ACzNA,IAAMC,qBAAAA,GAAuB,GAAA;AAE7B,IAAM,YAAA,GAAe,GAAA;AAErB,IAAM,iBAAA,GAAoB,CAAA;AAE1B,IAAM,MAAA,GAAS,yBAAA;AACf,IAAM,YAAA,GAAe,sBAAA;AAYd,SAAS,gBACd,OAAA,EACwB;AACxB,EAAA,MAAM,EAAE,WAAA,EAAa,eAAA,EAAiB,KAAA,EAAM,GAAI,OAAA;AAChD,EAAA,IAAI,OAAO,gBAAgB,QAAA,IAAY,CAAC,aAAa,IAAA,CAAK,WAAW,GAAG,OAAO,MAAA;AAC/E,EAAA,IAAI,CAAC,QAAA,CAAS,eAAA,EAAiB,EAAA,EAAI,EAAE,GAAG,OAAO,MAAA;AAC/C,EAAA,IAAI,KAAA,KAAU,UAAa,CAAC,QAAA,CAAS,OAAO,EAAA,EAAI,EAAE,GAAG,OAAO,MAAA;AAC5D,EAAA,OAAO,EAAE,WAAA,EAAa,eAAA,EAAiB,KAAA,EAAM;AAC/C;AAUA,eAAsB,gBACpB,KAAA,EACsC;AACtC,EAAA,MAAM,EAAE,GAAA,EAAAD,IAAAA,EAAK,SAAS,OAAA,EAAS,OAAA,EAAS,eAAc,GAAI,KAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,MAAMA,IAAAA,CAAI,gBAAA,EAAkB,EAAE,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,UAAU,MAAA,CAAO,OAAO,EAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AACrD,EAAA,IAAI,WAAW,OAAA,EAAS;AACtB,IAAA,OAAO,QAAQ,gBAAA,EAAkB,EAAE,SAAS,MAAA,EAAQ,eAAA,EAAiB,SAAS,CAAA;AAAA,EAChF;AAGA,EAAA,MAAME,QAAAA,GAAU,OAAO,EAAA,KAA4C;AACjE,IAAA,MAAM,MAAA,GAAU,MAAMF,IAAAA,CAAI,gBAAA,EAAkB;AAAA,MAC1C,EAAA;AAAA,MACA,EAAE,QAAA,EAAU,QAAA,EAAU,UAAA,EAAY,WAAA,EAAa,gCAAgC,CAAA;AAAE,KAClF,CAAA;AACD,IAAA,IAAI,MAAA,EAAQ,MAAM,GAAA,KAAQ,IAAA,IAAQ,OAAO,MAAA,CAAO,IAAA,KAAS,UAAU,OAAO,MAAA;AAC1E,IAAA,MAAM,CAAC,IAAI,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,WAAW,CAAA,GAAI,MAAA,CAAO,WAAA,GAAc,EAAC;AACzE,IAAA,OAAO,OAAO,SAAS,QAAA,IAAY,aAAA,CAAc,IAAI,CAAA,KAAM,OAAA,CAAQ,WAAA,GAC/D,MAAA,CAAO,IAAA,GACP,MAAA;AAAA,EACN,CAAA;AACA,EAAA,MAAM,OAAA,GAAU,CAAC,EAAA,EAAY,IAAA,MAA+C;AAAA,IAC1E,OAAA,EAAS,SAAA;AAAA,IACT,MAAA,EAAQ,gBAAA;AAAA,IACR,iBAAA,EAAmB,EAAA;AAAA,IACnB,UAAU,EAAE,aAAA,EAAe,IAAI,IAAA,EAAM,MAAA,CAAO,IAAI,CAAA;AAAE,GACpD,CAAA;AAEA,EAAA,MAAM,YAAY,OAAA,CAAQ,iBAAA;AAC1B,EAAA,IAAI,cAAc,MAAA,IAAa,QAAA,CAAS,SAAA,EAAW,EAAA,EAAI,EAAE,CAAA,EAAG;AAC1D,IAAA,MAAM,IAAA,GAAO,MAAME,QAAAA,CAAQ,SAAS,CAAA;AACpC,IAAA,IAAI,IAAA,KAAS,MAAA,EAAW,OAAO,OAAA,CAAQ,WAAW,IAAI,CAAA;AAAA,EACxD;AAEA,EAAA,IAAI,OAAA,CAAQ,UAAU,MAAA,EAAW;AAC/B,IAAA,MAAM,SAAA,GAAY,KAAK,KAAA,CAAM,IAAA,CAAK,MAAM,OAAA,CAAQ,SAAS,IAAI,GAAI,CAAA;AACjE,IAAA,MAAM,OAAO,SAAA,GAAYD,qBAAAA;AACzB,IAAA,MAAM,KAAK,SAAA,GAAYA,qBAAAA;AACvB,IAAA,IAAI,MAAA;AAEJ,IAAA,MAAA,EAAQ,KAAA,IAAS,IAAA,GAAO,CAAA,IAAK,IAAA,IAAQ,CAAA,EAAG;AACtC,MAAA,IAAI,IAAA,KAAS,mBAAmB,OAAO,OAAA,CAAQ,oBAAoB,EAAE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAAO,CAAA;AAC3F,MAAA,MAAM,OAAA,GAAU,MAAMD,IAAAA,CAAI,yBAAA,EAA2B;AAAA,QACnD,OAAA,CAAQ,KAAA;AAAA,QACR;AAAA,UACE,UAAA,EAAY,WAAA;AAAA,UACZ,KAAA,EAAO,YAAA;AAAA,UACP,GAAI,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,KAAW;AAAC;AAC3C,OACD,CAAA;AACD,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC3B,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,KAAA,MAAW,SAAS,OAAA,EAIf;AACH,QAAA,IAAI,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,EAAU;AACzC,QAAA,MAAA,GAAS,KAAA,CAAM,SAAA;AACf,QAAA,MAAM,OAAO,OAAO,KAAA,CAAM,SAAA,KAAc,QAAA,GAAW,MAAM,SAAA,GAAY,MAAA;AACrE,QAAA,IAAI,IAAA,KAAS,MAAA,IAAa,IAAA,GAAO,IAAA,EAAM,MAAM,MAAA;AAC7C,QAAA,IAAI,MAAM,GAAA,KAAQ,IAAA,IAAS,IAAA,KAAS,MAAA,IAAa,OAAO,EAAA,EAAK;AAC7D,QAAA,MAAM,IAAA,GAAO,MAAME,QAAAA,CAAQ,KAAA,CAAM,SAAS,CAAA;AAC1C,QAAA,IAAI,SAAS,MAAA,EAAW,OAAO,OAAA,CAAQ,KAAA,CAAM,WAAW,IAAI,CAAA;AAAA,MAC9D;AACA,MAAA,IAAI,OAAA,CAAQ,SAAS,YAAA,EAAc;AAAA,IACrC;AAAA,EACF;AAIA,EAAA,MAAM,QAAA,GAAW,MAAMF,IAAAA,CAAI,kBAAA,EAAoB;AAAA,IAC7C,OAAA,CAAQ,eAAA;AAAA,IACR,EAAE,YAAY,WAAA;AAAY,GAC3B,CAAA;AACD,EAAA,MAAM,QAAQ,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,CAAS,OAAO,CAAA,GAAI,MAAA;AACvD,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,MAAM,IAAI,aAAA,CAAc,8BAAA,EAAgC,oCAAoC,CAAA;AAAA,EAC9F;AACA,EAAA,OAAO,OAAA,CAAQ,KAAA,GAAQ,aAAA,GAAgB,mBAAA,EAAqB;AAAA,IAC1D,aAAA,EAAe,QAAQ,KAAA,KAAU;AAAA,GAClC,CAAA;AACH;AAEA,SAAS,QAAA,CAAS,KAAA,EAAgB,SAAA,EAAmB,SAAA,EAAoC;AACvF,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,CAAM,MAAA,IAAU,SAAA,IAChB,KAAA,CAAM,MAAA,IAAU,SAAA,IAChB,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA;AAErB;;;AC1IA,IAAM,oBAAA,GAAuB,GAAA;AAMtB,SAAS,gBACd,GAAA,EACiF;AACjF,EAAA,MAAM,OAAA,uBAAc,GAAA,EAA4B;AAChD,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAoB;AACrC,IAAA,IAAI,MAAA,GAAS,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AAC9B,IAAA,IAAI,WAAW,MAAA,EAAW;AACxB,MAAA,MAAA,GAAS,wBAAwB,KAAA,CAAM,MAAA,EAAQ,oBAAA,EAAsB,KAAA,CAAM,QAAQ,OAAO,CAAA;AAC1F,MAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,MAAM,CAAA;AAAA,IAC3B;AACA,IAAA,OAAO,MAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAMA,IAAAA,GAAM,CAAC,KAAA,KAAiB,CAAC,MAAA,EAAgB,MAAA,KAC7C,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,MAAA,EAAQ,MAAA,EAAQ,oBAAoB,CAAA;AAC5D,EAAA,MAAM,IAAA,GAAO,OAAO,KAAA,EAAc,QAAA,KAAyD;AACzF,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,QAAA,EAAS;AAAA,IACxB,SAAS,GAAA,EAAK;AACZ,MAAA,OAAO,OAAA,CAAQ,WAAA,EAAa,EAAE,GAAA,EAAK,KAAA,CAAM,WAAW,KAAA,EAAO,iBAAA,CAAkB,GAAG,CAAA,EAAG,CAAA;AAAA,IACrF;AAAA,EACF,CAAA;AAEA,EAAA,OAAO,OAAO,EAAE,OAAA,EAAS,OAAA,EAAQ,KAAM;AACrC,IAAA,IAAI,OAAA,KAAY,MAAA,EAAW,OAAO,OAAA,CAAQ,YAAY,CAAA;AACtD,IAAA,IAAI,QAAQ,GAAG,CAAA,KAAM,eAAA,EAAiB,OAAO,QAAQ,6BAA6B,CAAA;AAClF,IAAA,MAAM,OAAA,GAAU,QAAQ,SAAS,CAAA;AACjC,IAAA,IAAI,OAAO,OAAA,KAAY,QAAA,EAAU,OAAO,QAAQ,oBAAoB,CAAA;AACpE,IAAA,MAAM,QAAA,GAAW,CAA4B,MAAA,KAC3C,GAAA,CAAI,MAAA,CAAO,IAAA;AAAA,MACT,CAAC,SAAA,KACC,SAAA,CAAU,MAAA,KAAW,MAAA,IAAU,UAAU,OAAA,KAAY;AAAA,KACzD;AACF,IAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,wBAAA,EAA0B,EAAE,SAAS,CAAA;AAEnE,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,EAAG;AACjC,MAAA,MAAM,MAAA,GAAS,gBAAgB,OAAO,CAAA;AACtC,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,OAAA,CAAQ,iBAAiB,CAAA;AAC1D,MAAA,MAAM,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC5B,MAAA,IAAI,KAAA,KAAU,QAAW,OAAO,aAAA;AAChC,MAAA,OAAO,IAAA;AAAA,QAAK,KAAA;AAAA,QAAO,MACjB,eAAA,CAAgB;AAAA,UACd,MAAA,EAAQ,UAAU,KAAK,CAAA;AAAA,UACvB,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,UACvB,OAAA,EAAS,MAAA;AAAA,UACT;AAAA,SACD;AAAA,OACH;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,EAAG;AACjC,MAAA,MAAM,MAAA,GAAS,gBAAgB,OAAO,CAAA;AACtC,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,OAAA,CAAQ,iBAAiB,CAAA;AAC1D,MAAA,MAAM,KAAA,GAAQ,SAAS,KAAK,CAAA;AAC5B,MAAA,IAAI,KAAA,KAAU,QAAW,OAAO,aAAA;AAChC,MAAA,MAAM,EAAE,aAAA,EAAc,GAAI,MAAM,IAAI,GAAA,EAAI;AACxC,MAAA,OAAO,IAAA;AAAA,QAAK,KAAA;AAAA,QAAO,MACjB,eAAA,CAAgB,EAAE,GAAA,EAAKA,IAAAA,CAAI,KAAK,CAAA,EAAG,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS,aAAA,EAAe;AAAA,OACvF;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,UAAA,CAAW,OAAO,CAAA,EAAG;AAC/B,MAAA,MAAM,MAAA,GAAS,iBAAiB,OAAO,CAAA;AACvC,MAAA,IAAI,MAAA,KAAW,MAAA,EAAW,OAAO,OAAA,CAAQ,iBAAiB,CAAA;AAC1D,MAAA,MAAM,KAAA,GAAQ,SAAS,MAAM,CAAA;AAC7B,MAAA,IAAI,KAAA,KAAU,QAAW,OAAO,aAAA;AAChC,MAAA,OAAO,IAAA;AAAA,QAAK,KAAA;AAAA,QAAO,MACjB,gBAAA,CAAiB,EAAE,GAAA,EAAKA,IAAAA,CAAI,KAAK,CAAA,EAAG,OAAA,EAAS,OAAA,EAAS,MAAA,EAAQ,OAAA,EAAS;AAAA,OACzE;AAAA,IACF;AACA,IAAA,OAAO,QAAQ,oBAAoB,CAAA;AAAA,EACrC,CAAA;AACF;;;AC5EA,IAAM,sBAAA,GAAyB,iBAAA;AAUxB,SAAS,oBAAA,CAAqB,QAAgB,QAAA,EAA0B;AAC7E,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,QAAQ,CAAA,IAAK,WAAW,CAAA,EAAG;AAC/C,IAAA,MAAM,IAAI,aAAA,CAAc,gBAAA,EAAkB,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAE,CAAA;AAAA,EACjF;AACA,EAAA,IAAI,CAAC,sBAAA,CAAuB,IAAA,CAAK,MAAM,CAAA,EAAG;AACxC,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,iBAAA;AAAA,MACA,WAAW,MAAM,CAAA,4CAAA,CAAA;AAAA,MACjB;AAAA,QACE,OAAA,EAAS,EAAE,MAAA;AAAO;AACpB,KACF;AAAA,EACF;AAEA,EAAA,MAAM,CAAC,cAAc,GAAA,EAAK,YAAA,GAAe,EAAE,CAAA,GAAI,MAAA,CAAO,MAAM,GAAG,CAAA;AAE/D,EAAA,IAAI,YAAA,CAAa,SAAS,QAAA,EAAU;AAClC,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,iBAAA;AAAA,MACA,CAAA,QAAA,EAAW,MAAM,CAAA,8CAAA,EAAiD,QAAQ,CAAA,UAAA,CAAA;AAAA,MAC1E,EAAE,OAAA,EAAS,EAAE,MAAA,EAAQ,aAAA,EAAe,UAAS;AAAE,KACjD;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,YAAA,CAAa,MAAA,CAAO,QAAA,EAAU,GAAG,CAAA;AACxD,EAAA,MAAM,QAAA,GAAW,CAAA,EAAG,WAAW,CAAA,EAAG,cAAc,CAAA,CAAA;AAChD,EAAA,OAAO,OAAO,QAAQ,CAAA;AACxB;ACnCO,SAAS,wBAAwB,aAAA,EAAmD;AACzF,EAAA,MAAM,IAAA,GAAO,WAAW,aAAa,CAAA;AACrC,EAAA,IAAI,IAAA,KAAS,QAAW,OAAO,MAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,SAAA,CAAU,IAAI,CAAA;AACpD,EAAA,OAAO,MAAA,CAAO,OAAA,GAAW,MAAA,CAAO,IAAA,GAA0B,MAAA;AAC5D;AAGO,SAAS,oBAAoB,aAAA,EAAgC;AAClE,EAAA,MAAM,IAAA,GAAO,WAAW,aAAa,CAAA;AACrC,EAAA,OAAO,OAAO,IAAA,KAAS,QAAA,IAAY,SAAS,IAAA,GACvC,IAAA,CAAiC,aAAa,CAAA,GAC/C,MAAA;AACN;AAUO,SAAS,eACd,OAAA,EACoC;AACpC,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,YAAY,WAAA,EAAa,GAAG,MAAK,GAAI,OAAA;AAClE,EAAA,OAAO,IAAA;AACT;AAEA,SAAS,WAAW,aAAA,EAAgC;AAClD,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,MAAA,CAAO,IAAA,CAAK,eAAe,QAAQ,CAAA,CAAE,QAAA,CAAS,MAAM,CAAC,CAAA;AAAA,EACzE,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AASO,SAAS,kBACd,OAAA,EAC8D;AAC9D,EAAA,MAAM,QAAQ,OAAA,CAAQ,OAAA;AACtB,EAAA,OACE,QAAQ,QAAA,CAAS,MAAA,KAAW,WAC5B,QAAA,CAAS,KAAK,KACd,QAAA,CAAS,KAAA,CAAM,eAAe,CAAC,KAC/B,EAAE,sBAAA,IAA0B,UAC5B,OAAO,KAAA,CAAM,WAAW,CAAA,KAAM,QAAA;AAElC;AAGA,IAAM,OAAA,GAAU,qBAAA;AAChB,IAAM,WAAA,GAAc,MAAM,IAAA,GAAO,EAAA;AAEjC,IAAM,OAAA,GAAU,qBAAA;AAEhB,IAAM,SAAA,GAAY,CAAC,KAAA,KACjB,OAAO,KAAA,KAAU,QAAA,IAAY,OAAA,CAAQ,IAAA,CAAK,KAAK,CAAA,IAAK,MAAA,CAAO,KAAK,CAAA,IAAK,WAAA;AAOhE,SAAS,iBAAiB,aAAA,EAA2D;AAC1F,EAAA,OACE,YAAA,CAAa,aAAA,CAAc,MAAM,CAAC,KAClC,YAAA,CAAa,aAAA,CAAc,IAAI,CAAC,KAChC,SAAA,CAAU,aAAA,CAAc,OAAO,CAAC,KAChC,SAAA,CAAU,aAAA,CAAc,YAAY,CAAC,CAAA,IACrC,SAAA,CAAU,aAAA,CAAc,aAAa,CAAC,CAAA,IACtC,OAAO,aAAA,CAAc,OAAO,MAAM,QAAA,IAClC,OAAA,CAAQ,IAAA,CAAK,aAAA,CAAc,OAAO,CAAC,CAAA;AAEvC;AAMO,SAAS,sBACd,OAAA,EAC8D;AAC9D,EAAA,MAAM,QAAQ,OAAA,CAAQ,OAAA;AACtB,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,KAAW,OAAA,IAAW,CAAC,QAAA,CAAS,KAAK,GAAG,OAAO,KAAA;AACpE,EAAA,MAAM,IAAA,GAAO,MAAM,sBAAsB,CAAA;AACzC,EAAA,IAAI,CAAC,QAAA,CAAS,IAAI,CAAA,IAAK,eAAA,IAAmB,SAAS,OAAO,KAAA,CAAM,WAAW,CAAA,KAAM,QAAA,EAAU;AACzF,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,MAAM,EAAE,SAAA,EAAW,OAAA,EAAQ,GAAI,IAAA;AAC/B,EAAA,OACE,QAAA,CAAS,SAAS,CAAA,IAClB,QAAA,CAAS,OAAO,CAAA,IAChB,YAAA,CAAa,KAAK,MAAM,CAAC,KACzB,YAAA,CAAa,IAAA,CAAK,SAAS,CAAC,CAAA,IAC5B,aAAa,SAAA,CAAU,OAAO,CAAC,CAAA,IAC/B,YAAA,CAAa,QAAQ,IAAI,CAAC,KAC1B,SAAA,CAAU,SAAA,CAAU,QAAQ,CAAC,CAAA,IAC7B,UAAU,IAAA,CAAK,OAAO,CAAC,CAAA,IACvB,SAAA,CAAU,KAAK,UAAU,CAAC,KAC1B,SAAA,CAAU,OAAA,CAAQ,YAAY,CAAC,CAAA;AAEnC;;;AC5GO,IAAM,kBAAA,GAAqB,YAAA;AAG3B,SAAS,aAAa,WAAA,EAAqD;AAChF,EAAA,MAAM,QAAA,GAAW,WAAA,CAAY,QAAA,GAAW,kBAAkB,CAAA;AAC1D,EAAA,IAAI,OAAO,QAAA,KAAa,QAAA,EAAU,OAAO,QAAA;AAEzC,EAAA,OAAO,WAAA,CAAY,SAAA,CAAU,OAAA,CAAQ,MAAA,IAAU,IAAI,CAAA,GAAI,MAAA;AACzD;AAQO,SAAS,oBAAA,CACd,OAAA,EACA,QAAA,EACA,OAAA,EACS;AACT,EAAA,IAAI,CAAC,SAAS,OAAO,KAAA;AACrB,EAAA,MAAM,OAAO,CAAC,CAAA,EAAW,MAAc,WAAA,CAAY,OAAA,EAAS,GAAG,CAAC,CAAA;AAChE,EAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,KAAA,IAAS,EAAC;AACvC,EAAA,MAAM,aAAA,GAAgB,QAAA,CAAS,KAAA,IAAS,EAAC;AACzC,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KACZ,KAAA,CAAM,aAAa,CAAA,IAAK,yBAAA;AAC1B,EAAA,OACE,SAAS,MAAA,KAAW,OAAA,CAAQ,UAC5B,QAAA,CAAS,OAAA,KAAY,QAAQ,OAAA,IAC7B,QAAA,CAAS,WAAW,OAAA,CAAQ,MAAA,IAC5B,KAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,KAAK,CAAA,IAClC,KAAK,QAAA,CAAS,KAAA,EAAO,QAAQ,KAAK,CAAA,IAClC,OAAO,OAAA,CAAQ,YAAY,EAAE,KAAA,CAAM,CAAC,CAAC,GAAA,EAAK,KAAK,MAAM,aAAA,CAAc,GAAG,MAAM,KAAK,CAAA,IACjF,KAAK,aAAa,CAAA,KAAM,KAAK,YAAY,CAAA;AAE7C;AAGO,SAAS,yBAAA,CACd,KACA,WAAA,EAIA;AACA,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAW,KAAA,EAAO,GAAA,EAAK,mBAAkB,GAAI,GAAA;AAE9D,EAAA,eAAe,kBAAkB,OAAA,EAAsD;AACrF,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAA;AAC5C,IAAA,MAAM,WAAA,GACJ,QAAQ,oBAAA,GAAuB,OAAA,CAAQ,SAAS,EAAE,CAAA,IAClD,QAAQ,WAAA,IACR,yBAAA;AAIF,IAAA,MAAM,OAAO,WAAA,KAAgB,SAAA,GAAY,EAAE,WAAA,KAAgB,EAAC;AAC5D,IAAA,MAAM,OAAA,GAAiC,MAAM,OAAA,CAAQ,GAAA;AAAA,MACnD,MAAA,CAAO,GAAA,CAAI,OAAO,KAAA,MAAW;AAAA,QAC3B,MAAA,EAAQ,OAAA;AAAA,QACR,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAQ,oBAAA,CAAqB,OAAA,CAAQ,QAAQ,KAAA,CAAM,aAAa,EAAE,QAAA,EAAS;AAAA,QAC3E,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,iBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMA,OACE,KAAA,CAAM,MAAA,KAAW,QACb,EAAE,QAAA,EAAU,MAAM,WAAA,CAAY,KAAK,GAAG,GAAG,IAAA,KACzC,KAAA,CAAM,MAAA,KAAW,SACf,EAAE,GAAG,MAAK,GACV;AAAA,UACE,GAAI,MAAM,SAAA,KAAc,MAAA,GAAY,EAAE,IAAA,EAAM,KAAA,CAAM,SAAA,EAAU,GAAI,EAAC;AAAA,UACjE,GAAI,MAAM,YAAA,KAAiB,MAAA,GAAY,EAAE,OAAA,EAAS,KAAA,CAAM,YAAA,EAAa,GAAI,EAAC;AAAA,UAC1E,qBAAqB,KAAA,CAAM,MAAA;AAAA,UAC3B,GAAG;AAAA;AACL,OACV,CAAE;AAAA,KACJ;AACA,IAAA,MAAM,SAAS,MAAA,CAAO,MAAA,KAAW,CAAA,GAAI,MAAA,CAAO,CAAC,CAAA,GAAI,MAAA;AACjD,IAAA,MAAM,UAAA,GAAa,MAAM,GAAA,CAAI,MAAA,EAAQ,aAAA;AAAA,MACnC,QAAQ,QAAA,CAAS,EAAA;AAAA,MACjB,OAAA,CAAQ,KAAA;AAAA,MACR,MAAA,CAAO,OAAA,CAAQ,CAAC,KAAA,EAAO,KAAA,KAAU;AAC/B,QAAA,MAAM,QAAA,GAAW,QAAQ,KAAK,CAAA;AAC9B,QAAA,OAAO,KAAA,CAAM,MAAA,KAAW,KAAA,IAAS,QAAA,GAAW,CAAC,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,CAAS,MAAA,EAAQ,CAAA,GAAI,EAAC;AAAA,MACtF,CAAC;AAAA,KACH;AASA,IAAA,MAAM,UAAA,GAAa,kBAAA,CAAmB,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAA;AACzD,IAAA,MAAM,QAAA,GAA4B;AAAA,MAChC,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU;AAAA,QACR,GAAA,EAAK,MAAA,GACD,CAAA,0BAAA,EAA6B,kBAAA,CAAmB,OAAO,OAAO,CAAC,CAAA,CAAA,EAAI,MAAA,CAAO,KAAK,CAAA,WAAA,EAAc,UAAU,CAAA,CAAA,GACvG,uCAAuC,UAAU,CAAA,CAAA;AAAA,QACrD,WAAA,EAAa,OAAA,CAAQ,QAAA,CAAS,WAAA,IAAe,QAAQ,QAAA,CAAS,IAAA;AAAA;AAAA;AAAA,QAG9D,UAAU,OAAA,CAAQ,iBAAA,GAAoB,OAAA,CAAQ,QAAA,CAAS,EAAE,CAAA,IAAK;AAAA,OAChE;AAAA,MACA,OAAA;AAAA,MACA,GAAI,UAAA,KAAe,MAAA,GAAY,EAAE,UAAA,KAAe;AAAC,KACnD;AAEA,IAAA,MAAM,SAAA,GAAY,IAAI,IAAA,CAAK,KAAA,CAAM,GAAA,EAAI,CAAE,OAAA,EAAQ,GAAI,iBAAA,GAAoB,GAAI,CAAA,CAAE,WAAA,EAAY;AAEzF,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,GAAA,CAAI,IAAA,CAAK,QAAQ,CAAA;AAAA,MACrB,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,UAAA,EAAY,QAAQ,QAAA,CAAS,EAAA;AAAA,MAC7B,QAAA,EAAU,MAAA;AAAA,MACV,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,UAAU,OAAA,CAAQ,QAAA;AAAA;AAAA,MAElB,GAAI,MAAA,GACA,EAAE,WAAA,EAAa,MAAA,CAAO,KAAA,EAAO,OAAA,EAAS,MAAA,CAAO,OAAA,EAAS,KAAA,EAAO,MAAA,CAAO,KAAA,KACpE,EAAC;AAAA,MACL,SAAA;AAAA,MACA,SAAA,EAAW;AAAA,QACT,QAAA,EAAU,MAAA;AAAA,QACV,OAAA,EAAS,qBAAA;AAAA,QACT,OAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,QAAA,EAAU;AAAA,QACR,CAAC,iCAAiC,GAAG,WAAA,KAAgB,eAAA;AAAA;AAAA;AAAA,QAGrD,CAAC,yCAAyC,GAAG;AAAA;AAC/C,KACF;AAAA,EACF;AAOA,EAAA,eAAe,kBACb,OAAA,EAC6B;AAC7B,IAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAW,GAAI,OAAA;AACpC,IAAA,MAAM,OAAA,GAAU,YAAY,SAAA,CAAU,OAAA;AACtC,IAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,OAAO,WAAA;AAC/B,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,WAAA,CAAY,UAAU,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,uBAAA,CAAwB,UAAA,CAAW,OAAO,CAAA;AAC1D,IAAA,IAAI,CAAC,SAAS,OAAO,WAAA;AACrB,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AAAA,MAAQ,CAACG,MAAAA,EAAOC,MAAAA,KACtC,oBAAA,CAAqBD,QAAO,OAAA,CAAQ,QAAA,EAAU,MAAA,CAAOC,MAAK,GAAG,OAAO,CAAA,GAAI,CAACA,MAAK,IAAI;AAAC,KACrF;AACA,IAAA,MAAM,QAAQ,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,OAAA,CAAQ,CAAC,CAAA,GAAI,MAAA;AAClD,IAAA,MAAM,KAAA,GAAQ,KAAA,KAAU,MAAA,GAAY,MAAA,GAAY,OAAO,KAAK,CAAA;AAC5D,IAAA,IAAI,KAAA,KAAU,MAAA,IAAa,CAAC,KAAA,EAAO,OAAO,WAAA;AAC1C,IAAA,OAAO;AAAA,MACL,GAAG,WAAA;AAAA,MACH,aAAa,KAAA,CAAM,KAAA;AAAA,MACnB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,QAAA,EAAU,EAAE,GAAG,WAAA,CAAY,UAAU,CAAC,kBAAkB,GAAG,KAAA;AAAM,KACnE;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,mBAAmB,iBAAA,EAAkB;AAChD;ACtKO,SAAS,YAAA,CAAa,SAAyB,KAAA,EAAoC;AAGxF,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,KAAA,CAAM,OAAA;AAC1B,EAAA,IAAI,KAAA,CAAM,WAAW,SAAA,EAAW;AAC9B,IAAA,IAAI,CAAC,iBAAA,CAAkB,OAAO,CAAA,EAAG,OAAO,oBAAA;AACxC,IAAA,MAAM,EAAE,aAAA,EAAc,GAAI,OAAA,CAAQ,OAAA;AAClC,IAAA,MAAM,EAAE,IAAA,EAAAC,KAAAA,EAAM,IAAI,KAAA,EAAO,KAAA,EAAAC,QAAM,GAAI,aAAA;AACnC,IAAA,IAAI,CAAC,gBAAA,CAAiB,aAAa,CAAA,IAAK,CAACT,SAAAA,CAAUQ,KAAI,CAAA,IAAK,CAACR,SAAAA,CAAU,EAAE,CAAA,EAAG;AAC1E,MAAA,OAAO,iBAAA;AAAA,IACT;AACA,IAAA,OAAO;AAAA,MACL,IAAA,EAAM,WAAWQ,KAAI,CAAA;AAAA,MACrB,EAAA,EAAI,WAAW,EAAE,CAAA;AAAA,MACjB,KAAA;AAAA,MACA,WAAW,gBAAA,CAAiB;AAAA,QAC1B,OAAA;AAAA,QACA,KAAA,EAAO,UAAA,CAAW,KAAA,CAAM,KAAK,CAAA;AAAA,QAC7B,IAAA,EAAM,WAAWA,KAAI,CAAA;AAAA,QACrB,KAAA,EAAAC;AAAA,OACD,CAAA;AAAA,MACD,SAAS,cAAA,CAAe,KAAA,CAAM,OAAA,EAAS,KAAA,CAAM,OAAO,aAAa,CAAA;AAAA,MACjE,iBAAA,EAAmB,8CAAA;AAAA,MACnB,cAAA,EAAgB;AAAA,KAClB;AAAA,EACF;AACA,EAAA,IAAI,CAAC,qBAAA,CAAsB,OAAO,CAAA,EAAG,OAAO,oBAAA;AAC5C,EAAA,MAAM,EAAE,MAAM,OAAA,EAAS,SAAA,EAAW,SAAS,KAAA,EAAO,QAAA,EAAS,GACzD,OAAA,CAAQ,OAAA,CAAQ,oBAAA;AAGlB,EAAA,IAAI,UAAA,CAAW,OAAO,CAAA,KAAM,UAAA,CAAWC,4BAA4B,CAAA,EAAG;AACpE,IAAA,OAAO,yBAAA;AAAA,EACT;AACA,EAAA,IAAI,UAAA,CAAW,UAAU,KAAK,CAAA,KAAM,WAAW,KAAA,CAAM,KAAK,GAAG,OAAO,wBAAA;AACpE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAW,IAAI,CAAA;AAAA,IACrB,EAAA,EAAI,UAAA,CAAW,OAAA,CAAQ,EAAE,CAAA;AAAA,IACzB,OAAO,SAAA,CAAU,MAAA;AAAA,IACjB,SAAA,EAAW,wBAAwB,EAAE,OAAA,EAAS,OAAO,UAAA,CAAW,IAAI,CAAA,EAAG,KAAA,EAAO,CAAA;AAAA,IAC9E,OAAA,EAAS,cAAA,CAAe,KAAA,CAAM,OAAA,EAAS;AAAA,MACrC,OAAO,SAAA,CAAU,KAAA;AAAA,MACjB,KAAA,EAAO,IAAA;AAAA,MACP,IAAI,OAAA,CAAQ,EAAA;AAAA,MACZ,QAAQ,SAAA,CAAU,MAAA;AAAA,MAClB,KAAA;AAAA,MACA,QAAA;AAAA,MACA,YAAY,OAAA,CAAQ,UAAA;AAAA,MACpB,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,IACD,iBAAA,EAAmB,oCAAA;AAAA,IACnB,cAAA,EAAgB;AAAA,GAClB;AACF;;;ACxDO,SAAS,aACd,GAAA,EAC+D;AAC/D,EAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAO,GAAI,GAAA;AAErC,EAAA,eAAe,OAAO,OAAA,EAA2D;AAC/E,IAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAY,YAAA,EAAa,GAAI,OAAA;AAElD,IAAA,IAAI,YAAA,CAAa,WAAW,UAAA,EAAY;AACtC,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,aAAa,WAAW,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,UAAU,MAAA,GAAY,MAAA,GAAY,UAAU,WAAA,CAAY,UAAU,EAAE,KAAK,CAAA;AACvF,IAAA,MAAM,eACJ,KAAA,KAAU,MAAA,GACN,SACC,WAAA,CAAY,SAAA,CAAU,QAAQ,KAAK,CAAA;AAC1C,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,YAAA,EAAc;AAC3B,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,MAAM,OAAA,GAAU,uBAAA,CAAwB,UAAA,CAAW,OAAO,CAAA;AAC1D,IAAA,MAAM,QAAA,GAAW,WAAW,KAAA,CAAM,MAAA,KAAW,QAAQ,YAAA,CAAa,OAAA,EAAS,KAAK,CAAA,GAAI,MAAA;AACpF,IAAA,IAAI,CAAC,OAAA,IAAW,OAAO,QAAA,KAAa,QAAA,EAAU;AAC5C,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AACA,IAAA,MAAM,YAAY,CAAC,KAAA,KAAkB,sBAAA,CAAuB,KAAA,CAAM,SAAS,KAAK,CAAA;AAEhF,IAAA,MAAM,kBAAA,GAAqB,CAAC,eAAA,MAA4C;AAAA,MACtE,MAAA,EAAQ,UAAA;AAAA,MACR,QAAA,EAAU,MAAA;AAAA,MACV,QAAQ,YAAA,CAAa,MAAA;AAAA,MACrB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,GAAI,aAAa,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,YAAA,CAAa,OAAA,EAAQ,GAAI,EAAC;AAAA,MAC9E,GAAI,aAAa,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,YAAA,CAAa,KAAA,EAAM,GAAI,EAAC;AAAA,MACxE,GAAI,aAAa,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,YAAA,CAAa,SAAA,EAAU,GAAI,EAAC;AAAA,MACpF;AAAA,KACF,CAAA;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAK;AACjC,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,MAAM,KAAA,CAAM,MAAA,CAAO,cAAA,CAAe,OAAO,GAAG,YAAY,CAAA;AAAA,IACtE,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,0BAAA,CAA2B,GAAG,CAAA,IAAK,KAAA,CAAM,iBAAgB,EAAG;AAC9D,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA,CAAA,eAAA,EAAkB,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,wCAAA,CAAA;AAAA,UACpC,EAAE,OAAO,GAAA;AAAI,SACf;AAAA,MACF;AAOA,MAAA,IAAI,CAAC,oBAAA,CAAqB,GAAG,CAAA,EAAG;AAC9B,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,EAAE,GAAA,EAAK,iBAAA,CAAkB,GAAG,CAAA,EAAE;AAAA,UAC9B;AAAA,SACF;AACA,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA,8EAAA;AAAA,UACA,EAAE,OAAO,GAAA;AAAI,SACf;AAAA,MACF;AACA,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,EAAE,GAAA,EAAK,iBAAA,CAAkB,GAAG,CAAA,EAAG,iBAAiB,sBAAA,EAAuB;AAAA,QACvE;AAAA,OACF;AACA,MAAA,OAAO,mBAAmB,sBAAsB,CAAA;AAAA,IAClD;AAIA,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,KAAA,IAAS,SAAA,CAAU,KAAA;AAE9C,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AAOtB,MAAA,IAAI,yBAAA,CAA0B,UAAU,WAAW,CAAA,IAAK,CAAC,SAAA,CAAU,SAAA,CAAU,WAAW,CAAA,EAAG;AAEzF,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,EAAE,cAAA,EAAgB,iBAAA,CAAkB,SAAA,CAAU,WAAW,CAAA,EAAE;AAAA,UAC3D;AAAA,SACF;AACA,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AAGA,MAAA,IACE,KAAA,CAAM,MAAA,KAAW,MAAA,IACjB,kBAAA,CAAmB,GAAA,CAAI,SAAA,CAAU,WAAA,IAAe,EAAE,CAAA,IAClD,CAAC,SAAA,CAAU,WAAA,EACX;AACA,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA,iFAAA;AAAA,UACA;AAAA,YACE,OAAA,EAAS;AAAA,cACP,sBAAA,EAAwB,IAAA;AAAA,cACxB,MAAA,EAAQ,cAAA,CAAe,SAAA,CAAU,WAAA,EAAa,yBAAyB;AAAA;AACzE;AACF,SACF;AAAA,MACF;AAIA,MAAA,IACE,SAAA,CAAU,gBAAgB,yBAAA,IAC1B,SAAA,CAAU,cAAc,UAAA,CAAW,yBAAyB,CAAA,KAAM,IAAA,IAClE,uBAAA,CAAwB,GAAA,CAAI,UAAU,WAAA,IAAe,EAAE,CAAA,IACvD,kBAAA,CAAmB,GAAA,CAAI,SAAA,CAAU,eAAe,EAAE,CAAA,IAClD,KAAA,CAAM,eAAA,EAAgB,EACtB;AACA,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA,oEAAA;AAAA,UACA;AAAA,YACE,GAAI,SAAA,CAAU,WAAA,GACV,EAAE,OAAA,EAAS,EAAE,eAAA,EAAiB,SAAA,CAAU,WAAA,EAAY,EAAE,GACtD;AAAC;AACP,SACF;AAAA,MACF;AAGA,MAAA,IACE,UAAU,WAAA,IACV,SAAA,CAAU,gBAAgB,wBAAA,CAAyB,KAAA,CAAM,MAAM,CAAA,EAC/D;AACA,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,EAAE,cAAA,EAAgB,iBAAA,CAAkB,SAAA,CAAU,WAAA,IAAe,EAAE,CAAA,EAAE;AAAA,UACjE;AAAA,SACF;AACA,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA,iGAAA;AAAA,UACA,EAAE,OAAA,EAAS,EAAE,eAAA,EAAiB,SAAA,CAAU,aAAY;AAAE,SACxD;AAAA,MACF;AAEA,MAAA,IAAI,MAAM,MAAA,KAAW,MAAA,IAAU,CAAC,aAAA,CAAc,SAAA,CAAU,WAAW,CAAA,EAAG;AACpE,QAAA,MAAA,CAAO,IAAA;AAAA,UACL,EAAE,cAAA,EAAgB,iBAAA,CAAkB,SAAA,CAAU,WAAA,IAAe,EAAE,CAAA,EAAE;AAAA,UACjE;AAAA,SACF;AACA,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA;AAAA,SACF;AAAA,MACF;AACA,MAAA,IAAI,SAAA,CAAU,gBAAgB,MAAA,EAAW;AACvC,QAAA,MAAA,CAAO,KAAA;AAAA,UACL,EAAE,cAAA,EAAgB,iBAAA,CAAkB,SAAA,CAAU,WAAW,CAAA,EAAE;AAAA,UAC3D;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAO;AAAA,QACL,GAAG,kBAAA,CAAmB,cAAA,CAAe,SAAA,CAAU,WAAA,EAAa,mBAAmB,CAAC,CAAA;AAAA,QAChF,SAAS,SAAA,CAAU,OAAA;AAAA,QACnB,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA;AAAA,QAEvC,GAAI,UAAU,WAAA,GAAc,EAAE,mBAAmB,SAAA,CAAU,WAAA,KAAgB;AAAC,OAC9E;AAAA,IACF;AAIA,IAAA,IAAI,CAAC,UAAU,SAAA,CAAU,WAAW,KAAK,SAAA,CAAU,OAAA,KAAY,MAAM,OAAA,EAAS;AAC5E,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,EAAE,OAAA,EAAS,SAAA,CAAU,OAAA,EAAQ;AAAA,QAC7B;AAAA,OACF;AACA,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,8BAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAEA,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,SAAA;AAAA,MACR,QAAA,EAAU,MAAA;AAAA,MACV,mBAAmB,SAAA,CAAU,WAAA;AAAA,MAC7B,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,MACvC,OAAO,YAAA,CAAa,KAAA;AAAA,MACpB,QAAQ,YAAA,CAAa,MAAA;AAAA,MACrB,UAAU,YAAA,CAAa,QAAA;AAAA,MACvB,SAAS,SAAA,CAAU,OAAA;AAAA,MACnB,GAAI,aAAa,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,YAAA,CAAa,KAAA,EAAM,GAAI,EAAC;AAAA,MACxE,GAAI,aAAa,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,YAAA,CAAa,SAAA,EAAU,GAAI,EAAC;AAAA,MACpF,SAAA,EAAW,MAAM,MAAA,EAAO;AAAA;AAAA;AAAA,MAGxB,QAAA,EAAU;AAAA,QACR,eAAA,EAAiB,QAAA,EAAU,KAAA,IAAS,YAAA,CAAa,MAAA;AAAA;AAAA,QAEjD,GAAI,YAAA,CAAa,QAAA,KAAa,WAAA,CAAY,QAAA,GACtC,EAAE,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAA,CAAY,QAAQ,QAAA,EAAU,WAAA,CAAY,QAAA,EAAS,KACtE;AAAC;AACP,KACF;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AACT;ACvOA,IAAM,gBAAA,GAAmB,GAAA;AAGlB,SAAS,YAAA,CACd,KACA,YAAA,EACiE;AACjE,EAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAO,MAAA,EAAQ,GAAA,EAAK,MAAK,GAAI,GAAA;AAWhD,EAAA,eAAe,OAAO,OAAA,EAA6D;AACjF,IAAA,MAAM,EAAE,WAAA,EAAa,UAAA,EAAW,GAAI,OAAA;AAEpC,IAAA,MAAM,QAAA,GAAW,CAAC,MAAA,MAAmC;AAAA,MACnD,MAAA,EAAQ,UAAA;AAAA,MACR,QAAA,EAAU,MAAA;AAAA,MACV,QAAQ,WAAA,CAAY,MAAA;AAAA,MACpB,UAAU,WAAA,CAAY,QAAA;AAAA,MACtB,GAAI,YAAY,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,WAAA,CAAY,OAAA,EAAQ,GAAI,EAAC;AAAA,MAC5E,GAAI,YAAY,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,WAAA,CAAY,KAAA,EAAM,GAAI,EAAC;AAAA,MACtE,eAAA,EAAiB;AAAA,KACnB,CAAA;AAEA,IAAA,IAAI,YAAY,QAAA,KAAa,MAAA,IAAU,WAAA,CAAY,SAAA,CAAU,aAAa,MAAA,EAAQ;AAChF,MAAA,OAAO,SAAS,gBAAgB,CAAA;AAAA,IAClC;AAGA,IAAA,MAAM,KAAA,GAAQ,aAAa,WAAW,CAAA;AACtC,IAAA,IAAI,UAAU,MAAA,EAAW;AACvB,MAAA,OAAO,SAAS,8BAA8B,CAAA;AAAA,IAChD;AACA,IAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,WAAA,CAAY,UAAU,EAAE,KAAK,CAAA;AACrD,IAAA,MAAM,YAAA,GAAe,WAAA,CAAY,SAAA,CAAU,OAAA,CAAQ,KAAK,CAAA;AACxD,IAAA,IAAI,CAAC,KAAA,IAAS,CAAC,YAAA,EAAc;AAC3B,MAAA,OAAO,SAAS,8BAA8B,CAAA;AAAA,IAChD;AAKA,IAAA,IACE,WAAA,CAAY,SAAA,KAAc,MAAA,IAC1B,IAAA,CAAK,KAAA,CAAM,WAAA,CAAY,SAAS,CAAA,GAAI,KAAA,CAAM,GAAA,EAAI,CAAE,OAAA,EAAQ,EACxD;AACA,MAAA,OAAO,SAAS,qBAAqB,CAAA;AAAA,IACvC;AAKA,IAAA,IAAI,CAAC,YAAY,KAAA,CAAM,OAAA,EAAS,aAAa,KAAA,EAAO,KAAA,CAAM,KAAK,CAAA,EAAG;AAChE,MAAA,OAAO,SAAS,aAAa,CAAA;AAAA,IAC/B;AAEA,IAAA,MAAM,OAAA,GAAU,uBAAA,CAAwB,UAAA,CAAW,OAAO,CAAA;AAC1D,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,OAAA,GAAU,mBAAA,CAAoB,UAAA,CAAW,OAAO,CAAA;AACtD,MAAA,OAAO,QAAA;AAAA,QACL,OAAO,OAAA,KAAY,QAAA,IAAY,OAAA,KAAY,eACvC,sBAAA,GACA;AAAA,OACN;AAAA,IACF;AACA,IAAA,IAAI,OAAA,CAAQ,gBAAgB,YAAA,EAAc;AACxC,MAAA,OAAO,SAAS,sBAAsB,CAAA;AAAA,IACxC;AAIA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,OAAA;AACJ,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI,KAAA,CAAM,WAAW,KAAA,EAAO;AAC1B,MAAA,MAAM,SAAA,GAAA,CAAa,MAAM,GAAA,EAAI,EAAG,kBAAkB,OAAA,CAAQ,OAAA,EAAS,MAAM,OAAO,CAAA;AAChF,MAAA,IAAI,OAAO,SAAA,KAAc,QAAA,EAAU,OAAO,SAAS,SAAS,CAAA;AAC5D,MAAA,SAAA,GAAY,SAAA,CAAU,SAAA;AACtB,MAAA,OAAA,GAAU,SAAA,CAAU,OAAA;AAAA,IACtB,CAAA,MAAA,IAAW,KAAA,CAAM,MAAA,KAAW,MAAA,EAAQ;AAClC,MAAA,MAAM,aAAa,MAAM,IAAA,EAAK,EAAG,kBAAA,CAAmB,QAAQ,OAAA,EAAS;AAAA,QACnE,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAQ,YAAA,CAAa;AAAA,OACtB,CAAA;AACD,MAAA,IAAI,OAAO,SAAA,KAAc,QAAA,EAAU,OAAO,SAAS,SAAS,CAAA;AAC5D,MAAA,SAAA,GAAY,SAAA,CAAU,SAAA;AACtB,MAAA,OAAA,GAAU,SAAA,CAAU,OAAA;AACpB,MAAA,YAAA,GAAe,SAAA,CAAU,KAAA;AAAA,IAC3B,CAAA,MAAO;AACL,MAAA,MAAM,IAAA,GAAO,YAAA,CAAa,OAAA,EAAS,KAAK,CAAA;AACxC,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,SAAS,IAAI,CAAA;AAClD,MAAA,QAAA,GAAW,IAAA;AACX,MAAA,SAAA,GAAY,IAAA,CAAK,SAAA;AACjB,MAAA,OAAA,GAAU,IAAA,CAAK,OAAA;AACf,MAAA,YAAA,GAAe,IAAA,CAAK,IAAA;AAAA,IACtB;AAGA,IAAA,IAAI,OAAA,CAAQ,QAAA,CAAS,OAAA,KAAY,KAAA,CAAM,OAAA,EAAS;AAC9C,MAAA,OAAO,SAAS,iBAAiB,CAAA;AAAA,IACnC;AAGA,IAAA,MAAM,UAAA,GAAc,WAAA,CAAY,SAAA,CAAU,QAAA,EAA0C,QAAA,EAChF,GAAA;AACJ,IAAA,IACE,CAAC,oBAAA,CAAqB,YAAA,EAAc,OAAA,CAAQ,UAAU,KAAA,CAAM,OAAO,CAAA,IAClE,OAAA,CAAQ,QAAA,KAAa,MAAA,IAAa,OAAA,CAAQ,QAAA,CAAS,QAAQ,UAAA,EAC5D;AACA,MAAA,OAAO,SAAS,8BAA8B,CAAA;AAAA,IAChD;AACA,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI;AACF,MAAA,QAAA,GAAW,MAAA,CAAO,aAAa,MAAM,CAAA;AAAA,IACvC,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,SAAS,iBAAiB,CAAA;AAAA,IACnC;AACA,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,QAAA,CAAS,EAAA,KAAOC,UAAAA,CAAW,KAAA,CAAM,KAAK,CAAA,EAAG;AAC3C,QAAA,OAAO,QAAA,CAAS,SAAS,iBAAiB,CAAA;AAAA,MAC5C;AACA,MAAA,IAAI,eAAA;AACJ,MAAA,IAAI;AACF,QAAA,eAAA,GAAkB,MAAA,CAAO,SAAS,KAAK,CAAA;AAAA,MACzC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,SAAS,iBAAiB,CAAA;AAAA,MACnC;AACA,MAAA,IAAI,oBAAoB,QAAA,EAAU;AAChC,QAAA,OAAO,QAAA,CAAS,SAAS,cAAc,CAAA;AAAA,MACzC;AAAA,IACF;AAGA,IAAA,MAAM,WAAW,KAAA,CAAM,MAAA,KAAW,MAAA,GAAS,YAAA,CAAa,KAAK,CAAA,GAAI,MAAA;AACjE,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAK;AACjC,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI;AACF,MAAA,SAAA,GAAY,MAAM,KAAA,CAAM,MAAA,CAAO,cAAA,CAAe,OAAO,GAAG,YAAY,CAAA;AAAA,IACtE,SAAS,GAAA,EAAK;AAGZ,MAAA,IAAI,CAAC,0BAAA,CAA2B,GAAG,KAAK,CAAC,KAAA,CAAM,iBAAgB,EAAG;AAChE,QAAA,MAAA,CAAO,KAAK,EAAE,GAAA,EAAK,kBAAkB,GAAG,CAAA,IAAK,qCAAqC,CAAA;AAAA,MACpF;AACA,MAAA,MAAM,IAAI,aAAA;AAAA,QACR,8BAAA;AAAA,QACA,CAAA,eAAA,EAAkB,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,gDAAA,CAAA;AAAA,QACpC,EAAE,OAAO,GAAA;AAAI,OACf;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,UAAU,OAAA,EAAS;AAEtB,MAAA,IAAI,KAAA,CAAM,iBAAgB,IAAK,kBAAA,CAAmB,IAAI,SAAA,CAAU,aAAA,IAAiB,EAAE,CAAA,EAAG;AACpF,QAAA,IAAI,SAAA,CAAU,kBAAkB,MAAA,EAAW;AACzC,UAAA,MAAA,CAAO,KAAA;AAAA,YACL,EAAE,cAAA,EAAgB,iBAAA,CAAkB,SAAA,CAAU,aAAa,CAAA,EAAE;AAAA,YAC7D;AAAA,WACF;AAAA,QACF;AACA,QAAA,MAAM,IAAI,aAAA;AAAA,UACR,8BAAA;AAAA,UACA,CAAA,eAAA,EAAkB,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,wCAAA;AAAA,SACtC;AAAA,MACF;AAGA,MAAA,IAAI,SAAA,CAAU,kBAAkB,MAAA,EAAW;AACzC,QAAA,MAAA,CAAO,KAAA;AAAA,UACL,EAAE,cAAA,EAAgB,iBAAA,CAAkB,SAAA,CAAU,aAAa,CAAA,EAAE;AAAA,UAC7D;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAO,QAAA,CAAS,cAAA,CAAe,SAAA,CAAU,aAAA,EAAe,iBAAiB,CAAC,CAAA;AAAA,IAC5E;AAGA,IAAA,MAAM,KAAA,GACJ,YAAA,KACC,SAAA,CAAU,KAAA,KAAU,MAAA,IAAa,gBAAA,CAAiB,KAAA,CAAM,OAAA,EAAS,SAAA,CAAU,KAAK,CAAA,GAC7E,SAAA,CAAU,KAAA,GACV,MAAA,CAAA;AACN,IAAA,IAAI,KAAA,CAAM,WAAW,KAAA,IAAS,KAAA,KAAU,QAAW,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,KAAA,EAAM;AACjF,IAAA,MAAM,aAAa,QAAA,KAAa,MAAA,GAAY,MAAM,WAAA,CAAY,QAAQ,IAAI,EAAC;AAC3E,IAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG,OAAA,GAAU,EAAE,GAAG,OAAA,EAAS,UAAU,UAAA,EAAW;AACxE,IAAA,OAAO;AAAA,MACL,MAAA,EAAQ,UAAA;AAAA,MACR,QAAA,EAAU,MAAA;AAAA,MACV,GAAI,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,KAAU,EAAC;AAAA,MACvC,KAAA,EAAO,QAAA,EAAU,EAAA,IAAM,KAAA,CAAM,KAAA;AAAA,MAC7B,MAAA,EAAQ,WAAA,CAAY,QAAA,EAAU,KAAA,CAAM,aAAa,CAAA;AAAA,MACjD,QAAA,EAAU,aAAA,CAAc,KAAA,EAAO,WAAA,CAAY,QAAQ,CAAA;AAAA,MACnD,OAAA,EAAS,QAAQ,QAAA,CAAS,OAAA;AAAA,MAC1B,KAAA,EAAO,MAAM,MAAA,KAAW,KAAA,GAAQA,WAAW,YAAA,CAAa,KAAK,IAAI,KAAA,CAAM,KAAA;AAAA,MACvE,SAAA;AAAA,MACA,QAAA,EAAU,EAAE,CAAC,2BAA2B,GAAG,OAAA;AAAQ,KACrD;AAAA,EACF;AAEA,EAAA,OAAO,MAAA;AAEP,EAAA,eAAe,YAAY,QAAA,EAAkE;AAC3F,IAAA,IAAI,KAAA;AACJ,IAAA,MAAM,IAAA,GAAO,IAAI,OAAA,CAAmB,CAAC,OAAA,KAAY;AAC/C,MAAA,KAAA,GAAQ,UAAA,CAAW,MAAM,OAAA,CAAQ,MAAS,GAAG,gBAAgB,CAAA;AAC7D,MAAA,KAAA,CAAM,KAAA,EAAM;AAAA,IACd,CAAC,CAAA;AACD,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM,YAAA,CAAa,KAAK,CAAC,CAAA;AAClF,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,MAAA,CAAO,IAAA;AAAA,QACL,EAAE,SAAS,gBAAA,EAAiB;AAAA,QAC5B;AAAA,OACF;AAAA,IACF;AACA,IAAA,OAAO,OAAO,EAAC;AAAA,EACjB;AACF;;;ACtMO,SAAS,0BACd,OAAA,EACqB;AACrB,EAAA,MAAM,SAAsC,QAAA,IAAY,OAAA,GAAU,OAAA,CAAQ,MAAA,GAAS,CAAC,OAAO,CAAA;AAC3F,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,MAAM,IAAI,aAAA,CAAc,gBAAA,EAAkB,kCAAkC,CAAA;AAAA,EAC9E;AAEA,EAAA,IACE,OAAA,CAAQ,iBAAA,KAAsB,MAAA,KAC7B,CAAC,MAAA,CAAO,SAAA,CAAU,OAAA,CAAQ,iBAAiB,CAAA,IAAK,OAAA,CAAQ,iBAAA,IAAqB,CAAA,CAAA,EAC9E;AACA,IAAA,MAAM,IAAI,aAAA;AAAA,MACR,gBAAA;AAAA,MACA,CAAA,iEAAA,EAAoE,QAAQ,iBAAiB,CAAA,CAAA;AAAA,KAC/F;AAAA,EACF;AACA,EAAA,MAAM;AAAA,IACJ,MAAA,EAAQ,aAAA;AAAA,IACR,cAAA;AAAA,IACA,IAAA,EAAM,MAAA;AAAA,IACN,cAAA;AAAA,IACA;AAAA,GACF,GAAI,aAAA,CAAc,MAAA,EAAQ,OAAO,CAAA;AACjC,EAAA,MAAM,YAAY,CAAC,UAAA,KAAuB,cAAA,CAAe,GAAA,CAAI,UAAU,CAAA,IAAK,aAAA;AAC5E,EAAA,MAAM,aAAA,GAAgB,CAAC,aAAA,EAAe,GAAG,cAAA,CAAe,MAAA,EAAQ,CAAA,CAAE,IAAA,CAAK,CAAC,IAAA,KAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AAEhG,EAAA,MAAM,KAAA,GAAQ,QAAQ,KAAA,IAAS,WAAA;AAC/B,EAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,IAAO,WAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,WAAA;AACjC,EAAA,MAAM,iBAAA,GAAoB,QAAQ,iBAAA,IAAqB,2BAAA;AAEvD,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,KAAA,GACnB,iBAAA,CAAkB;AAAA,IAChB,gBAAA,EAAkB,QAAQ,KAAA,CAAM,gBAAA;AAAA,IAChC,MAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACD,CAAA,GACD,MAAA;AAEJ,EAAA,MAAM,YAAY,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAA6B,KAAA,CAAM,WAAW,KAAK,CAAA;AACpF,EAAA,MAAM,SAAS,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,KAAK,CAAA;AAC5D,EAAA,MAAM,UAAU,MAAA,CAAO,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,WAAW,MAAM,CAAA;AAC9D,EAAA,MAAM,UAAA,GAAgC;AAAA,IACpC,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM,SAAA;AAAA,IACN,qBAAA,EAAuB,eAAA;AAAA,IACvB,aAAA,EAAe,CAAA,MAAA,EAAS,YAAY,CAAA,qBAAA,EAAwB;AAAA,MAC1D,GAAI,SAAA,CAAU,MAAA,GAAS,IAAI,CAAC,QAAQ,IAAI,EAAC;AAAA,MACzC,GAAI,MAAA,GAAS,CAAC,QAAQ,IAAI,EAAC;AAAA,MAC3B,GAAI,OAAA,GAAU,CAAC,MAAM,IAAI;AAAC,KAC5B,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,IACX,YAAA,EAAc;AAAA,MACZ,GAAI,SAAA,CAAU,MAAA,GAAS,IAAI,CAAC,WAAW,IAAI,EAAC;AAAA,MAC5C,GAAI,MAAA,GAAS,CAAC,WAAW,IAAI,EAAC;AAAA,MAC9B,GAAI,OAAA,GAAU,CAAC,YAAY,IAAI,EAAC;AAAA,MAChC,CAAA,EAAG,OAAA,CAAQ,WAAA,CAAY,IAAI,CAAA,YAAA,CAAA;AAAA,MAC3B,GAAI,SAAA,CAAU,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,SAAS,CAAA,GAAI,CAAC,UAAU,CAAA,GAAI,EAAC;AAAA,MAC5E,GAAI,SAAA,CAAU,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,MAAA,KAAW,SAAS,CAAA,GAAI,CAAC,SAAS,CAAA,GAAI,EAAC;AAAA,MAC3E,QAAA;AAAA,MACA,QAAQ,cAAc,CAAA,CAAA;AAAA,MACtB,oBAAA;AAAA,MACA,cAAA;AAAA,MACA,GAAI,aAAA,GAAgB,CAAC,iBAAiB,IAAI,EAAC;AAAA,MAC3C,GAAI,MAAA,GAAS,CAAC,iBAAiB,IAAI;AAAC,KACtC;AAAA,IACA,MAAA,EAAQ,QAAA;AAAA,IACR,WAAA,EAAa;AAAA,MACX,mCAAA;AAAA,MACA,aAAA;AAAA,MACA,yBAAA;AAAA,MACA;AAAA;AACF,GACF;AAIA,EAAA,MAAM,SAAA,GAAY,SACd,kBAAA,CAAmB,MAAM,OAAO,mBAAQ,CAAA,EAAG,8CAA8C,CAAA,GACzF,MAAA;AACJ,EAAA,MAAM,UAAA,GAAa,UACf,kBAAA,CAAmB,MAAM,OAAO,oBAAS,CAAA,EAAG,6BAA6B,CAAA,GACzE,MAAA;AACJ,EAAA,MAAM,MAAM,YAAY;AACtB,IAAA,IAAI,CAAC,SAAA;AACH,MAAA,MAAM,IAAI,aAAA,CAAc,gBAAA,EAAkB,8CAA8C,CAAA;AAC1F,IAAA,OAAO,SAAA;AAAA,EACT,CAAA;AACA,EAAA,MAAM,OAAO,YAAY;AACvB,IAAA,IAAI,CAAC,UAAA;AACH,MAAA,MAAM,IAAI,aAAA,CAAc,gBAAA,EAAkB,4CAA4C,CAAA;AACxF,IAAA,OAAO,UAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,GAAA,GAAuB;AAAA,IAC3B,OAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA;AAAA,IACA,GAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,MAAA;AAAA,IACA,GAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,SAAA,GAAY,sBAAsB,GAAG,CAAA;AAC3C,EAAA,MAAM,EAAE,iBAAA,EAAmB,iBAAA,EAAkB,GAAI,yBAAA;AAAA,IAC/C,GAAA;AAAA,IACA,wBAAwB,SAAS;AAAA,GACnC;AACA,EAAA,MAAM,SAAS,YAAA,CAAa,GAAA,EAAK,uBAAA,CAAwB,SAAA,EAAW,MAAM,CAAC,CAAA;AAC3E,EAAA,MAAM,MAAA,GAAS,aAAa,GAAG,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,kBAAkB,GAAG,CAAA;AAEpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,UAAA;AAAA,IACA,iBAAA;AAAA;AAAA,IAEA,GAAI,aAAA,GAAgB,EAAE,iBAAA,KAAsB,EAAC;AAAA,IAC7C,MAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA,EAAW,gBAAgB,GAAG,CAAA;AAAA,IAC9B,MAAA;AAAA,IACA,GAAI,MAAA,GACA;AAAA,MACE,KAAA,EAAO;AAAA,QACL,QAAQ,MAAA,CAAO,MAAA;AAAA,QACf,aAAA,EAAe,oBAAA;AAAA,QACf,SAAA,EAAW;AAAA;AACb,QAEF;AAAC,GACP;AACF;AAMA,SAAS,kBAAA,CAAsB,MAAwB,OAAA,EAA6B;AAClF,EAAA,MAAM,OAAA,GAAU,IAAA,EAAK,CAAE,KAAA,CAAM,CAAC,KAAA,KAAmB;AAC/C,IAAA,MAAM,IAAI,aAAA,CAAc,8BAAA,EAAgC,CAAA,eAAA,EAAkB,OAAO,CAAA,CAAA,EAAI;AAAA,MACnF;AAAA,KACD,CAAA;AAAA,EACH,CAAC,CAAA;AAED,EAAA,OAAA,CAAQ,MAAM,MAAM;AAAA,EAAC,CAAC,CAAA;AACtB,EAAA,OAAO,OAAA;AACT","file":"chunk-FKQK5XZA.js","sourcesContent":["// Protocol constants shared by the x402 provider's modules\nimport type { IdGenerator } from '../../../core';\n\nexport const X402_VERSION = 2;\nexport const X402_PROTOCOL_VERSION = String(X402_VERSION);\nexport const DEFAULT_MAX_TIMEOUT_SECONDS = 60;\nexport const DEFAULT_MIME_TYPE = 'application/json';\nexport const HEALTH_TIMEOUT_MS = 4_000;\n\n/** Prefixed random UUIDs, shared with the MPP rail */\nexport const DEFAULT_IDS: IdGenerator = {\n next: (prefix?: string) => `${prefix ? `${prefix}_` : ''}${crypto.randomUUID()}`,\n};\n","// Solana fee payers and NEAR relayers from the facilitator's `/supported`\nimport type { SupportedResponse } from '@x402/core/types';\nimport { CommerceError, type Logger } from '../../../core';\nimport { redactedErrorText } from '../../../core/errors';\nimport { normalizeAddress } from '../addresses';\nimport type { FacilitatorBinding } from '../facilitator';\nimport { X402_VERSION } from './constants';\nimport type { NearOffer, ProviderContext, SvmOffer } from './types';\n\n// Cache lifetime for `/supported` responses shared by Solana and NEAR\nconst SUPPORTED_TTL_MS = 60_000;\n\nexport type SupportedSource = () => Promise<SupportedResponse>;\n\n/** Creates a provider's shared `/supported` cache, refreshed on reads after expiry */\nexport function createSupportedSource(ctx: ProviderContext): SupportedSource {\n const { clock, remoteBinding } = ctx;\n let supportedSnapshot:\n | { readonly at: number; readonly response: Promise<SupportedResponse> }\n | undefined;\n\n function currentSupported(): Promise<SupportedResponse> {\n const now = clock.monotonicMs();\n if (supportedSnapshot && now - supportedSnapshot.at < SUPPORTED_TTL_MS) {\n return supportedSnapshot.response;\n }\n const remote = remoteBinding as Extract<FacilitatorBinding, { kind: 'remote' }>;\n const response = remote.supported();\n const snapshot = { at: now, response };\n supportedSnapshot = snapshot;\n // Discard failed requests so the next read retries\n response.catch(() => {\n if (supportedSnapshot === snapshot) supportedSnapshot = undefined;\n });\n return response;\n }\n\n return currentSupported;\n}\n\n/** Creates a Solana fee payer lookup for one provider */\nexport function createSvmFeePayerSource(\n currentSupported: SupportedSource,\n): (offer: SvmOffer) => Promise<string> {\n // Keep each network's previous fee payer while `/supported` still lists it,\n // so refreshing the cache does not needlessly change challenge terms\n const feePayers = new Map<string, string>();\n\n async function svmFeePayer(offer: SvmOffer): Promise<string> {\n let supported: SupportedResponse;\n try {\n supported = await currentSupported();\n } catch (cause) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: facilitator ${offer.binding.describe} did not answer /supported, which names the Solana fee payer`,\n { cause },\n );\n }\n const listed = supported.kinds.find(\n (kind) =>\n kind.x402Version === X402_VERSION &&\n kind.scheme === 'exact' &&\n kind.network === offer.network,\n )?.extra?.['feePayer'];\n const previous = feePayers.get(offer.network);\n const stillSigns =\n previous !== undefined &&\n (previous === listed || Object.values(supported.signers).some((s) => s.includes(previous)));\n const feePayer = stillSigns ? previous : listed;\n if (typeof feePayer !== 'string' || normalizeAddress(offer.profile, feePayer) === undefined) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: facilitator ${offer.binding.describe} names no Solana fee payer for ${offer.network}`,\n );\n }\n feePayers.set(offer.network, feePayer);\n return feePayer;\n }\n\n return svmFeePayer;\n}\n\n/**\n * Creates a lookup of NEAR relayer accounts for later transaction lookup.\n * A failed `/supported` read logs a warning and returns no relayers, allowing\n * an otherwise valid payment to verify.\n */\nexport function createNearRelayerSource(\n currentSupported: SupportedSource,\n logger: Logger,\n): (offer: NearOffer) => Promise<readonly string[]> {\n return async (offer) => {\n let supported: SupportedResponse;\n try {\n supported = await currentSupported();\n } catch (err) {\n logger.warn(\n { err: redactedErrorText(err) },\n `x402 verify(): facilitator ${offer.binding.describe} did not answer /supported; the NEAR locator names no relayer`,\n );\n return [];\n }\n // Accept both network-specific and CAIP-family signer entries\n const { signers } = supported;\n return [...new Set([...(signers[offer.network] ?? []), ...(signers['near:*'] ?? [])])];\n };\n}\n","import { CommerceError } from '../../core';\n\n/**\n * Sends a Solana or NEAR JSON-RPC request with the caller's timeout.\n * Node-reported JSON-RPC errors throw `PAYMENT_PROVIDER_UNAVAILABLE`, with the\n * error object in `details.rpcError`.\n */\nexport async function jsonRpc(\n rpcUrl: string,\n method: string,\n params: unknown,\n timeoutMs: number,\n): Promise<unknown> {\n const response = await fetch(rpcUrl, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify({ jsonrpc: '2.0', id: 1, method, params }),\n signal: AbortSignal.timeout(timeoutMs),\n });\n const body = (await response.json()) as { result?: unknown; error?: unknown };\n if (body.error !== undefined) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `RPC ${method} failed: ${JSON.stringify(body.error)}`,\n { details: { rpcError: body.error } },\n );\n }\n return body.result;\n}\n","// Readiness: each offer's chain, asset and facilitator support, cached briefly\n\nimport type { SupportedKind } from '@x402/core/types';\nimport { PERMIT2_ADDRESS, x402ExactPermit2ProxyAddress } from '@x402/evm';\nimport { erc20Abi } from 'viem';\nimport { type AdapterHealth, CommerceError } from '../../../core';\nimport { redactedErrorText } from '../../../core/errors';\nimport { isRecord } from '../../../core/is-record';\nimport { normalizeAddress } from '../addresses';\nimport type { createLocalPublicClient } from '../chain';\nimport type { FacilitatorBinding } from '../facilitator';\nimport { jsonRpc } from '../json-rpc';\nimport { describeDeploymentMode } from '../networks';\nimport { x402OfferName } from '../options';\nimport { HEALTH_TIMEOUT_MS, X402_VERSION } from './constants';\nimport type { NearOffer, Offer, ProviderContext, SvmOffer } from './types';\n\n/** Builds the provider's `health`, which probes every offer and caches the result */\nexport function createHealthCheck(ctx: ProviderContext): () => Promise<AdapterHealth> {\n const { offers, clock, deploymentMode, remoteBinding, svm, near } = ctx;\n\n // One offer's chain, asset and facilitator support. `kinds` fetches the\n // remote facilitator's `/supported` once per probe, shared by every offer.\n async function offerHealth(\n offer: Offer,\n kinds: () => Promise<readonly SupportedKind[]>,\n ): Promise<{ readonly status: 'pass' | 'fail'; readonly detail: string }> {\n if (offer.family === 'svm') return svmOfferHealth(offer, kinds);\n if (offer.family === 'near') return nearOfferHealth(offer, kinds);\n const { profile, rpcOrigin, healthClient, binding } = offer;\n const chainId = await healthClient.getChainId();\n if (chainId !== profile.chainId) {\n return {\n status: 'fail',\n detail: `RPC at ${rpcOrigin} reports chain id ${chainId}, expected ${profile.chainId} (${profile.displayName})`,\n };\n }\n\n const code = await healthClient.getCode({ address: offer.asset });\n if (!code || code === '0x') {\n return {\n status: 'fail',\n detail: `No contract code found at configured asset address ${offer.asset}`,\n };\n }\n // Decimals scale signed amounts; verify them on-chain, as for Solana and NEAR\n const decimals = await healthClient.readContract({\n address: offer.asset,\n abi: erc20Abi,\n functionName: 'decimals',\n });\n if (decimals !== offer.assetDecimals) {\n return {\n status: 'fail',\n detail: `Token ${offer.asset} has ${decimals} decimals, configured ${offer.assetDecimals}`,\n };\n }\n // Permit2 offers settle through two contracts the merchant does not deploy\n if (offer.method === 'permit2') {\n for (const [name, address] of PERMIT2_CONTRACTS) {\n const deployed = await healthClient.getCode({ address });\n if (!deployed || deployed === '0x') {\n return {\n status: 'fail',\n detail: `No ${name} contract code found at ${address} on ${profile.displayName}`,\n };\n }\n }\n }\n const contracts = `asset ${offer.asset}${offer.method === 'permit2' ? ', Permit2 and its x402 proxy' : ''}`;\n\n if (binding.kind === 'remote') {\n // Reachable is not enough: a facilitator that does not carry our\n // scheme on our network fails every payment after the buyer has signed\n const supportsUs = (await kinds()).some(\n (kind) =>\n kind.x402Version === X402_VERSION &&\n kind.scheme === 'exact' &&\n kind.network === offer.network,\n );\n if (!supportsUs) {\n return {\n status: 'fail',\n detail:\n `Facilitator ${binding.describe} does not advertise x402 v${X402_VERSION} scheme=exact ` +\n `on ${offer.network} (${profile.displayName}); no payment on this deployment can settle`,\n };\n }\n return {\n status: 'pass',\n detail:\n `${describeDeploymentMode(deploymentMode)}: RPC ${rpcOrigin} reachable, chain id ` +\n `${profile.chainId} (${profile.displayName}), ${contracts} have code, ` +\n `facilitator ${binding.describe} supports exact/${offer.network}`,\n };\n }\n\n // An RPC reports whatever chain id it was started with, so the id cannot\n // prove this is a dev chain. An Anvil-only RPC method must answer before\n // a local facilitator counts as healthy.\n const isAnvil = await probeIsAnvilNode(healthClient);\n if (!isAnvil) {\n return {\n status: 'fail',\n detail:\n `RPC at ${rpcOrigin} reports chain id ${profile.chainId} but does not answer ` +\n '\"anvil_nodeInfo\", so it does not look like a local Anvil dev node. Refusing to treat it ' +\n 'as safe for a local-facilitator dev key.',\n };\n }\n\n return {\n status: 'pass',\n detail:\n `${describeDeploymentMode(deploymentMode)}: RPC ${rpcOrigin} reachable, chain id ` +\n `${profile.chainId}, ${contracts} have code, confirmed Anvil dev node`,\n };\n }\n\n // A Solana offer's cluster, mint and fee payer. The CAIP-2 reference is the\n // start of the genesis hash, so the RPC proves which cluster it serves.\n async function svmOfferHealth(\n offer: SvmOffer,\n kinds: () => Promise<readonly SupportedKind[]>,\n ): Promise<{ readonly status: 'pass' | 'fail'; readonly detail: string }> {\n const { profile, rpcOrigin, binding } = offer;\n // A missing Solana peer fails readiness, not the first paid request\n const svmModule = await svm();\n const genesis = await rpc(offer.rpcUrl, 'getGenesisHash', []);\n const cluster = typeof genesis === 'string' ? `solana:${genesis.slice(0, 32)}` : undefined;\n if (cluster !== offer.network) {\n return {\n status: 'fail',\n detail: `RPC at ${rpcOrigin} serves ${cluster ?? 'an unknown cluster'}, expected ${offer.network} (${profile.displayName})`,\n };\n }\n const mint = await rpc(offer.rpcUrl, 'getAccountInfo', [offer.asset, { encoding: 'base64' }]);\n const mintInfo = readMint(mint);\n if (mintInfo === undefined) {\n return {\n status: 'fail',\n detail: `No initialized token mint found at configured asset address ${offer.asset}`,\n };\n }\n const { decimals, tokenProgram } = mintInfo;\n if (decimals !== offer.assetDecimals) {\n return {\n status: 'fail',\n detail: `Mint ${offer.asset} has ${decimals} decimals, configured ${offer.assetDecimals}`,\n };\n }\n // Without the payee's token account every payment fails the facilitator's\n // simulation, after the buyer signed\n const payeeAccount = await svmModule.associatedTokenAccount(\n offer.payTo,\n offer.asset,\n tokenProgram,\n );\n const account = await rpc(offer.rpcUrl, 'getAccountInfo', [\n payeeAccount,\n { encoding: 'base64' },\n ]);\n const accountValue = isRecord(account) ? account['value'] : undefined;\n if (!isRecord(accountValue) || accountValue['owner'] !== tokenProgram) {\n return {\n status: 'fail',\n detail: `payTo ${offer.payTo} has no token account for mint ${offer.asset}; create its associated token account (${payeeAccount}) before taking payments`,\n };\n }\n const feePayer = (await kinds()).find(\n (kind) =>\n kind.x402Version === X402_VERSION &&\n kind.scheme === 'exact' &&\n kind.network === offer.network,\n )?.extra?.['feePayer'];\n if (typeof feePayer !== 'string' || normalizeAddress(profile, feePayer) === undefined) {\n return {\n status: 'fail',\n detail:\n `Facilitator ${binding.describe} does not advertise x402 v${X402_VERSION} scheme=exact ` +\n `on ${offer.network} (${profile.displayName}) with a fee payer; no payment on this deployment can settle`,\n };\n }\n return {\n status: 'pass',\n detail:\n `${describeDeploymentMode(deploymentMode)}: RPC ${rpcOrigin} serves ${profile.displayName}, ` +\n `mint ${offer.asset} has ${decimals} decimals and a token account for ${offer.payTo}, ` +\n `facilitator ${binding.describe} supports ` +\n `exact/${offer.network} with fee payer ${feePayer}`,\n };\n }\n\n // A NEAR offer's chain, token and merchant registration. The RPC's `status`\n // names the chain it serves; an account suffix such as `.testnet` proves nothing.\n async function nearOfferHealth(\n offer: NearOffer,\n kinds: () => Promise<readonly SupportedKind[]>,\n ): Promise<{ readonly status: 'pass' | 'fail'; readonly detail: string }> {\n const { profile, rpcOrigin, binding, rpcUrl } = offer;\n // A missing NEAR peer fails readiness, not the first paid request\n await near();\n const status = await rpc(rpcUrl, 'status', []);\n const chainId = isRecord(status) ? status['chain_id'] : undefined;\n const expected = offer.network.slice('near:'.length);\n if (chainId !== expected) {\n return {\n status: 'fail',\n detail: `RPC at ${rpcOrigin} serves chain ${String(chainId ?? 'unknown')}, expected ${expected} (${profile.displayName})`,\n };\n }\n const token = await rpc(rpcUrl, 'query', {\n request_type: 'view_account',\n finality: 'final',\n account_id: offer.asset,\n });\n if (!isRecord(token) || token['code_hash'] === NEAR_EMPTY_CODE_HASH) {\n return {\n status: 'fail',\n detail: `No contract code found at configured asset account ${offer.asset}`,\n };\n }\n const metadata = await nearView(rpcUrl, offer.asset, 'ft_metadata', {});\n const decimals = isRecord(metadata) ? metadata['decimals'] : undefined;\n if (decimals !== offer.assetDecimals) {\n return {\n status: 'fail',\n detail: `Token ${offer.asset} has ${String(decimals)} decimals, configured ${offer.assetDecimals}`,\n };\n }\n // An unregistered recipient makes every transfer fail after the relayer\n // paid for it. A token without NEP-145 storage management needs none.\n let registered = true;\n try {\n registered =\n (await nearView(rpcUrl, offer.asset, 'storage_balance_of', {\n account_id: offer.payTo,\n })) !== null;\n } catch (err) {\n if (!/MethodNotFound|MethodResolveError/i.test(redactedErrorText(err))) throw err;\n }\n if (!registered) {\n return {\n status: 'fail',\n detail: `payTo ${offer.payTo} has no storage registered with token ${offer.asset}; register it (NEP-145 storage_deposit) before taking payments`,\n };\n }\n const listed = (await kinds()).some(\n (kind) =>\n kind.x402Version === X402_VERSION &&\n kind.scheme === 'exact' &&\n kind.network === offer.network,\n );\n if (!listed) {\n return {\n status: 'fail',\n detail:\n `Facilitator ${binding.describe} does not advertise x402 v${X402_VERSION} scheme=exact ` +\n `on ${offer.network} (${profile.displayName}); no payment on this deployment can settle`,\n };\n }\n return {\n status: 'pass',\n detail:\n `${describeDeploymentMode(deploymentMode)}: RPC ${rpcOrigin} serves ${expected}, ` +\n `token ${offer.asset} has ${decimals} decimals and storage for ${offer.payTo}, ` +\n `facilitator ${binding.describe} supports exact/${offer.network}`,\n };\n }\n\n // Check all offers and report each status; any failure fails readiness.\n // Challenges retain the complete offer list.\n async function computeHealth(): Promise<AdapterHealth> {\n const startedAt = clock.monotonicMs();\n const checkedAt = clock.nowIso();\n let supported: Promise<readonly SupportedKind[]> | undefined;\n const kinds = () => {\n supported ??= (remoteBinding as Extract<FacilitatorBinding, { kind: 'remote' }>)\n .supported()\n .then((response) => response.kinds);\n return supported;\n };\n\n const results = await Promise.all(\n offers.map((offer) =>\n offerHealth(offer, kinds).catch((err: unknown) => ({\n status: 'fail' as const,\n detail: `x402 health check failed: ${redactedErrorText(err)}`,\n })),\n ),\n );\n const failed = results.some((result) => result.status === 'fail');\n const details = offers.flatMap((offer, index) => {\n const result = results[index] as (typeof results)[number];\n if (failed && result.status !== 'fail') return [];\n return [offers.length === 1 ? result.detail : `${x402OfferName(offer)}: ${result.detail}`];\n });\n return {\n status: failed ? 'fail' : 'pass',\n detail: details.join('; '),\n components: offers.map((offer, index) => ({\n name: x402OfferName(offer),\n status: (results[index] as (typeof results)[number]).status,\n })),\n checkedAt,\n durationMs: clock.monotonicMs() - startedAt,\n };\n }\n\n // A probe makes several upstream calls, and `/ready` is unauthenticated.\n // A short TTL plus one shared in-flight probe keeps upstream volume independent\n // of request volume, for library callers as well as the gateway, whose\n // readiness probe adds its own cache on top. Pass and fail share the TTL: a\n // shorter one for fail would bring the load back during an RPC outage,\n // exactly when each call is slowest.\n const HEALTH_CACHE_MS = 5_000;\n let cachedHealth: { at: number; value: AdapterHealth } | undefined;\n let inFlightHealth: Promise<AdapterHealth> | undefined;\n\n async function health(): Promise<AdapterHealth> {\n const now = clock.monotonicMs();\n if (cachedHealth && now - cachedHealth.at < HEALTH_CACHE_MS) {\n return cachedHealth.value;\n }\n if (inFlightHealth) return inFlightHealth;\n\n inFlightHealth = computeHealth()\n .then((value) => {\n cachedHealth = { at: clock.monotonicMs(), value };\n return value;\n })\n .finally(() => {\n inFlightHealth = undefined;\n });\n return inFlightHealth;\n }\n\n return health;\n}\n\nconst PERMIT2_CONTRACTS = [\n ['Permit2', PERMIT2_ADDRESS],\n ['x402 exact Permit2 proxy', x402ExactPermit2ProxyAddress],\n] as const;\n\nconst TOKEN_PROGRAMS: ReadonlySet<string> = new Set([\n 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA',\n 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb',\n]);\n\n// The decimals and owning token program of an initialized SPL Token or\n// Token-2022 mint, from a base64 `getAccountInfo` result: byte 44 holds the\n// decimals, byte 45 the initialized flag\nfunction readMint(\n result: unknown,\n): { readonly decimals: number; readonly tokenProgram: string } | undefined {\n const value = isRecord(result) ? result['value'] : undefined;\n if (!isRecord(value)) return undefined;\n const owner = value['owner'];\n if (typeof owner !== 'string' || !TOKEN_PROGRAMS.has(owner)) return undefined;\n const data = value['data'];\n if (!Array.isArray(data) || typeof data[0] !== 'string') return undefined;\n const bytes = Buffer.from(data[0], 'base64');\n const decimals = bytes[44];\n return bytes.length >= 82 && bytes[45] === 1 && decimals !== undefined\n ? { decimals, tokenProgram: owner }\n : undefined;\n}\n\n// One JSON-RPC call for health(), bounded like the EVM client's\nconst rpc = (rpcUrl: string, method: string, params: unknown) =>\n jsonRpc(rpcUrl, method, params, HEALTH_TIMEOUT_MS);\n\n// A NEAR contract view call at final finality, its result parsed as JSON\nasync function nearView(\n rpcUrl: string,\n accountId: string,\n method: string,\n args: Record<string, unknown>,\n): Promise<unknown> {\n const result = await rpc(rpcUrl, 'query', {\n request_type: 'call_function',\n finality: 'final',\n account_id: accountId,\n method_name: method,\n args_base64: Buffer.from(JSON.stringify(args)).toString('base64'),\n });\n const bytes = isRecord(result) ? result['result'] : undefined;\n if (!Array.isArray(bytes)) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `NEAR view ${method} returned no result`,\n );\n }\n return JSON.parse(Buffer.from(bytes as number[]).toString('utf8'));\n}\n\n// The code hash of an account without a contract\nconst NEAR_EMPTY_CODE_HASH = '11111111111111111111111111111111';\n\n/**\n * True only when the RPC answers Anvil's own `anvil_nodeInfo` method. A public\n * node, Base Sepolia included, answers \"method not found\". Never throws.\n */\nasync function probeIsAnvilNode(\n client: ReturnType<typeof createLocalPublicClient>,\n): Promise<boolean> {\n // Anvil-only method, absent from viem's typed PublicRpcSchema, hence the cast\n const request = client.request as unknown as (args: {\n method: string;\n params: unknown[];\n }) => Promise<unknown>;\n try {\n await request({ method: 'anvil_nodeInfo', params: [] });\n return true;\n } catch {\n return false;\n }\n}\n","/**\n * viem clients for the x402 provider, built on the configured `rpcUrl`. The\n * SDK uses the client it is handed, so the provider's chain calls reach no\n * other RPC.\n *\n * `createLocalPublicClient` backs health checks on the configured network.\n * `createLocalFacilitatorClient` handles settlement and defaults to the local\n * chain ID, the only network the gateway's in-process facilitator serves.\n * Deployment tools and test facilitators can pass another chain ID.\n */\nimport {\n type Account,\n type Chain,\n type Client,\n createPublicClient,\n createWalletClient,\n http,\n type PublicActions,\n type PublicClient,\n publicActions,\n type Transport,\n type WalletActions,\n} from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { LOCAL_CHAIN_ID } from './networks';\n\n/** A wallet client that can also read chain state, matching x402's `SignerWallet` */\nexport type LocalFacilitatorClient = Client<\n Transport,\n Chain,\n Account,\n undefined,\n PublicActions<Transport, Chain, Account> & WalletActions<Chain, Account>\n>;\n\n/** CAIP-2 identifier the local dev chain is advertised under */\nexport const LOCAL_NETWORK = `eip155:${LOCAL_CHAIN_ID}`;\n\n/**\n * Chain id carried by a CAIP-2 `eip155` network identifier, or `undefined` for\n * anything else. A caller must never fall back to a default chain id, because\n * the chain id is part of the EIP-712 domain the buyer signed.\n */\nexport function chainIdFromCaip2(network: string): number | undefined {\n const match = /^eip155:(\\d+)$/.exec(network);\n if (!match?.[1]) return undefined;\n const chainId = Number(match[1]);\n return Number.isSafeInteger(chainId) && chainId > 0 ? chainId : undefined;\n}\n\n// `chainId` defaults to the local dev chain; callers on another chain pass its id\nfunction buildLocalChain(rpcUrl: string, chainId: number = LOCAL_CHAIN_ID): Chain {\n return {\n id: chainId,\n name: 'agent-commerce-local',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: { http: [rpcUrl] },\n },\n } satisfies Chain;\n}\n\n/**\n * A read-only viem `PublicClient`.\n *\n * `timeoutMs` goes to viem's `http()` transport, which aborts the underlying\n * `fetch` when it expires rather than only abandoning the wait. Omit it to keep\n * viem's default of 10s.\n */\nexport function createLocalPublicClient(\n rpcUrl: string,\n timeoutMs?: number,\n chainId?: number,\n): PublicClient {\n return createPublicClient({\n chain: buildLocalChain(rpcUrl, chainId),\n transport: http(rpcUrl, timeoutMs !== undefined ? { timeout: timeoutMs } : undefined),\n });\n}\n\n/**\n * A viem `WalletClient` extended with public actions, for the local\n * facilitator signer only: the SDK's settlement both writes and reads through\n * it.\n *\n * LOCAL DEVELOPMENT ONLY. The key behind it pays gas on the dev chain. It is\n * usually an Anvil well-known key, and must never be a merchant, buyer or\n * production key.\n */\nexport function createLocalFacilitatorClient(\n rpcUrl: string,\n signerPrivateKey: `0x${string}`,\n chainId?: number,\n): LocalFacilitatorClient {\n const chain = buildLocalChain(rpcUrl, chainId);\n const account = privateKeyToAccount(signerPrivateKey);\n return createWalletClient({\n account,\n chain,\n transport: http(rpcUrl),\n }).extend(publicActions);\n}\n","/**\n * Shared facilitator interface and remote HTTP binding. The in-process EVM\n * binding lives in `local-facilitator.ts` to keep EVM peers out of this module.\n * `@x402/core` loads statically; `@coinbase/x402` loads only for `auth.type: cdp`.\n * Both bindings use the SDK to verify authorizations and broadcast transfers.\n *\n * Each verify or settle call gets a session with its own `transportFailed()`\n * flag, isolating concurrent payments' transport failures.\n */\nimport { HTTPFacilitatorClient } from '@x402/core/http';\nimport {\n type Network,\n type PaymentPayload,\n type PaymentRequirements,\n SettleError,\n type SettleResponse,\n type SupportedResponse,\n VerifyError,\n type VerifyResponse,\n} from '@x402/core/types';\nimport { CommerceError } from '../../core';\nimport type { FacilitatorAuth } from './guardrails';\n\n/** One verify or one settle, with its own transport-failure flag */\nexport interface FacilitatorSession {\n verify(payload: PaymentPayload, requirements: PaymentRequirements): Promise<VerifyResponse>;\n settle(payload: PaymentPayload, requirements: PaymentRequirements): Promise<SettleResponse>;\n /**\n * True when the call produced no verdict: the local binding sets it when an\n * RPC call to the chain fails in transport, the remote binding on every\n * throw other than a 400 refusal of a verify or a settle.\n *\n * The SDK's `exact`/EVM scheme reports its own RPC errors as ordinary\n * verification failures: an unreachable node comes back as\n * `invalid_exact_evm_signature`. Without this flag the buyer would be told\n * their signature is bad for a payment nothing checked.\n */\n transportFailed(): boolean;\n}\n\ninterface BindingBase {\n /** Human-readable, never a credential */\n readonly describe: string;\n open(): FacilitatorSession;\n}\n\nexport type FacilitatorBinding =\n | (BindingBase & { readonly kind: 'local' })\n | (BindingBase & {\n readonly kind: 'remote';\n /**\n * SDK-parsed `/supported` response, including kinds and their `extra`\n * (such as Solana's fee payer), extensions and signers. health() reads\n * it, and so does a Solana challenge, which names the fee payer\n */\n supported(): Promise<SupportedResponse>;\n });\n\n/** Bounds each receipt wait of the in-process facilitator, and each verify or settle request to a remote one */\nexport const SETTLEMENT_CONFIRMATION_TIMEOUT_MS = 60_000;\n/**\n * Bounds a remote `/supported` read, retries included. Readiness and every\n * Solana challenge wait on it, and the SDK retries a 429 for up to 30 s a time.\n */\nexport const SUPPORTED_TIMEOUT_MS = 10_000;\n\nexport interface RemoteFacilitatorOptions {\n readonly url: string;\n readonly auth: FacilitatorAuth;\n}\n\n// The SDK's path-keyed auth-header shape. A flat object throws inside it\ntype AuthHeaderFactory = () => Promise<Record<string, Record<string, string>>>;\n\n/**\n * CDP needs a fresh JWT per request over method, host and path, which a static\n * header cannot express. The optional peer `@coinbase/x402` does the signing.\n * It is imported dynamically, so only `auth.type: cdp` pulls in the CDP SDK and\n * its Solana, axios and JOSE dependencies.\n *\n * The import starts at construction, so a missing peer fails the health check\n * before any payment needs it. A payment that arrives first fails as\n * `PAYMENT_PROVIDER_UNAVAILABLE`, never as a rejection blamed on the buyer.\n */\nfunction cdpAuthHeaders(apiKeyId: string, apiKeySecret: string): AuthHeaderFactory {\n const loading = import('@coinbase/x402').then(\n (mod) => mod.createCdpAuthHeaders(apiKeyId, apiKeySecret),\n (cause: unknown) => {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: facilitator.auth.type is \"cdp\", which needs the optional peer ' +\n '\"@coinbase/x402\". Install it (npm install @coinbase/x402), or use a facilitator ' +\n 'that accepts a static token with auth.type \"bearer\".',\n { cause },\n );\n },\n );\n // Nothing awaits this before the first call, so without a handler a failed\n // import would be an unhandled rejection at startup\n loading.catch(() => {});\n\n return async () => {\n const create = await loading;\n if (!create) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: @coinbase/x402 returned no auth-header factory',\n );\n }\n return (await create()) as Record<string, Record<string, string>>;\n };\n}\n\n/**\n * A 400 from `/verify` whose body names an `invalidReason` is the facilitator\n * refusing the payment, so it returns as an invalid verdict. The SDK throws it\n * as a `VerifyError`, which keeps the status and reason but not `isValid`.\n * A 400 without a reason and every other status, 401, 403, 429 and 5xx\n * included, are rethrown as \"no verdict\".\n */\nfunction verdictFromVerifyError(err: unknown): VerifyResponse {\n if (\n err instanceof VerifyError &&\n err.statusCode === 400 &&\n typeof err.invalidReason === 'string'\n ) {\n return {\n isValid: false,\n invalidReason: err.invalidReason,\n ...(err.payer !== undefined ? { payer: err.payer } : {}),\n };\n }\n throw err;\n}\n\n/**\n * Treat a remote 400 as a refusal only when it names a reason and no\n * transaction. A transaction may have broadcast; other errors have no\n * verdict. `SettleError` does not retain the response's `success`.\n */\nfunction verdictFromSettleError(err: unknown, network: Network): SettleResponse {\n if (\n err instanceof SettleError &&\n err.statusCode === 400 &&\n typeof err.errorReason === 'string' &&\n err.errorReason !== '' &&\n !err.transaction\n ) {\n return {\n success: false,\n errorReason: err.errorReason,\n transaction: '',\n network: err.network ?? network,\n ...(err.payer !== undefined ? { payer: err.payer } : {}),\n };\n }\n throw err;\n}\n\n/**\n * An HTTP facilitator. The SDK client produces the auth headers per request;\n * this module never logs them, and they appear neither in `/.well-known` nor\n * in `describe`.\n */\nexport function createRemoteFacilitatorBinding(\n options: RemoteFacilitatorOptions,\n): FacilitatorBinding {\n const auth = options.auth;\n let createAuthHeaders: AuthHeaderFactory | undefined;\n if (auth.type === 'bearer') {\n createAuthHeaders = async () => {\n // Path-keyed, as the SDK requires (see `AuthHeaderFactory`)\n const headers = { Authorization: `Bearer ${auth.token}` };\n return { verify: headers, settle: headers, supported: headers };\n };\n } else if (auth.type === 'cdp') {\n createAuthHeaders = cdpAuthHeaders(auth.apiKeyId, auth.apiKeySecret);\n }\n\n const client = new HTTPFacilitatorClient({\n url: options.url,\n timeoutMs: SETTLEMENT_CONFIRMATION_TIMEOUT_MS,\n ...(createAuthHeaders ? { createAuthHeaders } : {}),\n });\n const supportedClient = new HTTPFacilitatorClient({\n url: options.url,\n timeoutMs: SUPPORTED_TIMEOUT_MS,\n ...(createAuthHeaders ? { createAuthHeaders } : {}),\n });\n\n return {\n kind: 'remote',\n describe: `remote ${new URL(options.url).origin} (auth=${auth.type})`,\n open(): FacilitatorSession {\n let failed = false;\n const watch = async <T>(call: () => Promise<T>): Promise<T> => {\n try {\n return await call();\n } catch (err) {\n // After known 400 refusals, a throw gives no verdict. It may be\n // transport or authentication failure; settlement may have broadcast.\n // Do not record it as a payer refusal.\n failed = true;\n throw err;\n }\n };\n return {\n verify: (payload, requirements) =>\n watch(() => client.verify(payload, requirements).catch(verdictFromVerifyError)),\n settle: (payload, requirements) =>\n watch(() =>\n client\n .settle(payload, requirements)\n .catch((err: unknown) => verdictFromSettleError(err, requirements.network)),\n ),\n transportFailed: () => failed,\n };\n },\n supported: () => withDeadline(supportedClient.getSupported(), SUPPORTED_TIMEOUT_MS),\n };\n}\n\n// The SDK bounds each attempt but not its retry waits. `Promise.race` keeps\n// a handler on the abandoned call, so its later rejection is not unhandled.\nfunction withDeadline<T>(call: Promise<T>, ms: number): Promise<T> {\n let timer: NodeJS.Timeout | undefined;\n const deadline = new Promise<never>((_, reject) => {\n timer = setTimeout(\n () =>\n reject(\n new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: facilitator /supported did not answer within ${ms / 1000} s`,\n ),\n ),\n ms,\n );\n timer.unref();\n });\n return Promise.race([call, deadline]).finally(() => clearTimeout(timer));\n}\n","/**\n * In-process `x402Facilitator` using viem through `@x402/evm`.\n * EVM imports stay here so the remote binding can load without them.\n */\nimport { x402Facilitator } from '@x402/core/facilitator';\nimport type { Network } from '@x402/core/types';\nimport { toFacilitatorEvmSigner } from '@x402/evm';\nimport { registerExactEvmScheme } from '@x402/evm/exact/facilitator';\nimport type { LocalFacilitatorClient } from './chain';\nimport {\n type FacilitatorBinding,\n type FacilitatorSession,\n SETTLEMENT_CONFIRMATION_TIMEOUT_MS,\n} from './facilitator';\n\n/**\n * Registers `exact`/EVM for one network, so a payload naming another chain\n * finds no matching scheme\n */\nexport function createLocalFacilitatorBinding(\n client: LocalFacilitatorClient,\n network: string,\n isTransportError: (err: unknown) => boolean,\n): FacilitatorBinding {\n const build = (): { facilitator: x402Facilitator; failed: () => boolean } => {\n let failed = false;\n const watch = <T>(promise: Promise<T>): Promise<T> =>\n promise.catch((err: unknown) => {\n if (isTransportError(err)) failed = true;\n throw err;\n });\n\n // Watch the `FacilitatorEvmSigner` methods for transport failures and expose\n // `client.account.address` as the flat `address` the SDK expects\n const signer = {\n address: client.account.address,\n readContract: (args: Parameters<LocalFacilitatorClient['readContract']>[0]) =>\n watch(client.readContract(args)),\n verifyTypedData: (args: Parameters<LocalFacilitatorClient['verifyTypedData']>[0]) =>\n watch(client.verifyTypedData(args)),\n writeContract: (args: Parameters<LocalFacilitatorClient['writeContract']>[0]) =>\n watch(client.writeContract(args)),\n sendTransaction: (args: Parameters<LocalFacilitatorClient['sendTransaction']>[0]) =>\n watch(client.sendTransaction(args)),\n waitForTransactionReceipt: (\n args: Parameters<LocalFacilitatorClient['waitForTransactionReceipt']>[0],\n ) => watch(client.waitForTransactionReceipt(args)),\n getCode: (args: Parameters<LocalFacilitatorClient['getCode']>[0]) =>\n watch(client.getCode(args)),\n } as unknown as Parameters<typeof toFacilitatorEvmSigner>[0];\n\n // Bound receipt waits so a timeout returns `settlement_pending` with the\n // broadcast hash\n const facilitator = registerExactEvmScheme(new x402Facilitator(), {\n signer: toFacilitatorEvmSigner(signer, {\n confirmationTimeoutMs: SETTLEMENT_CONFIRMATION_TIMEOUT_MS,\n }),\n networks: network as Network,\n });\n\n return { facilitator, failed: () => failed };\n };\n\n return {\n kind: 'local',\n describe: 'local (in-process)',\n open(): FacilitatorSession {\n const { facilitator, failed } = build();\n return {\n verify: (payload, requirements) => facilitator.verify(payload, requirements),\n settle: (payload, requirements) => facilitator.settle(payload, requirements),\n transportFailed: failed,\n };\n },\n };\n}\n","/**\n * How the provider reads a facilitator's verify and settle results: which\n * reasons are verdicts, which leave the outcome unknown, and which errors mean\n * no verdict was obtained\n */\nimport {\n BaseError,\n ContractFunctionRevertedError,\n HttpRequestError,\n TimeoutError,\n WaitForTransactionReceiptTimeoutError,\n} from 'viem';\nimport { redactedErrorText } from '../../../core/errors';\n\n// `SettleResponse.errorReason` the SDK uses for \"broadcast, not confirmed\"\nexport const SETTLEMENT_PENDING_REASON = 'settlement_pending';\n/**\n * Each family's catch-all for a throw from the broadcast call, and its reason\n * for a transaction that failed on chain. Only the second carries a\n * transaction reference. A failure the SDK recognizes before the broadcast gets\n * its own reason instead. The EVM Permit2 path appends the thrown message as\n * `: <message>`. On NEAR the second is a failed inner `ft_transfer` receipt.\n */\nconst TRANSACTION_FAILED_REASONS = [\n 'invalid_exact_evm_transaction_failed',\n 'invalid_exact_svm_transaction_failed',\n 'settlement_failed',\n];\nexport const isTransactionFailedReason = (reason: string | undefined): boolean =>\n reason !== undefined &&\n TRANSACTION_FAILED_REASONS.some((known) => reason === known || reason.startsWith(`${known}:`));\n/**\n * The one failure reason per family that names a transaction and proves\n * nothing moved: a reverted EVM receipt, a Solana transaction that failed on\n * chain, or a failed inner NEAR `ft_transfer` receipt. Any other failure that\n * names a transaction may have moved funds. The EVM SDK, for one, reports a\n * mined transfer whose `Transfer` log it cannot match as a failure with the hash.\n */\nexport const ON_CHAIN_FAILURE_REASONS: Readonly<Record<'evm' | 'svm' | 'near', string>> = {\n evm: 'invalid_exact_evm_transaction_failed',\n svm: 'invalid_exact_svm_transaction_failed',\n near: 'settlement_failed',\n};\n/**\n * Solana outcomes that leave the payment unknown: the facilitator is already\n * settling the same transaction for another request, or it confirmed the\n * transaction but could not yet see the transfer\n */\nexport const UNKNOWN_OUTCOME_REASONS: ReadonlySet<string> = new Set([\n 'duplicate_settlement',\n 'post_settlement_transfer_not_confirmed',\n]);\n/**\n * Facilitator configuration and chain-read failures yield no payment verdict,\n * so they count as provider failures rather than buyer refusals. The NEAR SDK\n * returns its reasons before submission. The Solana ones compare the offer the\n * gateway sent with the facilitator's own fee payers, or with the buyer's\n * echo, which the gateway already matched.\n */\nexport const NO_VERDICT_REASONS: ReadonlySet<string> = new Set([\n 'unexpected_verify_error',\n 'invalid_exact_near_no_relayer_configured',\n 'invalid_exact_near_current_block_height_unavailable',\n 'invalid_exact_near_access_key_lookup_failed',\n 'invalid_exact_near_account_lookup_failed',\n 'invalid_exact_near_token_account_lookup_failed',\n 'invalid_exact_near_balance_check_failed',\n 'invalid_exact_near_storage_check_failed',\n 'invalid_exact_svm_payload_missing_fee_payer',\n 'invalid_exact_svm_fee_payer_not_managed_by_facilitator',\n 'invalid_exact_svm_unsupported_scheme',\n 'invalid_exact_svm_network_mismatch',\n]);\n/**\n * NEAR settle failures that are verdicts. The NEAR specification leaves the\n * reason implementation-specific and the transaction empty, even after a\n * submission, so only the SDK's verification reasons, returned before it\n * submits, and a failed inner `ft_transfer` with its hash prove nothing moved.\n */\nconst NEAR_PRE_SUBMISSION_REASONS: ReadonlySet<string> = new Set([\n 'invalid_x402_version',\n 'unsupported_scheme',\n 'invalid_network',\n 'insufficient_funds',\n 'verification_failed',\n]);\nexport const isNearVerdict = (reason: string | undefined): boolean =>\n reason !== undefined &&\n (reason === 'settlement_failed' ||\n reason.startsWith('invalid_exact_near_') ||\n NEAR_PRE_SUBMISSION_REASONS.has(reason));\n/**\n * `invalidReason`/`errorReason` are `z.string()` in the SDK schema, with no\n * length or charset bound. They reach the buyer's error, the persisted events\n * and the merchant's ledger. A remote facilitator controls these values, so\n * they are treated as untrusted input rather than diagnostic text.\n */\n// The SDKs' longest reason, a Solana compute-budget refusal, has 85 characters\nconst MAX_REASON_LENGTH = 128;\nconst REASON_SHAPE = /^[a-z0-9_.-]+$/i;\n\nexport function sanitizeReason(reason: string | undefined, fallback: string): string {\n if (reason === undefined) return fallback;\n const trimmed = reason.trim();\n if (trimmed.length === 0 || trimmed.length > MAX_REASON_LENGTH) return fallback;\n return REASON_SHAPE.test(trimmed) ? trimmed : fallback;\n}\n\n// viem wraps every failed contract call in ContractFunctionExecutionError, so\n// only the cause chain can show a revert. A revert alone does not prove nothing\n// moved, because viem also reports an RPC error on a send as one; settle()\n// relies on the SDK throwing only before the broadcast.\nexport function isOnChainRevertError(err: unknown): boolean {\n return (\n err instanceof BaseError && err.walk((e) => e instanceof ContractFunctionRevertedError) !== null\n );\n}\n\n/**\n * The `instanceof` checks cover what the pinned viem HTTP transport throws\n * (`HttpRequestError` for every fetch failure, including connection refused,\n * or `TimeoutError`) and what `waitForTransactionReceipt` throws when it stops\n * polling after a broadcast. Message matching is only a fallback for errors\n * outside those classes, such as a raw undici error, because message text can\n * change with any viem or undici upgrade.\n */\nexport function isProviderUnavailableError(err: unknown): boolean {\n if (\n err instanceof HttpRequestError ||\n err instanceof TimeoutError ||\n err instanceof WaitForTransactionReceiptTimeoutError\n ) {\n return true;\n }\n const message = redactedErrorText(err).toLowerCase();\n return (\n message.includes('econnrefused') ||\n message.includes('fetch failed') ||\n message.includes('enotfound') ||\n message.includes('etimedout') ||\n message.includes('timed out') ||\n message.includes('network error')\n );\n}\n","// Builds each offer from its options: validation, deployment guardrails and the facilitator binding\nimport type { Network } from '@x402/core/types';\nimport { isAddress } from 'viem';\nimport { CommerceError } from '../../../core';\nimport { normalizeAddress, sameAddress } from '../addresses';\nimport {\n createLocalFacilitatorClient,\n createLocalPublicClient,\n type LocalFacilitatorClient,\n} from '../chain';\nimport { assertDevKeyIsLocalOnly, assertPayToIsNotDevAddress, describeRpc } from '../dev-key-guard';\nimport { createRemoteFacilitatorBinding, type FacilitatorBinding } from '../facilitator';\nimport { resolveX402Deployment } from '../guardrails';\nimport { createLocalFacilitatorBinding } from '../local-facilitator';\nimport { type DeploymentMode, findX402Network } from '../networks';\nimport { HEALTH_TIMEOUT_MS } from './constants';\nimport { isProviderUnavailableError } from './reasons';\nimport type {\n Offer,\n X402MultiOfferProviderOptions,\n X402OfferOptions,\n X402ProviderOptions,\n} from './types';\n\n/**\n * Resolves provider and resource offers at construction, rejecting\n * misconfiguration before paid requests.\n */\nexport function resolveOffers(\n inputs: readonly X402OfferOptions[],\n options: X402ProviderOptions | X402MultiOfferProviderOptions,\n): {\n readonly offers: readonly Offer[];\n readonly resourceOffers: ReadonlyMap<string, readonly Offer[]>;\n /** Every distinct offer, the provider's first */\n readonly pool: readonly Offer[];\n readonly deploymentMode: DeploymentMode;\n readonly remoteBinding: FacilitatorBinding | undefined;\n} {\n // Share one remote binding, created after the first offer passes validation\n let remoteBinding: FacilitatorBinding | undefined;\n\n let mode: DeploymentMode | undefined;\n // An offer that several lists repeat is built, and health-checked, once\n const built = new Map<string, Offer>();\n const resolveList = (\n list: readonly X402OfferOptions[],\n field: (index: number, name: string) => string,\n ): readonly Offer[] => {\n const seen = new Set<string>();\n return list.map((input, index): Offer => {\n const at = (name: string) => field(index, name);\n // The network decides how the other fields are read. An unknown one\n // fails in `resolveX402Deployment` below.\n const known = findX402Network(input.network, options.customNetworks);\n if (known !== undefined && known.family !== 'evm') {\n const shape =\n known.family === 'svm' ? 'a Solana address (base58, 32 bytes)' : 'a NEAR account ID';\n for (const name of ['asset', 'payTo'] as const) {\n if (normalizeAddress(known, input[name]) === undefined) {\n throw new CommerceError('CONFIG_INVALID', `x402 provider: ${at(name)} is not ${shape}`);\n }\n }\n if (input.assetTransferMethod !== undefined) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('assetTransferMethod')} applies to EVM networks only`,\n );\n }\n } else {\n // Neither address is echoed: a swapped variable could contain a key.\n // Check mixed-case EIP-55 checksums here; config load checks only shape.\n if (!isAddress(input.asset)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('asset')} is not a valid EVM address (0x and 40 hex characters; a mixed-case address needs a valid EIP-55 checksum)`,\n );\n }\n if (!isAddress(input.payTo)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('payTo')} is not a valid EVM address (0x and 40 hex characters; a mixed-case address needs a valid EIP-55 checksum)`,\n );\n }\n // In every facilitator mode. `resolveX402Deployment` below also refuses\n // a dev payTo on any non-local deployment, whatever the RPC host.\n assertPayToIsNotDevAddress(input.rpcUrl, input.payTo);\n // The buyer signs the token's EIP-712 domain under EIP-3009, so the\n // requirement must name it. Permit2 has a domain of its own.\n if (\n (input.assetTransferMethod ?? 'eip3009') === 'eip3009' &&\n (!input.assetName || !input.assetVersion)\n ) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: an EIP-3009 offer needs ${at('assetName')} and ${at('assetVersion')}, the token's EIP-712 domain`,\n );\n }\n }\n if (!Number.isInteger(input.assetDecimals) || input.assetDecimals < 0) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('assetDecimals')} must be a non-negative integer`,\n );\n }\n // The chain id is signed into the buyer's EIP-712 domain, so a network it\n // cannot be resolved from fails here, never at request time\n const deployment = resolveX402Deployment({\n network: input.network,\n ...(options.customNetworks !== undefined ? { customNetworks: options.customNetworks } : {}),\n payTo: input.payTo,\n asset: input.asset,\n ...(input.assetName !== undefined ? { assetName: input.assetName } : {}),\n ...(input.assetVersion !== undefined ? { assetVersion: input.assetVersion } : {}),\n facilitator: options.facilitator,\n ...(options.allowMainnet !== undefined ? { allowMainnet: options.allowMainnet } : {}),\n ...(options.allowUnauthenticatedFacilitator !== undefined\n ? { allowUnauthenticatedFacilitator: options.allowUnauthenticatedFacilitator }\n : {}),\n // Every EVM offer names its decimals and, under EIP-3009, its domain\n allowOtherEvmToken: true,\n });\n const profile = deployment.profile;\n // Refuse offers mixing local, testnet and mainnet deployment modes\n if (mode !== undefined && deployment.mode !== mode) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: offers mix ${mode} and ${deployment.mode} networks; every offer must be on a ${mode} network`,\n );\n }\n mode = deployment.mode;\n // EVM addresses compare case-insensitively; Solana and NEAR exactly\n const comparable = (value: string) =>\n profile.family === 'evm' ? value.toLowerCase() : value;\n const key = `${input.network}|${comparable(input.asset)}|${comparable(input.payTo)}`;\n if (seen.has(key)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: ${at('network')} repeats an earlier offer of the same asset to the same payTo on ${input.network}`,\n );\n }\n seen.add(key);\n const identity = [\n key,\n input.assetTransferMethod ?? 'eip3009',\n input.assetName,\n input.assetVersion,\n input.assetDecimals,\n input.rpcUrl,\n ].join('|');\n const existing = built.get(identity);\n if (existing !== undefined) return existing;\n\n // Construct the signer before requests can reserve replay keys, so an\n // unusable key fails provider construction.\n let binding: FacilitatorBinding;\n if (options.facilitator.mode === 'local') {\n assertDevKeyIsLocalOnly(input.rpcUrl, options.facilitator.signerPrivateKey);\n let client: LocalFacilitatorClient;\n try {\n client = createLocalFacilitatorClient(\n input.rpcUrl,\n options.facilitator.signerPrivateKey as `0x${string}`,\n );\n } catch (cause) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: could not construct a local facilitator signer from ' +\n 'facilitator.signerPrivateKey. It must be a valid 32-byte hex private key.',\n { cause },\n );\n }\n binding = createLocalFacilitatorBinding(client, input.network, isProviderUnavailableError);\n } else {\n remoteBinding ??= createRemoteFacilitatorBinding({\n url: options.facilitator.url,\n auth: options.facilitator.auth,\n });\n binding = remoteBinding;\n }\n\n // health() reads the chain itself, with a timeout. Verification and\n // settlement go through the facilitator instead. Health details can reach\n // logs, so they name the RPC by origin.\n const base = {\n network: input.network as Network,\n assetDecimals: input.assetDecimals,\n rpcUrl: input.rpcUrl,\n rpcOrigin: describeRpc(input.rpcUrl),\n binding,\n };\n const offer: Offer =\n profile.family === 'svm'\n ? { ...base, family: 'svm', profile, asset: input.asset, payTo: input.payTo }\n : profile.family === 'near'\n ? { ...base, family: 'near', profile, asset: input.asset, payTo: input.payTo }\n : {\n ...base,\n family: 'evm',\n profile,\n method: input.assetTransferMethod ?? 'eip3009',\n asset: input.asset as `0x${string}`,\n assetName: input.assetName,\n assetVersion: input.assetVersion,\n payTo: input.payTo as `0x${string}`,\n healthClient: createLocalPublicClient(\n input.rpcUrl,\n HEALTH_TIMEOUT_MS,\n profile.chainId,\n ),\n };\n built.set(identity, offer);\n return offer;\n });\n };\n\n const offers = resolveList(inputs, (index, name) =>\n inputs.length === 1 ? `\"${name}\"` : `\"offers[${index}].${name}\"`,\n );\n const resourceOffers = new Map(\n Object.entries(options.resourceOffers ?? {}).map(([id, list]) => {\n if (list.length === 0) {\n throw new CommerceError('CONFIG_INVALID', `x402 provider: \"resourceOffers.${id}\" is empty`);\n }\n return [id, resolveList(list, (index, name) => `\"resourceOffers.${id}[${index}].${name}\"`)];\n }),\n );\n return {\n offers,\n resourceOffers,\n pool: [...built.values()],\n deploymentMode: mode as DeploymentMode,\n remoteBinding,\n };\n}\n\n/**\n * Uses the network's default token symbol when paying that asset; otherwise\n * uses the resource's currency, the gateway's only label for another token.\n */\nexport function offerCurrency(offer: Offer, quoted: string): string {\n const canonical = offer.profile.canonicalAsset;\n return canonical !== undefined && sameAddress(offer.profile, offer.asset, canonical.address)\n ? canonical.symbol\n : quoted;\n}\n","/**\n * Issues experimental ERC-8409 quotes when the provider enables `quote`.\n *\n * For requests that can be canonicalized, `extensions[\"erc-8409\"]` carries\n * one quote per EVM offer: chain, token, payee and amount in base units.\n * A dedicated issuer key signs the terms and request hash with EIP-712.\n * Quotes are informational; verify() and settle() use the offer without\n * reading the quotes.\n */\nimport { randomBytes } from 'node:crypto';\nimport { type Hex, keccak256, stringToBytes } from 'viem';\nimport { type PrivateKeyAccount, privateKeyToAccount } from 'viem/accounts';\nimport { type Clock, CommerceError } from '../../../core';\nimport { canonicalJson } from '../../../core/canonical-json';\nimport { isWellKnownDevKey } from '../dev-key-guard';\nimport type { DeploymentMode } from '../networks';\nimport type { EvmOffer, Offer } from './types';\n\n/** Key for quotes in `PaymentRequired.extensions` */\nexport const QUOTE_EXTENSION = 'erc-8409';\n\n/**\n * Request scheme for Keccak-256 hashes of the RFC 8785 (JCS) serialization of\n * `{ \"input\": <input>, \"resource\": <resource id> }`. The input is the validated\n * resource input used to build the backend request. The resource ID identifies\n * the operation and also names the MCP tool and A2A skill.\n */\nexport const QUOTE_REQUEST_SCHEME = 'agent-commerce/request/v1';\n\n/** The ERC's EIP-712 domain, with the chain ID added per quote */\nexport const QUOTE_DOMAIN = { name: 'Signed Service Payment Quotes', version: '1' } as const;\n\n/** The ERC's EIP-712 type; field order is part of the type hash */\nexport const QUOTE_TYPES = {\n ServicePaymentQuote: [\n { name: 'issuer', type: 'address' },\n { name: 'payer', type: 'address' },\n { name: 'recipient', type: 'address' },\n { name: 'asset', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'requestScheme', type: 'string' },\n { name: 'requestHash', type: 'bytes32' },\n { name: 'quoteId', type: 'bytes32' },\n { name: 'validAfter', type: 'uint64' },\n { name: 'validUntil', type: 'uint64' },\n ],\n} as const;\n\n// A zero payer makes a bearer quote; the payment signature identifies the payer\nconst BEARER = '0x0000000000000000000000000000000000000000';\n\n// The JSON Schema x402 v2 requires beside each extension's `info`\nconst QUOTE_INFO_SCHEMA = {\n type: 'object',\n required: ['quotes'],\n properties: {\n quotes: {\n type: 'array',\n items: {\n type: 'object',\n required: ['chainId', 'quote', 'signature'],\n properties: {\n chainId: { type: 'string' },\n // Every field is a string in the ERC's JSON encoding\n quote: {\n type: 'object',\n required: QUOTE_TYPES.ServicePaymentQuote.map((field) => field.name),\n properties: Object.fromEntries(\n QUOTE_TYPES.ServicePaymentQuote.map((field) => [field.name, { type: 'string' }]),\n ),\n },\n signature: { type: 'string' },\n },\n },\n },\n },\n} as const;\n\n// Bound cache memory by evicting the oldest quote when the limit is reached\nconst QUOTE_CACHE_LIMIT = 1024;\n\n/** A quote in the ERC's JSON format, with integers as decimal strings */\nexport interface SignedQuote {\n readonly chainId: string;\n readonly quote: {\n readonly issuer: Hex;\n readonly payer: Hex;\n readonly recipient: Hex;\n readonly asset: Hex;\n readonly amount: string;\n readonly requestScheme: string;\n readonly requestHash: Hex;\n readonly quoteId: Hex;\n readonly validAfter: string;\n readonly validUntil: string;\n };\n readonly signature: Hex;\n}\n\n/** An EVM challenge offer and its `accepts` amount in base units */\nexport interface QuotedOffer {\n readonly offer: EvmOffer;\n readonly amount: string;\n}\n\nexport interface QuoteIssuer {\n readonly issuer: Hex;\n /**\n * Challenge extensions, or undefined when there are no EVM offers, input is\n * missing, or canonicalJson rejects the request\n */\n readonly extensionsFor: (\n resourceId: string,\n input: unknown,\n offers: readonly QuotedOffer[],\n ) => Promise<Record<string, unknown> | undefined>;\n}\n\n/**\n * Creates the issuer during provider construction. Rejects an invalid key,\n * a well-known Anvil key outside the local chain, a key matching an EVM\n * `payTo`, or a configuration without an EVM offer.\n */\nexport function createQuoteIssuer(options: {\n readonly signerPrivateKey: string;\n readonly offers: readonly Offer[];\n readonly deploymentMode: DeploymentMode;\n readonly clock: Clock;\n readonly maxTimeoutSeconds: number;\n}): QuoteIssuer {\n const { signerPrivateKey, offers, deploymentMode, clock, maxTimeoutSeconds } = options;\n let account: PrivateKeyAccount;\n try {\n account = privateKeyToAccount(signerPrivateKey as Hex);\n } catch (cause) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: quote.signerPrivateKey is not a valid private key (expected \"0x\" followed by 64 hex characters)',\n { cause },\n );\n }\n if (deploymentMode !== 'local' && isWellKnownDevKey(signerPrivateKey)) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: quote.signerPrivateKey is a well-known Anvil development key, so anyone could sign quotes as this gateway. Use a dedicated key outside the local chain.',\n );\n }\n const evmOffers = offers.filter((offer): offer is EvmOffer => offer.family === 'evm');\n if (evmOffers.length === 0) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: quote needs an EVM offer; ERC-8409 quotes cover EVM networks only',\n );\n }\n const issuer = account.address;\n if (evmOffers.some((offer) => offer.payTo.toLowerCase() === issuer.toLowerCase())) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n 'x402 provider: quote.signerPrivateKey controls a payTo address. Use a dedicated key, not the merchant wallet.',\n );\n }\n\n const cache = new Map<string, SignedQuote>();\n\n async function quoteFor(offer: EvmOffer, amount: string, requestHash: Hex): Promise<SignedQuote> {\n const now = Math.floor(clock.now().getTime() / 1000);\n const { chainId } = offer.profile;\n const key = [\n chainId,\n offer.payTo.toLowerCase(),\n offer.asset.toLowerCase(),\n amount,\n requestHash,\n ].join('|');\n const cached = cache.get(key);\n // Reuse a cached quote while a full payment window remains to avoid\n // signing retries; a cache miss requires a new signature\n if (cached !== undefined && Number(cached.quote.validUntil) - now >= maxTimeoutSeconds) {\n return cached;\n }\n const validUntil = now + 2 * maxTimeoutSeconds;\n const quote = {\n issuer,\n payer: BEARER,\n recipient: offer.payTo,\n asset: offer.asset,\n amount,\n requestScheme: QUOTE_REQUEST_SCHEME,\n requestHash,\n // Use a new ID for each signed body, as the ERC requires\n quoteId: `0x${randomBytes(32).toString('hex')}`,\n validAfter: String(now),\n validUntil: String(validUntil),\n } as const;\n const signature = await account.signTypedData({\n domain: { ...QUOTE_DOMAIN, chainId },\n types: QUOTE_TYPES,\n primaryType: 'ServicePaymentQuote',\n message: {\n ...quote,\n amount: BigInt(amount),\n validAfter: BigInt(now),\n validUntil: BigInt(validUntil),\n },\n });\n const signed: SignedQuote = { chainId: String(chainId), quote, signature };\n cache.delete(key);\n if (cache.size >= QUOTE_CACHE_LIMIT) {\n const oldest = cache.keys().next().value;\n if (oldest !== undefined) cache.delete(oldest);\n }\n cache.set(key, signed);\n return signed;\n }\n\n return {\n issuer,\n async extensionsFor(resourceId, input, quoted) {\n if (quoted.length === 0) return undefined;\n // Missing or non-canonicalizable input still gets a payment challenge\n // without quotes\n const requestHash = quoteRequestHash(resourceId, input);\n if (requestHash === undefined) return undefined;\n const quotes: SignedQuote[] = [];\n for (const { offer, amount } of quoted) {\n quotes.push(await quoteFor(offer, amount, requestHash));\n }\n return { [QUOTE_EXTENSION]: { info: { quotes }, schema: QUOTE_INFO_SCHEMA } };\n },\n };\n}\n\n/** Hash under {@link QUOTE_REQUEST_SCHEME}, or undefined when canonicalJson rejects the request */\nexport function quoteRequestHash(resourceId: string, input: unknown): Hex | undefined {\n const canonical = canonicalJson({ input, resource: resourceId });\n return canonical === undefined ? undefined : keccak256(stringToBytes(canonical));\n}\n","/**\n * EVM reconciliation evidence for EIP-3009 (x402 and MPP) and Permit2 through\n * the x402 proxy.\n *\n * Definite outcomes require finalized evidence: `settled` needs a successful\n * receipt matching the authorization and transfer; `not-settled` needs unused\n * state after the authorization expires. Missing logs or receipts may reflect\n * RPC pruning, so they do not prove nonpayment. Other cases remain `unknown`.\n */\nimport { eip3009ABI, PERMIT2_ADDRESS, x402ExactPermit2ProxyABI } from '@x402/evm';\nimport {\n type Address,\n decodeFunctionData,\n type Hash,\n type Hex,\n isAddress,\n isAddressEqual,\n isHash,\n type PublicClient,\n parseAbi,\n parseEventLogs,\n TransactionReceiptNotFoundError,\n} from 'viem';\nimport type { PaymentAttempt, PaymentReconciliationResult } from '../../../core';\nimport { isoFromSeconds } from '../locator';\n\nconst EVENTS = parseAbi([\n 'event AuthorizationUsed(address indexed authorizer, bytes32 indexed nonce)',\n 'event Transfer(address indexed from, address indexed to, uint256 value)',\n]);\nconst NONCE_BITMAP_ABI = parseAbi([\n 'function nonceBitmap(address owner, uint256 wordPosition) view returns (uint256)',\n]);\n\n// Allow for clock skew between the gateway and chain when setting the search\n// window around the attempt's creation time\nconst CLOCK_MARGIN_SECONDS = 900n;\n// Split log queries to limit the size of each RPC request\nconst LOG_CHUNK_BLOCKS = 10_000n;\nconst MAX_WINDOW_BLOCKS = 200_000n;\n\nconst UINT = /^\\d{1,78}$/;\n\ninterface Eip3009Locator {\n readonly method: 'eip3009';\n readonly asset: Address;\n readonly from: Address;\n readonly to: Address;\n readonly value: bigint;\n readonly nonce: Hex;\n readonly validAfter: bigint;\n readonly validBefore: bigint;\n readonly expiresAt: string | undefined;\n}\n\ninterface Permit2Locator {\n readonly method: 'permit2';\n readonly asset: Address;\n readonly owner: Address;\n readonly to: Address;\n readonly amount: bigint;\n readonly nonce: bigint;\n readonly deadline: bigint;\n readonly validAfter: bigint;\n readonly proxy: Address;\n readonly expiresAt: string | undefined;\n}\n\nexport type EvmLocator = Eip3009Locator | Permit2Locator;\n\n/**\n * Parses EVM transfer fields, or returns undefined if required fields are\n * missing or malformed\n */\nexport function parseEvmLocator(\n locator: Readonly<Record<string, unknown>>,\n): EvmLocator | undefined {\n const address = (key: string) => {\n const value = locator[key];\n return typeof value === 'string' && isAddress(value) ? value : undefined;\n };\n const uint = (key: string) => {\n const value = locator[key];\n return typeof value === 'string' && UINT.test(value) ? BigInt(value) : undefined;\n };\n const expiresAt = typeof locator['expiresAt'] === 'string' ? locator['expiresAt'] : undefined;\n if (locator['method'] === 'eip3009') {\n const [asset, from, to] = [address('asset'), address('from'), address('to')];\n const [value, validAfter, validBefore] = [\n uint('value'),\n uint('validAfter'),\n uint('validBefore'),\n ];\n const nonce = locator['nonce'];\n if (!asset || !from || !to || value === undefined || validAfter === undefined) return undefined;\n if (validBefore === undefined || typeof nonce !== 'string' || !isHash(nonce)) return undefined;\n return { method: 'eip3009', asset, from, to, value, nonce, validAfter, validBefore, expiresAt };\n }\n if (locator['method'] === 'permit2') {\n const [asset, owner, to, proxy] = [\n address('asset'),\n address('owner'),\n address('to'),\n address('proxy'),\n ];\n const [amount, nonce, deadline, validAfter] = [\n uint('amount'),\n uint('nonce'),\n uint('deadline'),\n uint('validAfter'),\n ];\n if (!asset || !owner || !to || !proxy || amount === undefined || nonce === undefined) {\n return undefined;\n }\n if (deadline === undefined || validAfter === undefined) return undefined;\n return {\n method: 'permit2',\n asset,\n owner,\n to,\n amount,\n nonce,\n deadline,\n validAfter,\n proxy,\n expiresAt,\n };\n }\n return undefined;\n}\n\n// Evidence reads and validity bounds specific to each transfer method\ninterface Method {\n // Earliest timestamp at which the authorization has expired\n readonly endsAt: bigint;\n readonly validAfter: bigint;\n used(blockNumber?: bigint): Promise<boolean>;\n // Transactions in the range that may carry the transfer\n candidates(fromBlock: bigint, toBlock: bigint): Promise<readonly Hash[]>;\n // The receipt's block, when this transaction carried the transfer\n carries(hash: Hash): Promise<bigint | undefined>;\n}\n\nexport interface EvmEvidenceInput {\n readonly client: PublicClient;\n readonly chainId: number;\n readonly locator: EvmLocator;\n readonly attempt: PaymentAttempt;\n}\n\nexport async function readEvmEvidence(\n input: EvmEvidenceInput,\n): Promise<PaymentReconciliationResult> {\n const { client, chainId, locator, attempt } = input;\n const reported = await client.getChainId();\n if (reported !== chainId) {\n return unknown('chain_mismatch', { chainId: reported, expectedChainId: chainId });\n }\n const finalized = await client.getBlock({ blockTag: 'finalized' });\n const finalizedAt = isoFromSeconds(String(finalized.timestamp));\n const finality = {\n finalizedBlock: String(finalized.number),\n ...(finalizedAt !== undefined ? { finalizedAt } : {}),\n };\n const method = locator.method === 'eip3009' ? eip3009(client, locator) : permit2(client, locator);\n const settled = (hash: Hash, block: bigint): PaymentReconciliationResult =>\n block <= finalized.number\n ? {\n outcome: 'settled',\n reason: 'transfer_final',\n externalReference: hash,\n evidence: { transactionHash: hash, blockNumber: String(block), ...finality },\n }\n : unknown('not_final', { transactionHash: hash, blockNumber: String(block), ...finality });\n\n const reference = attempt.externalReference;\n if (reference !== undefined && isHash(reference)) {\n const block = await method.carries(reference);\n if (block !== undefined) return settled(reference, block);\n }\n\n if (!(await method.used(finalized.number))) {\n if (finalized.timestamp >= method.endsAt) {\n return {\n outcome: 'not-settled',\n reason: 'expired_unused',\n evidence: { nonceUsed: false, ...finality },\n };\n }\n if (await method.used()) return unknown('not_final', finality);\n return {\n ...unknown('not_expired', finality),\n ...(locator.expiresAt !== undefined ? { retryAfter: locator.expiresAt } : {}),\n };\n }\n\n // Start at the later of validAfter and the attempt time minus the clock\n // margin, covering at most MAX_WINDOW_BLOCKS. If no match is found in a\n // truncated range, return search_window_too_wide.\n const createdAt = BigInt(Math.floor(Date.parse(attempt.createdAt) / 1000));\n const fromSeconds = max(method.validAfter, createdAt - CLOCK_MARGIN_SECONDS);\n const fromBlock = await firstBlockAt(client, fromSeconds, finalized);\n const endBlock = (await firstBlockAt(client, method.endsAt, finalized)) - 1n;\n const toBlock = min(endBlock, fromBlock + MAX_WINDOW_BLOCKS - 1n);\n const window = { fromBlock: String(fromBlock), toBlock: String(toBlock), ...finality };\n for (const [start, end] of logRanges(fromBlock, toBlock)) {\n for (const hash of await method.candidates(start, end)) {\n const block = await method.carries(hash);\n if (block !== undefined) return settled(hash, block);\n }\n }\n if (toBlock < endBlock) {\n return unknown('search_window_too_wide', { ...window, endBlock: String(endBlock) });\n }\n // A cancelled authorization or invalidated nonce, a transfer through another\n // contract, or logs the RPC no longer serves\n return unknown('used_without_record', { nonceUsed: true, ...window });\n}\n\nfunction eip3009(client: PublicClient, locator: Eip3009Locator): Method {\n const { asset, from, to, value, nonce } = locator;\n return {\n endsAt: locator.validBefore,\n validAfter: locator.validAfter,\n used: (blockNumber) =>\n client.readContract({\n address: asset,\n abi: eip3009ABI,\n functionName: 'authorizationState',\n args: [from, nonce],\n ...(blockNumber !== undefined ? { blockNumber } : {}),\n }),\n async candidates(fromBlock, toBlock) {\n const logs = await client.getLogs({\n address: asset,\n event: EVENTS[0],\n args: { authorizer: from, nonce },\n fromBlock,\n toBlock,\n });\n return logs.map((log) => log.transactionHash);\n },\n async carries(hash) {\n const receipt = await receiptOf(client, hash);\n if (receipt?.status !== 'success') return undefined;\n const logs = parseEventLogs({ abi: EVENTS, logs: receipt.logs }).filter((log) =>\n isAddressEqual(log.address, asset),\n );\n const used = logs.some(\n (log) =>\n log.eventName === 'AuthorizationUsed' &&\n isAddressEqual(log.args.authorizer, from) &&\n log.args.nonce.toLowerCase() === nonce.toLowerCase(),\n );\n return used && logs.some((log) => isTransfer(log, from, to, value))\n ? receipt.blockNumber\n : undefined;\n },\n };\n}\n\nfunction permit2(client: PublicClient, locator: Permit2Locator): Method {\n const { asset, owner, to, amount, nonce, proxy } = locator;\n return {\n // Permit2 accepts a transfer while the timestamp is at most the deadline\n endsAt: locator.deadline + 1n,\n validAfter: locator.validAfter,\n async used(blockNumber) {\n const bitmap = await client.readContract({\n address: PERMIT2_ADDRESS,\n abi: NONCE_BITMAP_ABI,\n functionName: 'nonceBitmap',\n args: [owner, nonce >> 8n],\n ...(blockNumber !== undefined ? { blockNumber } : {}),\n });\n return ((bitmap >> (nonce & 0xffn)) & 1n) === 1n;\n },\n // Match the nonce in proxy calldata to distinguish transfers with the\n // same owner, recipient and amount\n async candidates(fromBlock, toBlock) {\n const logs = await client.getLogs({\n address: asset,\n event: EVENTS[1],\n args: { from: owner, to },\n fromBlock,\n toBlock,\n });\n // ponytail: each candidate needs receipt and transaction reads; cap these for busy payers\n return [...new Set(logs.map((log) => log.transactionHash))];\n },\n async carries(hash) {\n const receipt = await receiptOf(client, hash);\n if (receipt?.status !== 'success' || !receipt.to || !isAddressEqual(receipt.to, proxy)) {\n return undefined;\n }\n // Only direct proxy calls are decoded; indirect calls remain unresolved\n const call = proxyCall((await client.getTransaction({ hash })).input);\n const named =\n call !== undefined &&\n isAddressEqual(call.owner, owner) &&\n call.nonce === nonce &&\n isAddressEqual(call.asset, asset) &&\n isAddressEqual(call.to, to);\n const transferred = parseEventLogs({ abi: EVENTS, logs: receipt.logs }).some(\n (log) => isAddressEqual(log.address, asset) && isTransfer(log, owner, to, amount),\n );\n return named && transferred ? receipt.blockNumber : undefined;\n },\n };\n}\n\n/** Decodes the owner, nonce, asset and recipient from a direct x402 Permit2 proxy call */\nexport function proxyCall(input: Hex) {\n let call: ReturnType<typeof decodeProxyInput>;\n try {\n call = decodeProxyInput(input);\n } catch {\n return undefined;\n }\n const parts =\n call.functionName === 'settle'\n ? call.args\n : call.functionName === 'settleWithPermit'\n ? ([call.args[1], call.args[2], call.args[3]] as const)\n : undefined;\n if (parts === undefined) return undefined;\n const [permit, owner, witness] = parts;\n return { owner, nonce: permit.nonce, asset: permit.permitted.token, to: witness.to };\n}\n\nconst decodeProxyInput = (data: Hex) => decodeFunctionData({ abi: x402ExactPermit2ProxyABI, data });\n\ntype EventLog = ReturnType<typeof parseEventLogs<typeof EVENTS>>[number];\n\nfunction isTransfer(log: EventLog, from: Address, to: Address, value: bigint): boolean {\n return (\n log.eventName === 'Transfer' &&\n isAddressEqual(log.args.from, from) &&\n isAddressEqual(log.args.to, to) &&\n log.args.value === value\n );\n}\n\nasync function receiptOf(client: PublicClient, hash: Hash) {\n try {\n return await client.getTransactionReceipt({ hash });\n } catch (err) {\n if (err instanceof TransactionReceiptNotFoundError) return undefined;\n throw err;\n }\n}\n\n/** Splits `fromBlock` through `toBlock` into inclusive ranges for separate `getLogs` requests */\nexport function logRanges(fromBlock: bigint, toBlock: bigint): [bigint, bigint][] {\n const ranges: [bigint, bigint][] = [];\n for (let start = fromBlock; start <= toBlock; start += LOG_CHUNK_BLOCKS) {\n ranges.push([start, min(start + LOG_CHUNK_BLOCKS - 1n, toBlock)]);\n }\n return ranges;\n}\n\n/**\n * Returns the first block number up to the finalized head whose timestamp\n * reaches `seconds`, or the number after that head if none does. Alternates\n * timestamp interpolation with bisection to bound the search.\n */\nexport async function firstBlockAt(\n client: Pick<PublicClient, 'getBlock'>,\n seconds: bigint,\n finalized: { readonly number: bigint; readonly timestamp: bigint },\n): Promise<bigint> {\n if (seconds > finalized.timestamp) return finalized.number + 1n;\n const timestampOf = async (blockNumber: bigint) =>\n (await client.getBlock({ blockNumber })).timestamp;\n let low = 0n;\n let lowTime = await timestampOf(low);\n if (lowTime >= seconds) return 0n;\n // Keep low before the target timestamp and high at or after it\n let high = finalized.number;\n let highTime = finalized.timestamp;\n for (let step = 0; high - low > 1n; step++) {\n let middle = (low + high) / 2n;\n if (step % 2 === 0 && highTime > lowTime) {\n const guess = low + ((seconds - lowTime) * (high - low)) / (highTime - lowTime);\n middle = min(max(guess, low + 1n), high - 1n);\n }\n const timestamp = await timestampOf(middle);\n if (timestamp >= seconds) [high, highTime] = [middle, timestamp];\n else [low, lowTime] = [middle, timestamp];\n }\n return high;\n}\n\n/** An `unknown` answer with its reason and optional evidence */\nexport function unknown(\n reason: string,\n evidence?: Readonly<Record<string, unknown>>,\n): PaymentReconciliationResult {\n return { outcome: 'unknown', reason, ...(evidence !== undefined ? { evidence } : {}) };\n}\n\nconst max = (a: bigint, b: bigint) => (a > b ? a : b);\nconst min = (a: bigint, b: bigint) => (a < b ? a : b);\n","/**\n * NEAR reconciliation evidence. `settled` requires a final relayer transaction\n * containing the delegate and a successful `ft_transfer` receipt matching the\n * locator's token, receiver and amount. `not-settled` requires a final block\n * past `maxBlockHeight` with the access key's nonce below the delegate's nonce,\n * proving that the expired delegate did not execute.\n */\nimport {\n CommerceError,\n isCommerceError,\n type PaymentAttempt,\n type PaymentReconciliationResult,\n} from '../../../core';\nimport { isRecord } from '../../../core/is-record';\nimport { unknown } from './evm';\n\nconst UINT = /^\\d{1,20}$/;\nconst TX_HASH = /^[1-9A-HJ-NP-Za-km-z]{32,44}$/;\n\nexport interface NearLocator {\n readonly senderId: string;\n readonly publicKey: string;\n readonly nonce: bigint;\n readonly maxBlockHeight: bigint;\n readonly asset: string;\n readonly receiver: string;\n readonly amount: string;\n readonly relayers: readonly string[];\n}\n\n/**\n * Parses required NEAR transfer fields and optional relayers, or returns\n * undefined for missing required fields or malformed input\n */\nexport function parseNearLocator(\n locator: Readonly<Record<string, unknown>>,\n): NearLocator | undefined {\n const text = (key: string) => {\n const value = locator[key];\n return typeof value === 'string' && value !== '' ? value : undefined;\n };\n const uint = (key: string) => {\n const value = text(key);\n return value !== undefined && UINT.test(value) ? value : undefined;\n };\n const [senderId, publicKey, asset, receiver] = [\n text('senderId'),\n text('publicKey'),\n text('asset'),\n text('receiver'),\n ];\n const [nonce, maxBlockHeight, amount] = [uint('nonce'), uint('maxBlockHeight'), uint('amount')];\n const relayers = locator['relayers'] ?? [];\n if (!senderId || !publicKey || !asset || !receiver || !nonce || !maxBlockHeight || !amount) {\n return undefined;\n }\n if (!Array.isArray(relayers) || !relayers.every((id) => typeof id === 'string')) {\n return undefined;\n }\n return {\n senderId,\n publicKey,\n nonce: BigInt(nonce),\n maxBlockHeight: BigInt(maxBlockHeight),\n asset,\n receiver,\n amount,\n relayers,\n };\n}\n\nexport interface NearEvidenceInput {\n readonly rpc: (method: string, params: unknown) => Promise<unknown>;\n readonly network: string;\n readonly locator: NearLocator;\n readonly attempt: PaymentAttempt;\n}\n\nexport async function readNearEvidence(\n input: NearEvidenceInput,\n): Promise<PaymentReconciliationResult> {\n const { rpc, network, locator, attempt } = input;\n const status = await rpc('status', []);\n const chainId = isRecord(status) ? status['chain_id'] : undefined;\n const expected = network.slice('near:'.length);\n if (chainId !== expected) {\n return unknown('chain_mismatch', { chainId, expectedChainId: expected });\n }\n\n // Look up the outer transaction with each recorded relayer as its sender\n const reference = attempt.externalReference;\n if (reference !== undefined && TX_HASH.test(reference)) {\n for (const relayer of locator.relayers) {\n const outcome = await txStatus(rpc, reference, relayer);\n if (outcome === undefined) continue;\n if (outcome.final_execution_status !== 'FINAL') {\n return unknown('not_final', { transactionHash: reference });\n }\n if (carries(outcome, locator)) {\n return {\n outcome: 'settled',\n reason: 'transfer_final',\n externalReference: reference,\n evidence: { transactionHash: reference, relayer },\n };\n }\n break;\n }\n }\n\n // Read the key nonce at the same final block used for the expiry check\n const block = (await rpc('block', { finality: 'final' })) as { header?: { height?: unknown } };\n const height = block.header?.height;\n if (typeof height !== 'number' || !Number.isSafeInteger(height)) {\n throw new CommerceError('PAYMENT_PROVIDER_UNAVAILABLE', 'block returned no height');\n }\n const finality = { finalBlock: String(height) };\n let key: { nonce?: unknown; error?: unknown };\n try {\n key = (await rpc('query', {\n request_type: 'view_access_key',\n block_id: height,\n account_id: locator.senderId,\n public_key: locator.publicKey,\n })) as typeof key;\n } catch (err) {\n if (rpcErrorName(err) === 'UNKNOWN_ACCESS_KEY') return unknown('access_key_missing', finality);\n throw err;\n }\n // Treat an error string inside the query result as a missing key\n if (typeof key.error === 'string') return unknown('access_key_missing', finality);\n if (typeof key.nonce !== 'number' || !Number.isSafeInteger(key.nonce)) {\n throw new CommerceError('PAYMENT_PROVIDER_UNAVAILABLE', 'view_access_key returned no nonce');\n }\n const evidence = { keyNonce: String(key.nonce), ...finality };\n // A nonce at or above the delegate's does not identify which transaction used it\n if (BigInt(key.nonce) >= locator.nonce) return unknown('used_without_record', evidence);\n if (BigInt(height) > locator.maxBlockHeight) {\n return { outcome: 'not-settled', reason: 'expired_unused', evidence };\n }\n return unknown('not_expired', { maxBlockHeight: String(locator.maxBlockHeight), ...evidence });\n}\n\ninterface TxOutcome {\n readonly final_execution_status?: string;\n readonly transaction?: {\n readonly actions?: readonly {\n readonly Delegate?: {\n readonly delegate_action?: {\n readonly sender_id?: string;\n readonly public_key?: string;\n readonly nonce?: number;\n };\n };\n }[];\n };\n readonly receipts?: readonly {\n readonly receipt_id?: string;\n readonly receiver_id?: string;\n readonly predecessor_id?: string;\n readonly receipt?: {\n readonly Action?: {\n readonly actions?: readonly {\n readonly FunctionCall?: { readonly method_name?: string; readonly args?: string };\n }[];\n };\n };\n }[];\n readonly receipts_outcome?: readonly {\n readonly id?: string;\n readonly outcome?: { readonly status?: unknown };\n }[];\n}\n\n// Return the outcome, or undefined for an unknown hash and sender pair\nasync function txStatus(\n rpc: NearEvidenceInput['rpc'],\n hash: string,\n sender: string,\n): Promise<TxOutcome | undefined> {\n try {\n return (await rpc('EXPERIMENTAL_tx_status', {\n tx_hash: hash,\n sender_account_id: sender,\n wait_until: 'NONE',\n })) as TxOutcome;\n } catch (err) {\n if (rpcErrorName(err) === 'UNKNOWN_TRANSACTION') return undefined;\n throw err;\n }\n}\n\n// Match the delegate identity and a successful ft_transfer with the recorded terms\nfunction carries(outcome: TxOutcome, locator: NearLocator): boolean {\n const delegated = (outcome.transaction?.actions ?? []).some((action) => {\n const delegate = action.Delegate?.delegate_action;\n return (\n delegate?.sender_id === locator.senderId &&\n delegate.public_key === locator.publicKey &&\n String(delegate.nonce) === String(locator.nonce)\n );\n });\n const succeeded = new Set(\n (outcome.receipts_outcome ?? [])\n .filter((entry) => isRecord(entry.outcome?.status) && 'SuccessValue' in entry.outcome.status)\n .map((entry) => entry.id),\n );\n const transferred = (outcome.receipts ?? []).some(\n (receipt) =>\n receipt.receiver_id === locator.asset &&\n receipt.predecessor_id === locator.senderId &&\n succeeded.has(receipt.receipt_id) &&\n (receipt.receipt?.Action?.actions ?? []).some((action) => {\n const call = action.FunctionCall;\n if (call?.method_name !== 'ft_transfer' || typeof call.args !== 'string') return false;\n const args = parseArgs(call.args);\n return args?.['receiver_id'] === locator.receiver && args['amount'] === locator.amount;\n }),\n );\n return delegated && transferred;\n}\n\nfunction parseArgs(base64: string): Record<string, unknown> | undefined {\n try {\n const args: unknown = JSON.parse(Buffer.from(base64, 'base64').toString('utf8'));\n return isRecord(args) ? args : undefined;\n } catch {\n return undefined;\n }\n}\n\n// Read the node's error name from `details.rpcError.cause`, such as UNKNOWN_TRANSACTION\nfunction rpcErrorName(err: unknown): unknown {\n const rpcError = isCommerceError(err) ? err.details?.['rpcError'] : undefined;\n return isRecord(rpcError) && isRecord(rpcError['cause']) ? rpcError['cause']['name'] : undefined;\n}\n","/**\n * Solana reconciliation evidence. `settled` requires a successful finalized\n * transaction whose message hash matches the locator. A missing signature can\n * be recovered by searching a known payer's history.\n *\n * A missing match remains `unknown`, including after blockhash expiry;\n * missing evidence alone does not prove `not-settled`. The operator decides\n * how to handle unresolved attempts.\n */\nimport {\n CommerceError,\n type PaymentAttempt,\n type PaymentReconciliationResult,\n} from '../../../core';\nimport { isRecord } from '../../../core/is-record';\nimport { unknown } from './evm';\n\n// Allow for gateway/cluster clock skew around the attempt's creation time\nconst CLOCK_MARGIN_SECONDS = 900;\n// Entries requested per history page\nconst HISTORY_PAGE = 1000;\n// ponytail: return history_too_long at this page cap; consider slot-based paging for busy payers\nconst MAX_HISTORY_PAGES = 5;\n\nconst BASE58 = /^[1-9A-HJ-NP-Za-km-z]+$/;\nconst MESSAGE_HASH = /^[A-Za-z0-9+/]{43}=$/;\n\nexport interface SvmLocator {\n readonly messageHash: string;\n readonly recentBlockhash: string;\n readonly payer: string | undefined;\n}\n\n/**\n * Parses required Solana message fields and an optional payer, or returns\n * undefined for missing required fields or malformed input\n */\nexport function parseSvmLocator(\n locator: Readonly<Record<string, unknown>>,\n): SvmLocator | undefined {\n const { messageHash, recentBlockhash, payer } = locator;\n if (typeof messageHash !== 'string' || !MESSAGE_HASH.test(messageHash)) return undefined;\n if (!isBase58(recentBlockhash, 32, 44)) return undefined;\n if (payer !== undefined && !isBase58(payer, 32, 44)) return undefined;\n return { messageHash, recentBlockhash, payer };\n}\n\nexport interface SvmEvidenceInput {\n readonly rpc: (method: string, params: unknown) => Promise<unknown>;\n readonly network: string;\n readonly locator: SvmLocator;\n readonly attempt: PaymentAttempt;\n readonly messageHashOf: (transaction: string) => string | undefined;\n}\n\nexport async function readSvmEvidence(\n input: SvmEvidenceInput,\n): Promise<PaymentReconciliationResult> {\n const { rpc, network, locator, attempt, messageHashOf } = input;\n const genesis = await rpc('getGenesisHash', []);\n const served = `solana:${String(genesis).slice(0, 32)}`;\n if (served !== network) {\n return unknown('chain_mismatch', { network: served, expectedNetwork: network });\n }\n\n // Return the slot of a successful finalized transaction with the matching message\n const carries = async (id: string): Promise<number | undefined> => {\n const landed = (await rpc('getTransaction', [\n id,\n { encoding: 'base64', commitment: 'finalized', maxSupportedTransactionVersion: 0 },\n ])) as { slot?: unknown; meta?: { err?: unknown }; transaction?: unknown } | null;\n if (landed?.meta?.err !== null || typeof landed.slot !== 'number') return undefined;\n const [wire] = Array.isArray(landed.transaction) ? landed.transaction : [];\n return typeof wire === 'string' && messageHashOf(wire) === locator.messageHash\n ? landed.slot\n : undefined;\n };\n const settled = (id: string, slot: number): PaymentReconciliationResult => ({\n outcome: 'settled',\n reason: 'transfer_final',\n externalReference: id,\n evidence: { transactionId: id, slot: String(slot) },\n });\n\n const reference = attempt.externalReference;\n if (reference !== undefined && isBase58(reference, 64, 88)) {\n const slot = await carries(reference);\n if (slot !== undefined) return settled(reference, slot);\n }\n\n if (locator.payer !== undefined) {\n const createdAt = Math.floor(Date.parse(attempt.createdAt) / 1000);\n const from = createdAt - CLOCK_MARGIN_SECONDS;\n const to = createdAt + CLOCK_MARGIN_SECONDS;\n let before: string | undefined;\n // Scan newest first until entries predate the window or the page cap is reached\n search: for (let page = 0; ; page += 1) {\n if (page === MAX_HISTORY_PAGES) return unknown('history_too_long', { payer: locator.payer });\n const entries = await rpc('getSignaturesForAddress', [\n locator.payer,\n {\n commitment: 'finalized',\n limit: HISTORY_PAGE,\n ...(before !== undefined ? { before } : {}),\n },\n ]);\n if (!Array.isArray(entries)) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'getSignaturesForAddress returned no list',\n );\n }\n for (const entry of entries as {\n signature?: unknown;\n err?: unknown;\n blockTime?: unknown;\n }[]) {\n if (typeof entry.signature !== 'string') continue;\n before = entry.signature;\n const time = typeof entry.blockTime === 'number' ? entry.blockTime : undefined;\n if (time !== undefined && time < from) break search;\n if (entry.err !== null || (time !== undefined && time > to)) continue;\n const slot = await carries(entry.signature);\n if (slot !== undefined) return settled(entry.signature, slot);\n }\n if (entries.length < HISTORY_PAGE) break;\n }\n }\n\n // Check expiry at `confirmed` so finality lag does not make a fresh blockhash\n // look invalid\n const validity = await rpc('isBlockhashValid', [\n locator.recentBlockhash,\n { commitment: 'confirmed' },\n ]);\n const valid = isRecord(validity) ? validity['value'] : undefined;\n if (typeof valid !== 'boolean') {\n throw new CommerceError('PAYMENT_PROVIDER_UNAVAILABLE', 'isBlockhashValid returned no value');\n }\n return unknown(valid ? 'not_expired' : 'blockhash_expired', {\n payerSearched: locator.payer !== undefined,\n });\n}\n\nfunction isBase58(value: unknown, minLength: number, maxLength: number): value is string {\n return (\n typeof value === 'string' &&\n value.length >= minLength &&\n value.length <= maxLength &&\n BASE58.test(value)\n );\n}\n","// Reconcile: read-only chain evidence for an attempt, from its verified locator\nimport type { PublicClient } from 'viem';\nimport type { PaymentReconciliationContext, PaymentReconciliationResult } from '../../../core';\nimport { redactedErrorText } from '../../../core/errors';\nimport { createLocalPublicClient } from '../chain';\nimport { jsonRpc } from '../json-rpc';\nimport { LOCATOR_VERSION } from '../locator';\nimport { parseEvmLocator, readEvmEvidence, unknown } from '../reconcile/evm';\nimport { parseNearLocator, readNearEvidence } from '../reconcile/near';\nimport { parseSvmLocator, readSvmEvidence } from '../reconcile/svm';\nimport type { EvmOffer, Offer, ProviderContext } from './types';\n\n// Allow more RPC time for log and history searches than for health probes\nconst RECONCILE_TIMEOUT_MS = 30_000;\n\n/**\n * Builds the provider's `reconcile`, which reads the configured offer's RPC.\n * It does not call the facilitator, sign transactions or broadcast them.\n */\nexport function createReconcile(\n ctx: ProviderContext,\n): (context: PaymentReconciliationContext) => Promise<PaymentReconciliationResult> {\n const clients = new Map<EvmOffer, PublicClient>();\n const evmClient = (offer: EvmOffer) => {\n let client = clients.get(offer);\n if (client === undefined) {\n client = createLocalPublicClient(offer.rpcUrl, RECONCILE_TIMEOUT_MS, offer.profile.chainId);\n clients.set(offer, client);\n }\n return client;\n };\n const rpc = (offer: Offer) => (method: string, params: unknown) =>\n jsonRpc(offer.rpcUrl, method, params, RECONCILE_TIMEOUT_MS);\n const read = async (offer: Offer, evidence: () => Promise<PaymentReconciliationResult>) => {\n try {\n return await evidence();\n } catch (err) {\n return unknown('rpc_error', { rpc: offer.rpcOrigin, error: redactedErrorText(err) });\n }\n };\n\n return async ({ attempt, locator }) => {\n if (locator === undefined) return unknown('no_locator');\n if (locator['v'] !== LOCATOR_VERSION) return unknown('unsupported_locator_version');\n const network = locator['network'];\n if (typeof network !== 'string') return unknown('unsupported_family');\n const offerFor = <F extends Offer['family']>(family: F) =>\n ctx.offers.find(\n (candidate): candidate is Extract<Offer, { family: F }> =>\n candidate.family === family && candidate.network === network,\n );\n const notConfigured = unknown('network_not_configured', { network });\n\n if (network.startsWith('eip155:')) {\n const parsed = parseEvmLocator(locator);\n if (parsed === undefined) return unknown('invalid_locator');\n const offer = offerFor('evm');\n if (offer === undefined) return notConfigured;\n return read(offer, () =>\n readEvmEvidence({\n client: evmClient(offer),\n chainId: offer.profile.chainId,\n locator: parsed,\n attempt,\n }),\n );\n }\n if (network.startsWith('solana:')) {\n const parsed = parseSvmLocator(locator);\n if (parsed === undefined) return unknown('invalid_locator');\n const offer = offerFor('svm');\n if (offer === undefined) return notConfigured;\n const { messageHashOf } = await ctx.svm();\n return read(offer, () =>\n readSvmEvidence({ rpc: rpc(offer), network, locator: parsed, attempt, messageHashOf }),\n );\n }\n if (network.startsWith('near:')) {\n const parsed = parseNearLocator(locator);\n if (parsed === undefined) return unknown('invalid_locator');\n const offer = offerFor('near');\n if (offer === undefined) return notConfigured;\n return read(offer, () =>\n readNearEvidence({ rpc: rpc(offer), network, locator: parsed, attempt }),\n );\n }\n return unknown('unsupported_family');\n };\n}\n","/**\n * Exact conversion from display amounts (\"0.01\" USDC) to the integer base\n * units x402 and EIP-3009 carry (\"10000\" at 6 decimals).\n *\n * It never goes through a JS `number`, which cannot represent most decimal\n * fractions. viem's `parseUnits` is not used either: it silently rounds excess\n * fractional digits, and \"0.0000001\" against a 6-decimal asset is a\n * configuration bug that must be refused, not rounded. The reverse direction\n * is viem's `formatUnits`, which is exact.\n */\nimport { CommerceError } from '../../core';\n\nconst DECIMAL_STRING_PATTERN = /^\\d+(?:\\.\\d+)?$/;\n\n/**\n * Parses a canonical decimal display amount (e.g. \"0.01\") into base units\n * for an asset with the given number of decimals, without floating point.\n *\n * Throws `CommerceError('PAYMENT_INVALID')` if the string is not a plain\n * non-negative decimal, or if it carries more fractional digits than the\n * asset supports.\n */\nexport function parseCanonicalAmount(amount: string, decimals: number): bigint {\n if (!Number.isInteger(decimals) || decimals < 0) {\n throw new CommerceError('INTERNAL_ERROR', `Invalid asset decimals: ${decimals}`);\n }\n if (!DECIMAL_STRING_PATTERN.test(amount)) {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n `Amount \"${amount}\" is not a valid non-negative decimal string`,\n {\n details: { amount },\n },\n );\n }\n\n const [integerPart = '0', fractionPart = ''] = amount.split('.');\n\n if (fractionPart.length > decimals) {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n `Amount \"${amount}\" has more precision than the asset supports (${decimals} decimals)`,\n { details: { amount, assetDecimals: decimals } },\n );\n }\n\n const paddedFraction = fractionPart.padEnd(decimals, '0');\n const combined = `${integerPart}${paddedFraction}`;\n return BigInt(combined);\n}\n","/**\n * Decodes and validates the base64 `PAYMENT-SIGNATURE` submission.\n *\n * A malformed payload must become a `rejected` verification, never a thrown\n * request, so this returns `undefined` on any failure. That is why it parses\n * the schema itself instead of calling the SDK's `decodePaymentSignatureHeader`,\n * which throws.\n */\nimport { PaymentPayloadV2Schema } from '@x402/core/schemas';\nimport type { PaymentPayload } from '@x402/core/types';\nimport type { ExactEIP3009Payload, ExactPermit2Payload } from '@x402/evm';\nimport { isRecord } from '../../core/is-record';\nimport { isEvmAddress } from './addresses';\n\nexport function decodePaymentSubmission(payloadBase64: string): PaymentPayload | undefined {\n const json = decodeJson(payloadBase64);\n if (json === undefined) return undefined;\n const result = PaymentPayloadV2Schema.safeParse(json);\n return result.success ? (result.data as PaymentPayload) : undefined;\n}\n\n/** Read the declared version before v2 schema validation */\nexport function declaredX402Version(payloadBase64: string): unknown {\n const json = decodeJson(payloadBase64);\n return typeof json === 'object' && json !== null\n ? (json as Record<string, unknown>)['x402Version']\n : undefined;\n}\n\n/**\n * The payload as sent to a facilitator. `resource` is optional in v2 and\n * verify() has already matched it against the offer; hosted facilitators have\n * settled payloads without it, and none has been shown to accept this\n * gateway's `resource://` URL. `extensions` is dropped because quote echoes\n * are not used to verify payment, and a gas-sponsoring extension in a Permit2\n * payload would activate unsupported SDK facilitator behavior.\n */\nexport function forFacilitator<T extends PaymentPayload>(\n payload: T,\n): Omit<T, 'resource' | 'extensions'> {\n const { resource: _resource, extensions: _extensions, ...rest } = payload;\n return rest;\n}\n\nfunction decodeJson(payloadBase64: string): unknown {\n try {\n return JSON.parse(Buffer.from(payloadBase64, 'base64').toString('utf8'));\n } catch {\n return undefined;\n }\n}\n\n/**\n * Narrows a decoded payload to the EIP-3009 `exact`/EVM shape.\n *\n * The SDK facilitator settles any payload carrying `permit2Authorization`\n * through Permit2, so a payload with both shapes is refused: the gateway would\n * check one authorization and the facilitator would settle the other.\n */\nexport function isExactEvmPayload(\n payload: PaymentPayload,\n): payload is PaymentPayload & { payload: ExactEIP3009Payload } {\n const inner = payload.payload;\n return (\n payload.accepted.scheme === 'exact' &&\n isRecord(inner) &&\n isRecord(inner['authorization']) &&\n !('permit2Authorization' in inner) &&\n typeof inner['signature'] === 'string'\n );\n}\n\n// A uint256 in decimal, the form the SDK client writes\nconst UINT256 = /^(0|[1-9]\\d{0,77})$/;\nconst UINT256_MAX = 2n ** 256n - 1n;\n// An EIP-3009 nonce: 32 bytes in hex\nconst BYTES32 = /^0x[0-9a-fA-F]{64}$/;\n\nconst isUint256 = (value: unknown): value is string =>\n typeof value === 'string' && UINT256.test(value) && BigInt(value) <= UINT256_MAX;\n\n/**\n * Checks an EIP-3009 authorization's fields in the forms the SDK client and\n * mppx write: addresses, decimal uint256 strings and a 32-byte hex nonce. A\n * value such as `\"0x2710\"` would otherwise reach the receipt as written.\n */\nexport function hasEip3009Fields(authorization: Readonly<Record<string, unknown>>): boolean {\n return (\n isEvmAddress(authorization['from']) &&\n isEvmAddress(authorization['to']) &&\n isUint256(authorization['value']) &&\n isUint256(authorization['validAfter']) &&\n isUint256(authorization['validBefore']) &&\n typeof authorization['nonce'] === 'string' &&\n BYTES32.test(authorization['nonce'])\n );\n}\n\n/**\n * Checks the Permit2 `exact`/EVM fields used to match the offer and derive\n * the replay key. The facilitator checks the signature and on-chain state.\n */\nexport function isExactPermit2Payload(\n payload: PaymentPayload,\n): payload is PaymentPayload & { payload: ExactPermit2Payload } {\n const inner = payload.payload;\n if (payload.accepted.scheme !== 'exact' || !isRecord(inner)) return false;\n const auth = inner['permit2Authorization'];\n if (!isRecord(auth) || 'authorization' in inner || typeof inner['signature'] !== 'string') {\n return false;\n }\n const { permitted, witness } = auth;\n return (\n isRecord(permitted) &&\n isRecord(witness) &&\n isEvmAddress(auth['from']) &&\n isEvmAddress(auth['spender']) &&\n isEvmAddress(permitted['token']) &&\n isEvmAddress(witness['to']) &&\n isUint256(permitted['amount']) &&\n isUint256(auth['nonce']) &&\n isUint256(auth['deadline']) &&\n isUint256(witness['validAfter'])\n );\n}\n","// The challenge a resource answers with, and the offer a proof selects from it\nimport type { PaymentRequired, PaymentRequirements } from '@x402/core/types';\nimport type { PaymentContext, PaymentRequirement, PaymentVerificationContext } from '../../../core';\nimport {\n REUSE_REJECTED_AUTHORIZATION_METADATA_KEY,\n SETTLE_AFTER_BACKEND_METADATA_KEY,\n} from '../../../core/execution/settlement-order';\nimport { sameAddress } from '../addresses';\nimport { parseCanonicalAmount } from '../amount';\nimport type { X402Network } from '../networks';\nimport { decodePaymentSubmission } from '../payload';\nimport { X402_DEFAULT_PAYMENT_FLOW } from '../payment-flow';\nimport { DEFAULT_MIME_TYPE, X402_PROTOCOL_VERSION, X402_VERSION } from './constants';\nimport type { ProviderContext, SvmOffer } from './types';\n\n// Requirement metadata naming the offer `selectRequirement` chose, by index\nexport const SELECTED_OFFER_KEY = 'x402.offer';\n\n// Use the selected or sole offer; multi-offer challenges require selection\nexport function offerIndexOf(requirement: PaymentRequirement): number | undefined {\n const selected = requirement.metadata?.[SELECTED_OFFER_KEY];\n if (typeof selected === 'number') return selected;\n // An empty list falls through to 'missing_payment_requirements'\n return requirement.challenge.accepts.length <= 1 ? 0 : undefined;\n}\n\n/**\n * Match echoed terms against the offer. Extra client keys and\n * `maxTimeoutSeconds` do not matter; EVM addresses ignore case, Solana's do\n * not. Compare effective payment flows so an upfront proof cannot pay a default\n * authorization offer.\n */\nexport function acceptedMatchesOffer(\n offered: PaymentRequirements,\n accepted: PaymentRequirements,\n network: X402Network | undefined,\n): boolean {\n if (!network) return false;\n const same = (a: string, b: string) => sameAddress(network, a, b);\n const offeredExtra = offered.extra ?? {};\n const acceptedExtra = accepted.extra ?? {};\n const flow = (extra: Record<string, unknown>) =>\n extra['paymentFlow'] ?? X402_DEFAULT_PAYMENT_FLOW;\n return (\n accepted.scheme === offered.scheme &&\n accepted.network === offered.network &&\n accepted.amount === offered.amount &&\n same(accepted.asset, offered.asset) &&\n same(accepted.payTo, offered.payTo) &&\n Object.entries(offeredExtra).every(([key, value]) => acceptedExtra[key] === value) &&\n flow(acceptedExtra) === flow(offeredExtra)\n );\n}\n\n/** Builds the provider's `createRequirement` and `selectRequirement` */\nexport function createRequirementBuilders(\n ctx: ProviderContext,\n svmFeePayer: (offer: SvmOffer) => Promise<string>,\n): {\n readonly createRequirement: (context: PaymentContext) => Promise<PaymentRequirement>;\n readonly selectRequirement: (context: PaymentVerificationContext) => Promise<PaymentRequirement>;\n} {\n const { options, offersFor, clock, ids, maxTimeoutSeconds } = ctx;\n\n async function createRequirement(context: PaymentContext): Promise<PaymentRequirement> {\n const offers = offersFor(context.resource.id);\n const paymentFlow =\n options.resourcePaymentFlows?.[context.resource.id] ??\n options.paymentFlow ??\n X402_DEFAULT_PAYMENT_FLOW;\n\n // x402 requires an explicit non-default flow. Omit the default\n // `authorization` flow here.\n const flow = paymentFlow === 'upfront' ? { paymentFlow } : {};\n const accepts: PaymentRequirements[] = await Promise.all(\n offers.map(async (offer) => ({\n scheme: 'exact',\n network: offer.network,\n asset: offer.asset,\n amount: parseCanonicalAmount(context.amount, offer.assetDecimals).toString(),\n payTo: offer.payTo,\n maxTimeoutSeconds,\n // EIP-3009 needs `name`/`version` for a shared EIP-712 domain without\n // a token `version()` call; Permit2 uses its own domain. EVM clients\n // sign the named `assetTransferMethod`. Solana needs the facilitator's\n // fee payer; NEAR needs no scheme-specific extra because the\n // facilitator chooses its relayer.\n extra:\n offer.family === 'svm'\n ? { feePayer: await svmFeePayer(offer), ...flow }\n : offer.family === 'near'\n ? { ...flow }\n : {\n ...(offer.assetName !== undefined ? { name: offer.assetName } : {}),\n ...(offer.assetVersion !== undefined ? { version: offer.assetVersion } : {}),\n assetTransferMethod: offer.method,\n ...flow,\n },\n })),\n );\n const single = offers.length === 1 ? offers[0] : undefined;\n const extensions = await ctx.quotes?.extensionsFor(\n context.resource.id,\n context.input,\n offers.flatMap((offer, index) => {\n const accepted = accepts[index];\n return offer.family === 'evm' && accepted ? [{ offer, amount: accepted.amount }] : [];\n }),\n );\n\n // The v2 challenge document as sent on the wire. The HTTP adapter\n // base64-encodes it into `PAYMENT-REQUIRED` and MCP passes it through, so\n // both surfaces offer the same challenge.\n //\n // `resource.url` is outside the EIP-3009 signature. A single offer puts its\n // network and payee in it, so the buyer's echo identifies the offer. With\n // several, the URL stays the same whichever one the buyer pays.\n const resourceId = encodeURIComponent(context.resource.id);\n const envelope: PaymentRequired = {\n x402Version: X402_VERSION,\n resource: {\n url: single\n ? `resource://agent-commerce/${encodeURIComponent(single.network)}/${single.payTo}/resources/${resourceId}`\n : `resource://agent-commerce/resources/${resourceId}`,\n description: context.resource.description ?? context.resource.name,\n // The media type the merchant declares, else `application/json`; an HTTP\n // delivery carries the backend's own type when it is text and fits the body\n mimeType: options.resourceMimeTypes?.[context.resource.id] ?? DEFAULT_MIME_TYPE,\n },\n accepts,\n ...(extensions !== undefined ? { extensions } : {}),\n };\n\n const expiresAt = new Date(clock.now().getTime() + maxTimeoutSeconds * 1000).toISOString();\n\n return {\n id: ids.next('payreq'),\n requestId: context.requestId,\n resourceId: context.resource.id,\n provider: 'x402',\n amount: context.amount,\n currency: context.currency,\n // Several offers name several destinations; selection fills these in\n ...(single\n ? { destination: single.payTo, network: single.network, asset: single.asset }\n : {}),\n expiresAt,\n challenge: {\n provider: 'x402',\n version: X402_PROTOCOL_VERSION,\n accepts: accepts as unknown as Record<string, unknown>[],\n envelope: envelope as unknown as Record<string, unknown>,\n },\n metadata: {\n [SETTLE_AFTER_BACKEND_METADATA_KEY]: paymentFlow === 'authorization',\n // The SDK server keeps no record of a payload whose handler or\n // settlement failed and verifies it again; the chain spends it once\n [REUSE_REJECTED_AUTHORIZATION_METADATA_KEY]: true,\n },\n };\n }\n\n /**\n * Selects the unique offer matching `accepted`, leaving zero or multiple\n * matches unchanged for `verify()` to reject. Selection identifies the\n * claimed offer; verification still validates the proof.\n */\n async function selectRequirement(\n context: PaymentVerificationContext,\n ): Promise<PaymentRequirement> {\n const { requirement, submission } = context;\n const offered = requirement.challenge.accepts as unknown as PaymentRequirements[];\n if (offered.length < 2) return requirement;\n const offers = offersFor(requirement.resourceId);\n const payload = decodePaymentSubmission(submission.payload);\n if (!payload) return requirement;\n const matches = offered.flatMap((offer, index) =>\n acceptedMatchesOffer(offer, payload.accepted, offers[index]?.profile) ? [index] : [],\n );\n const index = matches.length === 1 ? matches[0] : undefined;\n const offer = index === undefined ? undefined : offers[index];\n if (index === undefined || !offer) return requirement;\n return {\n ...requirement,\n destination: offer.payTo,\n network: offer.network,\n asset: offer.asset,\n metadata: { ...requirement.metadata, [SELECTED_OFFER_KEY]: index },\n };\n }\n\n return { createRequirement, selectRequirement };\n}\n","// EVM transfer terms, replay identity and reconciliation coordinates\n\nimport type { PaymentPayload } from '@x402/core/types';\nimport { x402ExactPermit2ProxyAddress } from '@x402/evm';\nimport { getAddress, isAddress } from 'viem';\nimport { eip3009Locator, permit2Locator } from '../locator';\nimport { hasEip3009Fields, isExactEvmPayload, isExactPermit2Payload } from '../payload';\nimport { computePermit2ReplayKey, computeReplayKey } from '../replay-key';\nimport type { EvmOffer } from './types';\n\n// What a payload authorizes, read the way the offer's method settles it\nexport interface Transfer {\n readonly from: `0x${string}`;\n readonly to: `0x${string}`;\n readonly value: string;\n readonly replayKey: string;\n readonly locator: Readonly<Record<string, unknown>>;\n readonly recipientMismatch: string;\n readonly amountMismatch: string;\n}\n\n/**\n * Reads the payer, payee, amount and replay key, or returns a refusal reason.\n * Enforces the offer's method because the SDK facilitator chooses the method\n * from the payload.\n */\nexport function readTransfer(payload: PaymentPayload, offer: EvmOffer): Transfer | string {\n // verify() refuses an `accepted.network` other than the offer's, so this\n // chain id is the one the authorization is bound to\n const { chainId } = offer.profile;\n if (offer.method === 'eip3009') {\n if (!isExactEvmPayload(payload)) return 'unsupported_scheme';\n const { authorization } = payload.payload;\n const { from, to, value, nonce } = authorization;\n if (!hasEip3009Fields(authorization) || !isAddress(from) || !isAddress(to)) {\n return 'invalid_payload';\n }\n return {\n from: getAddress(from),\n to: getAddress(to),\n value,\n replayKey: computeReplayKey({\n chainId,\n asset: getAddress(offer.asset),\n from: getAddress(from),\n nonce,\n }),\n locator: eip3009Locator(offer.network, offer.asset, authorization),\n recipientMismatch: 'invalid_exact_evm_payload_recipient_mismatch',\n amountMismatch: 'invalid_exact_evm_payload_authorization_value_mismatch',\n };\n }\n if (!isExactPermit2Payload(payload)) return 'unsupported_scheme';\n const { from, spender, permitted, witness, nonce, deadline } =\n payload.payload.permit2Authorization;\n // Permit2 lets the spender move the permitted tokens anywhere; only the x402\n // proxy binds the transfer to the signed witness recipient\n if (getAddress(spender) !== getAddress(x402ExactPermit2ProxyAddress)) {\n return 'invalid_permit2_spender';\n }\n if (getAddress(permitted.token) !== getAddress(offer.asset)) return 'permit2_token_mismatch';\n return {\n from: getAddress(from),\n to: getAddress(witness.to),\n value: permitted.amount,\n replayKey: computePermit2ReplayKey({ chainId, owner: getAddress(from), nonce }),\n locator: permit2Locator(offer.network, {\n asset: permitted.token,\n owner: from,\n to: witness.to,\n amount: permitted.amount,\n nonce,\n deadline,\n validAfter: witness.validAfter,\n proxy: spender,\n }),\n recipientMismatch: 'invalid_permit2_recipient_mismatch',\n amountMismatch: 'permit2_amount_mismatch',\n };\n}\n","// Settles a verified proof and classifies the facilitator's answer\nimport type { PaymentRequirements, SettleResponse } from '@x402/core/types';\nimport type { PaymentResult, PaymentSettlementContext } from '../../../core';\nimport { CommerceError } from '../../../core';\nimport { redactedErrorText } from '../../../core/errors';\nimport { isTransactionReference } from '../addresses';\nimport { decodePaymentSubmission, forFacilitator } from '../payload';\nimport {\n isNearVerdict,\n isOnChainRevertError,\n isProviderUnavailableError,\n isTransactionFailedReason,\n NO_VERDICT_REASONS,\n ON_CHAIN_FAILURE_REASONS,\n SETTLEMENT_PENDING_REASON,\n sanitizeReason,\n UNKNOWN_OUTCOME_REASONS,\n} from './reasons';\nimport { offerIndexOf } from './requirement';\nimport { readTransfer } from './transfer';\nimport type { ProviderContext } from './types';\n\n/** Builds the provider's `settle`, which throws unless handed a successful verification */\nexport function createSettle(\n ctx: ProviderContext,\n): (context: PaymentSettlementContext) => Promise<PaymentResult> {\n const { offersFor, clock, logger } = ctx;\n\n async function settle(context: PaymentSettlementContext): Promise<PaymentResult> {\n const { requirement, submission, verification } = context;\n\n if (verification.status !== 'verified') {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n 'x402 provider: settle() called without a successful verify()',\n );\n }\n\n const index = offerIndexOf(requirement);\n const offer = index === undefined ? undefined : offersFor(requirement.resourceId)[index];\n const requirements =\n index === undefined\n ? undefined\n : (requirement.challenge.accepts[index] as PaymentRequirements | undefined);\n if (!offer || !requirements) {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n 'x402 provider: settle() found no payment requirements to settle against',\n );\n }\n\n const payload = decodePaymentSubmission(submission.payload);\n const transfer = payload && offer.family === 'evm' ? readTransfer(payload, offer) : undefined;\n if (!payload || typeof transfer === 'string') {\n throw new CommerceError(\n 'PAYMENT_INVALID',\n 'x402 provider: settle() received an undecodable payment payload',\n );\n }\n const reference = (value: string) => isTransactionReference(offer.profile, value);\n\n const rejectedSettlement = (rejectionReason: string): PaymentResult => ({\n status: 'rejected',\n provider: 'x402',\n amount: verification.amount,\n currency: verification.currency,\n ...(verification.network !== undefined ? { network: verification.network } : {}),\n ...(verification.asset !== undefined ? { asset: verification.asset } : {}),\n ...(verification.replayKey !== undefined ? { replayKey: verification.replayKey } : {}),\n rejectionReason,\n });\n\n const scope = offer.binding.open();\n let sdkResult: SettleResponse;\n try {\n sdkResult = await scope.settle(forFacilitator(payload), requirements);\n } catch (err) {\n if (isProviderUnavailableError(err) || scope.transportFailed()) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: ${offer.binding.kind} facilitator unreachable during settle()`,\n { cause: err },\n );\n }\n // The pinned SDK returns a result for every failure from gas estimation\n // on, so a throw comes from its checks before anything is sent. A revert\n // there is a real rejection, which releases any mandate the pipeline\n // holds for the purchase. Any other throw goes back as an unavailable\n // provider, which the pipeline records as `settlement-uncertain`, never\n // as a rejection blamed on the buyer.\n if (!isOnChainRevertError(err)) {\n logger.warn(\n { err: redactedErrorText(err) },\n 'x402 settle(): settlement failed with an unclassified error; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: settlement failed with an unclassified error; outcome unknown',\n { cause: err },\n );\n }\n logger.warn(\n { err: redactedErrorText(err), rejectionReason: 'transaction_reverted' },\n 'x402 settle(): settlement transaction reverted on chain',\n );\n return rejectedSettlement('transaction_reverted');\n }\n\n // verify() established the payer. The Solana scheme's settlement example\n // names the fee payer there, while x402 v2 defines the payer's wallet.\n const payer = verification.payer ?? sdkResult.payer;\n\n if (!sdkResult.success) {\n // \"Broadcast, never confirmed\" is not \"did not happen\": the transfer may\n // be on-chain, so it throws as an unavailable provider carrying the hash,\n // and the pipeline records the attempt `settlement-uncertain`, not\n // `rejected`. The SDK's catch-all without a hash is treated the same way,\n // because its throw may have followed a broadcast and viem reports an\n // RPC error on the send as a revert.\n if (isTransactionFailedReason(sdkResult.errorReason) && !reference(sdkResult.transaction)) {\n // The appended message can carry an RPC URL\n logger.warn(\n { reportedReason: redactedErrorText(sdkResult.errorReason) },\n 'x402 settle(): the broadcast failed without a transaction hash; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: settlement failed with an unclassified error; outcome unknown',\n );\n }\n // These NEAR SDK checks fail before submission. Release the attempt so\n // a retry using the same access-key nonce can reserve it again.\n if (\n offer.family === 'near' &&\n NO_VERDICT_REASONS.has(sdkResult.errorReason ?? '') &&\n !sdkResult.transaction\n ) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: the facilitator could not check the payment before submitting it',\n {\n details: {\n settlementNotSubmitted: true,\n reason: sanitizeReason(sdkResult.errorReason, 'facilitator_unavailable'),\n },\n },\n );\n }\n // A broadcast the SDK could not confirm nor record for a retry comes\n // back as its catch-all with the transaction, and a message starting\n // `settlement_pending`\n if (\n sdkResult.errorReason === SETTLEMENT_PENDING_REASON ||\n sdkResult.errorMessage?.startsWith(SETTLEMENT_PENDING_REASON) === true ||\n UNKNOWN_OUTCOME_REASONS.has(sdkResult.errorReason ?? '') ||\n NO_VERDICT_REASONS.has(sdkResult.errorReason ?? '') ||\n scope.transportFailed()\n ) {\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: settlement was broadcast but could not be confirmed',\n {\n ...(sdkResult.transaction\n ? { details: { transactionHash: sdkResult.transaction } }\n : {}),\n },\n );\n }\n // Only the family's on-chain failure proves a named transaction moved\n // nothing. Any other reason may follow a transfer that landed.\n if (\n sdkResult.transaction &&\n sdkResult.errorReason !== ON_CHAIN_FAILURE_REASONS[offer.family]\n ) {\n logger.warn(\n { reportedReason: redactedErrorText(sdkResult.errorReason ?? '') },\n 'x402 settle(): the facilitator reported a failure with a transaction; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: the facilitator reported a failed settlement with a transaction; outcome unknown',\n { details: { transactionHash: sdkResult.transaction } },\n );\n }\n // A `settlement_failed` that reaches here carries its hash\n if (offer.family === 'near' && !isNearVerdict(sdkResult.errorReason)) {\n logger.warn(\n { reportedReason: redactedErrorText(sdkResult.errorReason ?? '') },\n 'x402 settle(): NEAR facilitator failure reason is not a verdict; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: settlement failed with an unclassified error; outcome unknown',\n );\n }\n if (sdkResult.errorReason !== undefined) {\n logger.debug(\n { reportedReason: redactedErrorText(sdkResult.errorReason) },\n 'x402 settle(): facilitator failure reason',\n );\n }\n return {\n ...rejectedSettlement(sanitizeReason(sdkResult.errorReason, 'settlement_failed')),\n network: sdkResult.network,\n ...(payer !== undefined ? { payer } : {}),\n // The failed transaction, which the facilitator paid for\n ...(sdkResult.transaction ? { externalReference: sdkResult.transaction } : {}),\n };\n }\n\n // A success names the offer's network and a transaction in its family's\n // form; anything else unlocks nothing, and the outcome stays unknown\n if (!reference(sdkResult.transaction) || sdkResult.network !== offer.network) {\n logger.warn(\n { network: sdkResult.network },\n 'x402 settle(): the facilitator reported a success it did not identify; outcome unknown',\n );\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n 'x402 provider: the facilitator reported a settlement without a valid transaction; outcome unknown',\n );\n }\n\n return {\n status: 'settled',\n provider: 'x402',\n externalReference: sdkResult.transaction,\n ...(payer !== undefined ? { payer } : {}),\n payee: requirements.payTo,\n amount: verification.amount,\n currency: verification.currency,\n network: sdkResult.network,\n ...(verification.asset !== undefined ? { asset: verification.asset } : {}),\n ...(verification.replayKey !== undefined ? { replayKey: verification.replayKey } : {}),\n settledAt: clock.nowIso(),\n // `amount` is the display value; x402's settlement response reports base\n // units. verify() matched an EVM authorization's value to the offer.\n metadata: {\n amountBaseUnits: transfer?.value ?? requirements.amount,\n // The resource's own price, when it names a currency other than the token\n ...(verification.currency !== requirement.currency\n ? { quote: { amount: requirement.amount, currency: requirement.currency } }\n : {}),\n },\n };\n }\n\n return settle;\n}\n","// Checks a proof against the offer it pays, then asks the facilitator for a verdict\nimport type { PaymentRequired, PaymentRequirements, VerifyResponse } from '@x402/core/types';\nimport { formatUnits, getAddress } from 'viem';\nimport type { PaymentResult, PaymentVerificationContext } from '../../../core';\nimport { CommerceError, RECONCILIATION_METADATA_KEY } from '../../../core';\nimport { redactedErrorText } from '../../../core/errors';\nimport { normalizeAddress, sameAddress } from '../addresses';\nimport { declaredX402Version, decodePaymentSubmission, forFacilitator } from '../payload';\nimport { X402_VERSION } from './constants';\nimport { offerCurrency } from './offers';\nimport { isProviderUnavailableError, NO_VERDICT_REASONS, sanitizeReason } from './reasons';\nimport { acceptedMatchesOffer, offerIndexOf } from './requirement';\nimport { readTransfer, type Transfer } from './transfer';\nimport type { NearOffer, ProviderContext } from './types';\n\n// Additional time to await optional NEAR relayers from `/supported` after\n// a successful verification verdict\nconst RELAYER_GRACE_MS = 1_000;\n\n/** Builds the provider's `verify`, which never moves funds */\nexport function createVerify(\n ctx: ProviderContext,\n nearRelayers: (offer: NearOffer) => Promise<readonly string[]>,\n): (context: PaymentVerificationContext) => Promise<PaymentResult> {\n const { offersFor, clock, logger, svm, near } = ctx;\n\n /**\n * Checks a submission against the requirement this provider built, never\n * against `payload.accepted`, the copy the client echoes back. That copy\n * must itself match the offer, or the proof is refused.\n *\n * The `exact` scheme requires the authorized amount to match exactly,\n * including when the buyer offers more. Local refusals use x402 error codes\n * where available.\n */\n async function verify(context: PaymentVerificationContext): Promise<PaymentResult> {\n const { requirement, submission } = context;\n\n const rejected = (reason: string): PaymentResult => ({\n status: 'rejected',\n provider: 'x402',\n amount: requirement.amount,\n currency: requirement.currency,\n ...(requirement.network !== undefined ? { network: requirement.network } : {}),\n ...(requirement.asset !== undefined ? { asset: requirement.asset } : {}),\n rejectionReason: reason,\n });\n\n if (requirement.provider !== 'x402' || requirement.challenge.provider !== 'x402') {\n return rejected('wrong_provider');\n }\n\n // With several offers and none selected, the proof matched no single offer\n const index = offerIndexOf(requirement);\n if (index === undefined) {\n return rejected('invalid_payment_requirements');\n }\n const offer = offersFor(requirement.resourceId)[index];\n const requirements = requirement.challenge.accepts[index] as PaymentRequirements | undefined;\n if (!offer || !requirements) {\n return rejected('missing_payment_requirements');\n }\n\n // Defense in depth only: the pipeline builds a fresh requirement for every\n // request, so this rarely fires. The real expiry is the authorization's\n // own, which the facilitator checks.\n if (\n requirement.expiresAt !== undefined &&\n Date.parse(requirement.expiresAt) < clock.now().getTime()\n ) {\n return rejected('requirement_expired');\n }\n\n // This provider built the requirement, so the asset always matches in\n // normal operation. A corrupted one must still never authorize a transfer\n // of a different asset.\n if (!sameAddress(offer.profile, requirements.asset, offer.asset)) {\n return rejected('wrong_asset');\n }\n\n const payload = decodePaymentSubmission(submission.payload);\n if (!payload) {\n const version = declaredX402Version(submission.payload);\n return rejected(\n typeof version === 'number' && version !== X402_VERSION\n ? 'invalid_x402_version'\n : 'invalid_payload',\n );\n }\n if (payload.x402Version !== X402_VERSION) {\n return rejected('invalid_x402_version');\n }\n // EVM: the authorization names payer, payee and amount. Solana: the\n // facilitator reads the transaction, and the gateway takes its identity.\n // NEAR: the delegate names the transfer, checked here against the offer.\n let transfer: Transfer | undefined;\n let replayKey: string;\n let locator: Readonly<Record<string, unknown>>;\n let derivedPayer: string | undefined;\n if (offer.family === 'svm') {\n const inspected = (await svm()).inspectSvmPayload(payload.payload, offer.network);\n if (typeof inspected === 'string') return rejected(inspected);\n replayKey = inspected.replayKey;\n locator = inspected.locator;\n } else if (offer.family === 'near') {\n const inspected = (await near()).inspectNearPayload(payload.payload, {\n network: offer.network,\n asset: offer.asset,\n payTo: offer.payTo,\n amount: requirements.amount,\n });\n if (typeof inspected === 'string') return rejected(inspected);\n replayKey = inspected.replayKey;\n locator = inspected.locator;\n derivedPayer = inspected.payer;\n } else {\n const read = readTransfer(payload, offer);\n if (typeof read === 'string') return rejected(read);\n transfer = read;\n replayKey = read.replayKey;\n locator = read.locator;\n derivedPayer = read.from;\n }\n // Reject a different network before calling the facilitator. NEAR's\n // delegate signature itself does not bind the chain.\n if (payload.accepted.network !== offer.network) {\n return rejected('invalid_network');\n }\n // The signature omits flow and resource. Check the echoed offer;\n // `resource` is optional, but must match when present.\n const offeredUrl = (requirement.challenge.envelope as PaymentRequired | undefined)?.resource\n ?.url;\n if (\n !acceptedMatchesOffer(requirements, payload.accepted, offer.profile) ||\n (payload.resource !== undefined && payload.resource.url !== offeredUrl)\n ) {\n return rejected('invalid_payment_requirements');\n }\n let required: bigint;\n try {\n required = BigInt(requirements.amount);\n } catch {\n return rejected('invalid_payload');\n }\n if (transfer) {\n if (transfer.to !== getAddress(offer.payTo)) {\n return rejected(transfer.recipientMismatch);\n }\n let authorizedValue: bigint;\n try {\n authorizedValue = BigInt(transfer.value);\n } catch {\n return rejected('invalid_payload');\n }\n if (authorizedValue !== required) {\n return rejected(transfer.amountMismatch);\n }\n }\n\n // Fetch NEAR relayers alongside verification; failed `/supported` reads yield none\n const relayers = offer.family === 'near' ? nearRelayers(offer) : undefined;\n const scope = offer.binding.open();\n let sdkResult: VerifyResponse;\n try {\n sdkResult = await scope.verify(forFacilitator(payload), requirements);\n } catch (err) {\n // A throw means no verdict was obtained, so it is never held against the\n // buyer. Only an unclassified one is logged, as it may be an SDK fault.\n if (!isProviderUnavailableError(err) && !scope.transportFailed()) {\n logger.warn({ err: redactedErrorText(err) }, 'x402 verify(): unexpected SDK error');\n }\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: ${offer.binding.kind} facilitator returned no verdict during verify()`,\n { cause: err },\n );\n }\n\n if (!sdkResult.isValid) {\n // An RPC that never answered is not a payment that failed a check\n if (scope.transportFailed() || NO_VERDICT_REASONS.has(sdkResult.invalidReason ?? '')) {\n if (sdkResult.invalidReason !== undefined) {\n logger.debug(\n { reportedReason: redactedErrorText(sdkResult.invalidReason) },\n 'x402 verify(): local facilitator transport failure reason',\n );\n }\n throw new CommerceError(\n 'PAYMENT_PROVIDER_UNAVAILABLE',\n `x402 provider: ${offer.binding.kind} facilitator unreachable during verify()`,\n );\n }\n // The raw reason is logged at debug level. Only what the buyer sees and\n // the ledger records is constrained.\n if (sdkResult.invalidReason !== undefined) {\n logger.debug(\n { reportedReason: redactedErrorText(sdkResult.invalidReason) },\n 'x402 verify(): facilitator rejection reason',\n );\n }\n return rejected(sanitizeReason(sdkResult.invalidReason, 'invalid_payment'));\n }\n\n // The Solana payer is the facilitator's reading of the transaction\n const payer =\n derivedPayer ??\n (sdkResult.payer !== undefined && normalizeAddress(offer.profile, sdkResult.payer)\n ? sdkResult.payer\n : undefined);\n if (offer.family === 'svm' && payer !== undefined) locator = { ...locator, payer };\n const relayerIds = relayers !== undefined ? await withinGrace(relayers) : [];\n if (relayerIds.length > 0) locator = { ...locator, relayers: relayerIds };\n return {\n status: 'verified',\n provider: 'x402',\n ...(payer !== undefined ? { payer } : {}),\n payee: transfer?.to ?? offer.payTo,\n amount: formatUnits(required, offer.assetDecimals),\n currency: offerCurrency(offer, requirement.currency),\n network: payload.accepted.network,\n asset: offer.family === 'evm' ? getAddress(requirements.asset) : offer.asset,\n replayKey,\n metadata: { [RECONCILIATION_METADATA_KEY]: locator },\n };\n }\n\n return verify;\n\n async function withinGrace(relayers: Promise<readonly string[]>): Promise<readonly string[]> {\n let timer: NodeJS.Timeout | undefined;\n const late = new Promise<undefined>((resolve) => {\n timer = setTimeout(() => resolve(undefined), RELAYER_GRACE_MS);\n timer.unref();\n });\n const ids = await Promise.race([relayers, late]).finally(() => clearTimeout(timer));\n if (ids === undefined) {\n logger.warn(\n { graceMs: RELAYER_GRACE_MS },\n 'x402 verify(): /supported is slow; the NEAR locator names no relayer',\n );\n }\n return ids ?? [];\n }\n}\n","/**\n * x402 payment provider: protocol v2, `exact` scheme. On EVM the buyer signs an\n * EIP-3009 `transferWithAuthorization` or a Permit2 transfer through the x402\n * exact proxy; on Solana, a token transfer whose fee the facilitator pays; on\n * NEAR, a delegated NEP-141 `ft_transfer` that the facilitator's relayer\n * submits.\n *\n * `verify()` never moves funds. `settle()` does, and throws unless it is handed\n * a successful verification. Both run through a facilitator (see\n * `../facilitator.ts`): the SDK's own `x402Facilitator` in this process, or a\n * remote HTTP facilitator.\n */\nimport type { AdapterDescriptor } from '../../../core';\nimport { CommerceError, NOOP_LOGGER, systemClock } from '../../../core';\nimport { PACKAGE_VERSION } from '../../../version';\nimport { DEFAULT_IDS, DEFAULT_MAX_TIMEOUT_SECONDS, X402_VERSION } from './constants';\nimport {\n createNearRelayerSource,\n createSupportedSource,\n createSvmFeePayerSource,\n} from './fee-payer';\nimport { createHealthCheck } from './health';\nimport { resolveOffers } from './offers';\nimport { createQuoteIssuer, QUOTE_EXTENSION, QUOTE_REQUEST_SCHEME } from './quote';\nimport { createReconcile } from './reconcile';\nimport { createRequirementBuilders } from './requirement';\nimport { createSettle } from './settle';\nimport type {\n EvmOffer,\n ProviderContext,\n X402MultiOfferProviderOptions,\n X402OfferOptions,\n X402PaymentProvider,\n X402ProviderOptions,\n} from './types';\nimport { createVerify } from './verify';\n\nexport { DEFAULT_IDS } from './constants';\nexport type {\n X402MultiOfferProviderOptions,\n X402OfferOptions,\n X402PaymentProvider,\n X402ProviderOptions,\n} from './types';\n\nexport function createX402PaymentProvider(\n options: X402ProviderOptions | X402MultiOfferProviderOptions,\n): X402PaymentProvider {\n const inputs: readonly X402OfferOptions[] = 'offers' in options ? options.offers : [options];\n if (inputs.length === 0) {\n throw new CommerceError('CONFIG_INVALID', 'x402 provider: \"offers\" is empty');\n }\n // The NEAR facilitator refuses every payment under any other value\n if (\n options.maxTimeoutSeconds !== undefined &&\n (!Number.isInteger(options.maxTimeoutSeconds) || options.maxTimeoutSeconds <= 0)\n ) {\n throw new CommerceError(\n 'CONFIG_INVALID',\n `x402 provider: maxTimeoutSeconds must be a positive integer (got ${options.maxTimeoutSeconds})`,\n );\n }\n const {\n offers: defaultOffers,\n resourceOffers,\n pool: offers,\n deploymentMode,\n remoteBinding,\n } = resolveOffers(inputs, options);\n const offersFor = (resourceId: string) => resourceOffers.get(resourceId) ?? defaultOffers;\n const severalOffers = [defaultOffers, ...resourceOffers.values()].some((list) => list.length > 1);\n\n const clock = options.clock ?? systemClock;\n const ids = options.ids ?? DEFAULT_IDS;\n const logger = options.logger ?? NOOP_LOGGER;\n const maxTimeoutSeconds = options.maxTimeoutSeconds ?? DEFAULT_MAX_TIMEOUT_SECONDS;\n\n const quotes = options.quote\n ? createQuoteIssuer({\n signerPrivateKey: options.quote.signerPrivateKey,\n offers,\n deploymentMode,\n clock,\n maxTimeoutSeconds,\n })\n : undefined;\n\n const evmOffers = offers.filter((offer): offer is EvmOffer => offer.family === 'evm');\n const hasSvm = offers.some((offer) => offer.family === 'svm');\n const hasNear = offers.some((offer) => offer.family === 'near');\n const descriptor: AdapterDescriptor = {\n name: 'x402',\n kind: 'payment',\n implementationVersion: PACKAGE_VERSION,\n supportedSpec: `x402/v${X402_VERSION} scheme=exact family=${[\n ...(evmOffers.length > 0 ? ['eip155'] : []),\n ...(hasSvm ? ['solana'] : []),\n ...(hasNear ? ['near'] : []),\n ].join(',')}`,\n capabilities: [\n ...(evmOffers.length > 0 ? ['exact-evm'] : []),\n ...(hasSvm ? ['exact-svm'] : []),\n ...(hasNear ? ['exact-near'] : []),\n `${options.facilitator.mode}-facilitator`,\n ...(evmOffers.some((offer) => offer.method === 'eip3009') ? ['eip-3009'] : []),\n ...(evmOffers.some((offer) => offer.method === 'permit2') ? ['permit2'] : []),\n 'caip-2',\n `mode=${deploymentMode}`,\n 'authorization-flow',\n 'upfront-flow',\n ...(severalOffers ? ['multiple-offers'] : []),\n ...(quotes ? ['erc-8409-quotes'] : []),\n ],\n status: 'stable',\n unsupported: [\n 'permit2 gas sponsoring extensions',\n 'upto scheme',\n 'batch-settlement scheme',\n 'auth-capture scheme',\n ],\n };\n\n // Loaded only with an offer of their family, so no deployment needs the\n // peers of a family it does not offer\n const svmModule = hasSvm\n ? loadOptionalModule(() => import('../svm'), 'Solana offers need @x402/svm and @solana/kit')\n : undefined;\n const nearModule = hasNear\n ? loadOptionalModule(() => import('../near'), 'NEAR offers need @x402/near')\n : undefined;\n const svm = async () => {\n if (!svmModule)\n throw new CommerceError('INTERNAL_ERROR', 'x402 provider: no Solana offer is configured');\n return svmModule;\n };\n const near = async () => {\n if (!nearModule)\n throw new CommerceError('INTERNAL_ERROR', 'x402 provider: no NEAR offer is configured');\n return nearModule;\n };\n\n const ctx: ProviderContext = {\n options,\n offers,\n offersFor,\n deploymentMode,\n remoteBinding,\n clock,\n ids,\n logger,\n maxTimeoutSeconds,\n quotes,\n svm,\n near,\n };\n const supported = createSupportedSource(ctx);\n const { createRequirement, selectRequirement } = createRequirementBuilders(\n ctx,\n createSvmFeePayerSource(supported),\n );\n const verify = createVerify(ctx, createNearRelayerSource(supported, logger));\n const settle = createSettle(ctx);\n const health = createHealthCheck(ctx);\n\n return {\n name: 'x402',\n descriptor,\n createRequirement,\n // A single offer needs no selection\n ...(severalOffers ? { selectRequirement } : {}),\n verify,\n settle,\n reconcile: createReconcile(ctx),\n health,\n ...(quotes\n ? {\n quote: {\n issuer: quotes.issuer,\n requestScheme: QUOTE_REQUEST_SCHEME,\n extension: QUOTE_EXTENSION,\n },\n }\n : {}),\n };\n}\n\n/**\n * Loads a family's inspection module, refusing with a clear error when its\n * optional peers are missing\n */\nfunction loadOptionalModule<T>(load: () => Promise<T>, missing: string): Promise<T> {\n const loading = load().catch((cause: unknown) => {\n throw new CommerceError('PAYMENT_PROVIDER_UNAVAILABLE', `x402 provider: ${missing}`, {\n cause,\n });\n });\n // verify() and health() report the failure; nothing else awaits it\n loading.catch(() => {});\n return loading;\n}\n"]}
|