diff --git a/asset-manifest.json b/asset-manifest.json
index d96aa4e..f2b5ee0 100644
--- a/asset-manifest.json
+++ b/asset-manifest.json
@@ -1,15 +1,15 @@
{
"files": {
"main.css": "/easy-enclosure/static/css/main.44a4db81.css",
- "main.js": "/easy-enclosure/static/js/main.a0b3251a.js",
+ "main.js": "/easy-enclosure/static/js/main.ad8c10bf.js",
"static/js/787.e5b8f22d.chunk.js": "/easy-enclosure/static/js/787.e5b8f22d.chunk.js",
"index.html": "/easy-enclosure/index.html",
"main.44a4db81.css.map": "/easy-enclosure/static/css/main.44a4db81.css.map",
- "main.a0b3251a.js.map": "/easy-enclosure/static/js/main.a0b3251a.js.map",
+ "main.ad8c10bf.js.map": "/easy-enclosure/static/js/main.ad8c10bf.js.map",
"787.e5b8f22d.chunk.js.map": "/easy-enclosure/static/js/787.e5b8f22d.chunk.js.map"
},
"entrypoints": [
"static/css/main.44a4db81.css",
- "static/js/main.a0b3251a.js"
+ "static/js/main.ad8c10bf.js"
]
}
\ No newline at end of file
diff --git a/index.html b/index.html
index 8e4a3fe..7c0f254 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-
Easy Enclosure
\ No newline at end of file
+Easy Enclosure
\ No newline at end of file
diff --git a/static/js/main.a0b3251a.js.map b/static/js/main.a0b3251a.js.map
deleted file mode 100644
index d567ba4..0000000
--- a/static/js/main.a0b3251a.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"static/js/main.a0b3251a.js","mappings":";yCAAA,IAAQA,EAAeC,EAAQ,OAAvBD,WAcFE,EAAe,SAACC,EAASC,GAC7B,IAAMC,EAAS,GAKf,OAJAF,EAAQG,SAAQ,SAACC,EAAQC,GACvBH,EAAOI,KAAKC,EAAgBH,EAAQH,IACpCA,EAAQO,gBAAkBP,EAAQO,eAAe,CAAEC,SAAU,IAAMJ,EAAIL,EAAQU,QACjF,IACOR,EAAOS,KAAK,KACrB,EAEMJ,EAAkB,SAACH,EAAQH,GAC/B,IAAMC,EAAS,GAKf,OAJiBL,EAAWe,MAAMC,WAAWT,GACpCD,SAAQ,SAACW,EAAST,GACzBH,EAAOI,KAAKS,EAAeD,GAC7B,IACOZ,EAAOS,KAAK,KACrB,EAEMK,EAAsB,SAACC,GAAC,SAAAC,OAAQD,EAAE,GAAE,KAAAC,OAAID,EAAE,GAAE,KAAAC,OAAID,EAAE,GAAE,EAEpDE,EAAoB,SAACC,GAAM,gBAAAF,OAAeF,EAAoBI,GAAO,EAErEL,EAAiB,SAACD,GACtB,IAAMZ,EAAS,GACf,GAAIY,EAAQO,SAASX,QAAU,EAG7B,IADA,IAAMY,EAAiBH,EAAkBL,EAAQO,SAAS,IACjDhB,EAAI,EAAGA,EAAIS,EAAQO,SAASX,OAAS,EAAGL,IAAK,CACpD,IAAMkB,EAAQ,gBAAHL,OAAmBF,EAAoBnB,EAAW2B,MAAMC,MAAMX,IAAS,kBAAAI,OAEtFI,EAAc,MAAAJ,OACdC,EAAkBL,EAAQO,SAAShB,EAAI,IAAG,MAAAa,OAC1CC,EAAkBL,EAAQO,SAAShB,EAAI,IAAG,uBAGtCH,EAAOI,KAAKiB,EACd,CAEF,OAAOrB,EAAOS,KAAK,KACrB,EAEAe,EAAOC,QAAU,CACfC,cArDoB,SAAC5B,EAASC,GAC9BA,EAAQO,gBAAkBP,EAAQO,eAAe,CAAEC,SAAU,IAE7D,IAAMP,EAAS,gBAAHgB,OACZnB,EAAaC,EAASC,GAAQ,sBAI9B,OADAA,EAAQO,gBAAkBP,EAAQO,eAAe,CAAEC,SAAU,MACtD,CAACP,EACV,0BCZA,IAAQL,EAAeC,EAAQ,OAAvBD,WAqFR6B,EAAOC,QAAU,CACfE,gBAjFsB,SAAC7B,EAASC,GAChCA,EAAQO,gBAAkBP,EAAQO,eAAe,CAAEC,SAAU,IAG7D,IAAMqB,EAAS,IAAIC,YAAY,GACzBC,EAAc,IAAIC,WAAWH,EAAQ,EAAG,GACxCI,EAAa,IAAIC,UAAUL,EAAQ,EAAG,GAE5C,GADAE,EAAY,GAAK,UACK,KAAlBE,EAAW,GACb,MAAM,IAAIE,MAAM,qFAGlB,IAAIC,EAAe,EACfC,EAAc,EAClBtC,EAAQG,SAAQ,SAACC,EAAQC,GACNR,EAAWe,MAAMC,WAAWT,GACpCD,SAAQ,SAACW,GAChB,IAAMyB,EAAczB,EAAQO,SAASX,OAErC2B,GAD0BE,GAAe,EAAKA,EAAc,EAAI,EAEhED,GAAe,CACjB,GACF,IAGA,IADA,IAAME,EAAc,IAAIC,WAAW,IAC1BpC,EAAI,EAAGA,EAAI,GAAIA,IACtBmC,EAAYnC,GAAK,GAGnB,IAAMqC,EAAM,IAAIC,YAAY,GAC5BD,EAAI,GAAKL,EAGT,IAAMO,EAAqB,IAAIb,YAAY,GAAKM,GAC1CQ,EAA2B,IAAIV,UAAUS,GAKzCE,EAAiB,IAAIf,YAAY,IACjCgB,EAAuB,IAAIZ,UAAUW,GAGrCE,EAAuB,IAAIC,aAAaH,EAAgB,EAAG,IAE3DI,EAAsB,IAAIC,YAAYL,EAAgB,GAAI,GAE5DM,EAAa,EA8BjB,OA5BApD,EAAQG,SAAQ,SAACC,GACEP,EAAWe,MAAMC,WAAWT,GACpCD,SAAQ,SAACW,EAASuC,GAIzB,IAHA,IAAMhC,EAAWP,EAAQO,SACnBkB,EAAclB,EAASX,OACvBe,EAAQ5B,EAAW2B,MAAMC,MAAMX,GAC5BT,EAAI,EAAGA,EAAIkC,EAAc,EAAGlC,IAAK,CACxC2C,EAAqB,GAAKvB,EAAM,GAChCuB,EAAqB,GAAKvB,EAAM,GAChCuB,EAAqB,GAAKvB,EAAM,GAEhC,IADA,IAAI6B,EAAU,EACLrC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAC1B,IACMG,EAASC,EADJJ,GAAMA,EAAI,EAAKZ,EAAI,IAE9B2C,EAAqBM,KAAalC,EAAO,GACzC4B,EAAqBM,KAAalC,EAAO,GACzC4B,EAAqBM,KAAalC,EAAO,EAC3C,CACA8B,EAAoB,GAAK,EAEzBL,EAAyBU,IAAIR,EAAsBK,GACnDA,GAAc,EAChB,CAEAnD,EAAQO,gBAAkBP,EAAQO,eAAe,CAAEC,SAAU,IAAM4C,EAAQf,GAC7E,GACF,IACArC,EAAQO,gBAAkBP,EAAQO,eAAe,CAAEC,SAAU,MACtD,CAAC+B,EAAYV,OAAQY,EAAIZ,OAAQc,EAC1C,0BC1DA,IAAAY,EAAkC1D,EAAQ,OAAlCD,EAAU2D,EAAV3D,WAAY4D,EAASD,EAATC,UAEpBC,EAA6B5D,EAAQ,OAA7B6D,EAAOD,EAAPC,QAASC,EAAOF,EAAPE,QAET/B,EAAoB/B,EAAQ,OAA5B+B,gBACAD,EAAkB9B,EAAQ,OAA1B8B,cAqCRF,EAAOC,QAAU,CACfkC,SApCe,kBAqCfC,UAvBgB,SAAC7D,GAAwB,QAAA8D,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GAKpCjE,EAAUkE,OAAOC,OAAO,CAAC,EAJR,CACfC,QAAQ,EACR7D,eAAgB,MAEoBP,GAKtC,IAAIqE,GAHJtE,EAAU2D,EAAQ3D,IAGMuE,QAAO,SAACnE,GAAM,OAAKP,EAAWe,MAAM4D,IAAIpE,EAAO,IAEvE,GAAyB,IAArBkE,EAAU5D,OAAc,MAAM,IAAI0B,MAAM,+CAM5C,OALIpC,EAAQU,SAAW4D,EAAU5D,QAAQ+D,QAAQC,KAAK,+CAGtDJ,EAAYV,EAAQH,EAAUkB,WAAW,CAAEC,MAAM,EAAMC,aAAa,GAAQP,IAErErE,EAAQoE,OAASxC,EAAgByC,EAAWrE,GAAW2B,EAAc0C,EAAWrE,EACzF,0BCjEA,IAAM6E,EAAYhF,EAAQ,MAa1B4B,EAAOC,QAFgB,SAACoD,GAAC,OAAKD,EAAUC,EAAEC,cAAc,yBCXxD,IAAMrB,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAChB0B,EAAQ1B,EAAQ,OA2DtB4B,EAAOC,QApBU,SAACwD,GAAsB,QAAApB,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GACjC,IAAKD,MAAMmB,QAAQD,GAAQ,MAAM,IAAI/C,MAAM,0BAC3C,GAAI+C,EAAMzE,OAAS,EAAG,MAAM,IAAI0B,MAAM,wCAItC,GAHqB,IAAjB+C,EAAMzE,SAAcyE,EAAQ,CAACA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAI,IAGxC,KADvBnF,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1C,IAAMiD,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI6E,EAAMT,IAAIpE,GA9CC,SAAC+E,EAAO/E,GACzB,IAAMmF,EAAWN,EAAMO,MAAMpF,GAE7B,OADAmF,EAASJ,MAAQA,EACVI,CACT,CA0CkCE,CAAWN,EAAO/E,GAC5CQ,EAAM4D,IAAIpE,GAzCC,SAAC+E,EAAO/E,GACzB,IAAMsF,EAAW9E,EAAM4E,MAAMpF,GAE7B,OADAsF,EAASP,MAAQA,EACVO,CACT,CAqCkCC,CAAWR,EAAO/E,GAC5C8E,EAAMV,IAAIpE,GApCC,SAAC+E,EAAO/E,GACzB,IAAMwF,EAAWV,EAAMM,MAAMpF,GAE7B,OADAwF,EAAST,MAAQA,EACVS,CACT,CAgCkCC,CAAWV,EAAO/E,GAC5CoB,EAAMgD,IAAIpE,GA/BC,SAAC+E,EAAO/E,GACzB,IAAM0F,EAAUtE,EAAMgE,MAAMpF,GAE5B,OADA0F,EAAQX,MAAQA,EACTW,CACT,CA2BkCC,CAAWZ,EAAO/E,IAEhDA,EAAO+E,MAAQA,EACR/E,EACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,oBCiHA3D,EAAOC,QAxKW,CAEhBqE,MAAO,CAAC,EAAS,EAAS,GAC1BC,OAAQ,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACrCC,KAAM,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACnCC,MAAO,CAAC,EAAW,EAAW,GAC9BC,OAAQ,CAAC,IAAM,IAAK,EAAS,GAC7BC,IAAK,CAAC,EAAW,EAAS,GAC1BC,OAAQ,CAAC,IAAM,IAAK,EAAS,IAAM,KACnCC,QAAS,CAAC,EAAW,EAAS,GAC9BC,MAAO,CAAC,EAAS,IAAM,IAAK,GAC5BC,KAAM,CAAC,EAAS,EAAW,GAC3BC,MAAO,CAAC,IAAM,IAAK,IAAM,IAAK,GAC9BC,OAAQ,CAAC,EAAW,EAAW,GAC/BC,KAAM,CAAC,EAAS,EAAS,IAAM,KAC/BC,KAAM,CAAC,EAAS,EAAS,GACzBC,KAAM,CAAC,EAAS,IAAM,IAAK,IAAM,KACjCC,KAAM,CAAC,EAAS,EAAW,GAE3BC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,GAClCC,aAAc,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAE3CC,WAAY,CAAC,IAAM,IAAK,EAAW,IAAM,KACzCC,MAAO,CAAC,IAAM,IAAK,EAAW,GAC9BC,MAAO,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACpCC,OAAQ,CAAC,EAAW,IAAM,IAAK,IAAM,KAErCC,eAAgB,CAAC,EAAW,IAAM,IAAK,IAAM,KAE7CC,WAAY,CAAC,IAAM,IAAK,GAAK,IAAK,IAAM,KACxCC,MAAO,CAAC,IAAM,IAAK,GAAK,IAAK,GAAK,KAClCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,UAAW,CAAC,GAAK,IAAK,IAAM,IAAK,IAAM,KACvCC,WAAY,CAAC,IAAM,IAAK,EAAW,GACnCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,GAAK,KACvCC,MAAO,CAAC,EAAW,IAAM,IAAK,GAAK,KACnCC,eAAgB,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC7CC,SAAU,CAAC,EAAW,IAAM,IAAK,IAAM,KACvCC,QAAS,CAAC,IAAM,IAAK,GAAK,IAAK,GAAK,KACpCC,KAAM,CAAC,EAAS,EAAW,GAC3BC,SAAU,CAAC,EAAS,EAAS,IAAM,KACnCC,SAAU,CAAC,EAAS,IAAM,IAAK,IAAM,KACrCC,cAAe,CAAC,IAAM,IAAK,IAAM,IAAK,GAAK,KAC3CC,SAAU,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACvCC,UAAW,CAAC,EAAS,IAAM,IAAK,GAChCC,SAAU,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACvCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,YAAa,CAAC,IAAM,IAAK,EAAS,IAAM,KACxCC,eAAgB,CAAC,GAAK,IAAK,IAAM,IAAK,GAAK,KAC3CC,WAAY,CAAC,EAAW,IAAM,IAAK,GACnCC,WAAY,CAAC,GAAW,GAAK,IAAK,IAClCC,QAAS,CAAC,IAAM,IAAK,EAAS,GAC9BC,WAAY,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACzCC,aAAc,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC3CC,cAAe,CAAC,GAAK,IAAK,GAAK,IAAK,IAAM,KAC1CC,cAAe,CAAC,GAAK,IAAK,GAAK,IAAK,GAAK,KACzCC,cAAe,CAAC,GAAK,IAAK,GAAK,IAAK,GAAK,KACzCC,cAAe,CAAC,EAAS,IAAM,IAAK,IAAM,KAC1CC,WAAY,CAAC,IAAM,IAAK,EAAS,IAAM,KACvCC,SAAU,CAAC,EAAW,GAAK,IAAK,IAAM,KACtCC,YAAa,CAAC,EAAS,IAAM,IAAK,GAClCC,QAAS,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACtCC,QAAS,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACtCC,WAAY,CAAC,GAAK,IAAK,IAAM,IAAK,GAClCC,UAAW,CAAC,IAAM,IAAK,GAAK,IAAK,GAAK,KACtCC,YAAa,CAAC,EAAW,IAAM,IAAK,IAAM,KAC1CC,YAAa,CAAC,GAAK,IAAK,IAAM,IAAK,GAAK,KAExCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,WAAY,CAAC,IAAM,IAAK,IAAM,IAAK,GACnCC,KAAM,CAAC,EAAW,IAAM,IAAK,GAC7BC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,GAAK,KAGvCC,YAAa,CAAC,IAAM,IAAK,EAAW,GAAK,KACzCC,KAAM,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACnCC,SAAU,CAAC,IAAM,IAAK,EAAW,IAAM,KACvCC,QAAS,CAAC,EAAW,IAAM,IAAK,IAAM,KACtCC,UAAW,CAAC,IAAM,IAAK,GAAK,IAAK,GAAK,KACtCC,OAAQ,CAAC,GAAK,IAAK,EAAS,IAAM,KAClCC,MAAO,CAAC,EAAW,EAAW,IAAM,KACpCC,MAAO,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACpCC,SAAU,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACvCC,cAAe,CAAC,EAAW,IAAM,IAAK,IAAM,KAC5CC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,GAClCC,aAAc,CAAC,EAAW,IAAM,IAAK,IAAM,KAC3CC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,WAAY,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACzCC,UAAW,CAAC,IAAM,IAAK,EAAW,GAClCC,qBAAsB,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACnDC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,WAAY,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACzCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,UAAW,CAAC,EAAW,IAAM,IAAK,IAAM,KACxCC,YAAa,CAAC,EAAW,IAAM,IAAK,IAAM,KAC1CC,cAAe,CAAC,GAAK,IAAK,IAAM,IAAK,IAAM,KAC3CC,aAAc,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC3CC,eAAgB,CAAC,IAAM,IAAK,IAAM,IAAK,IACvCC,eAAgB,CAAC,IAAM,IAAK,IAAM,IAAK,IACvCC,eAAgB,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC7CC,YAAa,CAAC,EAAW,EAAW,IAAM,KAE1CC,UAAW,CAAC,GAAK,IAAK,IAAM,IAAK,GAAK,KACtCC,MAAO,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACpCC,QAAS,CAAC,EAAW,EAAS,GAE9BC,iBAAkB,CAAC,GAAW,IAAM,IAAK,IAAM,KAC/CC,WAAY,CAAC,EAAS,EAAS,IAAM,KACrCC,aAAc,CAAC,IAAM,IAAK,GAAK,IAAK,IAAM,KAC1CC,aAAc,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC3CC,eAAgB,CAAC,GAAK,IAAK,IAAM,IAAK,IAAM,KAC5CC,gBAAiB,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC9CC,kBAAmB,CAAC,EAAS,IAAM,IAAK,IAAM,KAC9CC,gBAAiB,CAAC,GAAK,IAAK,IAAM,IAAK,IACvCC,gBAAiB,CAAC,IAAM,IAAK,GAAK,IAAK,IAAM,KAC7CC,aAAc,CAAC,GAAK,IAAK,GAAK,IAAK,IAAM,KACzCC,UAAW,CAAC,IAAM,IAAK,EAAW,IAAM,KACxCC,UAAW,CAAC,EAAW,IAAM,IAAK,IAAM,KACxCC,SAAU,CAAC,EAAW,IAAM,IAAK,IAAM,KACvCC,YAAa,CAAC,EAAW,IAAM,IAAK,IAAM,KAE1CC,QAAS,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAEtCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,GAAK,KACvCC,OAAQ,CAAC,EAAW,IAAM,IAAK,GAC/BC,UAAW,CAAC,EAAW,GAAK,IAAK,GACjCC,OAAQ,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACrCC,cAAe,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC5CC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,cAAe,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC5CC,cAAe,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAC5CC,WAAY,CAAC,EAAW,IAAM,IAAK,IAAM,KACzCC,UAAW,CAAC,EAAW,IAAM,IAAK,IAAM,KACxCC,KAAM,CAAC,IAAM,IAAK,IAAM,IAAK,GAAK,KAClCC,KAAM,CAAC,EAAW,IAAM,IAAK,IAAM,KACnCC,KAAM,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACnCC,WAAY,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAGzCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,UAAW,CAAC,GAAK,IAAK,IAAM,IAAK,IAAM,KACvCC,YAAa,CAAC,IAAM,IAAK,GAAK,IAAK,GAAK,KACxCC,OAAQ,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACrCC,WAAY,CAAC,IAAM,IAAK,IAAM,IAAK,GAAK,KACxCC,SAAU,CAAC,GAAK,IAAK,IAAM,IAAK,GAAK,KACrCC,SAAU,CAAC,EAAW,IAAM,IAAK,IAAM,KACvCC,OAAQ,CAAC,IAAM,IAAK,GAAK,IAAK,GAAK,KAEnCC,QAAS,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACtCC,UAAW,CAAC,IAAM,IAAK,GAAK,IAAK,IAAM,KACvCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,UAAW,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACxCC,KAAM,CAAC,EAAW,IAAM,IAAK,IAAM,KACnCC,YAAa,CAAC,EAAS,EAAW,IAAM,KACxCC,UAAW,CAAC,GAAK,IAAK,IAAM,IAAK,IAAM,KACvCC,IAAK,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAElCC,QAAS,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACtCC,OAAQ,CAAC,EAAW,GAAK,IAAK,GAAK,KACnCC,UAAW,CAAC,GAAK,IAAK,IAAM,IAAK,IAAM,KACvCC,OAAQ,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KACrCC,MAAO,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAEpCC,WAAY,CAAC,IAAM,IAAK,IAAM,IAAK,IAAM,KAEzCC,YAAa,CAAC,IAAM,IAAK,IAAM,IAAK,GAAK,yBCnJ3CxN,EAAOC,QAdU,SAACwN,GAEhB,IADAA,EAAWA,EAASC,QAAQ,IAAK,KACpB1O,OAAS,EAAG,MAAM,IAAI0B,MAAM,wDAEzC,IAAMiN,EAAIC,SAASH,EAASI,UAAU,EAAG,GAAI,IAAM,IAC7CC,EAAIF,SAASH,EAASI,UAAU,EAAG,GAAI,IAAM,IAC7CE,EAAIH,SAASH,EAASI,UAAU,EAAG,GAAI,IAAM,IACnD,OAAIJ,EAASzO,QAAU,EAEd,CAAC2O,EAAGG,EAAGC,EADJH,SAASH,EAASI,UAAU,EAAG,GAAI,IAAM,KAG9C,CAACF,EAAGG,EAAGC,EAChB,yBCvBA,IAAM9L,EAAU7D,EAAQ,OAElB4P,EAAsB5P,EAAQ,OAyCpC4B,EAAOC,QA5BU,WAAe,QAAAoC,EAAAC,UAAAtD,OAAXiP,EAAM,IAAA1L,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAANyL,EAAMzL,GAAAF,UAAAE,GAEzB,IADAyL,EAAShM,EAAQgM,IACNjP,OAAS,EAAG,MAAM,IAAI0B,MAAM,yCAEvC,IAAMwN,EAAID,EAAO,GACX5K,EAAI4K,EAAO,GACXE,EAAIF,EAAO,GAEbN,EAAIQ,EACJL,EAAIK,EACJJ,EAAII,EAER,GAAU,IAAN9K,EAAS,CACX,IAAM+K,EAAID,EAAI,GAAMA,GAAK,EAAI9K,GAAK8K,EAAI9K,EAAI8K,EAAI9K,EACxCgL,EAAI,EAAIF,EAAIC,EAClBT,EAAIK,EAAoBK,EAAGD,EAAGF,EAAI,EAAI,GACtCJ,EAAIE,EAAoBK,EAAGD,EAAGF,GAC9BH,EAAIC,EAAoBK,EAAGD,EAAGF,EAAI,EAAI,EACxC,CAEA,OAAID,EAAOjP,OAAS,EAGX,CAAC2O,EAAGG,EAAGC,EADJE,EAAO,IAGZ,CAACN,EAAGG,EAAGC,EAChB,yBCzCA,IAAM9L,EAAU7D,EAAQ,OAwExB4B,EAAOC,QA3DU,WAAe,QAAAoC,EAAAC,UAAAtD,OAAXiP,EAAM,IAAA1L,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAANyL,EAAMzL,GAAAF,UAAAE,GAEzB,IADAyL,EAAShM,EAAQgM,IACNjP,OAAS,EAAG,MAAM,IAAI0B,MAAM,yCAEvC,IAAMwN,EAAID,EAAO,GACX5K,EAAI4K,EAAO,GACX1O,EAAI0O,EAAO,GAEbN,EAAI,EACJG,EAAI,EACJC,EAAI,EAEFpP,EAAI2P,KAAKC,MAAU,EAAJL,GACfM,EAAQ,EAAJN,EAAQvP,EACZ0P,EAAI9O,GAAK,EAAI8D,GACb+K,EAAI7O,GAAK,EAAIiP,EAAInL,GACjBoL,EAAIlP,GAAK,GAAK,EAAIiP,GAAKnL,GAE7B,OAAQ1E,EAAI,GACV,KAAK,EACHgP,EAAIpO,EACJuO,EAAIW,EACJV,EAAIM,EACJ,MACF,KAAK,EACHV,EAAIS,EACJN,EAAIvO,EACJwO,EAAIM,EACJ,MACF,KAAK,EACHV,EAAIU,EACJP,EAAIvO,EACJwO,EAAIU,EACJ,MACF,KAAK,EACHd,EAAIU,EACJP,EAAIM,EACJL,EAAIxO,EACJ,MACF,KAAK,EACHoO,EAAIc,EACJX,EAAIO,EACJN,EAAIxO,EACJ,MACF,KAAK,EACHoO,EAAIpO,EACJuO,EAAIO,EACJN,EAAIK,EAIR,OAAIH,EAAOjP,OAAS,EAGX,CAAC2O,EAAGG,EAAGC,EADJE,EAAO,IAGZ,CAACN,EAAGG,EAAGC,EAChB,qBCrDA/N,EAAOC,QATqB,SAACoO,EAAGD,EAAGK,GAGjC,OAFIA,EAAI,IAAGA,GAAK,GACZA,EAAI,IAAGA,GAAK,GACZA,EAAI,EAAI,EAAUJ,EAAc,GAATD,EAAIC,GAASI,EACpCA,EAAI,GAAcL,EAClBK,EAAI,EAAI,EAAUJ,GAAKD,EAAIC,IAAM,EAAI,EAAII,GAAK,EAC3CJ,CACT,yBCRArO,EAAOC,QAAU,CACfyO,SAAUtQ,EAAQ,OAClBuQ,eAAgBvQ,EAAQ,OACxBgF,UAAWhF,EAAQ,MACnBwQ,SAAUxQ,EAAQ,OAClByQ,SAAUzQ,EAAQ,OAClB0Q,SAAU1Q,EAAQ,OAClB4P,oBAAqB5P,EAAQ,OAC7B2Q,SAAU3Q,EAAQ,OAClB4Q,SAAU5Q,EAAQ,OAClB6Q,SAAU7Q,EAAQ,+BCjBpB,IAAM6D,EAAU7D,EAAQ,OA0BxB4B,EAAOC,QAjBU,WAAe,QAAAoC,EAAAC,UAAAtD,OAAXiP,EAAM,IAAA1L,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAANyL,EAAMzL,GAAAF,UAAAE,GAEzB,IADAyL,EAAShM,EAAQgM,IACNjP,OAAS,EAAG,MAAM,IAAI0B,MAAM,yCAEvC,IAAMiN,EAAgB,IAAZM,EAAO,GACXH,EAAgB,IAAZG,EAAO,GACXF,EAAgB,IAAZE,EAAO,GAEb5K,EAAI,IAAH7D,OAAO0P,OAAO,SAAgB,MAAJvB,EAAkB,IAAJG,EAAYC,GAAGoB,SAAS,IAAItB,UAAU,EAAG,IAMtF,OAJII,EAAOjP,OAAS,IAElBqE,GAAQ6L,OAAmB,IAAZjB,EAAO,IAAUkB,SAAS,KAEpC9L,CACT,yBCxBA,IAAMpB,EAAU7D,EAAQ,OAoDxB4B,EAAOC,QAzCU,WAAe,QAAAoC,EAAAC,UAAAtD,OAAXiP,EAAM,IAAA1L,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAANyL,EAAMzL,GAAAF,UAAAE,GAEzB,IADAyL,EAAShM,EAAQgM,IACNjP,OAAS,EAAG,MAAM,IAAI0B,MAAM,yCAEvC,IAMIwN,EACA7K,EAPEsK,EAAIM,EAAO,GACXH,EAAIG,EAAO,GACXF,EAAIE,EAAO,GAEXmB,EAAMd,KAAKc,IAAIzB,EAAGG,EAAGC,GACrBsB,EAAMf,KAAKe,IAAI1B,EAAGG,EAAGC,GAGrBI,GAAKiB,EAAMC,GAAO,EAExB,GAAID,IAAQC,EACVnB,EAAI7K,EAAI,MACH,CACL,IAAMiM,EAAIF,EAAMC,EAEhB,OADAhM,EAAI8K,EAAI,GAAMmB,GAAK,EAAIF,EAAMC,GAAOC,GAAKF,EAAMC,GACvCD,GACN,KAAKzB,EACHO,GAAKJ,EAAIC,GAAKuB,GAAKxB,EAAIC,EAAI,EAAI,GAC/B,MACF,KAAKD,EACHI,GAAKH,EAAIJ,GAAK2B,EAAI,EAClB,MACF,KAAKvB,EACHG,GAAKP,EAAIG,GAAKwB,EAAI,EAGtBpB,GAAK,CACP,CAEA,OAAID,EAAOjP,OAAS,EAGX,CAACkP,EAAG7K,EAAG8K,EADJF,EAAO,IAGZ,CAACC,EAAG7K,EAAG8K,EAChB,yBClDA,IAAMlM,EAAU7D,EAAQ,OAmDxB4B,EAAOC,QAzCU,WAAe,QAAAoC,EAAAC,UAAAtD,OAAXiP,EAAM,IAAA1L,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAANyL,EAAMzL,GAAAF,UAAAE,GAEzB,IADAyL,EAAShM,EAAQgM,IACNjP,OAAS,EAAG,MAAM,IAAI0B,MAAM,yCAEvC,IAMIwN,EANEP,EAAIM,EAAO,GACXH,EAAIG,EAAO,GACXF,EAAIE,EAAO,GAEXmB,EAAMd,KAAKc,IAAIzB,EAAGG,EAAGC,GACrBsB,EAAMf,KAAKe,IAAI1B,EAAGG,EAAGC,GAErBxO,EAAI6P,EAEJE,EAAIF,EAAMC,EACVhM,EAAY,IAAR+L,EAAY,EAAIE,EAAIF,EAE9B,GAAIA,IAAQC,EACVnB,EAAI,MACC,CACL,OAAQkB,GACN,KAAKzB,EACHO,GAAKJ,EAAIC,GAAKuB,GAAKxB,EAAIC,EAAI,EAAI,GAC/B,MACF,KAAKD,EACHI,GAAKH,EAAIJ,GAAK2B,EAAI,EAClB,MACF,KAAKvB,EACHG,GAAKP,EAAIG,GAAKwB,EAAI,EAGtBpB,GAAK,CACP,CAEA,OAAID,EAAOjP,OAAS,EAGX,CAACkP,EAAG7K,EAAG9D,EADJ0O,EAAO,IAGZ,CAACC,EAAG7K,EAAG9D,EAChB,yBCjDA,IAAMgQ,EAAUnR,EAAQ,MA8DxB4B,EAAOC,QAtCc,SAAC1B,EAASiR,GAW7B,IAVA,IAIAC,EAA+BhN,OAAOC,OAAO,CAAC,EAJ7B,CACfgN,SAAU,EACVC,SAAU,KAE+CpR,GAAnDmR,EAAQD,EAARC,SAAUC,EAAQF,EAARE,SAEZC,EAAaL,EAAQI,EAAUH,GAEjCK,EAAa,EACbC,EAAWH,EACRE,GAAcC,GAAU,CAC7B,IAAMC,EAAczB,KAAKC,MAAMsB,GAAcC,EAAWD,GAAc,GAChEG,EAAOJ,EAAWG,GAAeL,EACvC,GAAIM,EAAO,EACTH,EAAaE,EAAc,MACtB,MAAIC,EAAO,GAEX,CACLF,EAAWC,EACX,KACF,CAJED,EAAWC,EAAc,CAI3B,CACF,CAEA,IAAME,EAAcH,EACpB,GAAIF,EAAWK,KAAiBP,EAC9B,OAAOO,EAAcN,EAGvB,IAAMO,EAAeN,EAAWK,GAMhC,OAAQA,GAFiBP,EAAWQ,IAHhBN,EAAWK,EAAc,GACTC,IAIKP,CAC3C,qBCjCA,IAcMQ,EAAe,SAAUC,GAC7B,IAAIC,EAAiB,KAmBrB,OAlBAD,EAAO3R,SAAQ,SAAC6R,GACd,IAAIC,EAAQ,GACZ,GAAIrB,OAAOsB,SAASF,GAClBC,EAAQ,mBACH,KAAIhO,MAAMmB,QAAQ4M,GAKlB,MAAM,IAAI5P,MAAM,0DAJrB4P,EAAM7R,SAAQ,SAACgS,GACb,IAAKvB,OAAOsB,SAASC,GAAM,MAAM,IAAI/P,MAAM,2CAC7C,IACA6P,EAAQ,SAAWD,EAAMtR,MACqD,CAChF,GAAsB,MAAlBqR,EACFA,EAAiBE,OAEjB,GAAIF,IAAmBE,EACrB,MAAM,IAAI7P,MAAM,sFAGtB,IACO2P,CACT,EAEMK,EAAkB,SAAUC,GAEhC,IADA,IAAMC,EAAe,GACZjS,EAAI,EAAGA,GAAKgS,EAAGhS,IACtBiS,EAAahS,KAAKiS,EAAUF,IAAME,EAAUlS,GAAKkS,EAAUF,EAAIhS,KAEjE,OAAOiS,CACT,EAEMC,EAAY,SAAU9C,GAE1B,IADA,IAAI+C,EAAM,EACDnS,EAAI,EAAGA,GAAKoP,EAAGpP,IACtBmS,GAAOnS,EAET,OAAOmS,CACT,EAEA9Q,EAAOC,QArDQ,SAACmQ,GACd,IAAK7N,MAAMmB,QAAQ0M,GAAS,MAAM,IAAI1P,MAAM,wCAC5C,GAAI0P,EAAOpR,OAAS,EAAG,MAAM,IAAI0B,MAAM,iDACvC,IAAMqQ,EAAYZ,EAAaC,GAE/B,MAAO,CACLA,OAAQA,EACRW,UAAWA,EACXC,WAA0B,iBAAdD,EAA+B,EAAIX,EAAO,GAAGpR,OACzD4R,aAAcF,EAAgBN,EAAOpR,OAAS,GAC9CiS,oBAAqBP,EAAgBN,EAAOpR,OAAS,GAEzD,yBClCAgB,EAAOC,QAAU,CACfiR,OAAQ9S,EAAQ,OAChB+S,QAAS/S,EAAQ,OACjBgT,UAAWhT,EAAQ,OACnBmR,QAASnR,EAAQ,MACjBY,OAAQZ,EAAQ,MAChBiT,aAAcjT,EAAQ,8BCXxB,IAAMmR,EAAUnR,EAAQ,MAiBxB4B,EAAOC,QAFQ,SAAC0P,EAAUH,GAAM,OAAKD,EAAQI,EAAUH,GAAQG,EAAS,wBCfxE,IAAMwB,EAAU/S,EAAQ,OAsClBkT,EAAkB,SAACC,EAAGxD,GAC1B,GAAImB,OAAOsB,SAASe,IAAMrC,OAAOsB,SAASzC,GACxC,OAAOO,KAAKkD,IAAID,EAAIxD,GACf,GAAIxL,MAAMmB,QAAQ6N,IAAMhP,MAAMmB,QAAQqK,GAAI,CAC/C,GAAIwD,EAAEvS,SAAW+O,EAAE/O,OACjB,MAAM,IAAI0B,MAAM,yDAGlB,IADA,IAAI+Q,EAAM,EACD9S,EAAI,EAAGA,EAAI4S,EAAEvS,OAAQL,IAC5B8S,IAAQ1D,EAAEpP,GAAK4S,EAAE5S,KAAOoP,EAAEpP,GAAK4S,EAAE5S,IAEnC,OAAO2P,KAAKoD,KAAKD,EACnB,CACE,MAAM,IAAI/Q,MAAM,iEAEpB,EAEAV,EAAOC,QAzCS,SAAC0P,EAAUH,GAIzB,IAHA,IAAIiC,EAAM,EACJlC,EAAU,CAAC,GACboC,EAAWR,EAAQ,EAAG3B,GACjB7N,EAAQ,EAAGA,GAASgO,EAAUhO,IAAS,CAC9C,IAAMiQ,EAAUT,EAAQxP,EAAQgO,EAAUH,GAC1CiC,GAAOH,EAAgBM,EAASD,GAChCpC,EAAQ3Q,KAAK6S,GACbE,EAAWC,CACb,CACA,OAAOrC,CACT,qBCXA,IAmBMsC,EAAgB,SAAUrC,EAAQnB,EAAGI,GAIzC,IAFA,IAAMqD,EAAIzD,EAAErP,OAAS,EACjBR,EAAS,EACJG,EAAI,EAAGA,EAAImT,EAAGnT,IAAK,CAC1B,IAAMyP,EAAI0D,GAAKzD,EAAE1P,EAAI,GAAK0P,EAAE1P,IAC5BH,GAAUgR,EAAOyB,oBAAoBtS,GAAK2P,KAAKyD,IAAI,EAAItD,EAAGqD,EAAI,EAAInT,GAAK2P,KAAKyD,IAAItD,EAAG9P,GAAKyP,CAC1F,CACA,OAAO5P,CACT,EAEAwB,EAAOC,QA9BW,SAACwO,EAAGe,GACpB,GAAIf,EAAI,GAAKA,EAAI,EACf,MAAM,IAAI/N,MAAM,oDAElB,GAAyB,iBAArB8O,EAAOuB,UACT,OAAOc,EAAcrC,EAAQA,EAAOY,OAAQ3B,GAG5C,IADA,IAAMjQ,EAAS,GACNG,EAAI,EAAGA,EAAI6Q,EAAOwB,WAAYrS,IAAK,CAE1C,IADA,IAAMqT,EAAwB,GACrBC,EAAI,EAAGA,EAAIzC,EAAOY,OAAOpR,OAAQiT,IACxCD,EAAsBpT,KAAK4Q,EAAOY,OAAO6B,GAAGtT,IAE9CH,EAAOI,KAAKiT,EAAcrC,EAAQwC,EAAuBvD,GAC3D,CACA,OAAOjQ,CAEX,qBChBA,IAmBM0T,EAAiB,SAAU1C,EAAQnB,EAAGI,GAG1C,IAFA,IAAMqD,EAAIzD,EAAErP,OAAS,EACjBR,EAAS,EACJG,EAAI,EAAGA,GAAKmT,EAAGnT,IACtBH,GAAUgR,EAAOoB,aAAajS,GAAK2P,KAAKyD,IAAI,EAAItD,EAAGqD,EAAInT,GAAK2P,KAAKyD,IAAItD,EAAG9P,GAAK0P,EAAE1P,GAEjF,OAAOH,CACT,EAEAwB,EAAOC,QA5BS,SAACwO,EAAGe,GAClB,GAAIf,EAAI,GAAKA,EAAI,EACf,MAAM,IAAI/N,MAAM,kDAElB,GAAyB,iBAArB8O,EAAOuB,UACT,OAAOmB,EAAe1C,EAAQA,EAAOY,OAAQ3B,GAG7C,IADA,IAAMjQ,EAAS,GACNG,EAAI,EAAGA,EAAI6Q,EAAOwB,WAAYrS,IAAK,CAE1C,IADA,IAAMqT,EAAwB,GACrBC,EAAI,EAAGA,EAAIzC,EAAOY,OAAOpR,OAAQiT,IACxCD,EAAsBpT,KAAK4Q,EAAOY,OAAO6B,GAAGtT,IAE9CH,EAAOI,KAAKsT,EAAe1C,EAAQwC,EAAuBvD,GAC5D,CACA,OAAOjQ,CAEX,yBCzBAwB,EAAOC,QAAU,CACfuP,OAAQpR,EAAQ,8BCRlB,IAAM+T,EAAO/T,EAAQ,OACfgU,EAAOhU,EAAQ,OAwBrB4B,EAAOC,QAbiB,SAACoS,GACvB,OAAIF,EAAKG,WAAWD,EAASE,cAG7BF,EAASG,MAAQH,EAASG,MAAM5O,KAAI,SAAC6O,GAGnC,MAAO,CAFIL,EAAKM,UAAUN,EAAKlB,SAAUuB,EAAK,GAAIJ,EAASE,YAChDH,EAAKM,UAAUN,EAAKlB,SAAUuB,EAAK,GAAIJ,EAASE,YAE7D,IACAF,EAASE,WAAaJ,EAAKjB,UARsBmB,CAUnD,qBCfArS,EAAOC,QAFO,SAACoS,GAAQ,OAAK5P,OAAOC,OAAO,CAAC,EAAG2P,EAAS,yBCNvD,IAAMF,EAAO/T,EAAQ,OAyBrB4B,EAAOC,QAVQ,SAACuS,GAId,YAHcG,IAAVH,IACFA,EAAQ,IAEH,CACLA,MAAOA,EACPD,WAAYJ,EAAKjB,SAErB,wBCvBA,IAAMiB,EAAO/T,EAAQ,OACfgU,EAAOhU,EAAQ,OAEf8S,EAAS9S,EAAQ,OA4BvB4B,EAAOC,QApBmB,SAAC2S,GACzB,GAAgB,IAAZA,EAAK,GAAU,MAAM,IAAIlS,MAAM,+BAEnC,IAAMmS,EAAU3B,IAEhB2B,EAAQN,WAAaJ,EAAKrO,MAAM8O,EAAKE,MAAM,EAAG,KAE9C,IAAK,IAAInU,EAAI,GAAIA,EAAIiU,EAAK5T,OAAQL,GAAK,EAAG,CACxC,IAAMoU,EAASX,EAAKY,WAAWJ,EAAKjU,EAAI,GAAIiU,EAAKjU,EAAI,IAC/CsU,EAASb,EAAKY,WAAWJ,EAAKjU,EAAI,GAAIiU,EAAKjU,EAAI,IACrDkU,EAAQL,MAAM5T,KAAK,CAACmU,EAAQE,GAC9B,CAMA,OAJIL,EAAK,KAAO,IACdC,EAAQpP,MAAQ,CAACmP,EAAK,IAAKA,EAAK,IAAKA,EAAK,IAAKA,EAAK,MAG/CC,CACT,yBC7BA,IAAMT,EAAOhU,EAAQ,OAEf8S,EAAS9S,EAAQ,OAgCvB4B,EAAOC,QArBY,SAACmQ,GAClB,IAAK7N,MAAMmB,QAAQ0M,GACjB,MAAM,IAAI1P,MAAM,qCAElB,IAAI1B,EAASoR,EAAOpR,OACpB,GAAIA,EAAS,EACX,MAAM,IAAI0B,MAAM,4EAGd0R,EAAKc,OAAO9C,EAAO,GAAIA,EAAOpR,EAAS,OAAOA,EAIlD,IAFA,IAAMwT,EAAQ,GACVW,EAAY/C,EAAOpR,EAAS,GACvBL,EAAI,EAAGA,EAAIK,EAAQL,IAAK,CAC/B,IAAM2R,EAAQF,EAAOzR,GACrB6T,EAAM5T,KAAK,CAACwT,EAAKtO,MAAMqP,GAAYf,EAAKtO,MAAMwM,KAC9C6C,EAAY7C,CACd,CACA,OAAOY,EAAOsB,EAChB,yBCjBAxS,EAAOC,QAAU,CACf6D,MAAO1F,EAAQ,OACf8S,OAAQ9S,EAAQ,OAChBgV,WAAYhV,EAAQ,OACpBiV,kBAAmBjV,EAAQ,MAC3B0E,IAAK1E,EAAQ,OACbkV,QAASlV,EAAQ,OACjBmV,WAAYnV,EAAQ,OACpBoV,SAAUpV,EAAQ,OAClBqV,QAASrV,EAAQ,OACjB+Q,SAAU/Q,EAAQ,OAClBsV,gBAAiBtV,EAAQ,OACzBsU,UAAWtU,EAAQ,OACnBuV,SAAUvV,EAAQ,2BCXpB4B,EAAOC,QAXK,SAACvB,GACX,SAAIA,GAA4B,kBAAXA,GACf,UAAWA,GAAU,eAAgBA,GACnC6D,MAAMmB,QAAQhF,EAAO8T,QAAU,WAAY9T,EAAO6T,WAM5D,yBCfA,IAAMrB,EAAS9S,EAAQ,OACjBqV,EAAUrV,EAAQ,OAoBxB4B,EAAOC,QARS,SAACoS,GACf,IAEMuB,EAFWH,EAAQpB,GAECzO,KAAI,SAAC6O,GAAI,MAAK,CAACA,EAAK,GAAIA,EAAK,GAAG,IAE1D,OADAmB,EAASN,UACFpC,EAAO0C,EAChB,qBCiCA5T,EAAOC,QA9CiB,SAACoS,GACvB,IAAMG,EAAQH,EAASG,MACjBD,EAAaF,EAASE,WACxB9O,EAAQ,EAAE,GAAI,GAAI,GAAI,GACtB4O,EAAS5O,QAAOA,EAAQ4O,EAAS5O,OAGrC,IAAMoQ,EAAY,IAAItS,aAAa,GAA6B,EAAfiR,EAAMxT,QAEvD6U,EAAU,GAAK,EAEfA,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,IAAMtB,EAAW,GAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAE3BsB,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GAEtB,IAAK,IAAI9E,EAAI,EAAGA,EAAI6T,EAAMxT,OAAQL,IAAK,CACrC,IAAMmV,EAAS,EAAJnV,EAAQ,GACboU,EAASP,EAAM7T,GAAG,GAClBsU,EAAST,EAAM7T,GAAG,GACxBkV,EAAUC,EAAK,GAAKf,EAAO,GAC3Bc,EAAUC,EAAK,GAAKf,EAAO,GAC3Bc,EAAUC,EAAK,GAAKb,EAAO,GAC3BY,EAAUC,EAAK,GAAKb,EAAO,EAC7B,CAEA,OAAOY,CACT,mEClDMzB,EAAOhU,EAAQ,OAEfqV,EAAUrV,EAAQ,OAwBlB2V,EAAc,SAACvB,GACnB,IAAMwB,EAAY,IAAIC,IAEhBC,EArBiB,SAAC1B,GACxB,IAAM2B,EAAS,IAAIF,IACbG,EAAkB,SAAC1U,GACvB,IAAM2U,EAAM3U,EAAOyP,WACnB,OAAIgF,EAAOG,IAAID,GACNF,EAAOI,IAAIF,IAElBF,EAAOtS,IAAIwS,EAAK3U,GACTA,EAEX,EAEA,OAAO8S,EAAM5O,KAAI,SAAC6O,GAAI,OAAKA,EAAK7O,IAAIwQ,EAAgB,GACtD,CAQgBI,CAAiBhC,GAS/B,OAPA0B,EAAMzV,SAAQ,SAACgW,GACTT,EAAUM,IAAIG,EAAK,IACrBT,EAAUO,IAAIE,EAAK,IAAI7V,KAAK6V,GAE5BT,EAAUnS,IAAI4S,EAAK,GAAI,CAACA,GAE5B,IACOT,CACT,EAwDMU,EAAc,SAACC,EAAWC,GAC9B,GAAyB,IAArBA,EAAU5V,OACZ,OAAO4V,EAAUC,MAEnB,IAEIC,EACAC,EAHEC,EAAK5C,EAAKlB,SACV+D,EAAa7C,EAAK8C,aAAa9C,EAAK+C,SAASH,EAAIL,EAAU,GAAIA,EAAU,KAG/EC,EAAUnW,SAAQ,SAAC2W,EAAUzT,GAC3B,IACI0T,EADcjD,EAAK8C,aAAa9C,EAAK+C,SAASH,EAAII,EAAS,GAAIA,EAAS,KACpDH,EACpBI,GAAS,MAAKA,GAAS,KACvBA,GAAS,MAAKA,GAAS,WACT1C,IAAdoC,GAA2BM,EAAQP,KACrCC,EAAYpT,EACZmT,EAAYO,EAEhB,IACA,IAAMD,EAAWR,EAAUG,GAE3B,OADAH,EAAUU,OAAOP,EAAW,GACrBK,CACT,EAEApV,EAAOC,QAnEY,SAACoS,GAGlB,IAFA,IAAM2B,EAAYD,EAAYN,EAAQpB,IAChCkD,EAAW,KACJ,CACX,IACuCC,EADnCb,OAAS,EAAAc,EAAAC,EACiB1B,GAAS,IAAvC,IAAAyB,EAAApS,MAAAmS,EAAAC,EAAA3D,KAAA6D,MAAyC,KAAAC,EAAAC,EAAAL,EAAAM,MAAA,GAA7BpW,EAAMkW,EAAA,GAEhB,GADAjB,EADuBiB,EAAA,GACLG,QAKlB,MAHE/B,EAAUgC,OAAOtW,EAIrB,CAAC,OAAAuW,GAAAR,EAAAS,EAAAD,EAAA,SAAAR,EAAAjH,GAAA,CACD,QAAkBmE,IAAdgC,EAAyB,MAI7B,IAFA,IAAMwB,EAAwB,GACxBC,EAAczB,EAAU,KACjB,CACXwB,EAAsBvX,KAAK+V,EAAU,IACrC,IAAM0B,EAAa1B,EAAU,GAC7B,GAAI0B,IAAeD,EAAa,MAChC,IAAME,EAAoBtC,EAAUO,IAAI8B,GACxC,IAAKC,EACH,MAAM,IAAI5V,MAAM,oCAADlB,OAAqC6W,IAEtD,IAAMjB,EAAWV,EAAYC,EAAW2B,GACP,IAA7BA,EAAkBtX,QACpBgV,EAAUgC,OAAOK,GAEnB1B,EAAYS,CACd,CAIIe,EAAsBnX,OAAS,GACjCmX,EAAsBvX,KAAKuX,EAAsBJ,SAEnDR,EAAS3W,KAAKuX,EAChB,CAEA,OADAnC,EAAUuC,QACHhB,CACT,yBC5FA,IAAM9B,EAAUrV,EAAQ,OAwBxB4B,EAAOC,QAXU,SAACoS,GAChB,IACMjC,EADQqD,EAAQpB,GACDzO,KAAI,SAAC6O,GAAI,OAAKA,EAAK,EAAE,IAM1C,OAHIrC,EAAOpR,OAAS,GAClBoR,EAAOxR,KAAKwR,EAAO2F,SAEd3F,CACT,yBCtBA,IAAMoG,EAAkBpY,EAAQ,MAehC4B,EAAOC,QAFS,SAACoS,GAAQ,OAAKmE,EAAgBnE,GAAUG,KAAK,yBCb7D,IAAMJ,EAAOhU,EAAQ,OAEfqV,EAAUrV,EAAQ,OAqBxB4B,EAAOC,QAVU,SAACoS,GAChB,IAAMG,EAAQiB,EAAQpB,GAClB7T,EAAS,UAAYgU,EAAMxT,OAAS,gBAKxC,OAJAwT,EAAM/T,SAAQ,SAACgU,GACbjU,GAAU,MAAQ4T,EAAKjD,SAASsD,EAAK,IAAM,KAAOL,EAAKjD,SAASsD,EAAK,IAAM,KAC7E,IACAjU,GAAU,KAEZ,yBCrBA,IAAM2T,EAAO/T,EAAQ,OAmBrB4B,EAAOC,QALW,SAACwW,EAAQpE,GACzB,IAAME,EAAaJ,EAAKuE,SAASvE,EAAKjB,SAAUuF,EAAQpE,EAASE,YACjE,OAAO9P,OAAOC,OAAO,CAAC,EAAG2P,EAAU,CAAEE,WAAAA,GACvC,yBCjBA,IAAMH,EAAOhU,EAAQ,OACf0E,EAAM1E,EAAQ,OACdmV,EAAanV,EAAQ,OAiC3B4B,EAAOC,QArBU,SAACvB,GAChB,IAAKoE,EAAIpE,GACP,MAAM,IAAIgC,MAAM,2BAclB,GAVA6S,EAAW7U,GAGXA,EAAO8T,MAAM/T,SAAQ,SAACgU,GACpB,GAAIL,EAAKc,OAAOT,EAAK,GAAIA,EAAK,IAC5B,MAAM,IAAI/R,MAAM,mBAADlB,OAAoBiT,EAAK,IAE5C,KAGK/T,EAAO6T,WAAWoE,MAAMzH,OAAOsB,UAClC,MAAM,IAAI9P,MAAM,4BAADlB,OAA6Bd,EAAO6T,YAEvD,yBCjCA,IAAMJ,EAAO/T,EAAQ,OAEf0B,EAAQ1B,EAAQ,OAoBtB4B,EAAOC,QAViB,SAACoS,GACvB,OAAIF,EAAKG,WAAWD,EAASE,cAG7BF,EAASuE,SAAWvE,EAASuE,SAAShT,KAAI,SAACxE,GAAO,OAAKU,EAAM4S,UAAUL,EAASE,WAAYnT,EAAQ,IAEpGiT,EAASE,WAAaJ,EAAKjB,UALsBmB,CAOnD,qBCZArS,EAAOC,QAFO,SAACoS,GAAQ,OAAK5P,OAAOC,OAAO,CAAC,EAAG2P,EAAS,yBCNvD,IAAMF,EAAO/T,EAAQ,OAyBrB4B,EAAOC,QAVQ,SAAC2W,GAId,YAHiBjE,IAAbiE,IACFA,EAAW,IAEN,CACLA,SAAAA,EACArE,WAAYJ,EAAKjB,SAErB,yBCvBA,IAAM2F,EAAOzY,EAAQ,OACf+T,EAAO/T,EAAQ,OAEf0B,EAAQ1B,EAAQ,OAEhB8S,EAAS9S,EAAQ,OAsCvB4B,EAAOC,QA9BmB,SAAC2S,GACzB,GAAgB,IAAZA,EAAK,GAAU,MAAM,IAAIlS,MAAM,+BAEnC,IAAMmS,EAAU3B,IAEhB2B,EAAQN,WAAaJ,EAAKrO,MAAM8O,EAAKE,MAAM,EAAG,KAK9C,IAHA,IAAMgE,EAAmBlE,EAAK,IAC1BkB,EAAK,GACLiD,EAAKnE,EAAK5T,OAA6B,EAAnB8X,EACjBC,EAAKnE,EAAK5T,QAAQ,CACvB,IAAMgY,EAAqBpE,EAAKkB,GAChCA,IAGA,IADA,IAAMnU,EAAW,GACRhB,EAAI,EAAGA,EAAIqY,EAAoBrY,IACtCgB,EAASf,KAAKiY,EAAK7D,WAAWJ,EAAKmE,GAAKnE,EAAKmE,EAAK,GAAInE,EAAKmE,EAAK,KAChEA,GAAM,EAERlE,EAAQ+D,SAAShY,KAAKkB,EAAMoR,OAAOvR,GACrC,CAOA,OAJIiT,EAAK,KAAO,IACdC,EAAQpP,MAAQ,CAACmP,EAAK,IAAKA,EAAK,IAAKA,EAAK,IAAKA,EAAK,MAG/CC,CACT,yBCzCA,IAAM/S,EAAQ1B,EAAQ,OAEhB8S,EAAS9S,EAAQ,OAyBvB4B,EAAOC,QAdY,SAACgX,GAClB,IAAK1U,MAAMmB,QAAQuT,GACjB,MAAM,IAAIvW,MAAM,qCAGlB,IAAMkW,EAAWK,EAAarT,KAAI,SAACwM,EAAQzO,GAGzC,OADgB7B,EAAMoR,OAAOd,EAE/B,IAEA,OADec,EAAO0F,EAExB,yBCHA5W,EAAOC,QAAU,CACf6D,MAAO1F,EAAQ,OACf8S,OAAQ9S,EAAQ,OAChBgV,WAAYhV,EAAQ,OACpBiV,kBAAmBjV,EAAQ,OAC3B8Y,OAAQ9Y,EAAQ,OAChB0E,IAAK1E,EAAQ,OACboV,SAAUpV,EAAQ,OAClBe,WAAYf,EAAQ,OACpB+Q,SAAU/Q,EAAQ,OAClBsV,gBAAiBtV,EAAQ,OACzBsU,UAAWtU,EAAQ,OACnBuV,SAAUvV,EAAQ,+BClCpB,IAAM0B,EAAQ1B,EAAQ,OAEhB8S,EAAS9S,EAAQ,OACjBe,EAAaf,EAAQ,OAc3B4B,EAAOC,QANQ,SAACoS,GACd,IACM8E,EADWhY,EAAWkT,GACCzO,KAAI,SAACxE,GAAO,OAAKU,EAAMoX,OAAO9X,EAAQ,IACnE,OAAO8R,EAAOiG,EAChB,qBCEAnX,EAAOC,QAXK,SAACvB,GACX,SAAIA,GAA4B,kBAAXA,GACf,aAAcA,GAAU,eAAgBA,GACtC6D,MAAMmB,QAAQhF,EAAOkY,WAAa,WAAYlY,EAAO6T,WAM/D,yBCfA,IAAMzS,EAAQ1B,EAAQ,OAmEtB4B,EAAOC,QA3DiB,SAACoS,GACvB,IAAMuE,EAAWvE,EAASuE,SACpBrE,EAAaF,EAASE,WAEtB6E,EAAmBR,EAAS5X,OAC5B8X,EAAmBF,EAASS,QAAO,SAACC,EAAOlY,GAAO,OAAKkY,EAAQlY,EAAQO,SAASX,MAAM,GAAE,GAC1FyE,EAAQ,EAAE,GAAI,GAAI,GAAI,GACtB4O,EAAS5O,QAAOA,EAAQ4O,EAAS5O,OAGrC,IAAMoQ,EAAY,IAAItS,aAAa,GAAiB6V,EAAuC,EAAnBN,GAGxEjD,EAAU,GAAK,EAEfA,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,IAAMtB,EAAW,GAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAE3BsB,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GAEtBoQ,EAAU,IAAMiD,EAEhB,IAAIhD,EAAK,GACLiD,EAAKjD,EAAKsD,EAgBd,OAfAR,EAASnY,SAAQ,SAACW,GAChB,IAAMgR,EAAStQ,EAAM0T,SAASpU,GAE9ByU,EAAUC,GAAM1D,EAAOpR,OACvB8U,IAEA,IAAK,IAAInV,EAAI,EAAGA,EAAIyR,EAAOpR,OAAQL,IAAK,CACtC,IAAM2R,EAAQF,EAAOzR,GACrBkV,EAAUkD,EAAK,GAAKzG,EAAM,GAC1BuD,EAAUkD,EAAK,GAAKzG,EAAM,GAC1BuD,EAAUkD,EAAK,GAAKzG,EAAM,GAC1ByG,GAAM,CACR,CACF,IAEOlD,CACT,yBCjEA,IAAM/T,EAAQ1B,EAAQ,OAEhBe,EAAaf,EAAQ,OAe3B4B,EAAOC,QANU,SAACoS,GAGhB,OAFiBlT,EAAWkT,GACEzO,KAAI,SAACxE,GAAO,OAAKU,EAAM0T,SAASpU,EAAQ,GAExE,yBCfA,IAAMoX,EAAkBpY,EAAQ,OAchC4B,EAAOC,QAFY,SAACoS,GAAQ,OAAKmE,EAAgBnE,GAAUuE,QAAQ,yBCZnE,IAAM9W,EAAQ1B,EAAQ,OAEhBe,EAAaf,EAAQ,OAoB3B4B,EAAOC,QATU,SAACoS,GAChB,IAAMuE,EAAWzX,EAAWkT,GACxB7T,EAAS,UAAYoY,EAAS5X,OAAS,gBAI3C,OAHA4X,EAASnY,SAAQ,SAACW,GAChBZ,GAAU,KAAOsB,EAAMqP,SAAS/P,GAAW,IAC7C,IACOZ,CACT,yBCpBA,IAAM2T,EAAO/T,EAAQ,OAmBrB4B,EAAOC,QALW,SAACwW,EAAQpE,GACzB,IAAME,EAAaJ,EAAKuE,SAASvE,EAAKjB,SAAUuF,EAAQpE,EAASE,YACjE,OAAO9P,OAAOC,OAAO,CAAC,EAAG2P,EAAU,CAAEE,WAAAA,GACvC,yBCjBA,IAAMzS,EAAQ1B,EAAQ,OAChB0E,EAAM1E,EAAQ,OAgCdmZ,EAAmB,SAAC7Y,GAExB,IAAM8Y,EAAY,IAAIvD,IACtBvV,EAAOkY,SAASnY,SAAQ,SAAAgZ,GAAkB,IAAf9X,EAAQ8X,EAAR9X,SACzBA,EAASlB,SAAQ,SAACc,EAAGZ,GACnB,IAAM+Y,EAAK,GAAHlY,OAAMD,GACRoY,EAAK,GAAHnY,OAAMG,GAAUhB,EAAI,GAAKgB,EAASX,SAEpCyV,EAAO,GAAHjV,OAAMkY,EAAE,KAAAlY,OAAImY,GAChBL,EAAQE,EAAUlD,IAAIG,GAAQ+C,EAAUjD,IAAIE,GAAQ,EAC1D+C,EAAU3V,IAAI4S,EAAM6C,EAAQ,EAC9B,GACF,IAGA,IAAMM,EAAc,GAQpB,GAPAJ,EAAU/Y,SAAQ,SAAC6Y,EAAO7C,GACxB,IAAMoD,EAAiBpD,EAAKqD,MAAM,KAAKxE,UAAUrU,KAAK,KAElDqY,IADoBE,EAAUjD,IAAIsD,IAEpCD,EAAYhZ,KAAK6V,EAAK/G,QAAQ,IAAK,QAEvC,IACIkK,EAAY5Y,OAAS,EACvB,MAAM,IAAI0B,MAAM,sBAADlB,OAAuBoY,EAAY5Y,OAAM,MAAAQ,OAAKoY,EAAY3Y,KAAK,OAElF,EAEAe,EAAOC,QAhDU,SAACvB,GAChB,IAAKoE,EAAIpE,GACP,MAAM,IAAIgC,MAAM,2BAQlB,GAJAhC,EAAOkY,SAASnY,QAAQqB,EAAM6T,UAC9B4D,EAAiB7Y,IAGZA,EAAO6T,WAAWoE,MAAMzH,OAAOsB,UAClC,MAAM,IAAI9P,MAAM,4BAADlB,OAA6Bd,EAAO6T,YAIvD,yBCdAvS,EAAOC,QAAU,CACfsD,MAAOnF,EAAQ,OACfc,MAAOd,EAAQ,OACfoF,MAAOpF,EAAQ,OACf2Z,MAAO3Z,EAAQ,OACf0B,MAAO1B,EAAQ,+BCnBjB,IAAQ4Z,EAAQ5Z,EAAQ,OAAhB4Z,IACF5F,EAAOhU,EAAQ,OAEfgV,EAAahV,EAAQ,OACrBoV,EAAWpV,EAAQ,MAyIzB4B,EAAOC,QAnHW,SAAC1B,EAAS8T,GAC1B,IAOA5C,EAAsEhN,OAAOC,OAAO,CAAC,EAPpE,CACfuV,OAAQ,CAAC,EAAG,GACZC,cAAe,EACfC,WAAW,EACXC,OAAO,EACPzI,SAAU,IAEsFpR,GAA5F8Z,EAAQ5I,EAAR4I,SAAUJ,EAAMxI,EAANwI,OAAQC,EAAazI,EAAbyI,cAAeC,EAAS1I,EAAT0I,UAAWC,EAAK3I,EAAL2I,MAAOzI,EAAQF,EAARE,SAGzD,IAAKpN,MAAMmB,QAAQ2U,GAAW,MAAM,IAAI3X,MAAM,+CAC9C,GAAI2X,EAASrZ,OAAS,EAAG,MAAM,IAAI0B,MAAM,wCAGzC,GAFA2X,EAAWjG,EAAKtO,MAAMuU,IAEjB9V,MAAMmB,QAAQuU,GAAS,MAAM,IAAIvX,MAAM,6CAC5C,GAAIuX,EAAOjZ,OAAS,EAAG,MAAM,IAAI0B,MAAM,sCAEvC,GAAIiP,EAAW,EAAG,MAAM,IAAIjP,MAAM,iCAElC,IAAM4X,EAAW,IAGjB,GAAIjG,EAASkG,SACX,MAAM,IAAI7X,MAAM,mCAGlB,IAAM0P,EAASoD,EAASnB,GACxB,GAAIjC,EAAOpR,OAAS,EAClB,MAAM,IAAI0B,MAAM,sFAGlB,IAAI8X,EAAUP,EAAO,GACjBQ,EAAUR,EAAO,GACfS,EAAatI,EAAOA,EAAOpR,OAAS,GAG1CwZ,EAAUlK,KAAKqK,MAAMH,EAAUF,GAAYA,EAC3CG,EAAUnK,KAAKqK,MAAMF,EAAUH,GAAYA,EAC3CD,EAAWjG,EAAKY,WAAW1E,KAAKqK,MAAMN,EAAS,GAAKC,GAAYA,EAAUhK,KAAKqK,MAAMN,EAAS,GAAKC,GAAYA,GAE/G,IAAMM,GAAaT,EACfU,EAAY,GAChB,GAAiB,IAAZL,GAA+B,IAAZC,EAGtBI,EAAUja,KAAKyZ,OACV,CACLG,EAAUlK,KAAKkD,IAAIgH,GACnBC,EAAUnK,KAAKkD,IAAIiH,GAGnB,IAAMK,EAAMZ,EACNa,EAASzK,KAAK0K,IAAIF,GAClBG,EAAS3K,KAAK4K,IAAIJ,GAClBK,EAAoB/G,EAAK+C,SAAS/C,EAAKlB,SAAUwH,EAAYL,GACnEjG,EAAKgH,MAAMD,EAAmBA,EAAmB,IAGjD,IAAME,EAAI/K,KAAKqK,OAAOI,EAASI,EAAkB,GAAKF,EAASE,EAAkB,IAAMb,GAAYA,EAC7FgB,EAAIhL,KAAKqK,QAAQM,EAASE,EAAkB,GAAKJ,EAASI,EAAkB,IAAMb,GAAYA,EAC9FiB,EAAkBnH,EAAKY,WAAWqG,EAAGC,GAErCE,EAAaD,EAAgB,GAAKA,EAAgB,IAAOf,EAAUA,GAAYe,EAAgB,GAAKA,EAAgB,IAAOd,EAAUA,GAC3I,GAAIe,EAAY,EAAK,CAEnB,IAAMC,EAAgBnL,KAAKoD,KAAK8H,GAChChB,GAAWiB,EACXhB,GAAWgB,EAEXjB,EAAUlK,KAAKqK,MAAMH,EAAUF,GAAYA,EAC3CG,EAAUnK,KAAKqK,MAAMF,EAAUH,GAAYA,CAC7C,CAEA,IAAIoB,EAAcpL,KAAKoD,MAAM8G,EAAUA,EAAUC,EAAUA,EAAUD,EAAUA,EAAUe,EAAgB,GAAKA,EAAgB,GAAKd,EAAUA,EAAUc,EAAgB,GAAKA,EAAgB,KAAOf,EAAUA,EAAUe,EAAgB,GAAKA,EAAgB,GAAKd,EAAUA,EAAUc,EAAgB,GAAKA,EAAgB,KACtTX,IAAcR,IAAOsB,GAAeA,GACxC,IAAMC,EAAmBvH,EAAKY,WAAWwF,EAAUe,EAAgB,GAAKd,GAAUA,EAAUc,EAAgB,GAAKf,GACjHpG,EAAKgH,MAAMO,EAAkBA,EAAkBD,GAE/C,IAAIE,EAASxH,EAAKY,WAAW+F,EAASY,EAAiB,GAAKV,EAASU,EAAiB,GAAIV,EAASU,EAAiB,GAAKZ,EAASY,EAAiB,IACnJC,EAASxH,EAAKyH,IAAID,EAAQA,EAAQxH,EAAKgH,MAAMhH,EAAKlB,SAAUkB,EAAKyH,IAAIzH,EAAKlB,SAAUwH,EAAYL,GAAW,KAG3G,IAAMyB,EAAU1H,EAAKY,YAAYuG,EAAgB,GAAKI,EAAiB,IAAMnB,GAAUe,EAAgB,GAAKI,EAAiB,IAAMlB,GAC7HsB,EAAU3H,EAAKY,aAAauG,EAAgB,GAAKI,EAAiB,IAAMnB,IAAWe,EAAgB,GAAKI,EAAiB,IAAMlB,GAC/HuB,EAAS5H,EAAK6H,aAAaH,GAE7BI,EADW9H,EAAK6H,aAAaF,GACPC,EAC1BE,GAA0BlC,GACpBY,GAAesB,EAAa,EAChCA,GAAclC,EACJY,GAAesB,EAAa,IACtCA,GAAclC,GAIhB,IAAImC,EAAW7L,KAAK8L,KAAK9L,KAAKkD,IAAI0I,GAAclC,EAAMrI,GAAY,EAC9DwK,EAAW,IAAGA,EAAW,GAC7B,IAAK,IAAIE,EAAO,EAAGA,EAAOF,EAAUE,IAAQ,CAC1C,IAAMC,EAAQN,EAASK,EAAOF,EAAWD,EACnCK,EAAWjM,KAAK0K,IAAIsB,GACpBE,EAAWlM,KAAK4K,IAAIoB,GAEpBhK,EAAQ8B,EAAKY,WAAW+F,EAASP,EAAU+B,EAAWtB,EAASR,EAAU+B,EAAUvB,EAAST,EAAU+B,EAAWxB,EAASN,EAAU+B,GAC1IpI,EAAKyH,IAAIvJ,EAAOA,EAAOsJ,GACvBf,EAAUja,KAAK0R,EACjB,CAEI6J,GAAUtB,EAAUja,KAAKL,EAAQ8Z,SACvC,CAGA,OAFAQ,EAAYzI,EAAO5Q,OAAOqZ,GACXzF,EAAW,CAAC,EAAGyF,EAEhC,yBC3IA,IAAQb,EAAQ5Z,EAAQ,OAAhB4Z,IACF5F,EAAOhU,EAAQ,OACfyY,EAAOzY,EAAQ,OAEfqc,EAAerc,EAAQ,OACvBoV,EAAWpV,EAAQ,MAsJzB4B,EAAOC,QAjIc,SAAC1B,EAAS8T,GAC7B,IAGA5C,EAAkChN,OAAOC,OAAO,CAAC,EAHhC,CACfiN,SAAU,IAEkDpR,GAAxDmc,EAAajL,EAAbiL,cAAe/K,EAAQF,EAARE,SAGrB,IAAKpN,MAAMmB,QAAQgX,GAAgB,MAAM,IAAIha,MAAM,wDACnD,GAAIga,EAAc1b,OAAS,EAAG,MAAM,IAAI0B,MAAM,wDAE9C,GAAIiP,EAAW,EAAG,MAAM,IAAIjP,MAAM,iCAGlC,GAAI2R,EAASkG,SACX,MAAM,IAAI7X,MAAM,uCAGlB,IAAM0P,EAASoD,EAASnB,GACxB,GAAIjC,EAAOpR,OAAS,EAClB,MAAM,IAAI0B,MAAM,+FAQlB,GAA0B,QAJ1Bga,EAAgBA,EAAc5H,SAGU,GACR,CAC9B,GAAI4H,EAAc1b,OAAS,EACzB,MAAM,IAAI0B,MAAM,oEAGlB,IAAIia,EAAyBvK,EAAOA,EAAOpR,OAAS,GAIpD,GAHI,2BAA4BqT,IAC9BsI,EAAyBtI,EAASsI,yBAE/BpY,MAAMmB,QAAQiX,GACjB,MAAM,IAAIja,MAAM,gFAGlB,IAAMka,EAAexI,EAAKgH,MAAMhH,EAAKlB,SAAUd,EAAOA,EAAOpR,OAAS,GAAI,GAC1EoT,EAAK+C,SAASyF,EAAcA,EAAcD,GAE1CD,EAAc,GAAKE,CACrB,CAGAF,EAAcG,QAAQzK,EAAOA,EAAOpR,OAAS,IAK7C,IAHA,IAAM8b,EAAcJ,EAAc1b,OAAS,EACrC+b,EAAa,GACfC,EAAO,EACFrc,EAAI,EAAGA,GAAKmc,IAAenc,EAC9BA,EAAI,IAAGqc,GAAQrc,GACnBoc,EAAWnc,KAAKoc,GAIlB,IADA,IAAMC,EAAY,GACTtc,EAAI,EAAGA,GAAKmc,IAAenc,EAAG,CACrC,IAAMuc,EAAWH,EAAWD,IAAgBC,EAAWpc,GAAKoc,EAAWD,EAAcnc,IACrFsc,EAAUrc,KAAKsc,EACjB,CAwBA,IAtBA,IAAMlG,EAAK5C,EAAKlB,SACVwG,EAAKtF,EAAKlB,SACViK,EAAKtE,EAAK3F,SACVkK,EAAe,SAAC3M,GAKpB,IAJA,IAAI4M,EAAK,EACLC,EAAmBhN,KAAKyD,IAAI,EAAItD,EAAGqM,GACjCS,EAAsB,IAAN9M,EAAY,GAAK,EAAIA,GAAM,EAC3C6B,EAAQ8B,EAAKlB,SACVsK,EAAI,EAAGA,GAAKV,IAAeU,EAAG,CACjCA,IAAMV,IAAaQ,EAAmB,GAC1C,IAAMG,EAAuBR,EAAUO,GAAKH,EAAKC,EAC3CI,EAAkBtJ,EAAKgH,MAAMpE,EAAI0F,EAAcc,GAAIC,GACzDrJ,EAAKyH,IAAIvJ,EAAOA,EAAOoL,GACvBL,GAAM5M,EACN6M,GAAoBC,CACtB,CACA,OAAOjL,CACT,EAEMuI,EAAY,GACZ8C,EAAa,GACbxB,EAAWW,EAAc,EACtBnc,EAAI,EAAGA,EAAIwb,IAAYxb,EAAG,CACjC,IAAM8P,EAAI9P,GAAKwb,EAAW,GACpB7J,EAAQ8K,EAAa3M,GAC3BoK,EAAUja,KAAK0R,GACfqL,EAAW/c,KAAK6P,EAClB,CAMA,IAHA,IAAImN,EAAgB,EACdC,EAAW7D,EAAMrI,EACjBmM,EAAcxN,KAAK4K,IAAI2C,GACtBD,EAAgB/C,EAAU7Z,OAAS,GAAG,CAC3C,IAAM+c,EAAO3J,EAAK+C,SAASH,EAAI6D,EAAU+C,GAAgB/C,EAAU+C,EAAgB,IACnFxJ,EAAK4J,UAAUD,EAAMA,GACrB,IAAME,EAAO7J,EAAK+C,SAASuC,EAAImB,EAAU+C,EAAgB,GAAI/C,EAAU+C,IACvExJ,EAAK4J,UAAUC,EAAMA,GACrB,IAAMC,EAAW9J,EAAK+J,MAAMhB,EAAIY,EAAME,GACtC,GAAI3N,KAAKkD,IAAI0K,EAAS,IAAMJ,EAAa,CAEvC,IAAMM,EAAKT,EAAWC,EAAgB,GAChCS,EAAKV,EAAWC,EAAgB,GAChCU,EAAQF,EAAiB,GAAXC,EAAKD,GAAU,EAC7BG,EAAQH,EAAiB,GAAXC,EAAKD,GAAU,EAC7BrJ,EAASqI,EAAakB,GACtBrJ,EAASmI,EAAamB,GAE5B1D,EAAUvD,OAAOsG,EAAe,EAAG7I,EAAQE,GAC3C0I,EAAWrG,OAAOsG,EAAe,EAAGU,EAAOC,KAE3CX,EACoB,IAAGA,EAAgB,EACzC,OACIA,CAEN,CAIA/C,EAAU9C,QACV,IAAMvX,EAASic,EAAa5B,EAAWxG,GAEvC,OADA7T,EAAOmc,uBAAyBD,EAAcA,EAAc1b,OAAS,GAC9DR,CACT,yBCzJA,IAAMgB,EAASpB,EAAQ,OACjB8S,EAAS9S,EAAQ,OAavB4B,EAAOC,QAFc,SAACmQ,EAAQiC,GAAQ,OAAK7S,EAAO6S,EAAUnB,EAAOd,GAAQ,yBCZ3E,IAAM+B,EAAO/T,EAAQ,OACfgU,EAAOhU,EAAQ,OAkBrB4B,EAAOC,QARiB,SAACoS,GACvB,OAAIF,EAAKG,WAAWD,EAASE,cAE7BF,EAASjC,OAASiC,EAASjC,OAAOxM,KAAI,SAAC0M,GAAK,OAAK8B,EAAKM,UAAUN,EAAKlB,SAAUZ,EAAO+B,EAASE,WAAW,IAC1GF,EAASE,WAAaJ,EAAKjB,UAHsBmB,CAKnD,qBCTArS,EAAOC,QAFO,SAACoS,GAAQ,OAAK5P,OAAOC,OAAO,CAAC,EAAG2P,EAAS,yBCNvD,IAAQmK,EAAQpe,EAAQ,OAAhBoe,IAEFpK,EAAOhU,EAAQ,OAEf0F,EAAQ1F,EAAQ,OA4BtB4B,EAAOC,QApBO,SAACoS,GACb,GAAIA,EAASkG,SAAU,OAAOlG,EAE9B,IAAMoK,EAAS3Y,EAAMuO,GAGrB,GAFAoK,EAAOlE,UAAW,EAEdkE,EAAOrM,OAAOpR,OAAS,EAKzB,IAHA,IAAMoR,EAASqM,EAAOrM,OAChBsM,EAAKtM,EAAO,GACduM,EAAKvM,EAAOA,EAAOpR,OAAS,GACzBoT,EAAK1C,SAASgN,EAAIC,GAAOH,EAAMA,IACpCpM,EAAOyE,MACe,IAAlBzE,EAAOpR,SACX2d,EAAKvM,EAAOA,EAAOpR,OAAS,GAGhC,OAAOyd,CACT,yBC9BA,IAAMrJ,EAAahV,EAAQ,OACrBoV,EAAWpV,EAAQ,MAEjB8U,EAAW9U,EAAQ,OAAnB8U,OAgCRlT,EAAOC,QAhBQ,WAGK,IADlB,IAAIsY,GAAW,EACXM,EAAY,GAAExW,EAAAC,UAAAtD,OAHD4d,EAAK,IAAAra,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAALoa,EAAKpa,GAAAF,UAAAE,GAatB,OATAoa,EAAMne,SAAQ,SAACoe,EAAMle,GACnB,IAAMme,EAAMtJ,EAASqJ,GAAM/J,QAE3B,GADI+F,EAAU7Z,OAAS,GAAK8d,EAAI9d,OAAS,GAAKkU,EAAO4J,EAAI,GAAIjE,EAAUA,EAAU7Z,OAAS,KAAK8d,EAAI/G,QAC/F+G,EAAI9d,OAAS,GAAKuZ,EACpB,MAAM,IAAI7X,MAAM,kDAADlB,OAAmDb,EAAC,YAErE4Z,EAAWsE,EAAKtE,SAChBM,EAAYA,EAAUrZ,OAAOsd,EAC/B,IACO1J,EAAW,CAAE2J,OAAQxE,GAAYM,EAC1C,yBCjCA,IAAM1G,EAAO/T,EAAQ,OA6BrB4B,EAAOC,QAXQ,SAACmQ,GAId,YAHeuC,IAAXvC,IACFA,EAAS,IAEJ,CACLA,OAAQA,EACRmI,UAAU,EACVhG,WAAYJ,EAAKjB,SAErB,yBC3BA,IAAMkB,EAAOhU,EAAQ,OAEfoV,EAAWpV,EAAQ,MA4CzB4B,EAAOC,QAlCQ,SAACsR,EAAGxD,GACjB,GAAIwD,EAAEgH,WAAaxK,EAAEwK,SACnB,OAAO,EAET,GAAIhH,EAAEnB,OAAOpR,SAAW+O,EAAEqC,OAAOpR,OAC/B,OAAO,EAGT,IAAMge,EAAUxJ,EAASjC,GACnB0L,EAAUzJ,EAASzF,GAInB/O,EAASge,EAAQhe,OACnBke,EAAS,EACb,EAAG,CAED,IADA,IAAIC,GAAU,EACLxe,EAAI,EAAGA,EAAIK,EAAQL,IAC1B,IAAKyT,EAAKc,OAAO8J,EAAQre,GAAIse,GAASte,EAAIue,GAAUle,IAAU,CAC5Dme,GAAU,EACV,KACF,CAEF,IAAgB,IAAZA,EACF,OAAO,EAGT,IAAK5L,EAAEgH,SACL,OAAO,CAEX,SAAW2E,EAASle,GACpB,OAAO,CACT,yBC5CA,IAAMmT,EAAO/T,EAAQ,OACfgU,EAAOhU,EAAQ,OAEf8S,EAAS9S,EAAQ,OA6BvB4B,EAAOC,QArBmB,SAAC2S,GACzB,GAAgB,IAAZA,EAAK,GAAU,MAAM,IAAIlS,MAAM,+BAEnC,IAAMmS,EAAU3B,IAEhB2B,EAAQN,WAAaJ,EAAKrO,MAAM8O,EAAKE,MAAM,EAAG,KAE9CD,EAAQ0F,WAAa3F,EAAK,IAE1B,IAAK,IAAIjU,EAAI,GAAIA,EAAIiU,EAAK5T,OAAQL,GAAK,EAAG,CACxC,IAAM2R,EAAQ8B,EAAKY,WAAWJ,EAAKjU,GAAIiU,EAAKjU,EAAI,IAChDkU,EAAQzC,OAAOxR,KAAK0R,EACtB,CAMA,OAJIsC,EAAK,KAAO,IACdC,EAAQpP,MAAQ,CAACmP,EAAK,IAAKA,EAAK,IAAKA,EAAK,IAAKA,EAAK,MAG/CC,CACT,yBC9BA,IAAQ2J,EAAQpe,EAAQ,OAAhBoe,IAEFpK,EAAOhU,EAAQ,OAEfgf,EAAQhf,EAAQ,OAChB8S,EAAS9S,EAAQ,OAoCvB4B,EAAOC,QArBY,SAAC1B,EAAS6R,GAC3B,IACM2M,EAAWta,OAAOC,OAAO,CAAC,EADf,CAAEqa,QAAQ,GACkBxe,GAAvCwe,OAEFlK,EAAU3B,IAId,GAHA2B,EAAQzC,OAASA,EAAOxM,KAAI,SAAC0M,GAAK,OAAK8B,EAAKtO,MAAMwM,EAAM,IAGpDuC,EAAQzC,OAAOpR,OAAS,EAAG,CAC7B,IAAM0d,EAAK7J,EAAQzC,OAAO,GACpBuM,EAAK9J,EAAQzC,OAAOyC,EAAQzC,OAAOpR,OAAS,GAC9CoT,EAAK1C,SAASgN,EAAIC,GAAOH,EAAMA,IAEjCO,GAAS,EAEb,CAGA,OAFe,IAAXA,IAAiBlK,EAAUuK,EAAMvK,IAE9BA,CACT,yBCvBA7S,EAAOC,QAAU,CACfod,UAAWjf,EAAQ,OACnBkf,aAAclf,EAAQ,OACtBqc,aAAcrc,EAAQ,OACtB0F,MAAO1F,EAAQ,OACfgf,MAAOhf,EAAQ,OACfoB,OAAQpB,EAAQ,OAChB8S,OAAQ9S,EAAQ,OAChB8U,OAAQ9U,EAAQ,OAChBgV,WAAYhV,EAAQ,OACpBiV,kBAAmBjV,EAAQ,OAC3B0E,IAAK1E,EAAQ,OACbkV,QAASlV,EAAQ,OACjBoV,SAAUpV,EAAQ,MAClB+Q,SAAU/Q,EAAQ,OAClBsV,gBAAiBtV,EAAQ,OACzBsU,UAAWtU,EAAQ,OACnBuV,SAAUvV,EAAQ,2BCdpB4B,EAAOC,QAbK,SAACvB,GACX,SAAIA,GAA4B,kBAAXA,GAEf,WAAYA,GAAU,eAAgBA,GAAU,aAAcA,GAE5D6D,MAAMmB,QAAQhF,EAAO0R,SAAW,WAAY1R,EAAO6T,WAM7D,yBCjBA,IAAMzO,EAAQ1F,EAAQ,OAmBtB4B,EAAOC,QAPS,SAACoS,GAEf,IAAMoK,EAAS3Y,EAAMuO,GAErB,OADAoK,EAAOrM,OAASiC,EAASjC,OAAO0C,QAAQQ,UACjCmJ,CACT,qBCkCAzc,EAAOC,QA7CiB,SAACoS,GACvB,IAAMjC,EAASiC,EAASjC,OAClBmC,EAAaF,EAASE,WACxB9O,EAAQ,EAAE,GAAI,GAAI,GAAI,GACtB4O,EAAS5O,QAAOA,EAAQ4O,EAAS5O,OAGrC,IAAMoQ,EAAY,IAAItS,aAAa,GAAkC,EAAhB6O,EAAOpR,QAE5D6U,EAAU,GAAK,EAEfA,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,GAAKtB,EAAW,GAC1BsB,EAAU,IAAMtB,EAAW,GAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAC3BsB,EAAU,IAAMtB,EAAW,IAE3BsB,EAAU,IAAMxB,EAASkG,SAAW,EAAI,EAExC1E,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GACtBoQ,EAAU,IAAMpQ,EAAM,GAEtB,IAAK,IAAIwO,EAAI,EAAGA,EAAI7B,EAAOpR,OAAQiT,IAAK,CACtC,IAAM6B,EAAS,EAAJ7B,EAAQ,GACb3B,EAAQF,EAAO6B,GACrB4B,EAAUC,GAAMxD,EAAM,GACtBuD,EAAUC,EAAK,GAAKxD,EAAM,EAC5B,CAEA,OAAOuD,CACT,wBCjDA,IAAM2C,EAAkBpY,EAAQ,OAchC4B,EAAOC,QAFU,SAACoS,GAAQ,OAAKmE,EAAgBnE,GAAUjC,MAAM,yBCZ/D,IAAMgC,EAAOhU,EAAQ,OAEfoV,EAAWpV,EAAQ,MAqBzB4B,EAAOC,QAVU,SAACoS,GAChB,IAAMjC,EAASoD,EAASnB,GACpB7T,EAAS,SAAW4R,EAAOpR,OAAS,YAAcqT,EAASkG,SAAW,UAK1E,OAJAnI,EAAO3R,SAAQ,SAAC6R,GACd9R,GAAU,KAAO4T,EAAKjD,SAASmB,GAAS,KAC1C,IACA9R,GAAU,KAEZ,yBCrBA,IAAM2T,EAAO/T,EAAQ,OAmBrB4B,EAAOC,QALW,SAACwW,EAAQpE,GACzB,IAAME,EAAaJ,EAAKuE,SAASvE,EAAKjB,SAAUuF,EAAQpE,EAASE,YACjE,OAAO9P,OAAOC,OAAO,CAAC,EAAG2P,EAAU,CAAEE,WAAAA,GACvC,yBCjBA,IAAMH,EAAOhU,EAAQ,OACf0E,EAAM1E,EAAQ,OAuCpB4B,EAAOC,QA3BU,SAACvB,GAChB,IAAKoE,EAAIpE,GACP,MAAM,IAAIgC,MAAM,2BAIlB,GAAIhC,EAAO0R,OAAOpR,OAAS,EACzB,IAAK,IAAIL,EAAI,EAAGA,EAAID,EAAO0R,OAAOpR,OAAQL,IACxC,GAAIyT,EAAKc,OAAOxU,EAAO0R,OAAOzR,GAAID,EAAO0R,QAAQzR,EAAI,GAAKD,EAAO0R,OAAOpR,SACtE,MAAM,IAAI0B,MAAM,0BAADlB,OAA2Bd,EAAO0R,OAAOzR,KAa9D,GAPAD,EAAO0R,OAAO3R,SAAQ,SAAC6R,GACrB,IAAKA,EAAMqG,MAAMzH,OAAOsB,UACtB,MAAM,IAAI9P,MAAM,uBAADlB,OAAwB8Q,GAE3C,KAGK5R,EAAO6T,WAAWoE,MAAMzH,OAAOsB,UAClC,MAAM,IAAI9P,MAAM,4BAADlB,OAA6Bd,EAAO6T,YAEvD,yBCtCA,IAAMgL,EAAcnf,EAAQ,OACtBof,EAAOpf,EAAQ,OAgCfqf,EAAgB,SAACnN,EAAOlR,GAc5B,IAbA,IAAMse,EAAWte,EAAQJ,OAEnB2e,EAAKrN,EAAM,GACXsN,EAAKtN,EAAM,GAEbuN,EAAOze,EAAQse,EAAW,GAC1BI,EAAO1e,EAAQ,GAEf2e,EAAUF,EAAK,GAAKD,EAEpBI,EAAa,EAEbrf,EAAI,EACCsT,EAAKyL,EAAW,IAAMzL,GAAI,CAKjC,IAAMgM,EAAUH,EAAK,GAAKF,EAC1B,GAAIG,IAAWE,EAAQ,CAKrB,IAAMC,EAAUL,EAAK,GAAKF,EACpBQ,EAAUL,EAAK,GAAKH,GACtBO,GAAUC,GASPL,EAAK,IAAMA,EAAK,GAAKF,IAAOC,EAAK,GAAKC,EAAK,KAAOD,EAAK,GAAKC,EAAK,KAAQH,KAP9EK,GAAcA,EAWlB,CAEAD,EAASE,EACTJ,EAAOC,EACPA,EAAO1e,IAAUT,EACnB,CACA,OAAOqf,CACT,EAEAhe,EAAOC,QAvEiB,SAACmQ,EAAQhR,GAC/B,GAAsB,IAAlBgR,EAAOpR,OAAc,OAAO,EAEhC,IAAMW,EAAWP,EAAQO,SACzB,OAAIA,EAASX,OAAS,EAAU,GAE5Bue,EAAYne,GAAW,IACzBA,EAAUoe,EAAKpe,IAGLgR,EAAOiH,QAAO,SAAC+G,EAAK9N,GAAK,OAAK8N,EAAMX,EAAcnN,EAAO3Q,EAAS,GAAE,KACjEyQ,EAAOpR,OAAS,EAAI,EACrC,qBCAAgB,EAAOC,QAPQ,SAACN,GAId,YAHiBgT,IAAbhT,GAA0BA,EAASX,OAAS,KAC9CW,EAAW,IAEN,CAAEA,SAAUA,EACrB,yBCrBA,IAAMuR,EAAS9S,EAAQ,OAcvB4B,EAAOC,QALM,SAACb,GACZ,IAAMO,EAAWP,EAAQO,SAASmT,QAAQQ,UAC1C,OAAOpC,EAAOvR,EAChB,yBCDAK,EAAOC,QAAU,CACfoe,gBAAiBjgB,EAAQ,OACzB8S,OAAQ9S,EAAQ,OAChBof,KAAMpf,EAAQ,OACdmf,YAAanf,EAAQ,+BCRvB,IAAMkgB,EAAOlgB,EAAQ,OAIrB4B,EAAOC,QAFa,SAACb,GAAO,OAAKkf,EAAKlf,EAAQO,SAAS,yBCTvD,IAAMuR,EAAS9S,EAAQ,OAEjByY,EAAOzY,EAAQ,OAyBrB4B,EAAOC,QAfO,WACZ,IAAI6Q,EACAhR,EAUJ,OATsB,IAAlBwC,UAAOtD,QACT8R,EAAMI,IACNpR,EAAKwC,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,KAELwO,EAAGxO,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,GACHxC,EAAKwC,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,IAGPwO,EAAInR,SAAWG,EAAMH,SAASiE,KAAI,SAAC2a,GAAG,OAAK1H,EAAK/S,MAAMya,EAAI,IACnDzN,CACT,qBCFA9Q,EAAOC,QAPQ,SAACN,GAId,YAHiBgT,IAAbhT,GAA0BA,EAASX,OAAS,KAC9CW,EAAW,IAEN,CAAEA,SAAAA,EACX,yBCrBA,IAAMkX,EAAOzY,EAAQ,OAEf8S,EAAS9S,EAAQ,OAsBvB4B,EAAOC,QALY,SAACmQ,GAClB,IAAMzQ,EAAWyQ,EAAOxM,KAAI,SAAC0M,GAAK,OAAKuG,EAAK/S,MAAMwM,EAAM,IACxD,OAAOY,EAAOvR,EAChB,yBCtBA,IAAMuR,EAAS9S,EAAQ,OAgBvB4B,EAAOC,QANoB,SAACN,EAAUI,GACpC,IAAMye,EAAOtN,EAAOvR,GAEpB,OADA6e,EAAKze,MAAQA,EACNye,CACT,yBCHAxe,EAAOC,QAAU,CACf6D,MAAO1F,EAAQ,OACf8S,OAAQ9S,EAAQ,OAChBgV,WAAYhV,EAAQ,OACpBqgB,mBAAoBrgB,EAAQ,OAC5B8Y,OAAQ9Y,EAAQ,OAChB0E,IAAK1E,EAAQ,OACbsgB,SAAUtgB,EAAQ,OAClBmf,YAAanf,EAAQ,OACrBugB,mBAAoBvgB,EAAQ,OAC5BwgB,sBAAuBxgB,EAAQ,OAC/BygB,oBAAqBzgB,EAAQ,OAC7B2B,MAAO3B,EAAQ,OACfoV,SAAUpV,EAAQ,OAClB+Q,SAAU/Q,EAAQ,OAClBsU,UAAWtU,EAAQ,OACnBuV,SAAUvV,EAAQ,+BC3BpB,IAAM2B,EAAQ3B,EAAQ,OAChB8S,EAAS9S,EAAQ,OAmBvB4B,EAAOC,QAVQ,SAACb,GACd,IAAMO,EAAWP,EAAQO,SAASmT,QAAQQ,UACpCwL,EAAW5N,EAAOvR,GAKxB,OAJIP,EAAQW,QAEV+e,EAAS/e,MAAQA,EAAMyd,KAAKzd,EAAMmR,SAAU9R,EAAQW,QAE/C+e,CACT,qBCDA9e,EAAOC,QAXK,SAACvB,GACX,SAAIA,GAA4B,kBAAXA,GACf,aAAcA,GACZ6D,MAAMmB,QAAQhF,EAAOiB,UAM/B,8CCfMI,EAAQ3B,EAAQ,OAChByY,EAAOzY,EAAQ,OAUf2gB,EAAoB,SAACpf,GACzB,IAAMkB,EAAclB,EAASX,OAC7B,GAAI6B,EAAc,EAKhB,IAHA,IAAMme,EAASjf,EAAMqT,WAAU6L,MAAhBlf,EAAK,CAAYA,EAAMmR,UAAQ1R,OAAA0f,EAAKvf,KAC/Cwf,EAAcxf,EAASkB,EAAc,GACrCue,EAAUzf,EAASkB,EAAc,GAC5BlC,EAAI,EAAGA,EAAIkC,EAAalC,IAAK,CACpC,IAAM0gB,EAAM1f,EAAShB,GACrB,IAAK2gB,EAAcH,EAAaC,EAASC,EAAKL,GAC5C,OAAO,EAETG,EAAcC,EACdA,EAAUC,CACZ,CAEF,OAAO,CACT,EAKMC,EAAgB,SAACnM,EAAW7C,EAAOiP,EAAWP,GAClD,IAAMQ,EAAe3I,EAAKsF,MACxBtF,EAAK3F,SACL2F,EAAK1B,SAAS0B,EAAK3F,SAAUZ,EAAO6C,GACpC0D,EAAK1B,SAAS0B,EAAK3F,SAAUqO,EAAWjP,IAG1C,OADuBuG,EAAK4I,IAAID,EAAcR,IACrB,CAC3B,EAEAhf,EAAOC,QAlCU,SAACb,GAAO,OAAK2f,EAAkB3f,EAAQO,SAAS,yBCTjE,IAAMI,EAAQ3B,EAAQ,OAkFtB4B,EAAOC,QAzEa,SAACb,GACnB,IAAM0S,EAAI1S,EAAQO,SAASX,OAC3B,GAAI8S,EAAI,EACN,OAAO,EAET,IAAMnS,EAAWP,EAAQO,SAGnBqf,EAASjf,EAAMX,GAGfsgB,EAAKpR,KAAKkD,IAAIwN,EAAO,IACrBW,EAAKrR,KAAKkD,IAAIwN,EAAO,IACrBY,EAAKtR,KAAKkD,IAAIwN,EAAO,IAE3B,GAAIU,EAAKC,EAAKC,IAAO,EAEnB,OAAO,EAGT,IAAIC,EAAQ,EACPH,EAAKC,GAAQD,EAAKE,EACrBC,EAAQ,EAENF,EAAKC,IACPC,EAAQ,GAGV,IAAIvB,EAAO,EACPpQ,EAAI,EACJvP,EAAI,EACJsT,EAAI,EACR,OAAQ4N,GACN,KAAK,EAEH,IAAKlhB,EAAI,EAAGA,EAAImT,EAAGnT,IACjBuP,EAAIvP,EAAI,EACRsT,GAAKtT,EAAI,GAAKmT,EACdwM,GAAS3e,EAAShB,GAAG,IAAMgB,EAASsS,GAAG,GAAKtS,EAASuO,GAAG,IAE1DoQ,GAAS3e,EAAS,GAAG,IAAMA,EAAS,GAAG,GAAKA,EAASmS,EAAI,GAAG,IAE5DwM,GAAS,EAAIU,EAAO,GACpB,MAEF,KAAK,EAEH,IAAKrgB,EAAI,EAAGA,EAAImT,EAAGnT,IACjBuP,EAAIvP,EAAI,EACRsT,GAAKtT,EAAI,GAAKmT,EACdwM,GAAS3e,EAAShB,GAAG,IAAMgB,EAASsS,GAAG,GAAKtS,EAASuO,GAAG,IAE1DoQ,GAAS3e,EAAS,GAAG,IAAMA,EAAS,GAAG,GAAKA,EAASmS,EAAI,GAAG,IAE5DwM,GAAS,EAAIU,EAAO,GACpB,MAGF,QAEE,IAAKrgB,EAAI,EAAGA,EAAImT,EAAGnT,IACjBuP,EAAIvP,EAAI,EACRsT,GAAKtT,EAAI,GAAKmT,EACdwM,GAAS3e,EAAShB,GAAG,IAAMgB,EAASsS,GAAG,GAAKtS,EAASuO,GAAG,IAE1DoQ,GAAS3e,EAAS,GAAG,IAAMA,EAAS,GAAG,GAAKA,EAASmS,EAAI,GAAG,IAE5DwM,GAAS,EAAIU,EAAO,GAGxB,OAAOV,CACT,yBChFA,IAAMzH,EAAOzY,EAAQ,OAmBrB4B,EAAOC,QAZoB,SAACb,GAK1B,IAJA,IAAMO,EAAWP,EAAQO,SACnBkB,EAAclB,EAASX,OACvBqQ,EAAsB,IAAhBxO,EAAoBgW,EAAK3F,SAAW2F,EAAK/S,MAAMnE,EAAS,IAC9DyP,EAAMyH,EAAK/S,MAAMuL,GACd1Q,EAAI,EAAGA,EAAIkC,EAAalC,IAC/BkY,EAAKxH,IAAIA,EAAKA,EAAK1P,EAAShB,IAC5BkY,EAAKzH,IAAIA,EAAKA,EAAKzP,EAAShB,IAE9B,MAAO,CAAC0Q,EAAKD,EACf,yBCjBA,IAAM0Q,EAAO1hB,EAAQ,OAEf2hB,EAAQ,IAAIC,QAqDlBhgB,EAAOC,QA7CuB,SAACb,GAC7B,IAAM6gB,EAAiBF,EAAMxL,IAAInV,GACjC,GAAI6gB,EAAgB,OAAOA,EAE3B,IAAMtgB,EAAWP,EAAQO,SACnBmR,EAAMgP,EAAK5O,SAEjB,GAAwB,IAApBvR,EAASX,OAKX,OAJA8R,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACFA,EAIT,IAAIoP,EAAOvgB,EAAS,GAChBwgB,EAAOD,EACPE,EAAOF,EACPG,EAAOH,EACPI,EAAOJ,EACPK,EAAOL,EAEXvgB,EAASlB,SAAQ,SAACc,GACZ2gB,EAAK,GAAK3gB,EAAE,KAAI2gB,EAAO3gB,GACvB4gB,EAAK,GAAK5gB,EAAE,KAAI4gB,EAAO5gB,GACvB6gB,EAAK,GAAK7gB,EAAE,KAAI6gB,EAAO7gB,GACvB8gB,EAAK,GAAK9gB,EAAE,KAAI8gB,EAAO9gB,GACvB+gB,EAAK,GAAK/gB,EAAE,KAAI+gB,EAAO/gB,GACvBghB,EAAK,GAAKhhB,EAAE,KAAIghB,EAAOhhB,EAC7B,IAEAuR,EAAI,GAA2B,IAArBoP,EAAK,GAAKG,EAAK,IACzBvP,EAAI,GAA2B,IAArBqP,EAAK,GAAKG,EAAK,IACzBxP,EAAI,GAA2B,IAArBsP,EAAK,GAAKG,EAAK,IACzB,IAAMlH,EAAIvI,EAAI,GAAKuP,EAAK,GAClB/G,EAAIxI,EAAI,GAAKwP,EAAK,GAClBE,EAAI1P,EAAI,GAAKyP,EAAK,GAKxB,OAJAzP,EAAI,GAAKxC,KAAKoD,KAAK2H,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,GAEvCT,EAAMle,IAAIzC,EAAS0R,GAEZA,CACT,yBCrDA,IAAM+F,EAAOzY,EAAQ,OAwBrB4B,EAAOC,QAbqB,SAACb,GAK3B,IAJA,IAAIqhB,EAAe,EACb9gB,EAAWP,EAAQO,SAEnBwc,EAAQtF,EAAK3F,SACVvS,EAAI,EAAGA,EAAIgB,EAASX,OAAS,EAAGL,IACvCkY,EAAKsF,MAAMA,EAAOxc,EAAShB,EAAI,GAAIgB,EAAShB,EAAI,IAChD8hB,GAAgB5J,EAAK4I,IAAI9f,EAAS,GAAIwc,GAGxC,OADAsE,GAAgB,CAElB,8CCtBMC,EAAStiB,EAAQ,OASvB4B,EAAOC,QAPO,SAACb,GAIb,OAHKA,EAAQW,QACXX,EAAQW,MAAQ2gB,EAAOtN,WAAU6L,MAAjByB,EAAM,CAAYA,EAAOxP,UAAQ1R,OAAA0f,EAAK9f,EAAQO,aAEzDP,EAAQW,KACjB,qBCEAC,EAAOC,QAFU,SAACb,GAAO,OAAKA,EAAQO,QAAQ,yBCP9C,IAAMkX,EAAOzY,EAAQ,OAgBrB4B,EAAOC,QATU,SAACb,GAChB,IAAIZ,EAAS,qBAKb,OAJAY,EAAQO,SAASlB,SAAQ,SAACiB,GACxBlB,GAAU,GAAJgB,OAAOqX,EAAK1H,SAASzP,GAAO,KACpC,IACAlB,GAAU,GAEZ,yBCdA,IAAM2T,EAAO/T,EAAQ,OACfyY,EAAOzY,EAAQ,OAEf8S,EAAS9S,EAAQ,OAkBvB4B,EAAOC,QATW,SAACwW,EAAQrX,GACzB,IAAMO,EAAWP,EAAQO,SAASiE,KAAI,SAAClE,GAAM,OAAKmX,EAAKnE,UAAUmE,EAAK3F,SAAUxR,EAAQ+W,EAAO,IAK/F,OAJItE,EAAKwO,YAAYlK,IAEnB9W,EAAS2T,UAEJpC,EAAOvR,EAChB,yBCnBA,IAAMihB,EAAwBxiB,EAAQ,OAC9ByiB,EAASziB,EAAQ,OAAjByiB,KACFhK,EAAOzY,EAAQ,OACf0E,EAAM1E,EAAQ,OACdsgB,EAAWtgB,EAAQ,OACnBmf,EAAcnf,EAAQ,OACtB2B,EAAQ3B,EAAQ,OAyDtB4B,EAAOC,QA7CU,SAACvB,GAChB,IAAKoE,EAAIpE,GACP,MAAM,IAAIgC,MAAM,2BAIlB,GAAIhC,EAAOiB,SAASX,OAAS,EAC3B,MAAM,IAAI0B,MAAM,6BAADlB,OAA8Bd,EAAOiB,SAASX,SAG/D,GAAIue,EAAY7e,IAAW,EACzB,MAAM,IAAIgC,MAAM,wCAIlB,IAAK,IAAI/B,EAAI,EAAGA,EAAID,EAAOiB,SAASX,OAAQL,IAC1C,GAAIkY,EAAK3D,OAAOxU,EAAOiB,SAAShB,GAAID,EAAOiB,UAAUhB,EAAI,GAAKD,EAAOiB,SAASX,SAC5E,MAAM,IAAI0B,MAAM,0BAADlB,OAA2Bd,EAAOiB,SAAShB,KAK9D,IAAK+f,EAAShgB,GACZ,MAAM,IAAIgC,MAAM,wBAWlB,GAPAhC,EAAOiB,SAASlB,SAAQ,SAACiB,GACvB,IAAKA,EAAOiX,MAAMzH,OAAOsB,UACvB,MAAM,IAAI9P,MAAM,wBAADlB,OAAyBE,GAE5C,IAGIhB,EAAOiB,SAASX,OAAS,EAAG,CAC9B,IAAMggB,EAASjf,EAAMrB,GACrBA,EAAOiB,SAASlB,SAAQ,SAACiB,GACvB,IAAMohB,EAAOxS,KAAKkD,IAAIoP,EAAsB5B,EAAQtf,IACpD,GAAIohB,EAAOD,EACT,MAAM,IAAIngB,MAAM,kCAADlB,OAAmCE,EAAM,cAAAF,OAAashB,GAEzE,GACF,CACF,yBC7DA9gB,EAAOC,QAAU,CACf8gB,OAAQ3iB,EAAQ,OAChB4iB,OAAQ5iB,EAAQ,OAChBD,WAAYC,EAAQ,OACpB6iB,MAAO7iB,EAAQ,OACf8iB,aAAc9iB,EAAQ,MACtB+iB,WAAY/iB,EAAQ,OACpBgjB,KAAMhjB,EAAQ,OACdijB,MAAOjjB,EAAQ,OAEfkjB,SAAUljB,EAAQ,OAClBmjB,WAAYnjB,EAAQ,OACpBojB,WAAYpjB,EAAQ,OACpBqjB,MAAOrjB,EAAQ,OACf2D,UAAW3D,EAAQ,OACnBmU,WAAYnU,EAAQ,+BCftB,IAAM+T,EAAO/T,EAAQ,OAEfgU,EAAOhU,EAAQ,OACfyY,EAAOzY,EAAQ,OASfsjB,EAAmB,SAAU3hB,EAAO4hB,GACpCrf,UAAUtD,OAAS,IAErB2iB,EAAc9K,EAAK+K,WAAW/K,EAAK3F,SAAUnR,IAE/C8hB,KAAKtiB,EAAIsX,EAAKmF,UAAUnF,EAAK3F,SAAU2F,EAAKsF,MAAMtF,EAAK3F,SAAUnR,EAAO4hB,IACxEE,KAAKC,EAAIjL,EAAKsF,MAAMtF,EAAK3F,SAAU2Q,KAAKtiB,EAAGQ,GAC3C8hB,KAAK9hB,MAAQA,EACb8hB,KAAKE,YAAclL,EAAKuC,MAAMvC,EAAK3F,SAAUnR,EAAOA,EAAM,GAC5D,EASA2hB,EAAiBM,aAAe,SAAUC,EAASC,GACjD,IACIC,EAAaR,EADXS,EAASH,EAAU,IAAMC,EAE/B,GAAe,QAAXE,EACFD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,SAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,UAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,EAAE,EAAG,EAAG,QACjB,GAAe,SAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,GAAI,EAAG,QACjB,GAAe,SAAXS,EACTD,EAAc,CAAC,EAAG,GAAI,GACtBR,EAAc,EAAE,EAAG,EAAG,QACjB,GAAe,UAAXS,EACTD,EAAc,CAAC,EAAG,GAAI,GACtBR,EAAc,CAAC,GAAI,EAAG,QACjB,GAAe,SAAXS,EACTD,EAAc,CAAC,EAAG,GAAI,GACtBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,QAAXS,EACTD,EAAc,CAAC,EAAG,GAAI,GACtBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,QAAXS,EACTD,EAAc,CAAC,GAAI,EAAG,GACtBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,SAAXS,EACTD,EAAc,CAAC,GAAI,EAAG,GACtBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,UAAXS,EACTD,EAAc,CAAC,GAAI,EAAG,GACtBR,EAAc,EAAE,EAAG,EAAG,QACjB,GAAe,SAAXS,EACTD,EAAc,CAAC,GAAI,EAAG,GACtBR,EAAc,CAAC,EAAG,GAAI,QACjB,GAAe,SAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,EAAE,EAAG,EAAG,QACjB,GAAe,UAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,EAAG,GAAI,QACjB,GAAe,SAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,QAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,QAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,SAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,EAAG,EAAG,QAChB,GAAe,UAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,GAAI,EAAG,QACjB,GAAe,SAAXS,EACTD,EAAc,CAAC,EAAG,EAAG,GACrBR,EAAc,CAAC,EAAG,GAAI,QACjB,GAAe,SAAXS,EACTD,EAAc,EAAE,EAAG,EAAG,GACtBR,EAAc,CAAC,GAAI,EAAG,QACjB,GAAe,UAAXS,EACTD,EAAc,EAAE,EAAG,EAAG,GACtBR,EAAc,CAAC,EAAG,GAAI,QACjB,GAAe,SAAXS,EACTD,EAAc,EAAE,EAAG,EAAG,GACtBR,EAAc,CAAC,EAAG,EAAG,OAChB,IAAe,QAAXS,EAIT,MAAM,IAAI1hB,MAAM,6JAHhByhB,EAAc,EAAE,EAAG,EAAG,GACtBR,EAAc,CAAC,EAAG,EAAG,EAGvB,CACA,OAAO,IAAID,EAAiB,IAAIW,MAAM,IAAIC,SAASH,GAAc,GAAI,IAAIG,SAASX,GACpF,EA+BAD,EAAiBa,QAAU,WACzB,IAAMxiB,EAAQ,IAAIsiB,MAAM,IAAIC,SAAS,CAAC,EAAG,EAAG,IAAK,GACjD,OAAO,IAAIZ,EAAiB3hB,EAAO,IAAIuiB,SAAS,CAAC,EAAG,EAAG,IACzD,EAEAZ,EAAiBc,UAAY,CAE3BC,oBAAqB,WACnB,OAAOtQ,EAAKa,WACV6O,KAAKC,EAAE,GAAID,KAAKtiB,EAAE,GAAIsiB,KAAK9hB,MAAM,GAAI,EACrC8hB,KAAKC,EAAE,GAAID,KAAKtiB,EAAE,GAAIsiB,KAAK9hB,MAAM,GAAI,EACrC8hB,KAAKC,EAAE,GAAID,KAAKtiB,EAAE,GAAIsiB,KAAK9hB,MAAM,GAAI,EACrC,EAAG,GAAI8hB,KAAK9hB,MAAM,GAAI,EAE1B,EAEA2iB,2BAA4B,WAC1B,IAAMrU,EAAIwI,EAAKuC,MAAMvC,EAAK3F,SAAU2Q,KAAK9hB,MAAO8hB,KAAK9hB,MAAM,IAC3D,OAAOoS,EAAKa,WACV6O,KAAKC,EAAE,GAAID,KAAKC,EAAE,GAAID,KAAKC,EAAE,GAAI,EACjCD,KAAKtiB,EAAE,GAAIsiB,KAAKtiB,EAAE,GAAIsiB,KAAKtiB,EAAE,GAAI,EACjCsiB,KAAK9hB,MAAM,GAAI8hB,KAAK9hB,MAAM,GAAI8hB,KAAK9hB,MAAM,GAAI,EAC7CsO,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAI,EAEtB,EAEAsU,KAAM,SAAUrS,GACd,OAAO8B,EAAKY,WAAW6D,EAAK4I,IAAInP,EAAOuR,KAAKC,GAAIjL,EAAK4I,IAAInP,EAAOuR,KAAKtiB,GACvE,EAEAqjB,KAAM,SAAUtS,GACd,IAAMoH,EAAKb,EAAKuC,MAAMvC,EAAK3F,SAAU2Q,KAAKC,EAAGxR,EAAM,IAC7CqH,EAAKd,EAAKuC,MAAMvC,EAAK3F,SAAU2Q,KAAKtiB,EAAG+Q,EAAM,IAE7C6K,EAAKtE,EAAKgD,IAAInC,EAAIA,EAAImK,KAAKE,aAEjC,OADWlL,EAAKgD,IAAIlC,EAAIA,EAAIwD,EAE9B,EAEA0H,WAAY,SAAUC,GACpB,IAAMvR,EAAIuR,EAAOxS,MACXvC,EAAI+U,EAAOC,UAAUC,KAAKzR,GAC1B0R,EAAMpB,KAAKc,KAAKpR,GAChB2R,EAAMrB,KAAKc,KAAK5U,GACtB,OAAOoV,OAAO/P,WAAW6P,EAAKC,EAChC,EAEAE,WAAY,SAAUC,GACpB,IAAM9R,EAAI8R,EAAOC,SACXvV,EAAIsV,EAAON,YAAYC,KAAKzR,GAC5BgS,EAAM1B,KAAKe,KAAKrR,GAChBiS,EAAM3B,KAAKe,KAAK7U,GACtB,OAAO0V,OAAOrQ,WAAWmQ,EAAKC,EAChC,EAEA9Q,UAAW,SAAUgR,GAEnB,IAAMC,EAAW9B,KAAK9hB,MAAM2S,UAAUgR,GAChCE,EAAwB/B,KAAKC,EAAEpP,UAAUgR,GACzCG,EAAoB,IAAIvB,SAAS,EAAG,EAAG,GAAG5P,UAAUgR,GACpDI,EAAqBF,EAAsBG,MAAMF,GAEvD,OADiB,IAAInC,EAAiBiC,EAAUG,EAElD,GAGF9jB,EAAOC,QAAUyhB,qBCxMjB,IA2BM1J,EAAgB,EAAV1J,KAAK0V,GAEjBhkB,EAAOC,QAAU,CACfuc,IAtBU,KAuBVqE,KAhBW,MAiBX7I,IAAAA,EACAiM,kBAjCwB,4BCG1BjkB,EAAOC,QAAU,CACfikB,UAAW9lB,EAAQ,OACnB+lB,MAAO/lB,EAAQ,OACfgmB,MAAOhmB,EAAQ,OACf+T,KAAM/T,EAAQ,OACd2B,MAAO3B,EAAQ,OACfijB,MAAOjjB,EAAQ,OACfgU,KAAMhU,EAAQ,OACdyY,KAAMzY,EAAQ,OACd0hB,KAAM1hB,EAAQ,6BClBhB,IAAM8S,EAAS9S,EAAQ,OAiBvB4B,EAAOC,QARO,SAACokB,GACb,IAAMvT,EAAMI,IAIZ,OAHAJ,EAAI,GAAKuT,EAAK,GACdvT,EAAI,GAAKuT,EAAK,GACdvT,EAAI,GAAKuT,EAAK,GACPvT,CACT,yBCfA,IAAMsB,EAAOhU,EAAQ,OAEf2kB,EAAY3kB,EAAQ,OACpBklB,EAASllB,EAAQ,OAqBvB4B,EAAOC,QAXc,SAACokB,EAAM/T,GAC1B,IAAMgU,EAAOhB,EAAOe,GACdE,EAAMxB,EAAUsB,GAEhB9kB,EAAI6S,EAAK+C,SAAS/C,EAAKlB,SAAUZ,EAAOgU,GACxCxD,EAAO1O,EAAKqN,IAAIlgB,EAAGglB,GAGzB,OAFAnS,EAAKgH,MAAM7Z,EAAGglB,EAAKzD,GACnB1O,EAAKyH,IAAIta,EAAGA,EAAG+kB,GACR/kB,CACT,qBCPAS,EAAOC,QAPM,SAAC6Q,EAAKuT,GAIjB,OAHAvT,EAAI,GAAKuT,EAAK,GACdvT,EAAI,GAAKuT,EAAK,GACdvT,EAAI,GAAKuT,EAAK,GACPvT,CACT,qBCMA9Q,EAAOC,QAFQ,WAAH,MAAS,CAAC,EAAG,EAAG,EAAE,yBCjB9B,IAAMmS,EAAOhU,EAAQ,OAerB4B,EAAOC,QANW,SAACokB,GACjB,IAAMG,EAASpS,EAAK4M,OAAO5M,EAAKlB,SAAUmT,GAE1C,OADAjS,EAAKqS,OAAOD,EAAQA,GACbA,CACT,yBCbA,IAAMpS,EAAOhU,EAAQ,OAgBrB4B,EAAOC,QANiB,SAACokB,EAAM/T,GAC7B,IAAIZ,EAAW0C,EAAKqN,IAAInP,EAAO+T,GAE/B,OADA3U,EAAWpB,KAAKkD,IAAI9B,EAAW2U,EAAK,GAEtC,qBCJArkB,EAAOC,QAFQ,SAACykB,EAAOP,GAAK,OAAMO,EAAM,KAAOP,EAAM,IAAQO,EAAM,KAAOP,EAAM,IAAOO,EAAM,KAAOP,EAAM,EAAI,yBCR9G,IAAM/R,EAAOhU,EAAQ,OAyBrB4B,EAAOC,QAdY,SAAC6Q,EAAKmC,EAAQ0R,GAC/B,IAAMH,EAASpS,EAAK+C,SAAS/C,EAAKlB,SAAUyT,EAAQ1R,GAEpDb,EAAK4M,OAAOwF,EAAQA,GACpBpS,EAAK4J,UAAUwI,EAAQA,GAEvB,IAAM9U,EAAW0C,EAAKqN,IAAIxM,EAAQuR,GAKlC,OAHA1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAKpB,EACFoB,CACT,yBCvBA,IAAMI,EAAS9S,EAAQ,OAmBvB4B,EAAOC,QARY,SAACoZ,EAAGC,EAAGhK,GACxB,IAAMwB,EAAMI,IAIZ,OAHAJ,EAAI,GAAKuI,EACTvI,EAAI,GAAKwI,EACTxI,EAAI,GAAKxB,EACFwB,CACT,yBCZA9Q,EAAOC,QAAU,CACf6D,MAAO1F,EAAQ,KACfwmB,aAAcxmB,EAAQ,OACtBymB,KAAMzmB,EAAQ,OACd8S,OAAQ9S,EAAQ,OAChB2kB,UAAW3kB,EAAQ,OACnB0mB,gBAAiB1mB,EAAQ,OACzB8U,OAAQ9U,EAAQ,OAChBgV,WAAYhV,EAAQ,OACpB4U,WAAY5U,EAAQ,OACpB2mB,sBAAuB3mB,EAAQ,OAC/BklB,OAAQllB,EAAQ,OAChBkV,QAASlV,EAAQ,OACjB+Q,SAAU/Q,EAAQ,OAClBsU,UAAWtU,EAAQ,OACnB4mB,KAAM5mB,EAAQ,+BCpBhB,IAAMgU,EAAOhU,EAAQ,OACb6mB,EAAiB7mB,EAAQ,OAAzB6mB,aAmBRjlB,EAAOC,QALiB,SAACykB,EAAOP,GAC9B,IAAM7T,EAAQ2U,EAAaP,EAAM,GAAIA,EAAM,GAAIP,EAAM,GAAIA,EAAM,GAAIO,EAAM,GAAIP,EAAM,IACnF,OAAO/R,EAAKtO,MAAMwM,EACpB,yBClBA,IAAM8B,EAAOhU,EAAQ,OAYrB4B,EAAOC,QAFQ,SAACokB,GAAI,OAAKjS,EAAKgH,MAAMhH,EAAKlB,SAAUmT,EAAMA,EAAK,GAAG,yBCVjE,IAAMjS,EAAOhU,EAAQ,OAEfymB,EAAOzmB,EAAQ,OACf4U,EAAa5U,EAAQ,OAgB3B4B,EAAOC,QANS,SAAC6Q,EAAKuT,GACpB,IAAMrF,EAAS5M,EAAKqS,OAAOrS,EAAKlB,SAAUmT,GACpC3U,GAAY2U,EAAK,GACvB,OAAOQ,EAAK/T,EAAKkC,EAAWgM,EAAO,GAAIA,EAAO,GAAItP,GACpD,qBCRA1P,EAAOC,QAFU,SAACokB,GAAI,iBAAA7kB,OAAgB6kB,EAAK,GAAGa,QAAQ,GAAE,MAAA1lB,OAAK6kB,EAAK,GAAGa,QAAQ,GAAE,MAAA1lB,OAAK6kB,EAAK,GAAGa,QAAQ,GAAE,6BCPtG,IAAM9S,EAAOhU,EAAQ,OAEfgV,EAAahV,EAAQ,OACrBklB,EAASllB,EAAQ,OACjB2kB,EAAY3kB,EAAQ,OAqB1B4B,EAAOC,QAVW,SAAC6Q,EAAKuT,EAAM5N,GAC5B,IAAM0O,EAAM7B,EAAOe,GACbE,EAAMxB,EAAUsB,GAKtB,OAHAjS,EAAKM,UAAUyS,EAAKA,EAAK1O,GACzBrE,EAAKM,UAAU6R,EAAKA,EAAK9N,GAElBrD,EAAWtC,EAAKqU,EAAKZ,EAC9B,yBCvBA,IAAMjB,EAASllB,EAAQ,OAqBvB4B,EAAOC,QATM,SAACokB,EAAM/K,GAClB,IAAID,GAAKgL,EAAK,GAAMA,EAAK,GAAK/K,GAAM+K,EAAK,GACrCnV,OAAOkW,MAAM/L,KAEfA,EADYiK,EAAOe,GACX,IAEV,OAAOhL,CACT,wBCnBA,IAAMxC,EAAOzY,EAAQ,OAEf8S,EAAS9S,EAAQ,OAgBvB4B,EAAOC,QAPO,SAACokB,GACb,IAAMvT,EAAMI,IAGZ,OAFA2F,EAAKgO,KAAK/T,EAAI,GAAIuT,EAAK,IACvBxN,EAAKgO,KAAK/T,EAAI,GAAIuT,EAAK,IAChBvT,CACT,yBChBA,IAAM+F,EAAOzY,EAAQ,OAuBrB4B,EAAOC,QAbc,SAACokB,EAAM/T,GAC1B,IAAM+U,EAAShB,EAAK,GACdiB,EAAajB,EAAK,GAIlB5V,EAFIoI,EAAK4I,IAAI5I,EAAK1B,SAAS0B,EAAK3F,SAAUZ,EAAO+U,GAASC,GACtDzO,EAAK4I,IAAI6F,EAAYA,GAGzBC,EAAe1O,EAAKuC,MAAMvC,EAAK3F,SAAUoU,EAAY7W,GAE3D,OADAoI,EAAKgD,IAAI0L,EAAcA,EAAcF,GAC9BE,CACT,yBCrBA,IAAM1O,EAAOzY,EAAQ,OAgBrB4B,EAAOC,QANM,SAAC6Q,EAAKuT,GAGjB,OAFAxN,EAAKgO,KAAK/T,EAAI,GAAIuT,EAAK,IACvBxN,EAAKgO,KAAK/T,EAAI,GAAIuT,EAAK,IAChBvT,CACT,yBCdA,IAAM+F,EAAOzY,EAAQ,OAsBrB4B,EAAOC,QALQ,WAAH,MAAS,CACnB4W,EAAK7D,WAAW,EAAG,EAAG,GACtB6D,EAAK7D,WAAW,EAAG,EAAG,GACvB,qBCXDhT,EAAOC,QAFW,SAACokB,GAAI,OAAKA,EAAK,EAAE,yBCPnC,IAAMxN,EAAOzY,EAAQ,OAEfwmB,EAAexmB,EAAQ,OAgB7B4B,EAAOC,QANiB,SAACokB,EAAM/T,GAC7B,IAAMkV,EAAUZ,EAAaP,EAAM/T,GAC7BmV,EAAiB5O,EAAK1B,SAAS0B,EAAK3F,SAAUZ,EAAOkV,GAC3D,OAAO3O,EAAK7X,OAAOymB,EACrB,yBChBA,IAAM5O,EAAOzY,EAAQ,OAwBrB4B,EAAOC,QAdQ,SAACykB,EAAOP,GAErB,QAAKtN,EAAK3D,OAAOwR,EAAM,GAAIP,EAAM,OAG5BtN,EAAK3D,OAAOwR,EAAM,GAAIP,EAAM,GAOnC,yBCtBA,IAAMtN,EAAOzY,EAAQ,OACb6mB,EAAiB7mB,EAAQ,OAAzB6mB,aAEAzI,EAAQpe,EAAQ,OAAhBoe,IAEFkJ,EAAwBtnB,EAAQ,OAyCtC4B,EAAOC,QA9BY,SAAC6Q,EAAK6U,EAAQC,GAC/B,IAAI7C,EAAYlM,EAAKsF,MAAMtF,EAAK3F,SAAUyU,EAAQC,GAC9C5mB,EAAS6X,EAAK7X,OAAO+jB,GACzB,GAAI/jB,EAASwd,EACX,MAAM,IAAI9b,MAAM,oCAElB1B,EAAU,EAAMA,EAChB+jB,EAAYlM,EAAKuC,MAAM2J,EAAWA,EAAW/jB,GAE7C,IAGIskB,EACA3V,EAJEkY,EAAOvX,KAAKkD,IAAIuR,EAAU,IAC1B+C,EAAOxX,KAAKkD,IAAIuR,EAAU,IAC1BgD,EAAOzX,KAAKkD,IAAIuR,EAAU,IAgBhC,OAbK8C,GAAQC,GAAUD,GAAQE,GAE7BpY,EAAIsX,EAAaU,EAAO,GAAIA,EAAO,GAAIC,EAAO,GAAIA,EAAO,GAAID,EAAO,GAAIC,EAAO,IAC/EtC,EAASzM,EAAK7D,WAAW,EAAGrF,EAAE,GAAIA,EAAE,KAC1BmY,GAAQD,GAAUC,GAAQC,GAEpCpY,EAAIsX,EAAaU,EAAO,GAAIA,EAAO,GAAIC,EAAO,GAAIA,EAAO,GAAID,EAAO,GAAIC,EAAO,IAC/EtC,EAASzM,EAAK7D,WAAWrF,EAAE,GAAI,EAAGA,EAAE,MAGpCA,EAAIsX,EAAaU,EAAO,GAAIA,EAAO,GAAIC,EAAO,GAAIA,EAAO,GAAID,EAAO,GAAIC,EAAO,IAC/EtC,EAASzM,EAAK7D,WAAWrF,EAAE,GAAIA,EAAE,GAAI,IAEhC+X,EAAsB5U,EAAKwS,EAAQP,EAC5C,yBC5CA,IAAMlM,EAAOzY,EAAQ,OAwBrB4B,EAAOC,QARuB,SAAC6Q,EAAKR,EAAOyS,GACzC,IAAMiD,EAAOnP,EAAKmF,UAAUnF,EAAK3F,SAAU6R,GAI3C,OAFAlM,EAAKgO,KAAK/T,EAAI,GAAIR,GAClBuG,EAAKgO,KAAK/T,EAAI,GAAIkV,GACXlV,CACT,yBCtBA,IAAM+F,EAAOzY,EAAQ,OAEfsnB,EAAwBtnB,EAAQ,OAgBtC4B,EAAOC,QALY,SAAC6Q,EAAKmC,EAAQ0R,GAC/B,IAAM5B,EAAYlM,EAAK1B,SAAS0B,EAAK3F,SAAUyT,EAAQ1R,GACvD,OAAOyS,EAAsB5U,EAAKmC,EAAQ8P,EAC5C,yBCXA/iB,EAAOC,QAAU,CACf6D,MAAO1F,EAAQ,MACfwmB,aAAcxmB,EAAQ,OACtBymB,KAAMzmB,EAAQ,OACd8S,OAAQ9S,EAAQ,OAChB2kB,UAAW3kB,EAAQ,OACnB0mB,gBAAiB1mB,EAAQ,OACzB8U,OAAQ9U,EAAQ,OAChB6nB,WAAY7nB,EAAQ,OACpBsnB,sBAAuBtnB,EAAQ,OAC/BgV,WAAYhV,EAAQ,OACpB8nB,6BAA8B9nB,EAAQ,OACtCklB,OAAQllB,EAAQ,OAChBkV,QAASlV,EAAQ,OACjB+Q,SAAU/Q,EAAQ,OAClBsU,UAAWtU,EAAQ,+BCpBrB,IAAMyY,EAAOzY,EAAQ,OA4BrB4B,EAAOC,QAfkB,SAACokB,EAAMtkB,GAE9B,IAAMomB,EAAUpmB,EACVqmB,EAAKrmB,EAAM,GAEXslB,EAAShB,EAAK,GACdiB,EAAajB,EAAK,GAGlBgC,GAASD,EAAKvP,EAAK4I,IAAI0G,EAASd,IAAWxO,EAAK4I,IAAI0G,EAASb,GAGnE,OADczO,EAAKgD,IAAIhD,EAAK3F,SAAUmU,EAAQxO,EAAKuC,MAAMvC,EAAK3F,SAAUoU,EAAYe,GAEtF,qBCjBArmB,EAAOC,QAFQ,SAACokB,GAAI,OAAKA,EAAK,EAAE,yBCPhC,IAAMxN,EAAOzY,EAAQ,OAEfsnB,EAAwBtnB,EAAQ,OAgBtC4B,EAAOC,QANS,SAAC6Q,EAAKuT,GACpB,IAAM/T,EAAQuG,EAAK/S,MAAMugB,EAAK,IACxBtB,EAAYlM,EAAK4N,OAAO5N,EAAK3F,SAAUmT,EAAK,IAClD,OAAOqB,EAAsB5U,EAAKR,EAAOyS,EAC3C,qBCHA/iB,EAAOC,QANU,SAACokB,GAChB,IAAM/T,EAAQ+T,EAAK,GACbtB,EAAYsB,EAAK,GACvB,MAAO,kBAAP7kB,OAAyB8Q,EAAM,GAAG4U,QAAQ,GAAE,MAAA1lB,OAAK8Q,EAAM,GAAG4U,QAAQ,GAAE,MAAA1lB,OAAK8Q,EAAM,GAAG4U,QAAQ,GAAE,kBAAA1lB,OAAiBujB,EAAU,GAAGmC,QAAQ,GAAE,MAAA1lB,OAAKujB,EAAU,GAAGmC,QAAQ,GAAE,MAAA1lB,OAAKujB,EAAU,GAAGmC,QAAQ,GAAE,IAC9L,yBCXA,IAAMrO,EAAOzY,EAAQ,OAEfsnB,EAAwBtnB,EAAQ,OAuBtC4B,EAAOC,QAZW,SAAC6Q,EAAKuT,EAAM5N,GAC5B,IAAMnG,EAAQ+T,EAAK,GACbtB,EAAYsB,EAAK,GACjBiC,EAAqBzP,EAAKgD,IAAIhD,EAAK3F,SAAUZ,EAAOyS,GAEpDwD,EAAW1P,EAAKnE,UAAUmE,EAAK3F,SAAUZ,EAAOmG,GAChD+P,EAAwB3P,EAAKnE,UAAU4T,EAAoBA,EAAoB7P,GAC/EgQ,EAAe5P,EAAK1B,SAASqR,EAAuBA,EAAuBD,GAEjF,OAAOb,EAAsB5U,EAAKyV,EAAUE,EAC9C,qBCMAzmB,EAAOC,QApBK,SAAC6Q,EAAKS,EAAGxD,GAiBnB,OAhBA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACb+C,CACT,yBC3BA,IAAMI,EAAS9S,EAAQ,OA8BvB4B,EAAOC,QArBO,SAACwW,GACb,IAAM3F,EAAMI,IAiBZ,OAhBAJ,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACV3F,CACT,qBCAA9Q,EAAOC,QApBM,SAAC6Q,EAAK2F,GAiBjB,OAhBA3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACV3F,CACT,qBCPA9Q,EAAOC,QAPQ,WAAH,MAAS,CACnB,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACT,EAAG,EAAG,EAAG,EACV,mBCFDD,EAAOC,QAPQ,SAACsR,EAAGxD,GAAC,OAClBwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,IAC9DwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,IAC9DwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,MAAQxD,EAAE,KAAOwD,EAAE,MAAQxD,EAAE,KACjEwD,EAAE,MAAQxD,EAAE,KAAOwD,EAAE,MAAQxD,EAAE,KAAOwD,EAAE,MAAQxD,EAAE,KAAOwD,EAAE,MAAQxD,EAAE,GAAG,gDCZlEyO,EAAQpe,EAAQ,OAAhBoe,IAERxa,EAAqB5D,EAAQ,OAArB8a,EAAGlX,EAAHkX,IAAKF,EAAGhX,EAAHgX,IAEP0N,EAAWtoB,EAAQ,OAuDzB4B,EAAOC,QAtCc,SAAC6Q,EAAK6V,EAAKC,GAC9B,IAAAC,EAAAhR,EAAgB+Q,EAAI,GAAfvN,EAACwN,EAAA,GAAEvN,EAACuN,EAAA,GAAErG,EAACqG,EAAA,GACNC,EAAgBzN,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,EAE1C,GAAIlS,KAAKkD,IAAIsV,GAAiBtK,EAE5B,OAAOkK,EAAS5V,GAGlB,IAAMiW,EAAM,EAAIzY,KAAKoD,KAAKoV,GAC1BzN,GAAK0N,EACLzN,GAAKyN,EACLvG,GAAKuG,EAEL,IAAM1jB,EAAI6V,EAAIyN,GACRhW,EAAIqI,EAAI2N,GACRlY,EAAI,EAAIkC,EAmBd,OAhBAG,EAAI,GAAKuI,EAAIA,EAAI5K,EAAIkC,EACrBG,EAAI,GAAKwI,EAAID,EAAI5K,EAAI+R,EAAInd,EACzByN,EAAI,GAAK0P,EAAInH,EAAI5K,EAAI6K,EAAIjW,EACzByN,EAAI,GAAK,EACTA,EAAI,GAAKuI,EAAIC,EAAI7K,EAAI+R,EAAInd,EACzByN,EAAI,GAAKwI,EAAIA,EAAI7K,EAAIkC,EACrBG,EAAI,GAAK0P,EAAIlH,EAAI7K,EAAI4K,EAAIhW,EACzByN,EAAI,GAAK,EACTA,EAAI,GAAKuI,EAAImH,EAAI/R,EAAI6K,EAAIjW,EACzByN,EAAI,GAAKwI,EAAIkH,EAAI/R,EAAI4K,EAAIhW,EACzByN,EAAI,IAAM0P,EAAIA,EAAI/R,EAAIkC,EACtBG,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,qBCvBA9Q,EAAOC,QApBa,SAAC6Q,EAAK0T,GAiBxB,OAhBA1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM0T,EAAO,GACjB1T,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,yBChCA,IAAAhP,EAAqB1D,EAAQ,OAArB8a,EAAGpX,EAAHoX,IAAKF,EAAGlX,EAAHkX,IAsDbhZ,EAAOC,QArCuB,SAAC6Q,EAAKkW,EAAKC,EAAOC,GAE9C,IAAMC,EAAKjO,EAAI8N,GACTI,EAAKpO,EAAIgO,GACTK,EAAKnO,EAAI+N,GACTK,EAAKtO,EAAIiO,GACTM,EAAKrO,EAAIgO,GACTM,EAAKxO,EAAIkO,GA2Bf,OAhBApW,EAAI,GAAKwW,EAAKF,EACdtW,EAAI,GAAKwW,EAAKH,EACdrW,EAAI,IAAMuW,EACVvW,EAAI,GAAK,EACTA,EAAI,GAAKyW,EAAKF,EAAKD,EAAKI,EAAKL,EAC7BrW,EAAI,GAAK0W,EAAKJ,EAAKG,EAAKF,EAAKF,EAC7BrW,EAAI,GAAKyW,EAAKD,EACdxW,EAAI,GAAK,EACTA,EAAI,GAAKyW,EAAKJ,EAAKK,EAAKH,EAAKD,EAC7BtW,EAAI,GAAK0W,EAAKH,EAAKF,EAAKI,EAAKH,EAC7BtW,EAAI,IAAM0W,EAAKF,EACfxW,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,qBClBA9Q,EAAOC,QApBiB,SAAC6Q,EAAK0T,GAiB5B,OAhBA1T,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM0T,EAAO,GACjB1T,EAAI,IAAM0T,EAAO,GACjB1T,EAAI,IAAM0T,EAAO,GACjB1T,EAAI,IAAM,EACHA,CACT,yBChCA,IAAMI,EAAS9S,EAAQ,OAoDvB4B,EAAOC,QArBY,SAACwnB,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,EAAKC,GAC7F,IAAM1X,EAAMI,IAiBZ,OAhBAJ,EAAI,GAAK2W,EACT3W,EAAI,GAAK4W,EACT5W,EAAI,GAAK6W,EACT7W,EAAI,GAAK8W,EACT9W,EAAI,GAAK+W,EACT/W,EAAI,GAAKgX,EACThX,EAAI,GAAKiX,EACTjX,EAAI,GAAKkX,EACTlX,EAAI,GAAKmX,EACTnX,EAAI,GAAKoX,EACTpX,EAAI,IAAMqX,EACVrX,EAAI,IAAMsX,EACVtX,EAAI,IAAMuX,EACVvX,EAAI,IAAMwX,EACVxX,EAAI,IAAMyX,EACVzX,EAAI,IAAM0X,EACH1X,CACT,yBClDA,IAAM+F,EAAOzY,EAAQ,OAEfqqB,EAAerqB,EAAQ,OA8C7B4B,EAAOC,QA/BoB,SAAC6Q,EAAK4X,EAAQC,GACvC,IAAMC,EAAe/R,EAAKmF,UAAUnF,EAAK3F,SAAUwX,GAC7CG,EAAehS,EAAKmF,UAAUnF,EAAK3F,SAAUyX,GAE7C/B,EAAO/P,EAAKsF,MAAMtF,EAAK3F,SAAU2X,EAAcD,GAC/CE,EAAOjS,EAAK4I,IAAIoJ,EAAcD,GACpC,IAAc,IAAVE,EAAe,OAAOL,EAAa3X,EAAKxC,KAAK0V,GAAInN,EAAK+K,WAAWgF,EAAMgC,IAE3E,IAAMpN,EAAI,GAAK,EAAIsN,GAoBnB,OAnBAhY,EAAI,GAAM8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKsN,EACnChY,EAAI,GAAM8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKoL,EAAK,GACxC9V,EAAI,GAAM8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKoL,EAAK,GACxC9V,EAAI,GAAK,EAETA,EAAI,GAAM8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKoL,EAAK,GACxC9V,EAAI,GAAM8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKsN,EACnChY,EAAI,GAAM8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKoL,EAAK,GACxC9V,EAAI,GAAK,EAETA,EAAI,GAAM8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKoL,EAAK,GACxC9V,EAAI,GAAM8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKoL,EAAK,GACxC9V,EAAI,IAAO8V,EAAK,GAAKA,EAAK,GAAKpL,EAAKsN,EACpChY,EAAI,IAAM,EAEVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,yBC9CA,IAAAhP,EAAqB1D,EAAQ,OAArB8a,EAAGpX,EAAHoX,IAAKF,EAAGlX,EAAHkX,IAwCbhZ,EAAOC,QAxBe,SAAC6Q,EAAKiY,GAC1B,IAAM1lB,EAAI6V,EAAI6P,GACRpY,EAAIqI,EAAI+P,GAmBd,OAhBAjY,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKH,EACTG,EAAI,GAAKzN,EACTyN,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAMzN,EACVyN,EAAI,IAAMH,EACVG,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,yBCtCA,IAAAhP,EAAqB1D,EAAQ,OAArB8a,EAAGpX,EAAHoX,IAAKF,EAAGlX,EAAHkX,IAwCbhZ,EAAOC,QAxBe,SAAC6Q,EAAKiY,GAC1B,IAAM1lB,EAAI6V,EAAI6P,GACRpY,EAAIqI,EAAI+P,GAmBd,OAhBAjY,EAAI,GAAKH,EACTG,EAAI,GAAK,EACTA,EAAI,IAAMzN,EACVyN,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKzN,EACTyN,EAAI,GAAK,EACTA,EAAI,IAAMH,EACVG,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,yBCtCA,IAAAhP,EAAqB1D,EAAQ,OAArB8a,EAAGpX,EAAHoX,IAAKF,EAAGlX,EAAHkX,IAwCbhZ,EAAOC,QAxBe,SAAC6Q,EAAKiY,GAC1B,IAAM1lB,EAAI6V,EAAI6P,GACRpY,EAAIqI,EAAI+P,GAmBd,OAhBAjY,EAAI,GAAKH,EACTG,EAAI,GAAKzN,EACTyN,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAMzN,EACVyN,EAAI,GAAKH,EACTG,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,qBCXA9Q,EAAOC,QApBU,SAAC6Q,GAiBhB,OAhBAA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,yBCpBA9Q,EAAOC,QAAU,CACf4Z,IAAKzb,EAAQ,OACb0F,MAAO1F,EAAQ,OACfymB,KAAMzmB,EAAQ,OACd8S,OAAQ9S,EAAQ,OAChB8Y,OAAQ9Y,EAAQ,OAChB8U,OAAQ9U,EAAQ,KAChBqqB,aAAcrqB,EAAQ,OACtB4qB,YAAa5qB,EAAQ,OACrB6qB,sBAAuB7qB,EAAQ,OAC/B8qB,gBAAiB9qB,EAAQ,OACzB4U,WAAY5U,EAAQ,OACpB+qB,mBAAoB/qB,EAAQ,OAC5BgrB,cAAehrB,EAAQ,OACvBirB,cAAejrB,EAAQ,OACvBkrB,cAAelrB,EAAQ,OACvBsoB,SAAUtoB,EAAQ,OAClBkU,WAAYlU,EAAQ,OACpBmrB,qBAAsBnrB,EAAQ,OAC9BuiB,YAAaviB,EAAQ,OACrBorB,cAAeprB,EAAQ,MACvBsY,SAAUtY,EAAQ,OAClBqrB,OAAQrrB,EAAQ,OAChBsrB,QAAStrB,EAAQ,OACjBurB,QAASvrB,EAAQ,OACjBwrB,QAASxrB,EAAQ,OACjBgb,MAAOhb,EAAQ,OACf+W,SAAU/W,EAAQ,MAClB+Q,SAAU/Q,EAAQ,OAClByrB,UAAWzrB,EAAQ,2BCoCrB4B,EAAOC,QA5DQ,SAAC6Q,EAAK2F,GACnB,IAAMqT,EAAMrT,EAAO,GACbsT,EAAMtT,EAAO,GACbuT,EAAMvT,EAAO,GACbwT,EAAMxT,EAAO,GACbyT,EAAMzT,EAAO,GACb0T,EAAM1T,EAAO,GACb2T,EAAM3T,EAAO,GACb4T,EAAM5T,EAAO,GACb6T,EAAM7T,EAAO,GACb8T,EAAM9T,EAAO,GACb+T,EAAM/T,EAAO,IACbgU,EAAMhU,EAAO,IACbiU,EAAMjU,EAAO,IACbkU,EAAMlU,EAAO,IACbmU,EAAMnU,EAAO,IACboU,EAAMpU,EAAO,IAEbqU,EAAMhB,EAAMK,EAAMJ,EAAMG,EACxBa,EAAMjB,EAAMM,EAAMJ,EAAME,EACxBc,EAAMlB,EAAMO,EAAMJ,EAAMC,EACxBe,EAAMlB,EAAMK,EAAMJ,EAAMG,EACxBe,EAAMnB,EAAMM,EAAMJ,EAAME,EACxBgB,EAAMnB,EAAMK,EAAMJ,EAAMG,EACxBgB,EAAMd,EAAMK,EAAMJ,EAAMG,EACxBW,EAAMf,EAAMM,EAAMJ,EAAME,EACxBY,EAAMhB,EAAMO,EAAMJ,EAAMC,EACxBa,EAAMhB,EAAMK,EAAMJ,EAAMG,EACxBa,EAAMjB,EAAMM,EAAMJ,EAAME,EACxBc,EAAMjB,EAAMK,EAAMJ,EAAMG,EAG1Bc,EACFZ,EAAMW,EAAMV,EAAMS,EAAMR,EAAMO,EAAMN,EAAMK,EAAMJ,EAAMG,EAAMF,EAAMC,EAEpE,OAAKM,GAGLA,EAAM,EAAMA,EAEZ5a,EAAI,IAAMqZ,EAAMsB,EAAMrB,EAAMoB,EAAMnB,EAAMkB,GAAOG,EAC/C5a,EAAI,IAAMkZ,EAAMwB,EAAMzB,EAAM0B,EAAMxB,EAAMsB,GAAOG,EAC/C5a,EAAI,IAAM6Z,EAAMQ,EAAMP,EAAMM,EAAML,EAAMI,GAAOS,EAC/C5a,EAAI,IAAM0Z,EAAMU,EAAMX,EAAMY,EAAMV,EAAMQ,GAAOS,EAC/C5a,EAAI,IAAMsZ,EAAMkB,EAAMpB,EAAMuB,EAAMpB,EAAMgB,GAAOK,EAC/C5a,EAAI,IAAMgZ,EAAM2B,EAAMzB,EAAMsB,EAAMrB,EAAMoB,GAAOK,EAC/C5a,EAAI,IAAM8Z,EAAMI,EAAMN,EAAMS,EAAMN,EAAME,GAAOW,EAC/C5a,EAAI,IAAMwZ,EAAMa,EAAMX,EAAMQ,EAAMP,EAAMM,GAAOW,EAC/C5a,EAAI,IAAMoZ,EAAMsB,EAAMrB,EAAMmB,EAAMjB,EAAMe,GAAOM,EAC/C5a,EAAI,IAAMiZ,EAAMuB,EAAMxB,EAAM0B,EAAMvB,EAAMmB,GAAOM,EAC/C5a,EAAI,KAAO4Z,EAAMQ,EAAMP,EAAMK,EAAMH,EAAMC,GAAOY,EAChD5a,EAAI,KAAOyZ,EAAMS,EAAMV,EAAMY,EAAMT,EAAMK,GAAOY,EAChD5a,EAAI,KAAOqZ,EAAMkB,EAAMnB,EAAMqB,EAAMnB,EAAMgB,GAAOM,EAChD5a,EAAI,KAAOgZ,EAAMyB,EAAMxB,EAAMsB,EAAMrB,EAAMoB,GAAOM,EAChD5a,EAAI,KAAO6Z,EAAMI,EAAML,EAAMO,EAAML,EAAME,GAAOY,EAChD5a,EAAI,KAAOwZ,EAAMW,EAAMV,EAAMQ,EAAMP,EAAMM,GAAOY,EAEzC5a,GArBE,IAsBX,qBCjDA9Q,EAAOC,QAPY,SAACwW,GAAM,OACV,IAAdA,EAAO,IAA0B,IAAdA,EAAO,IAA0B,IAAdA,EAAO,IAA0B,IAAdA,EAAO,IAClD,IAAdA,EAAO,IAA0B,IAAdA,EAAO,IAA0B,IAAdA,EAAO,IAA0B,IAAdA,EAAO,IAClD,IAAdA,EAAO,IAA0B,IAAdA,EAAO,IAA2B,IAAfA,EAAO,KAA4B,IAAfA,EAAO,KAClD,IAAfA,EAAO,KAA4B,IAAfA,EAAO,KAA4B,IAAfA,EAAO,KAA4B,IAAfA,EAAO,GAAS,qBCO9EzW,EAAOC,QAhBa,SAACwW,GAQnB,IAAM4C,EAAI5C,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC/C6C,EAAI7C,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAC/C+J,EAAI/J,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAGrD,OADU4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,GAAK+J,EAAI/J,EAAO,IACzC,CACd,qBCZA,IAUMkV,EAAS,SAACC,GAAG,OAAKtd,KAAKkD,IAAIoa,GAAO1c,OAAO2c,OAAO,EAEtD7rB,EAAOC,QAZsB,SAACwW,GAAM,OAIlCkV,EAAOlV,EAAO,KAAOkV,EAAOlV,EAAO,KAAOkV,EAAOlV,EAAO,KACxDkV,EAAOlV,EAAO,KAAOkV,EAAOlV,EAAO,KAAOkV,EAAOlV,EAAO,KACxDkV,EAAOlV,EAAO,KAAOkV,EAAOlV,EAAO,KAAOkV,EAAOlV,EAAO,MACzC,IAAfA,EAAO,GAAS,+CCelBzW,EAAOC,QAvBe,SAAC6Q,EAAK/Q,GAC1B,IAAA+rB,EAAAjW,EAAwB9V,EAAK,GAAtBgsB,EAAED,EAAA,GAAEE,EAAEF,EAAA,GAAEG,EAAEH,EAAA,GAAEI,EAACJ,EAAA,GAmBpB,OAjBAhb,EAAI,GAAM,EAAM,EAAMib,EAAKA,EAC3Bjb,EAAI,IAAO,EAAMkb,EAAKD,EACtBjb,EAAI,IAAO,EAAMmb,EAAKF,EACtBjb,EAAI,GAAK,EACTA,EAAI,IAAO,EAAMib,EAAKC,EACtBlb,EAAI,GAAM,EAAM,EAAMkb,EAAKA,EAC3Blb,EAAI,IAAO,EAAMmb,EAAKD,EACtBlb,EAAI,GAAK,EACTA,EAAI,IAAO,EAAMib,EAAKE,EACtBnb,EAAI,IAAO,EAAMkb,EAAKC,EACtBnb,EAAI,IAAO,EAAM,EAAMmb,EAAKA,EAC5Bnb,EAAI,IAAM,EACVA,EAAI,IAAO,EAAMib,EAAKG,EACtBpb,EAAI,IAAO,EAAMkb,EAAKE,EACtBpb,EAAI,IAAO,EAAMmb,EAAKC,EACtBpb,EAAI,IAAM,EAEHA,CACT,qBCqCA9Q,EAAOC,QAzDU,SAAC6Q,EAAKS,EAAGxD,GACxB,IAAM+b,EAAMvY,EAAE,GACRwY,EAAMxY,EAAE,GACRyY,EAAMzY,EAAE,GACR0Y,EAAM1Y,EAAE,GACR2Y,EAAM3Y,EAAE,GACR4Y,EAAM5Y,EAAE,GACR6Y,EAAM7Y,EAAE,GACR8Y,EAAM9Y,EAAE,GACR+Y,EAAM/Y,EAAE,GACRgZ,EAAMhZ,EAAE,GACRiZ,EAAMjZ,EAAE,IACRkZ,EAAMlZ,EAAE,IACRmZ,EAAMnZ,EAAE,IACRoZ,EAAMpZ,EAAE,IACRqZ,EAAMrZ,EAAE,IACRsZ,EAAMtZ,EAAE,IAGV4a,EAAKpe,EAAE,GACPqe,EAAKre,EAAE,GACPse,EAAKte,EAAE,GACPue,EAAKve,EAAE,GAgCX,OA/BA+C,EAAI,GAAKqb,EAAKrC,EAAMsC,EAAKlC,EAAMmC,EAAK/B,EAAMgC,EAAK5B,EAC/C5Z,EAAI,GAAKqb,EAAKpC,EAAMqC,EAAKjC,EAAMkC,EAAK9B,EAAM+B,EAAK3B,EAC/C7Z,EAAI,GAAKqb,EAAKnC,EAAMoC,EAAKhC,EAAMiC,EAAK7B,EAAM8B,EAAK1B,EAC/C9Z,EAAI,GAAKqb,EAAKlC,EAAMmC,EAAK/B,EAAMgC,EAAK5B,EAAM6B,EAAKzB,EAE/CsB,EAAKpe,EAAE,GACPqe,EAAKre,EAAE,GACPse,EAAKte,EAAE,GACPue,EAAKve,EAAE,GACP+C,EAAI,GAAKqb,EAAKrC,EAAMsC,EAAKlC,EAAMmC,EAAK/B,EAAMgC,EAAK5B,EAC/C5Z,EAAI,GAAKqb,EAAKpC,EAAMqC,EAAKjC,EAAMkC,EAAK9B,EAAM+B,EAAK3B,EAC/C7Z,EAAI,GAAKqb,EAAKnC,EAAMoC,EAAKhC,EAAMiC,EAAK7B,EAAM8B,EAAK1B,EAC/C9Z,EAAI,GAAKqb,EAAKlC,EAAMmC,EAAK/B,EAAMgC,EAAK5B,EAAM6B,EAAKzB,EAE/CsB,EAAKpe,EAAE,GACPqe,EAAKre,EAAE,GACPse,EAAKte,EAAE,IACPue,EAAKve,EAAE,IACP+C,EAAI,GAAKqb,EAAKrC,EAAMsC,EAAKlC,EAAMmC,EAAK/B,EAAMgC,EAAK5B,EAC/C5Z,EAAI,GAAKqb,EAAKpC,EAAMqC,EAAKjC,EAAMkC,EAAK9B,EAAM+B,EAAK3B,EAC/C7Z,EAAI,IAAMqb,EAAKnC,EAAMoC,EAAKhC,EAAMiC,EAAK7B,EAAM8B,EAAK1B,EAChD9Z,EAAI,IAAMqb,EAAKlC,EAAMmC,EAAK/B,EAAMgC,EAAK5B,EAAM6B,EAAKzB,EAEhDsB,EAAKpe,EAAE,IACPqe,EAAKre,EAAE,IACPse,EAAKte,EAAE,IACPue,EAAKve,EAAE,IACP+C,EAAI,IAAMqb,EAAKrC,EAAMsC,EAAKlC,EAAMmC,EAAK/B,EAAMgC,EAAK5B,EAChD5Z,EAAI,IAAMqb,EAAKpC,EAAMqC,EAAKjC,EAAMkC,EAAK9B,EAAM+B,EAAK3B,EAChD7Z,EAAI,IAAMqb,EAAKnC,EAAMoC,EAAKhC,EAAMiC,EAAK7B,EAAM8B,EAAK1B,EAChD9Z,EAAI,IAAMqb,EAAKlC,EAAMmC,EAAK/B,EAAMgC,EAAK5B,EAAM6B,EAAKzB,EACzC/Z,CACT,gDChEQ0L,EAAQpe,EAAQ,OAAhBoe,IAERxa,EAAqB5D,EAAQ,OAArB8a,EAAGlX,EAAHkX,IAAKF,EAAGhX,EAAHgX,IAEP6L,EAAOzmB,EAAQ,OA6ErB4B,EAAOC,QAjEQ,SAAC6Q,EAAK2F,EAAQsS,EAASnC,GACpC,IAAAC,EAAAhR,EAAgB+Q,EAAI,GAAfvN,EAACwN,EAAA,GAAEvN,EAACuN,EAAA,GAAErG,EAACqG,EAAA,GACNC,EAAgBzN,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,EAE1C,GAAIlS,KAAKkD,IAAIsV,GAAiBtK,EAE5B,OAAOqI,EAAK/T,EAAK2F,GAGnB,IAAMsQ,EAAM,EAAIzY,KAAKoD,KAAKoV,GAC1BzN,GAAK0N,EACLzN,GAAKyN,EACLvG,GAAKuG,EAEL,IAAM1jB,EAAI6V,EAAI6P,GACRpY,EAAIqI,EAAI+P,GACRta,EAAI,EAAIkC,EAERmZ,EAAMrT,EAAO,GACbsT,EAAMtT,EAAO,GACbuT,EAAMvT,EAAO,GACbwT,EAAMxT,EAAO,GACbyT,EAAMzT,EAAO,GACb0T,EAAM1T,EAAO,GACb2T,EAAM3T,EAAO,GACb4T,EAAM5T,EAAO,GACb6T,EAAM7T,EAAO,GACb8T,EAAM9T,EAAO,GACb+T,EAAM/T,EAAO,IACbgU,EAAMhU,EAAO,IAGbqU,EAAMzR,EAAIA,EAAI5K,EAAIkC,EAClBoa,EAAMzR,EAAID,EAAI5K,EAAI+R,EAAInd,EACtB2nB,EAAMxK,EAAInH,EAAI5K,EAAI6K,EAAIjW,EACtBmoB,EAAMnS,EAAIC,EAAI7K,EAAI+R,EAAInd,EACtBooB,EAAMnS,EAAIA,EAAI7K,EAAIkC,EAClB4b,EAAM/L,EAAIlH,EAAI7K,EAAI4K,EAAIhW,EACtBmpB,EAAMnT,EAAImH,EAAI/R,EAAI6K,EAAIjW,EACtBopB,EAAMnT,EAAIkH,EAAI/R,EAAI4K,EAAIhW,EACtBqpB,EAAMlM,EAAIA,EAAI/R,EAAIkC,EAsBxB,OAnBAG,EAAI,GAAKgZ,EAAMgB,EAAMZ,EAAMa,EAAMT,EAAMU,EACvCla,EAAI,GAAKiZ,EAAMe,EAAMX,EAAMY,EAAMR,EAAMS,EACvCla,EAAI,GAAKkZ,EAAMc,EAAMV,EAAMW,EAAMP,EAAMQ,EACvCla,EAAI,GAAKmZ,EAAMa,EAAMT,EAAMU,EAAMN,EAAMO,EACvCla,EAAI,GAAKgZ,EAAM0B,EAAMtB,EAAMuB,EAAMnB,EAAMiC,EACvCzb,EAAI,GAAKiZ,EAAMyB,EAAMrB,EAAMsB,EAAMlB,EAAMgC,EACvCzb,EAAI,GAAKkZ,EAAMwB,EAAMpB,EAAMqB,EAAMjB,EAAM+B,EACvCzb,EAAI,GAAKmZ,EAAMuB,EAAMnB,EAAMoB,EAAMhB,EAAM8B,EACvCzb,EAAI,GAAKgZ,EAAM0C,EAAMtC,EAAMuC,EAAMnC,EAAMoC,EACvC5b,EAAI,GAAKiZ,EAAMyC,EAAMrC,EAAMsC,EAAMlC,EAAMmC,EACvC5b,EAAI,IAAMkZ,EAAMwC,EAAMpC,EAAMqC,EAAMjC,EAAMkC,EACxC5b,EAAI,IAAMmZ,EAAMuC,EAAMnC,EAAMoC,EAAMhC,EAAMiC,EAEpCjW,IAAW3F,IACbA,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,KAEZ3F,CACT,yBC/EA,IAAAhP,EAAqB1D,EAAQ,OAArB8a,EAAGpX,EAAHoX,IAAKF,EAAGlX,EAAHkX,IA8CbhZ,EAAOC,QAnCS,SAAC6Q,EAAK2F,EAAQsS,GAC5B,IAAM1lB,EAAI6V,EAAI6P,GACRpY,EAAIqI,EAAI+P,GACRmB,EAAMzT,EAAO,GACb0T,EAAM1T,EAAO,GACb2T,EAAM3T,EAAO,GACb4T,EAAM5T,EAAO,GACb6T,EAAM7T,EAAO,GACb8T,EAAM9T,EAAO,GACb+T,EAAM/T,EAAO,IACbgU,EAAMhU,EAAO,IAsBnB,OApBIA,IAAW3F,IACbA,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,KAInB3F,EAAI,GAAKoZ,EAAMvZ,EAAI2Z,EAAMjnB,EACzByN,EAAI,GAAKqZ,EAAMxZ,EAAI4Z,EAAMlnB,EACzByN,EAAI,GAAKsZ,EAAMzZ,EAAI6Z,EAAMnnB,EACzByN,EAAI,GAAKuZ,EAAM1Z,EAAI8Z,EAAMpnB,EACzByN,EAAI,GAAKwZ,EAAM3Z,EAAIuZ,EAAM7mB,EACzByN,EAAI,GAAKyZ,EAAM5Z,EAAIwZ,EAAM9mB,EACzByN,EAAI,IAAM0Z,EAAM7Z,EAAIyZ,EAAM/mB,EAC1ByN,EAAI,IAAM2Z,EAAM9Z,EAAI0Z,EAAMhnB,EACnByN,CACT,yBC5CA,IAAAhP,EAAqB1D,EAAQ,OAArB8a,EAAGpX,EAAHoX,IAAKF,EAAGlX,EAAHkX,IA8CbhZ,EAAOC,QAnCS,SAAC6Q,EAAK2F,EAAQsS,GAC5B,IAAM1lB,EAAI6V,EAAI6P,GACRpY,EAAIqI,EAAI+P,GACRe,EAAMrT,EAAO,GACbsT,EAAMtT,EAAO,GACbuT,EAAMvT,EAAO,GACbwT,EAAMxT,EAAO,GACb6T,EAAM7T,EAAO,GACb8T,EAAM9T,EAAO,GACb+T,EAAM/T,EAAO,IACbgU,EAAMhU,EAAO,IAsBnB,OApBIA,IAAW3F,IACbA,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,KAInB3F,EAAI,GAAKgZ,EAAMnZ,EAAI2Z,EAAMjnB,EACzByN,EAAI,GAAKiZ,EAAMpZ,EAAI4Z,EAAMlnB,EACzByN,EAAI,GAAKkZ,EAAMrZ,EAAI6Z,EAAMnnB,EACzByN,EAAI,GAAKmZ,EAAMtZ,EAAI8Z,EAAMpnB,EACzByN,EAAI,GAAKgZ,EAAMzmB,EAAIinB,EAAM3Z,EACzBG,EAAI,GAAKiZ,EAAM1mB,EAAIknB,EAAM5Z,EACzBG,EAAI,IAAMkZ,EAAM3mB,EAAImnB,EAAM7Z,EAC1BG,EAAI,IAAMmZ,EAAM5mB,EAAIonB,EAAM9Z,EACnBG,CACT,yBC5CA,IAAAhP,EAAqB1D,EAAQ,OAArB8a,EAAGpX,EAAHoX,IAAKF,EAAGlX,EAAHkX,IA8CbhZ,EAAOC,QAnCS,SAAC6Q,EAAK2F,EAAQsS,GAC5B,IAAM1lB,EAAI6V,EAAI6P,GACRpY,EAAIqI,EAAI+P,GACRe,EAAMrT,EAAO,GACbsT,EAAMtT,EAAO,GACbuT,EAAMvT,EAAO,GACbwT,EAAMxT,EAAO,GACbyT,EAAMzT,EAAO,GACb0T,EAAM1T,EAAO,GACb2T,EAAM3T,EAAO,GACb4T,EAAM5T,EAAO,GAsBnB,OApBIA,IAAW3F,IACbA,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,GAAK2F,EAAO,GAChB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,KAInB3F,EAAI,GAAKgZ,EAAMnZ,EAAIuZ,EAAM7mB,EACzByN,EAAI,GAAKiZ,EAAMpZ,EAAIwZ,EAAM9mB,EACzByN,EAAI,GAAKkZ,EAAMrZ,EAAIyZ,EAAM/mB,EACzByN,EAAI,GAAKmZ,EAAMtZ,EAAI0Z,EAAMhnB,EACzByN,EAAI,GAAKoZ,EAAMvZ,EAAImZ,EAAMzmB,EACzByN,EAAI,GAAKqZ,EAAMxZ,EAAIoZ,EAAM1mB,EACzByN,EAAI,GAAKsZ,EAAMzZ,EAAIqZ,EAAM3mB,EACzByN,EAAI,GAAKuZ,EAAM1Z,EAAIsZ,EAAM5mB,EAClByN,CACT,qBCXA9Q,EAAOC,QAxBO,SAAC6Q,EAAK2F,EAAQzF,GAC1B,IAAMqI,EAAIrI,EAAW,GACfsI,EAAItI,EAAW,GACfwP,EAAIxP,EAAW,GAkBrB,OAhBAF,EAAI,GAAK2F,EAAO,GAAK4C,EACrBvI,EAAI,GAAK2F,EAAO,GAAK4C,EACrBvI,EAAI,GAAK2F,EAAO,GAAK4C,EACrBvI,EAAI,GAAK2F,EAAO,GAAK4C,EACrBvI,EAAI,GAAK2F,EAAO,GAAK6C,EACrBxI,EAAI,GAAK2F,EAAO,GAAK6C,EACrBxI,EAAI,GAAK2F,EAAO,GAAK6C,EACrBxI,EAAI,GAAK2F,EAAO,GAAK6C,EACrBxI,EAAI,GAAK2F,EAAO,GAAK+J,EACrB1P,EAAI,GAAK2F,EAAO,GAAK+J,EACrB1P,EAAI,IAAM2F,EAAO,IAAM+J,EACvB1P,EAAI,IAAM2F,EAAO,IAAM+J,EACvB1P,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACjB3F,EAAI,IAAM2F,EAAO,IACV3F,CACT,oBCFA9Q,EAAOC,QApBU,SAAC6Q,EAAKS,EAAGxD,GAiBxB,OAhBA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACpB+C,EAAI,IAAMS,EAAE,IAAMxD,EAAE,IACb+C,CACT,qBClBA9Q,EAAOC,QAFU,SAAC0sB,GAAG,OAAKA,EAAI/oB,KAAI,SAACkO,GAAC,OAAKA,EAAEoT,QAAQ,EAAE,IAAE/V,UAAU,qBC2CjEnP,EAAOC,QAzCW,SAAC6Q,EAAK2F,EAAQmW,GAC9B,IAGI9C,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAdEpR,EAAIuT,EAAQ,GACZtT,EAAIsT,EAAQ,GACZpM,EAAIoM,EAAQ,GAmClB,OArBInW,IAAW3F,GAEbA,EAAI,IAAM2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,GAAK+J,EAAI/J,EAAO,IACjE3F,EAAI,IAAM2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,GAAK+J,EAAI/J,EAAO,IACjE3F,EAAI,IAAM2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,IAAM+J,EAAI/J,EAAO,IAClE3F,EAAI,IAAM2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,IAAM+J,EAAI/J,EAAO,MAElEqT,EAAMrT,EAAO,GAAIsT,EAAMtT,EAAO,GAAIuT,EAAMvT,EAAO,GAAIwT,EAAMxT,EAAO,GAChEyT,EAAMzT,EAAO,GAAI0T,EAAM1T,EAAO,GAAI2T,EAAM3T,EAAO,GAAI4T,EAAM5T,EAAO,GAChE6T,EAAM7T,EAAO,GAAI8T,EAAM9T,EAAO,GAAI+T,EAAM/T,EAAO,IAAKgU,EAAMhU,EAAO,IAEjE3F,EAAI,GAAKgZ,EAAKhZ,EAAI,GAAKiZ,EAAKjZ,EAAI,GAAKkZ,EAAKlZ,EAAI,GAAKmZ,EACnDnZ,EAAI,GAAKoZ,EAAKpZ,EAAI,GAAKqZ,EAAKrZ,EAAI,GAAKsZ,EAAKtZ,EAAI,GAAKuZ,EACnDvZ,EAAI,GAAKwZ,EAAKxZ,EAAI,GAAKyZ,EAAKzZ,EAAI,IAAM0Z,EAAK1Z,EAAI,IAAM2Z,EAErD3Z,EAAI,IAAMgZ,EAAMzQ,EAAI6Q,EAAM5Q,EAAIgR,EAAM9J,EAAI/J,EAAO,IAC/C3F,EAAI,IAAMiZ,EAAM1Q,EAAI8Q,EAAM7Q,EAAIiR,EAAM/J,EAAI/J,EAAO,IAC/C3F,EAAI,IAAMkZ,EAAM3Q,EAAI+Q,EAAM9Q,EAAIkR,EAAMhK,EAAI/J,EAAO,IAC/C3F,EAAI,IAAMmZ,EAAM5Q,EAAIgR,EAAM/Q,EAAImR,EAAMjK,EAAI/J,EAAO,KAG1C3F,CACT,qBChCA9Q,EAAOC,QARM,SAAC6Q,EAAK/Q,GAKjB,OAJA+Q,EAAI,IAAM/Q,EAAM,GAChB+Q,EAAI,IAAM/Q,EAAM,GAChB+Q,EAAI,IAAM/Q,EAAM,GAChB+Q,EAAI,IAAM/Q,EAAM,GACT+Q,CACT,yBCdA,IAAM+F,EAAOzY,EAAQ,OA+BrB4B,EAAOC,QAXoB,SAAC6Q,EAAKkO,EAAQ1O,GACvC,IAAMwR,EAAIjL,EAAKmF,UAAUnF,EAAK3F,SAAU8N,GAClCkN,EAAIrV,EAAK4I,IAAInP,EAAOwR,GAM1B,OAJAhR,EAAI,GAAKgR,EAAE,GACXhR,EAAI,GAAKgR,EAAE,GACXhR,EAAI,GAAKgR,EAAE,GACXhR,EAAI,GAAKob,EACFpb,CACT,yBC7BA,IAAM+F,EAAOzY,EAAQ,OA8CrB4B,EAAOC,QApCY,SAAC6Q,GAAqB,QAAAzO,EAAAC,UAAAtD,OAAbW,EAAQ,IAAA4C,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAR7C,EAAQ6C,EAAA,GAAAF,UAAAE,GAClC,IAAMukB,EAAMpnB,EAASX,OAIf6tB,EAAKhW,EAAK3F,SACV4b,EAAKjW,EAAK3F,SACV6b,EAAe,SAACprB,GACpB,IAAM4P,EAAI5R,EAASgC,GACboM,EAAIpO,GAAUgC,EAAQ,GAAKolB,GAC3BpW,EAAIhR,GAAUgC,EAAQ,GAAKolB,GAKjC,OAJAlQ,EAAK1B,SAAS0X,EAAI9e,EAAGwD,GACrBsF,EAAK1B,SAAS2X,EAAInc,EAAGY,GACrBsF,EAAKsF,MAAM0Q,EAAIA,EAAIC,GACnBjW,EAAKmF,UAAU6Q,EAAIA,GACZA,CACT,EAiBA,OAfA/b,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACG,IAARiW,EAEFlQ,EAAKgO,KAAK/T,EAAKic,EAAa,KAG5BptB,EAASlB,SAAQ,SAACc,EAAGZ,GACnBkY,EAAKgD,IAAI/I,EAAKA,EAAKic,EAAapuB,GAClC,IAEAkY,EAAKmF,UAAUlL,EAAKA,IAEtBA,EAAI,GAAK+F,EAAK4I,IAAI3O,EAAKnR,EAAS,IACzBmR,CACT,yBC5CA,IAAQ0L,EAAQpe,EAAQ,OAAhBoe,IAEF3F,EAAOzY,EAAQ,OAuCrB4B,EAAOC,QAzBkB,SAAC6Q,EAAKS,EAAGxD,EAAG4C,GACnC,IAAIkc,EAAKhW,EAAK1B,SAAS0B,EAAK3F,SAAUnD,EAAGwD,GACrCub,EAAKjW,EAAK1B,SAAS0B,EAAK3F,SAAUP,EAAGY,GACrCsF,EAAK7X,OAAO6tB,GAAMrQ,IACpBqQ,EAAKhW,EAAK+K,WAAWiL,EAAIC,IAEvBjW,EAAK7X,OAAO8tB,GAAMtQ,IACpBsQ,EAAKjW,EAAK+K,WAAWkL,EAAID,IAE3B,IAAI7N,EAASnI,EAAKsF,MAAMtF,EAAK3F,SAAU2b,EAAIC,GACvCjW,EAAK7X,OAAOggB,GAAUxC,IAExBsQ,EAAKjW,EAAK+K,WAAWkL,EAAID,GACzB7N,EAASnI,EAAKsF,MAAM6C,EAAQ6N,EAAIC,IAElC9N,EAASnI,EAAKmF,UAAUgD,EAAQA,GAChC,IAAMkN,EAAIrV,EAAK4I,IAAIT,EAAQzN,GAM3B,OAJAT,EAAI,GAAKkO,EAAO,GAChBlO,EAAI,GAAKkO,EAAO,GAChBlO,EAAI,GAAKkO,EAAO,GAChBlO,EAAI,GAAKob,EACFpb,CACT,yBCjCA9Q,EAAOC,QAAU,CAKf6D,MAAO1F,EAAQ,OAKfymB,KAAMzmB,EAAQ,OAKd8S,OAAQ9S,EAAQ,OAKhB8U,OAAQ9U,EAAQ,OAChBof,KAAMpf,EAAQ,OACd4uB,mBAAoB5uB,EAAQ,OAK5B4U,WAAY5U,EAAQ,OACpBgV,WAAYhV,EAAQ,OACpB6uB,iBAAkB7uB,EAAQ,OAC1B8uB,kBAAmB9uB,EAAQ,OAC3BwiB,sBAAuBxiB,EAAQ,OAK/B+Q,SAAU/Q,EAAQ,OAClBsU,UAAWtU,EAAQ,+BC3CrB,IAAMyY,EAAOzY,EAAQ,OAkBrB4B,EAAOC,QARmB,SAACF,EAAOuQ,GAChC,IAAMiB,EAAIjB,EAAM,GAAKvQ,EAAM,GAAKuQ,EAAM,GAAKvQ,EAAM,GAAKuQ,EAAM,GAAKvQ,EAAM,GAAKA,EAAM,GAC5EsZ,EAAI/I,EAAM,GAAKiB,EAAIxR,EAAM,GACzBuZ,EAAIhJ,EAAM,GAAKiB,EAAIxR,EAAM,GACzBygB,EAAIlQ,EAAM,GAAKiB,EAAIxR,EAAM,GAC/B,OAAO8W,EAAK7D,WAAWqG,EAAGC,EAAGkH,EAC/B,yBChBA,IAAM3J,EAAOzY,EAAQ,OAYrB4B,EAAOC,QAFuB,SAACF,EAAOuQ,GAAK,OAAKuG,EAAK4I,IAAI1f,EAAOuQ,GAASvQ,EAAM,EAAE,yBCVjF,IAAMoS,EAAO/T,EAAQ,OACfyY,EAAOzY,EAAQ,OAEfgV,EAAahV,EAAQ,OACrBof,EAAOpf,EAAQ,OAmCrB4B,EAAOC,QAxBW,SAAC6Q,EAAK/Q,EAAO0W,GAC7B,IAAM0W,EAAWhb,EAAKwO,YAAYlK,GAE5B9I,EAAIkJ,EAAK+K,WAAW/K,EAAK3F,SAAUnR,GACnC+hB,EAAIjL,EAAKsF,MAAMxO,EAAG5N,EAAO4N,GACzBpO,EAAIsX,EAAKsF,MAAMtF,EAAK3F,SAAUnR,EAAO+hB,GAEvC7O,EAAS4D,EAAKuW,WAAWvW,EAAK3F,SAAUnR,EAAM,IAClD8W,EAAKH,SAASzD,EAAQA,EAAQlT,GAC9B,IAAI4kB,EAAS9N,EAAKgD,IAAIhD,EAAK3F,SAAU+B,EAAQ6O,GACzCuL,EAASxW,EAAKgD,IAAIhD,EAAK3F,SAAU+B,EAAQ1T,GAW7C,OATA0T,EAAS4D,EAAKnE,UAAUO,EAAQA,EAAQwD,GACxCkO,EAAS9N,EAAKnE,UAAUiS,EAAQA,EAAQlO,GACxC4W,EAASxW,EAAKnE,UAAU2a,EAAQA,EAAQ5W,GAExCrD,EAAWtC,EAAKmC,EAAQ0R,EAAQ0I,GAC5BF,GAEF3P,EAAK1M,EAAKA,GAELA,CACT,yBCrCA,IAAQ+P,EAASziB,EAAQ,OAAjByiB,KAWR7gB,EAAOC,QAFmB,SAACsR,EAAGxD,GAAC,OAAMO,KAAKkD,IAAID,EAAE,GAAKxD,EAAE,KAAO8S,GAAQvS,KAAKkD,IAAID,EAAE,GAAKxD,EAAE,KAAO8S,GAAQvS,KAAKkD,IAAID,EAAE,GAAKxD,EAAE,KAAO8S,CAAI,qBCOpI7gB,EAAOC,QAVM,SAACmQ,GAEZ,IADA,IAAIkO,EAAO,EACF3f,EAAI,EAAGA,EAAIyR,EAAOpR,OAAQL,IAAK,CACtC,IAAMsT,GAAKtT,EAAI,GAAKyR,EAAOpR,OAC3Bsf,GAAQlO,EAAOzR,GAAG,GAAKyR,EAAO6B,GAAG,GACjCqM,GAAQlO,EAAO6B,GAAG,GAAK7B,EAAOzR,GAAG,EACnC,CACA,OAAQ2f,EAAO,CACjB,yBCRAte,EAAOC,QAAU,CACfqtB,kBAAmBlvB,EAAQ,OAC3BkgB,KAAMlgB,EAAQ,OACd4a,IAAK5a,EAAAA,OAAAA,IACLmvB,+BAAgCnvB,EAAQ,OACxCovB,UAAWpvB,EAAQ,OACnB8a,IAAK9a,EAAAA,OAAAA,IACL6mB,aAAc7mB,EAAQ,2BCiBxB4B,EAAOC,QArBgC,SAACgT,EAAQ0R,EAAQrL,GACtD,IAMI7K,EANAgf,EAAKnU,EAAIrG,EAAO,GAChBya,EAAK/I,EAAO,GAAK1R,EAAO,GAgB5B,OAfIya,EAAK,IACPD,GAAMA,EACNC,GAAMA,GAINjf,EADEgf,GAAM,EACJ,EACKA,GAAMC,EACX,EACKA,EAAK,MACV,GAEAD,EAAKC,EAEIza,EAAO,GAAKxE,GAAKkW,EAAO,GAAK1R,EAAO,GAErD,qBCWAjT,EAAOC,QA5BW,SAAC0tB,EAAIC,EAAIC,EAAIC,GAE7B,KAAKH,EAAG,KAAOC,EAAG,IAAMD,EAAG,KAAOC,EAAG,IAAQC,EAAG,KAAOC,EAAG,IAAMD,EAAG,KAAOC,EAAG,IAA7E,CAIA,IAAMC,GAAgBD,EAAG,GAAKD,EAAG,KAAOD,EAAG,GAAKD,EAAG,KAAOG,EAAG,GAAKD,EAAG,KAAOD,EAAG,GAAKD,EAAG,IAGvF,KAAIrf,KAAKkD,IAAIuc,GAAe7e,OAAO8e,WAAnC,CAIA,IAAMC,IAAOH,EAAG,GAAKD,EAAG,KAAOF,EAAG,GAAKE,EAAG,KAAOC,EAAG,GAAKD,EAAG,KAAOF,EAAG,GAAKE,EAAG,KAAOE,EAC/EG,IAAON,EAAG,GAAKD,EAAG,KAAOA,EAAG,GAAKE,EAAG,KAAOD,EAAG,GAAKD,EAAG,KAAOA,EAAG,GAAKE,EAAG,KAAOE,EAGrF,KAAIE,EAAK,GAAKA,EAAK,GAAKC,EAAK,GAAKA,EAAK,GAQvC,MAAO,CAHGP,EAAG,GAAKM,GAAML,EAAG,GAAKD,EAAG,IACzBA,EAAG,GAAKM,GAAML,EAAG,GAAKD,EAAG,IAZnC,CAPA,CAsBF,qBC3BA3tB,EAAOC,QAVc,SAACsR,EAAGxD,EAAG4C,EAAGrB,EAAGwS,EAAGviB,GACnC,IACM4uB,EAAS,GADH5c,EAAIjC,EAAIvB,EAAI4C,GAEpB0I,EAAIyI,EAAIxS,EAAIvB,EAAIxO,EAChB+Z,GAAKwI,EAAInR,EAAIY,EAAIhS,EAGrB,MAAO,CAFP8Z,GAAK8U,EACL7U,GAAK6U,EAEP,yBCRA,IAAQtN,EAASziB,EAAQ,OAAjByiB,KAKFuN,EAAS,SAACtc,GAAC,OAAKxD,KAAKkD,IAAIM,GAAK+O,EAAO,EAAI/O,CAAC,EA4BhD9R,EAAOC,QAAU,CAAEiZ,IAfP,SAAC6P,GAAO,OAAKqF,EAAO9f,KAAK4K,IAAI6P,GAAS,EAe1B/P,IAFZ,SAAC+P,GAAO,OAAKqF,EAAO9f,KAAK0K,IAAI+P,GAAS,sBCjBlD/oB,EAAOC,QANK,SAAC6Q,EAAK0T,GAGhB,OAFA1T,EAAI,GAAKxC,KAAKkD,IAAIgT,EAAO,IACzB1T,EAAI,GAAKxC,KAAKkD,IAAIgT,EAAO,IAClB1T,CACT,qBCGA9Q,EAAOC,QANK,SAAC6Q,EAAKS,EAAGxD,GAGnB,OAFA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACT,yBCbA9Q,EAAOC,QAAU,EAAjBD,6BCAA,IAAMia,EAAe7b,EAAQ,MAW7B4B,EAAOC,QAFc,SAACukB,GAAM,OAA4B,kBAAvBvK,EAAauK,EAA2B,oBCAzExkB,EAAOC,QAFc,SAACukB,GAAM,OAAKlW,KAAK+f,MAAM7J,EAAO,GAAIA,EAAO,GAAG,yBCPjE,IAAMtT,EAAS9S,EAAQ,OAgBvB4B,EAAOC,QAPO,SAACukB,GACb,IAAM1T,EAAMI,IAGZ,OAFAJ,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GACT1T,CACT,qBCAA9Q,EAAOC,QANM,SAAC6Q,EAAK0T,GAGjB,OAFA1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GACT1T,CACT,qBCEA9Q,EAAOC,QAFQ,WAAH,MAAS,CAAC,EAAG,EAAE,qBCI3BD,EAAOC,QAPO,SAAC6Q,EAAKS,EAAGxD,GAIrB,OAHA+C,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,GACzB+C,CACT,qBCAA9Q,EAAOC,QANU,SAACsR,EAAGxD,GACnB,IAAMsL,EAAItL,EAAE,GAAKwD,EAAE,GACb+H,EAAIvL,EAAE,GAAKwD,EAAE,GACnB,OAAOjD,KAAKoD,KAAK2H,EAAIA,EAAIC,EAAIA,EAC/B,qBCGAtZ,EAAOC,QANQ,SAAC6Q,EAAKS,EAAGxD,GAGtB,OAFA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACT,qBCHA9Q,EAAOC,QAFK,SAACsR,EAAGxD,GAAC,OAAKwD,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,EAAE,qBCE/C/N,EAAOC,QAFQ,SAACsR,EAAGxD,GAAC,OAAMwD,EAAE,KAAOxD,EAAE,IAAQwD,EAAE,KAAOxD,EAAE,EAAG,yBCR3D,IAAMugB,EAAmBlwB,EAAQ,OAYjC4B,EAAOC,QAFkB,SAAC6Q,EAAKyd,GAAO,OAAKD,EAAiBxd,EAAe,oBAAVyd,EAA+B,yBCVhG,IAAAzsB,EAAqB1D,EAAQ,OAArB8a,EAAGpX,EAAHoX,IAAKF,EAAGlX,EAAHkX,IAgBbhZ,EAAOC,QANkB,SAAC6Q,EAAKiY,GAG7B,OAFAjY,EAAI,GAAKkI,EAAI+P,GACbjY,EAAI,GAAKoI,EAAI6P,GACNjY,CACT,qBCAA9Q,EAAOC,QANY,SAAC6Q,EAAK0d,GAGvB,OAFA1d,EAAI,GAAK0d,EACT1d,EAAI,GAAK0d,EACF1d,CACT,uBCZA,IAAMI,EAAS9S,EAAQ,OAiBvB4B,EAAOC,QAPY,SAACoZ,EAAGC,GACrB,IAAMxI,EAAMI,IAGZ,OAFAJ,EAAI,GAAKuI,EACTvI,EAAI,GAAKwI,EACFxI,CACT,yBCXA9Q,EAAOC,QAAU,CACfuR,IAAKpT,EAAQ,OACbyb,IAAKzb,EAAQ,OACbiX,MAAOjX,EAAQ,OACf8W,aAAc9W,EAAQ,OACtB6b,aAAc7b,EAAQ,MACtB0F,MAAO1F,EAAQ,OACfymB,KAAMzmB,EAAQ,OACd8S,OAAQ9S,EAAQ,OAChB+d,MAAO/d,EAAQ,OACfsR,SAAUtR,EAAQ,OAClBqwB,OAAQrwB,EAAQ,OAChBqhB,IAAKrhB,EAAQ,OACb8U,OAAQ9U,EAAQ,OAChBswB,iBAAkBtwB,EAAQ,OAC1BkwB,iBAAkBlwB,EAAQ,OAC1BgvB,WAAYhvB,EAAQ,OACpB4U,WAAY5U,EAAQ,KACpBY,OAAQZ,EAAQ,OAChBuwB,KAAMvwB,EAAQ,OACdgR,IAAKhR,EAAQ,OACbiR,IAAKjR,EAAQ,OACbsY,SAAUtY,EAAQ,OAClBqmB,OAAQrmB,EAAQ,OAChB4gB,OAAQ5gB,EAAQ,OAChB4d,UAAW5d,EAAQ,OACnBqrB,OAAQrrB,EAAQ,OAChBgb,MAAOhb,EAAQ,OACf8E,KAAM9E,EAAQ,OACdwwB,gBAAiBxwB,EAAQ,OACzBywB,cAAezwB,EAAQ,OACvB+W,SAAU/W,EAAQ,OAClB+Q,SAAU/Q,EAAQ,OAClBsU,UAAWtU,EAAQ,2BC5BrB4B,EAAOC,QAFQ,SAACukB,GAAM,OAAKlW,KAAKoD,KAAK8S,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAG,qBCWnFxkB,EAAOC,QARM,SAAC6Q,EAAKS,EAAGxD,EAAGU,GACvB,IAAMiR,EAAKnO,EAAE,GACPoO,EAAKpO,EAAE,GAGb,OAFAT,EAAI,GAAK4O,EAAKjR,GAAKV,EAAE,GAAK2R,GAC1B5O,EAAI,GAAK6O,EAAKlR,GAAKV,EAAE,GAAK4R,GACnB7O,CACT,qBCDA9Q,EAAOC,QANK,SAAC6Q,EAAKS,EAAGxD,GAGnB,OAFA+C,EAAI,GAAKxC,KAAKc,IAAImC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKc,IAAImC,EAAE,GAAIxD,EAAE,IACnB+C,CACT,qBCEA9Q,EAAOC,QANK,SAAC6Q,EAAKS,EAAGxD,GAGnB,OAFA+C,EAAI,GAAKxC,KAAKe,IAAIkC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKe,IAAIkC,EAAE,GAAIxD,EAAE,IACnB+C,CACT,qBCEA9Q,EAAOC,QANU,SAAC6Q,EAAKS,EAAGxD,GAGxB,OAFA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACT,qBCCA9Q,EAAOC,QANQ,SAAC6Q,EAAK0T,GAGnB,OAFA1T,EAAI,IAAM0T,EAAO,GACjB1T,EAAI,IAAM0T,EAAO,GACV1T,CACT,yBCZA,IAAQkH,EAAQ5Z,EAAQ,OAAhB4Z,IAEF9G,EAAS9S,EAAQ,OACjBqrB,EAASrrB,EAAQ,OAavB4B,EAAOC,QAFQ,SAAC6Q,EAAK0T,GAAM,OAAKiF,EAAO3Y,EAAK0T,EAAQtT,IAAW8G,EAAM,EAAG,qBCQxEhY,EAAOC,QAdW,SAAC6Q,EAAK0T,GACtB,IAAMnL,EAAImL,EAAO,GACXlL,EAAIkL,EAAO,GACbuC,EAAM1N,EAAIA,EAAIC,EAAIA,EAMtB,OALIyN,EAAM,IACRA,EAAM,EAAIzY,KAAKoD,KAAKqV,IAEtBjW,EAAI,GAAKuI,EAAI0N,EACbjW,EAAI,GAAKwI,EAAIyN,EACNjW,CACT,qBCIA9Q,EAAOC,QAZQ,SAAC6Q,EAAK0T,EAAQlB,EAAQyF,GACnC,IAAM1P,EAAImL,EAAO,GAAKlB,EAAO,GACvBhK,EAAIkL,EAAO,GAAKlB,EAAO,GACvB3S,EAAIrC,KAAK0K,IAAI+P,GACb1lB,EAAIiL,KAAK4K,IAAI6P,GAKnB,OAHAjY,EAAI,GAAKuI,EAAI1I,EAAI2I,EAAIjW,EAAIigB,EAAO,GAChCxS,EAAI,GAAKuI,EAAIhW,EAAIiW,EAAI3I,EAAI2S,EAAO,GAEzBxS,CACT,qBCLA9Q,EAAOC,QANO,SAAC6Q,EAAK0T,EAAQsK,GAG1B,OAFAhe,EAAI,GAAK0T,EAAO,GAAKsK,EACrBhe,EAAI,GAAK0T,EAAO,GAAKsK,EACdhe,CACT,qBCEA9Q,EAAOC,QANM,SAAC6Q,EAAK0T,EAAQuK,GAGzB,OAFAje,EAAI,GAAKxC,KAAKqK,MAAM6L,EAAO,GAAKuK,GAAWA,EAAU,EACrDje,EAAI,GAAKxC,KAAKqK,MAAM6L,EAAO,GAAKuK,GAAWA,EAAU,EAC9Cje,CACT,qBCCA9Q,EAAOC,QANiB,SAACsR,EAAGxD,GAC1B,IAAMsL,EAAItL,EAAE,GAAKwD,EAAE,GACb+H,EAAIvL,EAAE,GAAKwD,EAAE,GACnB,OAAO8H,EAAIA,EAAIC,EAAIA,CACrB,qBCCAtZ,EAAOC,QANe,SAACukB,GACrB,IAAMnL,EAAImL,EAAO,GACXlL,EAAIkL,EAAO,GACjB,OAAOnL,EAAIA,EAAIC,EAAIA,CACrB,qBCIAtZ,EAAOC,QANU,SAAC6Q,EAAKS,EAAGxD,GAGxB,OAFA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACT,qBCJA9Q,EAAOC,QAFU,SAACukB,GAAM,UAAAhlB,OAASglB,EAAO,GAAGU,QAAQ,GAAE,MAAA1lB,OAAKglB,EAAO,GAAGU,QAAQ,GAAE,yBCU9EllB,EAAOC,QARW,SAAC6Q,EAAK0T,EAAQ/N,GAC9B,IAAM4C,EAAImL,EAAO,GACXlL,EAAIkL,EAAO,GAGjB,OAFA1T,EAAI,GAAK2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,IAChD3F,EAAI,GAAK2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,IACzC3F,CACT,qBCAA9Q,EAAOC,QAPK,SAAC6Q,EAAK0T,GAIhB,OAHA1T,EAAI,GAAKxC,KAAKkD,IAAIgT,EAAO,IACzB1T,EAAI,GAAKxC,KAAKkD,IAAIgT,EAAO,IACzB1T,EAAI,GAAKxC,KAAKkD,IAAIgT,EAAO,IAClB1T,CACT,qBCGA9Q,EAAOC,QAPK,SAAC6Q,EAAKS,EAAGxD,GAInB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACT,wBCdA,IAAM2O,EAAMrhB,EAAQ,OAwBpB4B,EAAOC,QAdO,SAACsR,EAAGxD,GAChB,IAAM2R,EAAKnO,EAAE,GACPoO,EAAKpO,EAAE,GACPqO,EAAKrO,EAAE,GACPyd,EAAKjhB,EAAE,GACPkhB,EAAKlhB,EAAE,GACPmhB,EAAKnhB,EAAE,GAGPohB,EAFO7gB,KAAKoD,KAAKgO,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,GACnCtR,KAAKoD,KAAKsd,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,GAE1CE,EAASD,GAAO1P,EAAIlO,EAAGxD,GAAKohB,EAClC,OAAO7gB,KAAK+gB,KAAK/gB,KAAKe,IAAIf,KAAKc,IAAIggB,GAAS,GAAI,GAClD,yBCtBA,IAAMle,EAAS9S,EAAQ,OAiBvB4B,EAAOC,QARO,SAACukB,GACb,IAAM1T,EAAMI,IAIZ,OAHAJ,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GACT1T,CACT,qBCAA9Q,EAAOC,QAPM,SAAC6Q,EAAK0T,GAIjB,OAHA1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GACT1T,CACT,qBCCA9Q,EAAOC,QAFQ,WAAH,MAAS,CAAC,EAAG,EAAG,EAAE,qBCW9BD,EAAOC,QAdO,SAAC6Q,EAAKS,EAAGxD,GACrB,IAAM2R,EAAKnO,EAAE,GACPoO,EAAKpO,EAAE,GACPqO,EAAKrO,EAAE,GACPyd,EAAKjhB,EAAE,GACPkhB,EAAKlhB,EAAE,GACPmhB,EAAKnhB,EAAE,GAKb,OAHA+C,EAAI,GAAK6O,EAAKuP,EAAKtP,EAAKqP,EACxBne,EAAI,GAAK8O,EAAKoP,EAAKtP,EAAKwP,EACxBpe,EAAI,GAAK4O,EAAKuP,EAAKtP,EAAKqP,EACjBle,CACT,qBCNA9Q,EAAOC,QAPU,SAACsR,EAAGxD,GACnB,IAAMsL,EAAItL,EAAE,GAAKwD,EAAE,GACb+H,EAAIvL,EAAE,GAAKwD,EAAE,GACbiP,EAAIzS,EAAE,GAAKwD,EAAE,GACnB,OAAOjD,KAAKoD,KAAK2H,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,EACvC,qBCGAxgB,EAAOC,QAPQ,SAAC6Q,EAAKS,EAAGxD,GAItB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACT,qBCJA9Q,EAAOC,QAFK,SAACsR,EAAGxD,GAAC,OAAKwD,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,EAAE,qBCE7D/N,EAAOC,QAFQ,SAACsR,EAAGxD,GAAC,OAAMwD,EAAE,KAAOxD,EAAE,IAAQwD,EAAE,KAAOxD,EAAE,IAAQwD,EAAE,KAAOxD,EAAE,EAAG,qBCQ9E/N,EAAOC,QAPY,SAAC6Q,EAAK0d,GAIvB,OAHA1d,EAAI,GAAK0d,EACT1d,EAAI,GAAK0d,EACT1d,EAAI,GAAK0d,EACF1d,CACT,yBCdA,IAAMI,EAAS9S,EAAQ,OAmBvB4B,EAAOC,QARY,SAACoZ,EAAGC,EAAGkH,GACxB,IAAM1P,EAAMI,IAIZ,OAHAJ,EAAI,GAAKuI,EACTvI,EAAI,GAAKwI,EACTxI,EAAI,GAAK0P,EACF1P,CACT,qBCDA9Q,EAAOC,QAPa,SAAC6Q,EAAK0T,GAAkB,IAAVhE,EAACle,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,EAIpC,OAHAwO,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0P,EACF1P,CACT,yBCTA9Q,EAAOC,QAAU,CACfuR,IAAKpT,EAAQ,OACbyb,IAAKzb,EAAQ,OACbiX,MAAOjX,EAAQ,MACf0F,MAAO1F,EAAQ,OACfymB,KAAMzmB,EAAQ,OACd8S,OAAQ9S,EAAQ,OAChB+d,MAAO/d,EAAQ,OACfsR,SAAUtR,EAAQ,OAClBqwB,OAAQrwB,EAAQ,OAChBqhB,IAAKrhB,EAAQ,OACb8U,OAAQ9U,EAAQ,OAChBgvB,WAAYhvB,EAAQ,OACpB4U,WAAY5U,EAAQ,OACpBkxB,SAAUlxB,EAAQ,OAClBY,OAAQZ,EAAQ,OAChBuwB,KAAMvwB,EAAQ,OACdgR,IAAKhR,EAAQ,MACbiR,IAAKjR,EAAQ,OACbsY,SAAUtY,EAAQ,OAClBqmB,OAAQrmB,EAAQ,OAChB4d,UAAW5d,EAAQ,OACnBwjB,WAAYxjB,EAAQ,OACpBsrB,QAAStrB,EAAQ,OACjBurB,QAASvrB,EAAQ,MACjBwrB,QAASxrB,EAAQ,OACjBgb,MAAOhb,EAAQ,OACf8E,KAAM9E,EAAQ,OACdwwB,gBAAiBxwB,EAAQ,OACzBywB,cAAezwB,EAAQ,OACvB+W,SAAU/W,EAAQ,OAClB+Q,SAAU/Q,EAAQ,OAClBsU,UAAWtU,EAAQ,2BCvBrB4B,EAAOC,QAPQ,SAACukB,GACd,IAAMnL,EAAImL,EAAO,GACXlL,EAAIkL,EAAO,GACXhE,EAAIgE,EAAO,GACjB,OAAOlW,KAAKoD,KAAK2H,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,EACvC,qBCKAxgB,EAAOC,QAPM,SAAC6Q,EAAKS,EAAGxD,EAAGU,GAIvB,OAHAqC,EAAI,GAAKS,EAAE,GAAK9C,GAAKV,EAAE,GAAKwD,EAAE,IAC9BT,EAAI,GAAKS,EAAE,GAAK9C,GAAKV,EAAE,GAAKwD,EAAE,IAC9BT,EAAI,GAAKS,EAAE,GAAK9C,GAAKV,EAAE,GAAKwD,EAAE,IACvBT,CACT,oBCCA9Q,EAAOC,QAPK,SAAC6Q,EAAKS,EAAGxD,GAInB,OAHA+C,EAAI,GAAKxC,KAAKc,IAAImC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKc,IAAImC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKc,IAAImC,EAAE,GAAIxD,EAAE,IACnB+C,CACT,qBCEA9Q,EAAOC,QAPK,SAAC6Q,EAAKS,EAAGxD,GAInB,OAHA+C,EAAI,GAAKxC,KAAKe,IAAIkC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKe,IAAIkC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKe,IAAIkC,EAAE,GAAIxD,EAAE,IACnB+C,CACT,qBCEA9Q,EAAOC,QAPU,SAAC6Q,EAAKS,EAAGxD,GAIxB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACT,qBCCA9Q,EAAOC,QAPQ,SAAC6Q,EAAK0T,GAInB,OAHA1T,EAAI,IAAM0T,EAAO,GACjB1T,EAAI,IAAM0T,EAAO,GACjB1T,EAAI,IAAM0T,EAAO,GACV1T,CACT,qBCSA9Q,EAAOC,QAdW,SAAC6Q,EAAK0T,GACtB,IAAMnL,EAAImL,EAAO,GACXlL,EAAIkL,EAAO,GACXhE,EAAIgE,EAAO,GACbuC,EAAM1N,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,EAO9B,OANIuG,EAAM,IACRA,EAAM,EAAIzY,KAAKoD,KAAKqV,IAEtBjW,EAAI,GAAKuI,EAAI0N,EACbjW,EAAI,GAAKwI,EAAIyN,EACbjW,EAAI,GAAK0P,EAAIuG,EACNjW,CACT,yBCpBA,IAAMU,EAAMpT,EAAQ,OACd8S,EAAS9S,EAAQ,OACjB+d,EAAQ/d,EAAQ,OAmBtB4B,EAAOC,QATY,SAAC6Q,EAAK0T,GACvB,IAAM+K,EAAK/d,EAAIN,IAAUsT,GACnB2H,EAAK,GAAMoD,EAAG,GAAKA,EAAG,IAAQA,EAAG,GAAKA,EAAG,IACzCnD,EAAK,GAAMmD,EAAG,IAAMA,EAAG,IAAQA,EAAG,GAAKA,EAAG,IAC1ClD,EAAK,GAAMkD,EAAG,IAAMA,EAAG,IAAQA,EAAG,IAAMA,EAAG,IAEjD,OAAOpT,EAAMrL,EAAK0T,EAAQ,CAAC2H,EAAIC,EAAIC,GACrC,qBCaArsB,EAAOC,QAtBS,SAAC6Q,EAAK0T,EAAQlB,EAAQyF,GACpC,IAAM1a,EAAI,GACJV,EAAI,GAiBV,OAdAU,EAAE,GAAKmW,EAAO,GAAKlB,EAAO,GAC1BjV,EAAE,GAAKmW,EAAO,GAAKlB,EAAO,GAC1BjV,EAAE,GAAKmW,EAAO,GAAKlB,EAAO,GAG1B3V,EAAE,GAAKU,EAAE,GACTV,EAAE,GAAKU,EAAE,GAAKC,KAAK0K,IAAI+P,GAAW1a,EAAE,GAAKC,KAAK4K,IAAI6P,GAClDpb,EAAE,GAAKU,EAAE,GAAKC,KAAK4K,IAAI6P,GAAW1a,EAAE,GAAKC,KAAK0K,IAAI+P,GAGlDjY,EAAI,GAAKnD,EAAE,GAAK2V,EAAO,GACvBxS,EAAI,GAAKnD,EAAE,GAAK2V,EAAO,GACvBxS,EAAI,GAAKnD,EAAE,GAAK2V,EAAO,GAEhBxS,CACT,oBCEA9Q,EAAOC,QAtBS,SAAC6Q,EAAK0T,EAAQlB,EAAQyF,GACpC,IAAM1a,EAAI,GACJV,EAAI,GAiBV,OAdAU,EAAE,GAAKmW,EAAO,GAAKlB,EAAO,GAC1BjV,EAAE,GAAKmW,EAAO,GAAKlB,EAAO,GAC1BjV,EAAE,GAAKmW,EAAO,GAAKlB,EAAO,GAG1B3V,EAAE,GAAKU,EAAE,GAAKC,KAAK4K,IAAI6P,GAAW1a,EAAE,GAAKC,KAAK0K,IAAI+P,GAClDpb,EAAE,GAAKU,EAAE,GACTV,EAAE,GAAKU,EAAE,GAAKC,KAAK0K,IAAI+P,GAAW1a,EAAE,GAAKC,KAAK4K,IAAI6P,GAGlDjY,EAAI,GAAKnD,EAAE,GAAK2V,EAAO,GACvBxS,EAAI,GAAKnD,EAAE,GAAK2V,EAAO,GACvBxS,EAAI,GAAKnD,EAAE,GAAK2V,EAAO,GAEhBxS,CACT,qBCDA9Q,EAAOC,QAnBS,SAAC6Q,EAAK0T,EAAQlB,EAAQyF,GACpC,IAAM1a,EAAI,GACJV,EAAI,GAcV,OAZAU,EAAE,GAAKmW,EAAO,GAAKlB,EAAO,GAC1BjV,EAAE,GAAKmW,EAAO,GAAKlB,EAAO,GAG1B3V,EAAE,GAAMU,EAAE,GAAKC,KAAK0K,IAAI+P,GAAa1a,EAAE,GAAKC,KAAK4K,IAAI6P,GACrDpb,EAAE,GAAMU,EAAE,GAAKC,KAAK4K,IAAI6P,GAAa1a,EAAE,GAAKC,KAAK0K,IAAI+P,GAGrDjY,EAAI,GAAKnD,EAAE,GAAK2V,EAAO,GACvBxS,EAAI,GAAKnD,EAAE,GAAK2V,EAAO,GACvBxS,EAAI,GAAK0T,EAAO,GAET1T,CACT,qBCXA9Q,EAAOC,QAPO,SAAC6Q,EAAK0T,EAAQsK,GAI1B,OAHAhe,EAAI,GAAK0T,EAAO,GAAKsK,EACrBhe,EAAI,GAAK0T,EAAO,GAAKsK,EACrBhe,EAAI,GAAK0T,EAAO,GAAKsK,EACdhe,CACT,qBCEA9Q,EAAOC,QAPM,SAAC6Q,EAAK0T,EAAQuK,GAIzB,OAHAje,EAAI,GAAKxC,KAAKqK,MAAM6L,EAAO,GAAKuK,GAAWA,EAAU,EACrDje,EAAI,GAAKxC,KAAKqK,MAAM6L,EAAO,GAAKuK,GAAWA,EAAU,EACrDje,EAAI,GAAKxC,KAAKqK,MAAM6L,EAAO,GAAKuK,GAAWA,EAAU,EAC9Cje,CACT,qBCCA9Q,EAAOC,QAPiB,SAACsR,EAAGxD,GAC1B,IAAMsL,EAAItL,EAAE,GAAKwD,EAAE,GACb+H,EAAIvL,EAAE,GAAKwD,EAAE,GACbiP,EAAIzS,EAAE,GAAKwD,EAAE,GACnB,OAAO8H,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,CAC7B,qBCCAxgB,EAAOC,QAPe,SAACukB,GACrB,IAAMnL,EAAImL,EAAO,GACXlL,EAAIkL,EAAO,GACXhE,EAAIgE,EAAO,GACjB,OAAOnL,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,CAC7B,qBCIAxgB,EAAOC,QAPU,SAAC6Q,EAAKS,EAAGxD,GAIxB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACT,qBCNA9Q,EAAOC,QAFU,SAACse,GAAG,UAAA/e,OAAS+e,EAAI,GAAG2G,QAAQ,GAAE,MAAA1lB,OAAK+e,EAAI,GAAG2G,QAAQ,GAAE,MAAA1lB,OAAK+e,EAAI,GAAG2G,QAAQ,GAAE,yBCe3FllB,EAAOC,QAZW,SAAC6Q,EAAK0T,EAAQ/N,GAC9B,IAAM4C,EAAImL,EAAO,GACXlL,EAAIkL,EAAO,GACXhE,EAAIgE,EAAO,GACb0H,EAAIzV,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,IAAM+J,EAAI/J,EAAO,IAKhE,OAJAyV,EAAIA,GAAK,EACTpb,EAAI,IAAM2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,GAAK+J,EAAI/J,EAAO,KAAOyV,EACxEpb,EAAI,IAAM2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,GAAK+J,EAAI/J,EAAO,KAAOyV,EACxEpb,EAAI,IAAM2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,IAAM+J,EAAI/J,EAAO,KAAOyV,EAClEpb,CACT,yBCnBA,IAAMI,EAAS9S,EAAQ,OAkBvB4B,EAAOC,QATO,SAACukB,GACb,IAAM1T,EAAMI,IAKZ,OAJAJ,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GACT1T,CACT,qBCAA9Q,EAAOC,QARM,SAAC6Q,EAAK0T,GAKjB,OAJA1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GAChB1T,EAAI,GAAK0T,EAAO,GACT1T,CACT,qBCAA9Q,EAAOC,QAFQ,WAAH,MAAS,CAAC,EAAG,EAAG,EAAG,EAAE,qBCFjCD,EAAOC,QAFK,SAACsR,EAAGxD,GAAC,OAAKwD,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,EAAE,qBCE3E/N,EAAOC,QAFQ,SAACsR,EAAGxD,GAAC,OAAOwD,EAAE,KAAOxD,EAAE,IAAQwD,EAAE,KAAOxD,EAAE,IAAQwD,EAAE,KAAOxD,EAAE,IAAQwD,EAAE,KAAOxD,EAAE,EAAG,qBCQlG/N,EAAOC,QARY,SAAC6Q,EAAK0d,GAKvB,OAJA1d,EAAI,GAAK0d,EACT1d,EAAI,GAAK0d,EACT1d,EAAI,GAAK0d,EACT1d,EAAI,GAAK0d,EACF1d,CACT,yBCdA,IAAMI,EAAS9S,EAAQ,OAqBvB4B,EAAOC,QATY,SAACoZ,EAAGC,EAAGkH,EAAG0L,GAC3B,IAAMpb,EAAMI,IAKZ,OAJAJ,EAAI,GAAKuI,EACTvI,EAAI,GAAKwI,EACTxI,EAAI,GAAK0P,EACT1P,EAAI,GAAKob,EACFpb,CACT,yBCdA9Q,EAAOC,QAAU,CACf6D,MAAO1F,EAAQ,OACfymB,KAAMzmB,EAAQ,OACd8S,OAAQ9S,EAAQ,OAChBqhB,IAAKrhB,EAAQ,OACb8U,OAAQ9U,EAAQ,OAChBgvB,WAAYhvB,EAAQ,OACpB4U,WAAY5U,EAAQ,OACpB+Q,SAAU/Q,EAAQ,OAClBsU,UAAWtU,EAAQ,2BCLrB4B,EAAOC,QAFU,SAACse,GAAG,UAAA/e,OAAS+e,EAAI,GAAG2G,QAAQ,GAAE,MAAA1lB,OAAK+e,EAAI,GAAG2G,QAAQ,GAAE,MAAA1lB,OAAK+e,EAAI,GAAG2G,QAAQ,GAAE,MAAA1lB,OAAK+e,EAAI,GAAG2G,QAAQ,GAAE,oDCYjHllB,EAAOC,QAVW,SAAC6Q,EAAK0T,EAAQ/N,GAC9B,IAAA+Y,EAAA3Z,EAAqB2O,EAAM,GAApBnL,EAACmW,EAAA,GAAElW,EAACkW,EAAA,GAAEhP,EAACgP,EAAA,GAAEtD,EAACsD,EAAA,GAMjB,OAJA1e,EAAI,GAAK2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,GAAK+J,EAAI/J,EAAO,IAAMyV,EACtEpb,EAAI,GAAK2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,GAAK+J,EAAI/J,EAAO,IAAMyV,EACtEpb,EAAI,GAAK2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,IAAM+J,EAAI/J,EAAO,IAAMyV,EACvEpb,EAAI,GAAK2F,EAAO,GAAK4C,EAAI5C,EAAO,GAAK6C,EAAI7C,EAAO,IAAM+J,EAAI/J,EAAO,IAAMyV,EAChEpb,CACT,yBCjBA,IAAQ0L,EAAQpe,EAAQ,OAAhBoe,IAURxc,EAAOC,QAR4B,SAACwvB,EAAQze,GAE1C,IADA,IAAI0e,EAAQ,EACH/wB,EAAI,EAAGA,EAAIqS,EAAYrS,IAC9B+wB,GAASD,EAAO,GAAG9wB,GAAK8wB,EAAO,GAAG9wB,GAEpC,OAAO6d,EAAMkT,EAAQ1e,CACvB,wBCFAhR,EAAOC,QAAU,CACf0vB,qBAAsBvxB,EAAQ,OAC9BwxB,4BAA6BxxB,EAAQ,OACrCyxB,wBAAyBzxB,EAAQ,OACjC0xB,uBAAwB1xB,EAAQ,OAChCmf,YAAanf,EAAQ,OACrBugB,mBAAoBvgB,EAAQ,OAC5BwgB,sBAAuBxgB,EAAQ,OAC/B2xB,cAAe3xB,EAAQ,OACvB4xB,oBAAqB5xB,EAAQ,OAC7B6xB,kBAAmB7xB,EAAQ,OAC3B8xB,eAAgB9xB,EAAQ,OACxB+xB,cAAe/xB,EAAQ,+BClBzB,IAAM6D,EAAU7D,EAAQ,OAElBmf,EAAcnf,EAAQ,OAuB5B4B,EAAOC,QAXsB,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAEzC,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,gDAC7C,IAAM0vB,EAAQ7S,EAAYpf,GAC1B,GAA0B,IAAtBA,EAAWa,OACb,OAAOoxB,EAGT,OAAOA,EAAM/Y,QAAO,SAAC7Y,EAAQ8f,GAAI,OAAK9f,EAAS8f,CAAI,GADpC,EAEjB,yBCvBA,IAAMrc,EAAU7D,EAAQ,OAClBiyB,EAAUjyB,EAAQ,OAClBkyB,EAAUlyB,EAAQ,MAElBugB,EAAqBvgB,EAAQ,OAyBnC4B,EAAOC,QAd6B,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAEhD,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,uDAC7C,IAAM+uB,EAAS9Q,EAAmBxgB,GAClC,GAA0B,IAAtBA,EAAWa,OACb,OAAOywB,EAET,IAAMjxB,EAAS,CAAC,CAAC0Q,OAAOqhB,UAAWrhB,OAAOqhB,UAAWrhB,OAAOqhB,WAAY,EAAErhB,OAAOqhB,WAAYrhB,OAAOqhB,WAAYrhB,OAAOqhB,YACvH,OAAOd,EAAOpY,QAAO,SAAC7Y,EAAQgyB,GAE5B,OADAhyB,EAAS,CAAC6xB,EAAQ7xB,EAAO,GAAIA,EAAO,GAAIgyB,EAAK,IAAKF,EAAQ9xB,EAAO,GAAIA,EAAO,GAAIgyB,EAAK,IAEvF,GAAGhyB,EACL,yBC3BA,IAAMyD,EAAU7D,EAAQ,OAClBwxB,EAA8BxxB,EAAQ,OACtCqyB,EAA6BryB,EAAQ,OAC3C0D,EAAgC1D,EAAQ,OAAhCmF,EAAKzB,EAALyB,MAAOrE,EAAK4C,EAAL5C,MAAOsE,EAAK1B,EAAL0B,MAyBtBxD,EAAOC,QAdyB,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE5C,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,mDAC7C,IAAM+uB,EAASG,EAA4BzxB,GAEvC6S,EAAa,EAMjB,OALAA,EAAa7S,EAAWkZ,QAAO,SAACrG,EAAYqB,GAC1C,OAAI7O,EAAMV,IAAIuP,IAAa9O,EAAMT,IAAIuP,GAAkB/D,KAAKc,IAAI4B,EAAY,GACxE9R,EAAM4D,IAAIuP,GAAkB/D,KAAKc,IAAI4B,EAAY,GAC9C,CACT,GAAGA,GACIyf,EAA2BhB,EAAQze,EAC5C,yBC1BA,IAAM/O,EAAU7D,EAAQ,OAElB+xB,EAAgB/xB,EAAQ,OAuB9B4B,EAAOC,QAXwB,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE3C,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,kDAC7C,IAAMgwB,EAAUP,EAAchyB,GAC9B,GAA0B,IAAtBA,EAAWa,OACb,OAAO0xB,EAGT,OAAOA,EAAQrZ,QAAO,SAAC7Y,EAAQmyB,GAAM,OAAKnyB,EAASmyB,CAAM,GAD1C,EAEjB,yBCvBA,IAAM1uB,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEhB2hB,EAAQ,IAAIC,QAwElBhgB,EAAOC,QAba,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAEhC,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAMiD,EAAUxF,EAAWyF,KAAI,SAACyO,GAC9B,OAAI7O,EAAMV,IAAIuP,GAvDe,EAwDzB9O,EAAMT,IAAIuP,GA9CS,SAACA,GAC1B,IAAIiM,EAAOyB,EAAMxL,IAAIlC,GACrB,OAAIiM,IAGJA,EADc/a,EAAMkQ,QAAQpB,GACfgF,QAAO,SAACiH,EAAM7L,GAAI,OAAK6L,GAAQ7L,EAAK,GAAG,GAAKA,EAAK,GAAG,GAAKA,EAAK,GAAG,GAAKA,EAAK,GAAG,GAAG,GAAE,GAChG6L,GAAQ,GAERyB,EAAMle,IAAIwQ,EAAUiM,GAEbA,EACT,CAmCoCsS,CAAmBve,GAC/CnT,EAAM4D,IAAIuP,GA5BS,SAACA,GAC1B,IAAIiM,EAAOyB,EAAMxL,IAAIlC,GACrB,OAAIiM,IAGJA,EADiBpf,EAAMC,WAAWkT,GAClBgF,QAAO,SAACiH,EAAMlf,GAAO,OAAKkf,EAAOxe,EAAMyd,YAAYne,EAAQ,GAAE,GAE7E2gB,EAAMle,IAAIwQ,EAAUiM,GAEbA,EACT,CAkBoCuS,CAAmBxe,GAC5C,CACT,IACA,OAA0B,IAAnB1O,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBC7EA,IAAM1B,EAAU7D,EAAQ,OAElBgU,EAAOhU,EAAQ,OACfyY,EAAOzY,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEhB2hB,EAAQ,IAAIC,QA2HlBhgB,EAAOC,QAboB,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAEvC,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAMiD,EAAUxF,EAAWyF,KAAI,SAACyO,GAC9B,OAAI7O,EAAMV,IAAIuP,GA7GgB,SAACA,GACjC,IAAIye,EAAc/Q,EAAMxL,IAAIlC,GAC5B,GAAIye,EAAa,OAAOA,EAExB,IAEIC,EAFE3gB,EAAS5M,EAAMgQ,SAASnB,GAI5B0e,EADoB,IAAlB3gB,EAAOpR,OACEoT,EAAKlB,SAELkB,EAAKtO,MAAMsM,EAAO,IAE/B,IAAI4gB,EAAW5e,EAAKtO,MAAMitB,GAa1B,OAXA3gB,EAAO3R,SAAQ,SAAC6R,GACd8B,EAAK/C,IAAI0hB,EAAUA,EAAUzgB,GAC7B8B,EAAKhD,IAAI4hB,EAAUA,EAAU1gB,EAC/B,IACAygB,EAAW,CAACA,EAAS,GAAIA,EAAS,GAAI,GACtCC,EAAW,CAACA,EAAS,GAAIA,EAAS,GAAI,GAEtCF,EAAc,CAACC,EAAUC,GAEzBjR,EAAMle,IAAIwQ,EAAUye,GAEbA,CACT,CAmFoCG,CAA0B5e,GACtD9O,EAAMT,IAAIuP,GA9EgB,SAACA,GACjC,IAAIye,EAAc/Q,EAAMxL,IAAIlC,GAC5B,GAAIye,EAAa,OAAOA,EAExB,IAEIC,EAFE3gB,EAAS7M,EAAMiQ,SAASnB,GAI5B0e,EADoB,IAAlB3gB,EAAOpR,OACEoT,EAAKlB,SAELkB,EAAKtO,MAAMsM,EAAO,IAE/B,IAAI4gB,EAAW5e,EAAKtO,MAAMitB,GAc1B,OAZA3gB,EAAO3R,SAAQ,SAAC6R,GACd8B,EAAK/C,IAAI0hB,EAAUA,EAAUzgB,GAC7B8B,EAAKhD,IAAI4hB,EAAUA,EAAU1gB,EAC/B,IAEAygB,EAAW,CAACA,EAAS,GAAIA,EAAS,GAAI,GACtCC,EAAW,CAACA,EAAS,GAAIA,EAAS,GAAI,GAEtCF,EAAc,CAACC,EAAUC,GAEzBjR,EAAMle,IAAIwQ,EAAUye,GAEbA,CACT,CAmDoCI,CAA0B7e,GACtDnT,EAAM4D,IAAIuP,GA9CgB,SAACA,GACjC,IAAIye,EAAc/Q,EAAMxL,IAAIlC,GAC5B,GAAIye,EAAa,OAAOA,EAExB,IAAMla,EAAW1X,EAAMC,WAAWkT,GAE9B0e,EAAWla,EAAK3F,SACpB,GAAI0F,EAAS5X,OAAS,EAAG,CACvB,IAAMoR,EAAStQ,EAAM0T,SAASoD,EAAS,IACvCC,EAAKgO,KAAKkM,EAAU3gB,EAAO,GAC7B,CACA,IAAI4gB,EAAWna,EAAK/S,MAAMitB,GAgB1B,OAdAna,EAASnY,SAAQ,SAACW,GAChBU,EAAM0T,SAASpU,GAASX,SAAQ,SAAC6R,GAC/BuG,EAAKxH,IAAI0hB,EAAUA,EAAUzgB,GAC7BuG,EAAKzH,IAAI4hB,EAAUA,EAAU1gB,EAC/B,GACF,IAEAygB,EAAW,CAACA,EAAS,GAAIA,EAAS,GAAIA,EAAS,IAC/CC,EAAW,CAACA,EAAS,GAAIA,EAAS,GAAIA,EAAS,IAE/CF,EAAc,CAACC,EAAUC,GAEzBjR,EAAMle,IAAIwQ,EAAUye,GAEbA,CACT,CAkBoCK,CAA0B9e,GACnD,CAAC,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,GAC5B,IACA,OAA0B,IAAnB1O,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCnIA,IAAM1B,EAAU7D,EAAQ,OAElBgU,EAAOhU,EAAQ,OACfyY,EAAOzY,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEhBgzB,EAAyB,IAAIpR,QAuInChgB,EAAOC,QAZuB,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAG1C,IAAMmB,GAFNxF,EAAa8D,EAAQ9D,IAEMyF,KAAI,SAACyO,GAC9B,OAAI7O,EAAMV,IAAIuP,GAzHmB,SAACA,GACpC,IAAI4N,EAAiBmR,EAAuB7c,IAAIlC,GAChD,QAAuBM,IAAnBsN,EAA8B,OAAOA,EAEzC,IAAMoR,EAAWxa,EAAK3F,SAClB+G,EAAS,EAEP7H,EAAS5M,EAAMgQ,SAASnB,GAE9B,GAAIjC,EAAOpR,OAAS,EAAG,CAErB,IAAIsyB,EAAY,EACVC,EAAO1a,EAAK3F,SAClBd,EAAO3R,SAAQ,SAAC6R,GACduG,EAAKgD,IAAIwX,EAAUA,EAAUxa,EAAKyY,SAASiC,EAAMjhB,EAAO,IACxDghB,GACF,IACAza,EAAKuC,MAAMiY,EAAUA,EAAU,EAAIC,GAGnClhB,EAAO3R,SAAQ,SAAC6R,GACd2H,EAAS3J,KAAKc,IAAI6I,EAAQ7F,EAAKwc,gBAAgByC,EAAU/gB,GAC3D,IACA2H,EAAS3J,KAAKoD,KAAKuG,EACrB,CAKA,OAHAgI,EAAiB,CAACoR,EAAUpZ,GAC5BmZ,EAAuBvvB,IAAIwQ,EAAU4N,GAE9BA,CACT,CA2FoCuR,CAA6Bnf,GACzD9O,EAAMT,IAAIuP,GAtFmB,SAACA,GACpC,IAAI4N,EAAiBmR,EAAuB7c,IAAIlC,GAChD,QAAuBM,IAAnBsN,EAA8B,OAAOA,EAEzC,IAAMoR,EAAWxa,EAAK3F,SAClB+G,EAAS,EAEPzF,EAAQjP,EAAMkQ,QAAQpB,GAE5B,GAAIG,EAAMxT,OAAS,EAAG,CAEpB,IAAIsyB,EAAY,EACVC,EAAO1a,EAAK3F,SAClBsB,EAAM/T,SAAQ,SAACgU,GACboE,EAAKgD,IAAIwX,EAAUA,EAAUxa,EAAKyY,SAASiC,EAAM9e,EAAK,GAAI,IAC1D6e,GACF,IACAza,EAAKuC,MAAMiY,EAAUA,EAAU,EAAIC,GAGnC9e,EAAM/T,SAAQ,SAACgU,GACbwF,EAAS3J,KAAKc,IAAI6I,EAAQ7F,EAAKwc,gBAAgByC,EAAU5e,EAAK,IAChE,IACAwF,EAAS3J,KAAKoD,KAAKuG,EACrB,CAKA,OAHAgI,EAAiB,CAACoR,EAAUpZ,GAC5BmZ,EAAuBvvB,IAAIwQ,EAAU4N,GAE9BA,CACT,CAwDoCwR,CAA6Bpf,GACzDnT,EAAM4D,IAAIuP,GAnDmB,SAACA,GACpC,IAAI4N,EAAiBmR,EAAuB7c,IAAIlC,GAChD,QAAuBM,IAAnBsN,EAA8B,OAAOA,EAEzC,IAAMoR,EAAWxa,EAAK3F,SAClB+G,EAAS,EAEPrB,EAAW1X,EAAMC,WAAWkT,GAElC,GAAIuE,EAAS5X,OAAS,EAAG,CAEvB,IAAIsyB,EAAY,EAChB1a,EAASnY,SAAQ,SAACW,GAChBU,EAAM0T,SAASpU,GAASX,SAAQ,SAAC6R,GAC/BuG,EAAKgD,IAAIwX,EAAUA,EAAU/gB,GAC7BghB,GACF,GACF,IACAza,EAAKuC,MAAMiY,EAAUA,EAAU,EAAIC,GAGnC1a,EAASnY,SAAQ,SAACW,GAChBU,EAAM0T,SAASpU,GAASX,SAAQ,SAAC6R,GAC/B2H,EAAS3J,KAAKc,IAAI6I,EAAQpB,EAAK+X,gBAAgByC,EAAU/gB,GAC3D,GACF,IACA2H,EAAS3J,KAAKoD,KAAKuG,EACrB,CAKA,OAHAgI,EAAiB,CAACoR,EAAUpZ,GAC5BmZ,EAAuBvvB,IAAIwQ,EAAU4N,GAE9BA,CACT,CAkBoCyR,CAA6Brf,GACtD,CAAC,CAAC,EAAG,EAAG,GAAI,EACrB,IACA,OAA0B,IAAnB1O,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBC/IA,IAAM1B,EAAU7D,EAAQ,OAElBugB,EAAqBvgB,EAAQ,OAyBnC4B,EAAOC,QAde,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAGlC,IAAMmB,GAFNxF,EAAa8D,EAAQ9D,IAEMyF,KAAI,SAACyO,GAC9B,IAAMod,EAAS9Q,EAAmBtM,GAClC,MAAO,CACJod,EAAO,GAAG,IAAOA,EAAO,GAAG,GAAKA,EAAO,GAAG,IAAM,EAChDA,EAAO,GAAG,IAAOA,EAAO,GAAG,GAAKA,EAAO,GAAG,IAAM,EAChDA,EAAO,GAAG,IAAOA,EAAO,GAAG,GAAKA,EAAO,GAAG,IAAM,EAErD,IACA,OAA0B,IAAnB9rB,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCzBA,IAAM1B,EAAU7D,EAAQ,OAElByY,EAAOzY,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAEhBuzB,EAAsB,IAAI3R,QAkGhChgB,EAAOC,QAZqB,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAGxC,IAAMmB,GAFNxF,EAAa8D,EAAQ9D,IAEMyF,KAAI,SAACyO,GAE9B,OAAI9O,EAAMT,IAAIuP,GAnFe,SAACA,GAChC,IAAIuf,EAAeD,EAAoBpd,IAAIlC,GAC3C,QAAqBM,IAAjBif,EAA4B,OAAOA,EAEvC,IAAMpf,EAAQjP,EAAMkQ,QAAQpB,GAExBiM,EAAO,EACPjF,EAAI,EACJC,EAAI,EACR,GAAI9G,EAAMxT,OAAS,EAAG,CACpB,IAAK,IAAIL,EAAI,EAAGA,EAAI6T,EAAMxT,OAAQL,IAAK,CACrC,IAAMgvB,EAAKnb,EAAM7T,GAAG,GACdivB,EAAKpb,EAAM7T,GAAG,GAEd4S,EAAIoc,EAAG,GAAKC,EAAG,GAAKD,EAAG,GAAKC,EAAG,GACrCtP,GAAQ/M,EACR8H,IAAMsU,EAAG,GAAKC,EAAG,IAAMrc,EACvB+H,IAAMqU,EAAG,GAAKC,EAAG,IAAMrc,CACzB,CAGA,IAAM/C,EAAI,GAAY,GAFtB8P,GAAQ,IAGRjF,GAAK7K,EACL8K,GAAK9K,CACP,CAKA,OAHAojB,EAAe/a,EAAK7D,WAAWqG,EAAGC,EAAG,GAErCqY,EAAoB9vB,IAAIwQ,EAAUuf,GAC3BA,CACT,CAqDoCC,CAAyBxf,GACrDnT,EAAM4D,IAAIuP,GAhDe,SAACA,GAChC,IAAIuf,EAAeD,EAAoBpd,IAAIlC,GAC3C,QAAqBM,IAAjBif,EAA4B,OAAOA,EAEvCA,EAAe/a,EAAK3F,SAEpB,IAAM0F,EAAW1X,EAAMC,WAAWkT,GAClC,GAAwB,IAApBuE,EAAS5X,OAAc,OAAO4yB,EAElC,IAAIE,EAAc,EACZtN,EAAS3N,EAAK3F,SAoBpB,OAnBA0F,EAASnY,SAAQ,SAACW,GAGhB,IADA,IAAMO,EAAWP,EAAQO,SAChBhB,EAAI,EAAGA,EAAIgB,EAASX,OAAS,EAAGL,IAAK,CAC5CkY,EAAKsF,MAAMqI,EAAQ7kB,EAAShB,EAAI,GAAIgB,EAAShB,EAAI,IACjD,IAAMgyB,EAAS9Z,EAAK4I,IAAI9f,EAAS,GAAI6kB,GAAU,EAE/CsN,GAAenB,EAEf9Z,EAAKgD,IAAI2K,EAAQ7kB,EAAS,GAAIA,EAAShB,EAAI,IAC3CkY,EAAKgD,IAAI2K,EAAQA,EAAQ7kB,EAAShB,EAAI,IACtC,IAAMozB,EAAiBlb,EAAKuC,MAAMoL,EAAQA,EAAQ,EAAI,EAAImM,GAE1D9Z,EAAKgD,IAAI+X,EAAcA,EAAcG,EACvC,CACF,IACAlb,EAAKuC,MAAMwY,EAAcA,EAAc,EAAIE,GAE3CH,EAAoB9vB,IAAIwQ,EAAUuf,GAC3BA,CACT,CAiBoCI,CAAyB3f,GAClD,CAAC,EAAG,EAAG,EAChB,IACA,OAA0B,IAAnB1O,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCvGA,IAAM1B,EAAU7D,EAAQ,OAElBugB,EAAqBvgB,EAAQ,OAyBnC4B,EAAOC,QAdmB,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAGtC,IAAMmB,GAFNxF,EAAa8D,EAAQ9D,IAEMyF,KAAI,SAACyO,GAC9B,IAAMye,EAAcnS,EAAmBtM,GACvC,MAAO,CACLye,EAAY,GAAG,GAAKA,EAAY,GAAG,GACnCA,EAAY,GAAG,GAAKA,EAAY,GAAG,GACnCA,EAAY,GAAG,GAAKA,EAAY,GAAG,GAEvC,IACA,OAA0B,IAAnBntB,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCzBA,IAAM1B,EAAU7D,EAAQ,OACxB0D,EAAgC1D,EAAQ,OAAhCmF,EAAKzB,EAALyB,MAAOrE,EAAK4C,EAAL5C,MAAOsE,EAAK1B,EAAL0B,MAEhBitB,EAA6BryB,EAAQ,OACrCugB,EAAqBvgB,EAAQ,OA2CnC4B,EAAOC,QAbgB,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAEnC,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAMiD,EAAUxF,EAAWyF,KAAI,SAACyO,GAC9B,OAAI7O,EAAMV,IAAIuP,IACV9O,EAAMT,IAAIuP,GA9BY,SAACA,GAAQ,OAAKoe,EAA2B9R,EAAmBtM,GAAW,EAAE,CA6BnE4f,CAAsB5f,GAElDnT,EAAM4D,IAAIuP,GAnBY,SAACA,GAAQ,OAAKoe,EAA2B9R,EAAmBtM,GAAW,EAAE,CAmBnE6f,CAAsB7f,GAC/C,CACT,IACA,OAA0B,IAAnB1O,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBC7CA,IAAM1B,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEhB2hB,EAAQ,IAAIC,QA4DlBhgB,EAAOC,QAbe,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAElC,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAMiD,EAAUxF,EAAWyF,KAAI,SAACyO,GAC9B,OAAI7O,EAAMV,IAAIuP,IACV9O,EAAMT,IAAIuP,GA5CiB,EA6C3BnT,EAAM4D,IAAIuP,GA5BW,SAACA,GAC5B,IAAIse,EAAS5Q,EAAMxL,IAAIlC,GACvB,OAAIse,IAGJA,EADiBzxB,EAAMC,WAAWkT,GAChBgF,QAAO,SAACsZ,EAAQvxB,GAAO,OAAKuxB,EAAS7wB,EAAM+e,oBAAoBzf,EAAQ,GAAE,GAE3F2gB,EAAMle,IAAIwQ,EAAUse,GAEbA,EACT,CAkBoCwB,CAAqB9f,GAC9C,CACT,IACA,OAA0B,IAAnB1O,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCjEA,IAAMyO,EAAOhU,EAAQ,OAEfmF,EAAQnF,EAAQ,OAiDtB4B,EAAOC,QALkB,SAAC8uB,EAASnY,GACjC,IAAMpE,EAAQoE,EAAShT,KAAI,SAACxE,GAAO,OA3Cb,SAAC2vB,EAAS3vB,GAGhC,GAAIA,EAAQO,SAASX,OAAS,EAC5B,OAAO,KAET,IAAMozB,EAAe,GACfC,EAAWjzB,EAAQO,SAASkD,QAAO,SAACnD,EAAQf,GAChD,OAAIe,EAAO,GAAK,IACd0yB,EAAaxzB,KAAKD,IACX,EAGX,IAEA,GAAwB,IAApB0zB,EAASrzB,OACX,MAAM,IAAI0B,MAAM,8DAGlB,IAAM4xB,EAAWD,EAASzuB,KAAI,SAACuX,GAC7B,IAAM9B,EAAI/K,KAAKqK,MAAMwC,EAAG,GAAK4T,GAAWA,EAAU,EAC5CzV,EAAIhL,KAAKqK,MAAMwC,EAAG,GAAK4T,GAAWA,EAAU,EAClD,OAAO3c,EAAKY,WAAWqG,EAAGC,EAC5B,IAEA,GAAIlH,EAAKc,OAAOof,EAAS,GAAIA,EAAS,IAAK,OAAO,KAElD,IAAMhjB,EAAI8iB,EAAa,GAAKA,EAAa,GACzC,GAAU,IAAN9iB,GAAiB,IAANA,EAKb,MAAM,IAAI5O,MAAM,6DAElB,OANY,IAAN4O,GACFgjB,EAAShf,UAKNgf,CACT,CAO0CC,CAAgBxD,EAAS3vB,EAAQ,IAAEyD,QAAO,SAACzD,GAAO,OAAkB,OAAZA,CAAgB,IAChH,OAAOmE,EAAM2N,OAAOsB,EACtB,yBCzCAxS,EAAOC,QAAU,CACfutB,UAAWpvB,EAAQ,OACnBo0B,SAAUp0B,EAAQ,OAClB+W,SAAU/W,EAAQ,OAClBq0B,MAAOr0B,EAAQ,+BCZjB,IAAM6D,EAAU7D,EAAQ,OAClBs0B,EAA0Bt0B,EAAQ,MAElCmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAEhBu0B,EAAiBv0B,EAAQ,OACzBw0B,EAAiBx0B,EAAQ,OAuC/B4B,EAAOC,QAfW,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE9B,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAKgyB,EAAwBv0B,GAC3B,MAAM,IAAIuC,MAAM,6CAGlB,IAAM2R,EAAWlU,EAAW,GAE5B,OAAIoF,EAAMT,IAAIuP,GAAkBsgB,EAAex0B,GAC3Ce,EAAM4D,IAAIuP,GAAkBugB,EAAez0B,GACxCkU,CACT,yBC5CA,IAAMpQ,EAAU7D,EAAQ,OAElBc,EAAQd,EAAQ,OAEhB8xB,EAAiB9xB,EAAQ,OAEzBy0B,EAAmBz0B,EAAQ,OAC3B00B,EAAY10B,EAAQ,OACpBw0B,EAAiBx0B,EAAQ,OAkB/B4B,EAAOC,QAVW,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE9B,IAAMuwB,GADN50B,EAAa8D,EAAQ9D,IACYyF,KAAI,SAACyO,GAAQ,OAAKygB,EAAU,CAAEE,IAAK,EAAGC,GAAI,GAAK5gB,EAAS,IAEnFrO,EAAW4uB,EAAeG,GAC1BhE,EAAUmB,EAAelsB,GAE/B,OAAO6uB,EAAiB9D,EAAS7vB,EAAMC,WAAW6E,GACpD,yBCxBA,IAAM/B,EAAU7D,EAAQ,OAElB80B,EAAe90B,EAAQ,OAEvB+0B,EAAe/0B,EAAQ,OAoB7B4B,EAAOC,QAZW,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAG9B,IAAI4wB,GAFJj1B,EAAa8D,EAAQ9D,IAEQ4X,QAM7B,OALA5X,EAAWM,SAAQ,SAAC4T,GAClB+gB,EAAcD,EAAaC,EAAa/gB,EAC1C,IAEA+gB,EAAcF,EAAaE,EAE7B,yBCtBA,IAAMl0B,EAAQd,EAAQ,OAEhBi1B,EAAaj1B,EAAQ,OACnBk1B,EAASl1B,EAAQ,OAAjBk1B,KA6BRtzB,EAAOC,QApBmB,SAACszB,EAAWC,GACpC,IAAKH,EAAWE,EAAWC,GACzB,OAAOt0B,EAAMgS,SAGf,IAAMK,EAAI,IAAI+hB,EAAKp0B,EAAMC,WAAWo0B,IAC9BxlB,EAAI,IAAIulB,EAAKp0B,EAAMC,WAAWq0B,IAEpCjiB,EAAE2F,SACFnJ,EAAE0lB,OAAOliB,GACTxD,EAAEmJ,SACF3F,EAAEkiB,OAAO1lB,GACTA,EAAE0lB,OAAOliB,GACTA,EAAEmiB,YAAY3lB,EAAE4lB,eAChBpiB,EAAE2F,SAEF,IAAMC,EAAc5F,EAAEoiB,cACtB,OAAOz0B,EAAMgS,OAAOiG,EACtB,yBC9BA,IAAQqF,EAAQpe,EAAQ,OAAhBoe,IAEFmC,EAAqBvgB,EAAQ,OAgCnC4B,EAAOC,QAvBY,SAACszB,EAAWC,GAE7B,GAAmC,IAA9BD,EAAU3c,SAAS5X,QAAgD,IAA9Bw0B,EAAU5c,SAAS5X,OAC3D,OAAO,EAGT,IAAM40B,EAAUjV,EAAmB4U,GAC7BM,EAAOD,EAAQ,GACfE,EAAOF,EAAQ,GAEfG,EAAUpV,EAAmB6U,GAC7BQ,EAAOD,EAAQ,GACfE,EAAOF,EAAQ,GAErB,QAAKC,EAAK,GAAKF,EAAK,GAAMtX,OACrBqX,EAAK,GAAKI,EAAK,GAAMzX,OACrBwX,EAAK,GAAKF,EAAK,GAAMtX,OACrBqX,EAAK,GAAKI,EAAK,GAAMzX,OACrBwX,EAAK,GAAKF,EAAK,GAAMtX,MACrBqX,EAAK,GAAKI,EAAK,GAAMzX,MAE5B,yBChCA,IAAMva,EAAU7D,EAAQ,OAGlBc,EAAQd,EAAQ,OAGhB81B,EAAgB91B,EAAQ,OAoC9B4B,EAAOC,QAbU,WAAgB,QAAAoC,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,GAAAF,UAAAE,GAE1B,GAAuB,KADvBlE,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1C,IAAMiD,EAAUrF,EAAQsF,KAAI,SAAClF,GAG3B,OAAIQ,EAAM4D,IAAIpE,GAAgBw1B,EAAcx1B,GACrCA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCxCA,IAAMkT,EAAOzY,EAAQ,OACf8xB,EAAiB9xB,EAAQ,OAEzBc,EAAQd,EAAQ,OAyFtB4B,EAAOC,QArEe,SAACoS,GAGrB,IAAM8hB,EAAMjE,EAAe7d,GACrBuE,EAAW1X,EAAMC,WAAWkT,GAC5B+hB,EAAKxd,EAAS5X,OAEdq1B,EAAkB,IAAIpgB,IACtBsd,EAAO1a,EAAK3F,SAClB0F,EAASnY,SAAQ,SAACW,EAASuC,GACzBvC,EAAQO,SAASlB,SAAQ,SAAC6R,IAzBR,SAAC1M,EAAK0M,EAAO3O,GACjC,IAAM0S,EAAM,GAAH7U,OAAM8Q,GACTgkB,EAAU1wB,EAAI2Q,IAAIF,QACR1B,IAAZ2hB,EACF1wB,EAAI/B,IAAIwS,EAAK,CAAC1S,IAEd2yB,EAAQ11B,KAAK+C,EAEjB,CAkBM4yB,CAAcF,EAAiBxd,EAAK3T,KAAKquB,EAAMjhB,EAAO6jB,GAAMxyB,EAC9D,GACF,IAEA,IAAM6yB,EAAoB5d,EAAShT,KAAI,SAACxE,GACtC,IAjCYq1B,EAiCRC,EAAU,GAId,OAHAt1B,EAAQO,SAASlB,SAAQ,SAAC6R,GACxBokB,EAAUA,EAAQl1B,OAvBJ,SAACoE,EAAK0M,GACxB,IAAM+D,EAAM,GAAH7U,OAAM8Q,GACf,OAAO1M,EAAI2Q,IAAIF,EACjB,CAoB+BsgB,CAAYN,EAAiBxd,EAAK3T,KAAKquB,EAAMjhB,EAAO6jB,IAC/E,IACO,CAAEje,EAAG,EAAG5G,GArCHmlB,EAqCaC,EArCHD,EAAMG,MAAK,SAACrjB,EAAGxD,GAAC,OAAKwD,EAAIxD,CAAC,IAAElL,QAAO,SAAC2tB,EAAMnR,EAAKwV,GAAG,OAAMxV,GAAOmR,IAASqE,EAAIxV,EAAM,EAAE,KAsC5G,IAEAgV,EAAgB9d,QAOhB,IAFA,IAAIue,EAAS,EACPC,EAAOP,EAAkBx1B,OAAMg2B,EAAA,WAEnC,IAAMC,EAAOT,EAAkB71B,GAE/B,GAAIs2B,EAAK/e,EAAI,EAAG,CACd,IAAMwe,EAAU,IAAInyB,MAAM6xB,GAC1BM,EAAQ/1B,IAAK,EACb,GACEm2B,EAAS,EAETJ,EAAQj2B,SAAQ,SAACyX,EAAGjE,GAClB,IAAMijB,EAAOV,EAAkBviB,GAE/B,GAAIijB,EAAKhf,EAAI,EAAG,CACdgf,EAAKhf,GAAK,EACV,IAAK,IAAI5G,EAAI,EAAGA,EAAI4lB,EAAK5lB,EAAEtQ,OAAQsQ,IACjColB,EAAQQ,EAAK5lB,EAAEA,KAAM,EAEvBwlB,GACF,CACF,UACOA,EAAS,GAClBG,EAAKP,QAAUA,CACjB,CACF,EAvBS/1B,EAAI,EAAGA,EAAIo2B,EAAMp2B,IAAGq2B,IA4B7B,IADA,IAAMjC,EAAgB,GAAEoC,EAAA,WAEtB,GAAIX,EAAkB71B,GAAG+1B,QAAS,CAChC,IAAMvd,EAAc,GACpBqd,EAAkB71B,GAAG+1B,QAAQj2B,SAAQ,SAACyX,EAAG7H,GAAC,OAAK8I,EAAYvY,KAAKgY,EAASvI,GAAG,IAC5E0kB,EAAcn0B,KAAKM,EAAMgS,OAAOiG,GAClC,CACF,EANSxY,EAAI,EAAGA,EAAIo2B,EAAMp2B,IAAGw2B,IAQ7B,OAAOpC,CACT,yBC1FA,IAAM9wB,EAAU7D,EAAQ,OAClBs0B,EAA0Bt0B,EAAQ,MAElCmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAEhBg3B,EAAgBh3B,EAAQ,OACxBi3B,EAAgBj3B,EAAQ,MAuC9B4B,EAAOC,QAfU,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE7B,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAKgyB,EAAwBv0B,GAC3B,MAAM,IAAIuC,MAAM,4CAGlB,IAAM2R,EAAWlU,EAAW,GAE5B,OAAIoF,EAAMT,IAAIuP,GAAkB+iB,EAAcj3B,GAC1Ce,EAAM4D,IAAIuP,GAAkBgjB,EAAcl3B,GACvCkU,CACT,yBC5CA,IAAMpQ,EAAU7D,EAAQ,OAElBc,EAAQd,EAAQ,OAEhB8xB,EAAiB9xB,EAAQ,OAEzBy0B,EAAmBz0B,EAAQ,OAC3B00B,EAAY10B,EAAQ,OACpBi3B,EAAgBj3B,EAAQ,MAkB9B4B,EAAOC,QAVU,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE7B,IAAMuwB,GADN50B,EAAa8D,EAAQ9D,IACYyF,KAAI,SAACyO,GAAQ,OAAKygB,EAAU,CAAEE,IAAK,EAAGC,GAAI,GAAK5gB,EAAS,IAEnFrO,EAAWqxB,EAActC,GACzBhE,EAAUmB,EAAelsB,GAE/B,OAAO6uB,EAAiB9D,EAAS7vB,EAAMC,WAAW6E,GACpD,wBCxBA,IAAM/B,EAAU7D,EAAQ,OAElB80B,EAAe90B,EAAQ,OAEvBk3B,EAAcl3B,EAAQ,OAoB5B4B,EAAOC,QAZU,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAG7B,IAAI4wB,GAFJj1B,EAAa8D,EAAQ9D,IAEQ4X,QAM7B,OALA5X,EAAWM,SAAQ,SAAC4T,GAClB+gB,EAAckC,EAAYlC,EAAa/gB,EACzC,IAEA+gB,EAAcF,EAAaE,EAE7B,yBCtBA,IAAMl0B,EAAQd,EAAQ,OAEhBi1B,EAAaj1B,EAAQ,OACnBk1B,EAASl1B,EAAQ,OAAjBk1B,KA2BRtzB,EAAOC,QAlBkB,SAACszB,EAAWC,GACnC,IAAKH,EAAWE,EAAWC,GACzB,OAAOt0B,EAAM4E,MAAMyvB,GAGrB,IAAMhiB,EAAI,IAAI+hB,EAAKp0B,EAAMC,WAAWo0B,IAC9BxlB,EAAI,IAAIulB,EAAKp0B,EAAMC,WAAWq0B,IAEpCjiB,EAAE2F,SACF3F,EAAEkiB,OAAO1lB,GACTA,EAAE0lB,OAAOliB,GAAG,GACZA,EAAEmiB,YAAY3lB,EAAE4lB,eAChBpiB,EAAE2F,SAEF,IAAMC,EAAc5F,EAAEoiB,cACtB,OAAOz0B,EAAMgS,OAAOiG,EACtB,yBC5BA,IAAMN,EAAOzY,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OA+BtB4B,EAAOC,QATW,SAAC1B,EAAS8T,GAC1B,IAEMuE,EAFQrT,EAAMkQ,QAAQpB,GAELzO,KAAI,SAAC6O,GAAI,OApBjB,SAACugB,EAAIC,EAAIxgB,GACxB,IAAMrC,EAAS,CACbyG,EAAKyY,SAASzY,EAAK3F,SAAUuB,EAAK,GAAIugB,GACtCnc,EAAKyY,SAASzY,EAAK3F,SAAUuB,EAAK,GAAIugB,GACtCnc,EAAKyY,SAASzY,EAAK3F,SAAUuB,EAAK,GAAIwgB,GACtCpc,EAAKyY,SAASzY,EAAK3F,SAAUuB,EAAK,GAAIwgB,IAExC,OAAOnzB,EAAMoR,OAAOd,EACtB,CAYuCmlB,CAASh3B,EAAQy0B,GAAIz0B,EAAQ00B,GAAIxgB,EAAK,IAG3E,OADevT,EAAMgS,OAAO0F,EAE9B,mECjCM7W,EAAQ3B,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAQhBo3B,EAAI,wBACR,SAAAA,EAAaC,GAAQC,EAAA,KAAAF,GACnB3T,KAAK9hB,MAAQ,KACb8hB,KAAK8T,MAAQ,KACb9T,KAAK+T,KAAO,KACZ/T,KAAKgU,iBAAmB,GACxBhU,KAAK4T,OAASA,CAChB,CA4HC,OA1HDK,EAAAN,EAAA,EAAAnhB,IAAA,SAAAyB,MACA,WAGE,IAFA,IACIigB,EADEC,EAAQ,CAACnU,MAENljB,EAAI,EAAGA,EAAIq3B,EAAMh3B,OAAQL,IAAK,EACrCo3B,EAAOC,EAAMr3B,IACJoB,QAAOg2B,EAAKh2B,MAAQA,EAAMyd,KAAKzd,EAAMmR,SAAU6kB,EAAKh2B,QACzDg2B,EAAKJ,OAAOK,EAAMp3B,KAAKm3B,EAAKJ,OAC5BI,EAAKH,MAAMI,EAAMp3B,KAAKm3B,EAAKH,MAC/B,IAAMrE,EAAOwE,EAAKJ,MAClBI,EAAKJ,MAAQI,EAAKH,KAClBG,EAAKH,KAAOrE,CACd,CACF,GAGA,CAAAld,IAAA,eAAAyB,MACA,SAAc+f,EAAkBI,GAC9B,IACIF,EADAnkB,EAAU,CAAEmkB,KAAMlU,KAAMgU,iBAAkBA,GAExCK,EAAQ,GAEd,EAAG,CAID,GAHAH,EAAOnkB,EAAQmkB,KACfF,EAAmBjkB,EAAQikB,iBAEvBE,EAAKh2B,MAAO,CAOd,IANA,IAAMA,EAAQg2B,EAAKh2B,MAEbo2B,EAAY,GACZC,EAAa,GACbC,EAAqBJ,EAA0BE,EAAYC,EAC3DE,EAAsBT,EAAiB72B,OACpCL,EAAI,EAAGA,EAAI23B,EAAqB33B,IAAK,CAC5C,IAAM43B,EAAWV,EAAiBl3B,GAC7B43B,EAASC,aAGZD,EAASE,aAAa12B,EAAOs2B,EAAoBF,EAAWC,EAAYD,EAE5E,CAEIJ,EAAKJ,OAAUS,EAAWp3B,OAAS,GAErCk3B,EAAMt3B,KAAK,CAAEm3B,KAAMA,EAAKJ,MAAOE,iBAAkBO,IAEnD,IAAMM,EAAeP,EAAUn3B,OAC/B,GAAI+2B,EAAKH,MAASc,EAAe,EAE/BR,EAAMt3B,KAAK,CAAEm3B,KAAMA,EAAKH,KAAMC,iBAAkBM,SAGhD,IAAK,IAAIx3B,EAAI,EAAGA,EAAI+3B,EAAc/3B,IAChCw3B,EAAUx3B,GAAGg4B,QAGnB,CACA/kB,EAAUskB,EAAMrhB,KAClB,YAAqBlC,IAAZf,EACX,GAGA,CAAAyC,IAAA,SAAAyB,MACA,SAAQ8gB,EAAMX,GACZ,IAAIF,EAAOlU,KACLqU,EAAQ,GACd,GACMH,EAAKF,iBAAiB72B,OAAS,GACjC43B,EAAKC,SAASC,aAAaf,EAAKF,iBAAkBI,GAEhDF,EAAKJ,OAAOO,EAAMt3B,KAAKm3B,EAAKJ,OAC5BI,EAAKH,MAAMM,EAAMt3B,KAAKm3B,EAAKH,MAC/BG,EAAOG,EAAMrhB,iBACGlC,IAATojB,EACX,GAAC,CAAA1hB,IAAA,sBAAAyB,MAED,SAAqBihB,GACnB,IAAInlB,EAAU,CAAEmkB,KAAMlU,KAAMgU,iBAAkBkB,GACxCb,EAAQ,GACd,EAAG,CACD,IAAMH,EAAOnkB,EAAQmkB,KACfF,EAAmBjkB,EAAQikB,iBAEjC,GAAgC,IAA5BA,EAAiB72B,OAArB,CAIA,IAAK+2B,EAAKh2B,MAAO,CACf,IAIMi3B,EAAWnB,EAHTvnB,KAAKC,MAAMsnB,EAAiB72B,OAAS,IAGJi4B,aACzClB,EAAKh2B,MAAQD,EAAMC,MAAMi3B,EAC3B,CAIA,IAHA,IAAMZ,EAAa,GACbD,EAAY,GACZrkB,EAAI+jB,EAAiB72B,OAClBL,EAAI,EAAGA,EAAImT,IAAKnT,EACvBk3B,EAAiBl3B,GAAG83B,aAAaV,EAAKh2B,MAAOg2B,EAAKF,iBAAkBM,EAAWC,EAAYD,GAG7F,GAAIC,EAAWp3B,OAAS,EACjB+2B,EAAKJ,QAAOI,EAAKJ,MAAQ,IAAIH,EAAKO,IAGjBjkB,IAAMskB,EAAWp3B,QAA+B,IAArBm3B,EAAUn3B,OACxC+2B,EAAKJ,MAAME,iBAAmBO,EAC5CF,EAAMt3B,KAAK,CAAEm3B,KAAMA,EAAKJ,MAAOE,iBAAkBO,IAExD,GAAID,EAAUn3B,OAAS,EAChB+2B,EAAKH,OAAMG,EAAKH,KAAO,IAAIJ,EAAKO,IAGfjkB,IAAMqkB,EAAUn3B,QAAgC,IAAtBo3B,EAAWp3B,OAExC+2B,EAAKH,KAAKC,iBAAmBM,EAC3CD,EAAMt3B,KAAK,CAAEm3B,KAAMA,EAAKH,KAAMC,iBAAkBM,IAGvDvkB,EAAUskB,EAAMrhB,KAlChB,MAFEjD,EAAUskB,EAAMrhB,KAqCpB,YAAqBlC,IAAZf,EACX,KAAC4jB,CAAA,CAnIO,GAsIVx1B,EAAOC,QAAUu1B,mEC/IThZ,EAAQpe,EAAQ,OAAhBoe,IAEF3F,EAAOzY,EAAQ,OAEf0B,EAAQ1B,EAAQ,OAEhB84B,EAAsB94B,EAAQ,OAe9B+4B,EAAe,wBAEnB,SAAAA,EAAa1B,EAAQr2B,GAASs2B,EAAA,KAAAyB,GAC5BtV,KAAK4T,OAASA,EACd5T,KAAKuV,SAAW,GAChBvV,KAAKziB,QAAUA,EACfyiB,KAAKwV,SAAU,CACjB,CAqOC,OAlODvB,EAAAqB,EAAA,EAAA9iB,IAAA,cAAAyB,MACA,SAAac,GAEX,IAAKiL,KAAKyV,aACR,MAAM,IAAI52B,MAAM,oBAElB,IAAM62B,EAAQ1V,KACdjL,EAASnY,SAAQ,SAACW,GAChBm4B,EAAMC,SAASp4B,EACjB,GACF,GAIA,CAAAiV,IAAA,SAAAyB,MACA,WACE,IAAK+L,KAAKwV,QAAS,CACjBxV,KAAKwV,SAAU,EACfxV,KAAKziB,QAAU,KAGf,IAAMq4B,EAAkB5V,KAAK4T,OAAO2B,SAC9Bz4B,EAAI84B,EAAgBC,QAAQ7V,MAClC,GAAIljB,EAAI,EAAG,MAAM,IAAI+B,MAAM,oBAC3B+2B,EAAgBniB,OAAO3W,EAAG,GAG1BkjB,KAAK4T,OAAOkC,8BACd,CACF,GAAC,CAAAtjB,IAAA,YAAAyB,MAED,WACE,OAAO+L,KAAKwV,OACd,GAAC,CAAAhjB,IAAA,aAAAyB,MAED,WACE,OAAQ+L,KAAK4T,MACf,GAEA,CAAAphB,IAAA,SAAAyB,MACA,WACE,IAAK+L,KAAKyV,aAAc,MAAM,IAAI52B,MAAM,oBACxCmhB,KAAK+V,WACP,GAAC,CAAAvjB,IAAA,aAAAyB,MAED,WACE,IAAK+L,KAAKziB,QAAS,MAAM,IAAIsB,MAAM,oBACnC,OAAOmhB,KAAKziB,OACd,GAAC,CAAAiV,IAAA,cAAAyB,MAED,SAAatX,GACX,IAEIG,EAAGsT,EAAG9D,EAAG4nB,EAFTqB,EAAW,CAACvV,MACVmU,EAAQ,CAACoB,GAEf,IAAKz4B,EAAI,EAAGA,EAAIq3B,EAAMh3B,SAAUL,EAE9B,IAAKsT,EAAI,EAAG9D,GADZipB,EAAWpB,EAAMr3B,IACQK,OAAQiT,EAAI9D,EAAG8D,KACtC8jB,EAAOqB,EAASnlB,IACP7S,QAEPZ,EAAOI,KAAKm3B,EAAK32B,SAGb22B,EAAKqB,SAASp4B,OAAS,GAAGg3B,EAAMp3B,KAAKm3B,EAAKqB,SAItD,GAKA,CAAA/iB,IAAA,eAAAyB,MACA,SAAc/V,EAAOs2B,EAAoBwB,EAAmBzB,EAAYD,GACtE,GAAItU,KAAKuV,SAASp4B,OAAQ,CACxB,IACIL,EACAsT,EACA9D,EACA4nB,EACA+B,EALE9B,EAAQ,CAACnU,KAAKuV,UAMpB,IAAKz4B,EAAI,EAAGA,EAAIq3B,EAAMh3B,OAAQL,IAE5B,IAAKsT,EAAI,EAAG9D,GADZ2pB,EAAQ9B,EAAMr3B,IACQK,OAAQiT,EAAI9D,EAAG8D,KACnC8jB,EAAO+B,EAAM7lB,IACJmlB,SAASp4B,OAAS,EACzBg3B,EAAMp3B,KAAKm3B,EAAKqB,UAGhBrB,EAAKgC,cAAch4B,EAAOs2B,EAAoBwB,EAAmBzB,EAAYD,EAIrF,MACEtU,KAAKkW,cAAch4B,EAAOs2B,EAAoBwB,EAAmBzB,EAAYD,EAEjF,GAEA,CAAA9hB,IAAA,gBAAAyB,MACA,SAAekiB,EAAQ3B,EAAoBwB,EAAmBzB,EAAYD,GACxE,IAAM/2B,EAAUyiB,KAAKziB,QACrB,GAAIA,EAAS,CACX,IAAM64B,EAAQn4B,EAAM8e,sBAAsBxf,GACpC84B,EAAeD,EAAM,GAAKzb,EAC1B2b,EAAeF,EACf3oB,EAAIuH,EAAK4I,IAAIuY,EAAQG,GAAgBH,EAAO,GAClD,GAAI1oB,EAAI4oB,EACN9B,EAAWx3B,KAAKijB,WACX,GAAIvS,GAAK4oB,EACd/B,EAAUv3B,KAAKijB,UACV,CACL,IAAMuW,EAAclB,EAAoBc,EAAQ54B,GAChD,OAAQg5B,EAAYC,MAClB,KAAK,EAEHhC,EAAmBz3B,KAAKijB,MACxB,MAEF,KAAK,EAEHgW,EAAkBj5B,KAAKijB,MACvB,MAEF,KAAK,EAEHuU,EAAWx3B,KAAKijB,MAChB,MAEF,KAAK,EAEHsU,EAAUv3B,KAAKijB,MACf,MAEF,KAAK,EAEH,GAAIuW,EAAYzC,MAAO,CACrB,IAAM2C,EAAYzW,KAAK2V,SAASY,EAAYzC,OAC5CS,EAAWx3B,KAAK05B,EAClB,CACA,GAAIF,EAAYxC,KAAM,CACpB,IAAM2C,EAAW1W,KAAK2V,SAASY,EAAYxC,MAC3CO,EAAUv3B,KAAK25B,EACjB,EAGN,CACF,CACF,GAMA,CAAAlkB,IAAA,WAAAyB,MACA,SAAU1W,GACR,IAAMo5B,EAAW,IAAIrB,EAAgBtV,KAAMziB,GAE3C,OADAyiB,KAAKuV,SAASx4B,KAAK45B,GACZA,CACT,GAAC,CAAAnkB,IAAA,YAAAyB,MAED,WACE,IAEInX,EAAGsT,EAAG9D,EAAG4nB,EAFTqB,EAAW,CAACvV,MACVmU,EAAQ,CAACoB,GAEf,IAAKz4B,EAAI,EAAGA,EAAIq3B,EAAMh3B,OAAQL,IAE5B,IAAKsT,EAAI,EAAG9D,GADZipB,EAAWpB,EAAMr3B,IACQK,OAAQiT,EAAI9D,EAAG8D,KACtC8jB,EAAOqB,EAASnlB,IACP7S,UACP22B,EAAK32B,QAAUU,EAAMoX,OAAO6e,EAAK32B,UAE/B22B,EAAKqB,SAASp4B,OAAS,GAAGg3B,EAAMp3B,KAAKm3B,EAAKqB,SAGpD,GAIA,CAAA/iB,IAAA,+BAAAyB,MACA,WACE+L,KAAKziB,QAAU,KACXyiB,KAAK4T,QACP5T,KAAK4T,OAAOkC,8BAEhB,GAAC,CAAAtjB,IAAA,QAAAyB,MAED,WAGE,IAFA,IAAIshB,EAAW,CAACvV,MACVmU,EAAQ,CAACoB,GACNz4B,EAAI,EAAGA,EAAIq3B,EAAMh3B,SAAUL,EAGlC,IADA,IAAMwP,GADNipB,EAAWpB,EAAMr3B,IACEK,OACViT,EAAI,EAAGA,EAAI9D,EAAG8D,IAAK,CAC1B,IAAM8jB,EAAOqB,EAASnlB,GAClB8jB,EAAK32B,UACP22B,EAAK32B,QAAU,MAEb22B,EAAKN,SACPM,EAAKN,OAAS,MAEZM,EAAKqB,SAASp4B,OAAS,GAAGg3B,EAAMp3B,KAAKm3B,EAAKqB,UAC9CrB,EAAKqB,SAAW,EAClB,CAEJ,GAAC,CAAA/iB,IAAA,WAAAyB,MAED,WACE,IAGInX,EAAGsT,EAAG9D,EAAG4nB,EAHTv3B,EAAS,GACT44B,EAAW,CAACvV,MACVmU,EAAQ,CAACoB,GAEf,IAAKz4B,EAAI,EAAGA,EAAIq3B,EAAMh3B,SAAUL,EAAG,CACjCy4B,EAAWpB,EAAMr3B,GACjB,IAAM85B,EAAS,IAAIC,OAAO/5B,GAC1B,IAAKsT,EAAI,EAAG9D,EAAIipB,EAASp4B,OAAQiT,EAAI9D,EAAG8D,IACtC8jB,EAAOqB,EAASnlB,GAChBzT,GAAU,GAAJgB,OAAOi5B,EAAM,qBAAAj5B,OAAoBu2B,EAAKuB,aAAY,OAAA93B,OAAMu2B,EAAKqB,SAASp4B,QACxE+2B,EAAK32B,QACPZ,GAAU,MAAJgB,OAAUi5B,EAAM,aAAAj5B,OAAYu2B,EAAK32B,QAAQO,SAAQ,MAEvDnB,GAAU,KAERu3B,EAAKqB,SAASp4B,OAAS,GAAGg3B,EAAMp3B,KAAKm3B,EAAKqB,SAElD,CACA,OAAO54B,CACT,KAAC24B,CAAA,CA5OkB,GA+OrBn3B,EAAOC,QAAUk3B,kECpQX3B,EAAOp3B,EAAQ,OACf+4B,EAAkB/4B,EAAQ,OAM1Bk1B,EAAI,wBACR,SAAAA,EAAa1c,GAAU8e,EAAA,KAAApC,GACrBzR,KAAK8W,YAAc,IAAIxB,EACvBtV,KAAKgV,SAAW,IAAIrB,EAAK,MACrB5e,GAAUiL,KAAK6R,YAAY9c,EACjC,CAkCC,OAlCAkf,EAAAxC,EAAA,EAAAjf,IAAA,SAAAyB,MAED,WACE+L,KAAK8W,YAAYzhB,SACjB2K,KAAKgV,SAAS3f,QAChB,GAGA,CAAA7C,IAAA,SAAAyB,MACA,SAAQ8gB,GAAuC,IAAjCX,EAAuB3zB,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,IAAAA,UAAA,GACnCuf,KAAKgV,SAASpD,OAAOmD,EAAMX,EAC7B,GAAC,CAAA5hB,IAAA,cAAAyB,MAED,WACE,IAAMtX,EAAS,GAEf,OADAqjB,KAAK8W,YAAYC,YAAYp6B,GACtBA,CACT,GAAC,CAAA6V,IAAA,cAAAyB,MAED,SAAac,GAEX,IADA,IAAMif,EAAmB,IAAItzB,MAAMqU,EAAS5X,QACnCL,EAAI,EAAGA,EAAIiY,EAAS5X,OAAQL,IACnCk3B,EAAiBl3B,GAAKkjB,KAAK8W,YAAYnB,SAAS5gB,EAASjY,IAE3DkjB,KAAKgV,SAASgC,oBAAoBhD,EACpC,GAAC,CAAAxhB,IAAA,QAAAyB,MAED,WACE+L,KAAK8W,YAAYpiB,OACnB,GAAC,CAAAlC,IAAA,WAAAyB,MAED,WAEE,MADe,SAAW+L,KAAK8W,YAAYxpB,SAAS,GAEtD,KAACmkB,CAAA,CAvCO,GA0CVtzB,EAAOC,QAAUqzB,yBCjDjBtzB,EAAOC,QAAU,CACfqzB,KAAMl1B,EAAQ,8BCDhB,IAAMyY,EAAOzY,EAAQ,OAcrB4B,EAAOC,QAZyB,SAACF,EAAO4tB,EAAIC,GAC1C,IAAM7K,EAAYlM,EAAK1B,SAAS0B,EAAK3F,SAAU0c,EAAID,GAC/CmL,GAAU/4B,EAAM,GAAK8W,EAAK4I,IAAI1f,EAAO4tB,IAAO9W,EAAK4I,IAAI1f,EAAOgjB,GAOhE,OANI7T,OAAOkW,MAAM0T,KAASA,EAAS,GAC/BA,EAAS,IAAGA,EAAS,GACrBA,EAAS,IAAGA,EAAS,GAEzBjiB,EAAKuC,MAAM2J,EAAWA,EAAW+V,GACjCjiB,EAAKgD,IAAIkJ,EAAW4K,EAAI5K,GACjBA,CACT,yBCZA,IAAQvG,EAAQpe,EAAQ,OAAhBoe,IAEFzc,EAAQ3B,EAAQ,OAChByY,EAAOzY,EAAQ,OAEf0B,EAAQ1B,EAAQ,OAEhB26B,EAA0B36B,EAAQ,OAiHxC4B,EAAOC,QArGqB,SAAC+3B,EAAQ54B,GACnC,IAAMZ,EAAS,CACb65B,KAAM,KACN1C,MAAO,KACPC,KAAM,MAGFj2B,EAAWP,EAAQO,SACnBkB,EAAclB,EAASX,OACvBg6B,EAASl5B,EAAMC,MAAMX,GAC3B,GAAIW,EAAMmT,OAAO8lB,EAAQhB,GACvBx5B,EAAO65B,KAAO,MACT,CAKL,IAJA,IAAIY,GAAW,EACXC,GAAU,EACRC,EAAe,GACfC,GAAU5c,EACP7d,EAAI,EAAGA,EAAIkC,EAAalC,IAAK,CACpC,IAAM8P,EAAIoI,EAAK4I,IAAIuY,EAAQr4B,EAAShB,IAAMq5B,EAAO,GAC3CqB,EAAU5qB,EAAI2qB,EACpBD,EAAav6B,KAAKy6B,GACd5qB,EAAI+N,IAAKyc,GAAW,GACpBxqB,EAAI2qB,IAAQF,GAAU,EAC5B,CACA,GAAMD,GAAeC,EAId,GAAKA,EAEL,GAAKD,EAEL,CAELz6B,EAAO65B,KAAO,EAId,IAHA,IAAMiB,EAAgB,GAChBC,EAAe,GACjBF,EAASF,EAAa,GACjBK,EAAc,EAAGA,EAAc34B,EAAa24B,IAAe,CAClE,IAAM95B,EAASC,EAAS65B,GACpBC,EAAkBD,EAAc,EAChCC,GAAmB54B,IAAa44B,EAAkB,GACtD,IAAMC,EAAaP,EAAaM,GAChC,GAAIJ,IAAWK,EAETL,EACFE,EAAa36B,KAAKc,GAElB45B,EAAc16B,KAAKc,OAEhB,CAEL,IAAM6f,EAAY5f,EAAS85B,GACrBE,EAAoBZ,EAAwBf,EAAQt4B,EAAQ6f,GAC9D8Z,GACFE,EAAa36B,KAAKc,GAClB65B,EAAa36B,KAAK+6B,GAClBL,EAAc16B,KAAK+6B,KAEnBL,EAAc16B,KAAKc,GACnB45B,EAAc16B,KAAK+6B,GACnBJ,EAAa36B,KAAK+6B,GAEtB,CACAN,EAASK,CACX,CAEA,IAAME,EAAcpd,EAAMA,EAC1B,GAAI+c,EAAav6B,QAAU,EAEzB,IADA,IAAI66B,EAAaN,EAAaA,EAAav6B,OAAS,GAC3Cw6B,EAAc,EAAGA,EAAcD,EAAav6B,OAAQw6B,IAAe,CAC1E,IAAM95B,EAAS65B,EAAaC,GACxB3iB,EAAK+X,gBAAgBlvB,EAAQm6B,GAAcD,IAC7CL,EAAajkB,OAAOkkB,EAAa,GACjCA,KAEFK,EAAan6B,CACf,CAEF,GAAI45B,EAAct6B,QAAU,EAE1B,IADA,IAAI66B,EAAaP,EAAcA,EAAct6B,OAAS,GAC7Cw6B,EAAc,EAAGA,EAAcF,EAAct6B,OAAQw6B,IAAe,CAC3E,IAAM95B,EAAS45B,EAAcE,GACzB3iB,EAAK+X,gBAAgBlvB,EAAQm6B,GAAcD,IAC7CN,EAAchkB,OAAOkkB,EAAa,GAClCA,KAEFK,EAAan6B,CACf,CAEE45B,EAAct6B,QAAU,IAC1BR,EAAOm3B,MAAQ71B,EAAM2e,mBAAmB6a,EAAeN,IAErDO,EAAav6B,QAAU,IACzBR,EAAOo3B,KAAO91B,EAAM2e,mBAAmB8a,EAAcP,GAEzD,MAjEEx6B,EAAO65B,KAAO,OAFd75B,EAAO65B,KAAO,MALe,CAE7B,IAAM5pB,EAAIoI,EAAK4I,IAAIuY,EAAQgB,GAC3Bx6B,EAAO65B,KAAQ5pB,GAAK,EAAK,EAAI,CAC/B,CAqEF,CACA,OAAOjQ,CACT,yBCtHA,IAAMyD,EAAU7D,EAAQ,OAClBs0B,EAA0Bt0B,EAAQ,MAElCmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAEhB07B,EAAa17B,EAAQ,OACrB27B,EAAa37B,EAAQ,OAsC3B4B,EAAOC,QAfO,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE1B,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAKgyB,EAAwBv0B,GAC3B,MAAM,IAAIuC,MAAM,8CAGlB,IAAM2R,EAAWlU,EAAW,GAE5B,OAAIoF,EAAMT,IAAIuP,GAAkBynB,EAAW37B,GACvCe,EAAM4D,IAAIuP,GAAkB0nB,EAAW57B,GACpCkU,CACT,yBC3CA,IAAMpQ,EAAU7D,EAAQ,OAElBc,EAAQd,EAAQ,OAEhB8xB,EAAiB9xB,EAAQ,OAEzBy0B,EAAmBz0B,EAAQ,OAC3B00B,EAAY10B,EAAQ,OACpB27B,EAAa37B,EAAQ,OAiB3B4B,EAAOC,QAVO,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE1B,IAAMuwB,GADN50B,EAAa8D,EAAQ9D,IACYyF,KAAI,SAACyO,GAAQ,OAAKygB,EAAU,CAAEE,IAAK,EAAGC,GAAI,GAAK5gB,EAAS,IAEnFrO,EAAW+1B,EAAWhH,GACtBhE,EAAUmB,EAAelsB,GAE/B,OAAO6uB,EAAiB9D,EAAS7vB,EAAMC,WAAW6E,GACpD,yBCvBA,IAAM/B,EAAU7D,EAAQ,OAElB80B,EAAe90B,EAAQ,OAEvB47B,EAAW57B,EAAQ,OAoBzB4B,EAAOC,QAbO,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAI1B,IAAI7D,EACJ,IAJAR,EAAa8D,EAAQ9D,GAIhBQ,EAAI,EAAGA,EAAIR,EAAWa,OAAQL,GAAK,EACtCR,EAAWS,KAAKo7B,EAAS77B,EAAWQ,EAAI,GAAIR,EAAWQ,KAEzD,IAAIy0B,EAAcj1B,EAAWQ,EAAI,GAEjC,OADAy0B,EAAcF,EAAaE,EAE7B,yBCtBA,IAAMl0B,EAAQd,EAAQ,OAEhBi1B,EAAaj1B,EAAQ,OACnBk1B,EAASl1B,EAAQ,OAAjBk1B,KA8BF2G,EAA0B,SAAC1G,EAAWC,GAC1C,IAAIrc,EAAcjY,EAAMC,WAAWo0B,GAEnC,OADApc,EAAcA,EAAY3X,OAAON,EAAMC,WAAWq0B,IAC3Ct0B,EAAMgS,OAAOiG,EACtB,EAEAnX,EAAOC,QA5BU,SAACszB,EAAWC,GAC3B,IAAKH,EAAWE,EAAWC,GACzB,OAAOyG,EAAwB1G,EAAWC,GAG5C,IAAMjiB,EAAI,IAAI+hB,EAAKp0B,EAAMC,WAAWo0B,IAC9BxlB,EAAI,IAAIulB,EAAKp0B,EAAMC,WAAWq0B,IAEpCjiB,EAAEkiB,OAAO1lB,GAAG,GAEZA,EAAE0lB,OAAOliB,GACTxD,EAAEmJ,SACFnJ,EAAE0lB,OAAOliB,GACTxD,EAAEmJ,SAEF,IAAMC,EAAc5F,EAAEoiB,cAAcn0B,OAAOuO,EAAE4lB,eAE7C,OADez0B,EAAMgS,OAAOiG,EAE9B,yBC7BA,IAAMlV,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhB87B,EAAc97B,EAAQ,OACtB+7B,EAAc/7B,EAAQ,OACtBg8B,EAAch8B,EAAQ,OAiC5B4B,EAAOC,QAbQ,SAAC1B,GAAwB,QAAA8D,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GAEjC,GAAuB,KADvBlE,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1C,IAAMiD,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgB07B,EAAY77B,EAASG,GAC/C6E,EAAMT,IAAIpE,GAAgBw7B,EAAY37B,EAASG,GAC/CQ,EAAM4D,IAAIpE,GAAgBy7B,EAAY57B,EAASG,GAC5CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCvCA,IAAMJ,EAAQnF,EAAQ,OAEhBi8B,EAAmBj8B,EAAQ,OAwCjC4B,EAAOC,QA7Ba,SAAC1B,EAAS8T,GAC5B,IAKA5C,EAAqChN,OAAOC,OAAO,CAAE,EALpC,CACf43B,MAAO,EACPC,QAAS,OACT5qB,SAAU,IAEsDpR,GAA1D+7B,EAAK7qB,EAAL6qB,MAAOC,EAAO9qB,EAAP8qB,QAAS5qB,EAAQF,EAARE,SAExB,GAAkB,SAAZ4qB,GAAkC,YAAZA,GAAqC,UAAZA,EACnD,MAAM,IAAI75B,MAAM,iDAIlB,IAYM85B,EAZWj3B,EAAMgQ,WAAWlB,GACLzO,KAAI,SAAC62B,GAOhC,OAAOJ,EANP97B,EAAU,CACR+7B,MAAAA,EACAC,QAAAA,EACAxd,QAAQ,EACRpN,SAAAA,GAE+B8qB,EACnC,IAG6BpjB,QAAO,SAAC7E,EAAOkoB,GAAU,OAAKloB,EAAMhT,OAAO+D,EAAMkQ,QAAQlQ,EAAM6P,WAAWsnB,IAAa,GAAE,IACtH,OAAOn3B,EAAM2N,OAAOspB,EACtB,yBCxCA,IAAMt7B,EAAQd,EAAQ,OAEhBq0B,EAAQr0B,EAAQ,OAEhBu8B,EAAcv8B,EAAQ,OA+B5B4B,EAAOC,QApBa,SAAC1B,EAAS8T,GAC5B,IAKA5C,EAAqChN,OAAOC,OAAO,CAAE,EALpC,CACf43B,MAAO,EACPC,QAAS,QACT5qB,SAAU,IAEsDpR,GAA1D+7B,EAAK7qB,EAAL6qB,MAAOC,EAAO9qB,EAAP8qB,QAAS5qB,EAAQF,EAARE,SAExB,GAAkB,UAAZ4qB,EACJ,MAAM,IAAI75B,MAAM,6CAIlB,GAAwB,IADPxB,EAAMC,WAAWkT,GACrBrT,OAAc,MAAM,IAAI0B,MAAM,sCAG3C,IAAMk6B,EAAWD,EADjBp8B,EAAU,CAAE+7B,MAAAA,EAAOC,QAAAA,EAAS5qB,SAAAA,GACU0C,GACtC,OAAOogB,EAAMpgB,EAAUuoB,EACzB,8CCjCMtc,EAAOlgB,EAAQ,OAEfgU,EAAOhU,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhBi8B,EAAmBj8B,EAAQ,OA2FjC4B,EAAOC,QAjCa,SAAC1B,EAAS8T,GAC5B,IAOAwoB,EADAt8B,EAAUkE,OAAOC,OAAO,CAAE,EANT,CACf43B,MAAO,EACPC,QAAS,OACT5qB,SAAU,IAG2BpR,GAC/B+7B,EAAKO,EAALP,MAAOC,EAAOM,EAAPN,QAAS5qB,EAAQkrB,EAARlrB,SAExB,GAAI2qB,GAAS,EAAG,MAAM,IAAI55B,MAAM,8CAEhC,GAAkB,SAAZ65B,GAAkC,YAAZA,GAAqC,UAAZA,EACnD,MAAM,IAAI75B,MAAM,iDAGlB,IAAMqc,EAAS1K,EAASkG,SAClBnI,EAAS5M,EAAMgQ,SAASnB,GAC9B,GAAsB,IAAlBjC,EAAOpR,OAAc,MAAM,IAAI0B,MAAM,sCAEzC,IAAMkc,EAAQ,CACZxM,OAAQA,EACR0qB,SAAUT,EAAiB,CAAEC,MAAAA,EAAOC,QAAAA,EAAS5qB,SAAAA,EAAUoN,OAAAA,GAAU3M,GACjE2qB,SAAUV,EAAiB,CAAEC,OAAQA,EAAOC,QAAAA,EAAS5qB,SAAAA,EAAUoN,OAAAA,GAAU3M,IAG3E,OAAIiC,EAASkG,SAlFyB,SAACqE,GACvC,IAAMke,EAAuBle,EAAvBke,SAAUC,EAAane,EAAbme,SACZzc,EAAKwc,GAAY,EACnBA,EAAWA,EAASxnB,UAEpBynB,EAAWA,EAASznB,UAGtB,IAAM0nB,EAAex3B,EAAM4P,WAAW,CAAE2J,QAAQ,GAAQ+d,GAClDG,EAAez3B,EAAM4P,WAAW,CAAE2J,QAAQ,GAAQge,GAClDG,EAAgB33B,EAAMkQ,QAAQlQ,EAAM6P,WAAW5P,EAAMgQ,SAASwnB,KAC9DG,EAAgB53B,EAAMkQ,QAAQlQ,EAAM6P,WAAW5P,EAAMgQ,SAASynB,KAEpE,OADAC,EAAct8B,KAAIqgB,MAAlBic,EAAahc,EAASic,IACf53B,EAAM2N,OAAOgqB,EACtB,CAqEWE,CAAgCxe,GAnEA,SAACA,EAAOjN,EAAU4qB,EAASD,GACpE,IAAQlqB,EAA+BwM,EAA/BxM,OAAQ0qB,EAAuBle,EAAvBke,SAAUC,EAAane,EAAbme,SACpBM,EAAc/sB,KAAKC,MAAMoB,EAAW,GACpC2rB,EAAS,GACTC,EAAS,GACf,GAAgB,UAAZhB,GAAuBc,EAAc,EAOvC,IALA,IAAMhhB,EAAO/L,KAAK0V,GAAKqX,EACjBG,EAAUprB,EAAOA,EAAOpR,OAAS,GACjCy8B,EAAWrpB,EAAKiD,MAAMjD,EAAK+C,SAAS/C,EAAKlB,SAAU4pB,EAASA,EAAS97B,OAAS,GAAIw8B,IAClFE,EAAUtrB,EAAO,GACjBurB,EAAWvpB,EAAKiD,MAAMjD,EAAK+C,SAAS/C,EAAKlB,SAAU6pB,EAAS,GAAIW,IAC7D/8B,EAAI,EAAGA,EAAI08B,EAAa18B,IAAK,CACpC,IAAIoqB,EAAU0S,EAAYphB,EAAO1b,EAC7B2R,EAAQ8B,EAAKkc,iBAAiBlc,EAAKlB,SAAU6X,GACjD3W,EAAKgH,MAAM9I,EAAOA,EAAOgqB,GACzBloB,EAAKyH,IAAIvJ,EAAOA,EAAOkrB,GACvBF,EAAO18B,KAAK0R,GAEZyY,EAAU4S,EAAYthB,EAAO1b,EAC7B2R,EAAQ8B,EAAKkc,iBAAiBlc,EAAKlB,SAAU6X,GAC7C3W,EAAKgH,MAAM9I,EAAOA,EAAOgqB,GACzBloB,EAAKyH,IAAIvJ,EAAOA,EAAOorB,GACvBH,EAAO38B,KAAK0R,EACd,CAEF,IAAMsrB,EAAY,GAElB,OADAA,EAAUh9B,KAAIqgB,MAAd2c,EAAS1c,EAAS4b,GAAQt7B,OAAK87B,EAAMpc,EAAK6b,EAASznB,WAAcioB,IAC1Dh4B,EAAM6P,WAAWwoB,EAC1B,CAwCWC,CAAmCjf,EAAOjN,EAAU4qB,EAASD,EAExE,yBChGA,IAAAx4B,EAAqB1D,EAAQ,OAArBoe,EAAG1a,EAAH0a,IAAKxE,EAAGlW,EAAHkW,IAEP7F,EAAO/T,EAAQ,OACfyY,EAAOzY,EAAQ,OAEf09B,EAAe19B,EAAQ,OAEvBc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEhB29B,EAAS39B,EAAQ,MAEjB80B,EAAe90B,EAAQ,OAEvB49B,EAAgB59B,EAAQ,OAExB69B,EAAiB79B,EAAQ,OAKzB89B,EAAmB,SAACt4B,EAAKlE,EAAQK,GACrC,IAAMsU,EAAM3U,EAAOyP,WACnB,GAAKvL,EAAI0Q,IAAID,GAGN,CACUzQ,EAAI2Q,IAAIF,GAAK,GACrBzV,KAAKmB,EACd,KANmB,CACjB,IAAMo8B,EAAQ,CAACz8B,EAAQ,CAACK,IACxB6D,EAAI/B,IAAIwS,EAAK8nB,EACf,CAIF,EAMMC,EAAiB,SAACx4B,EAAK6Q,EAAM1U,GACjC,IAAMs8B,EAAO5nB,EAAK,GAAGtF,WACfmtB,EAAO7nB,EAAK,GAAGtF,WAEfkF,EAAMgoB,EAAOC,EAAO,GAAH98B,OAAM68B,EAAI,KAAA78B,OAAI88B,GAAI,GAAA98B,OAAQ88B,EAAI,KAAA98B,OAAI68B,GACzD,GAAKz4B,EAAI0Q,IAAID,GAGN,CACUzQ,EAAI2Q,IAAIF,GAAK,GACrBzV,KAAKmB,EACd,KANmB,CACjB,IAAMo8B,EAAQ,CAAC1nB,EAAM,CAAC1U,IACtB6D,EAAI/B,IAAIwS,EAAK8nB,EACf,CAIF,EAEMI,EAAiB,SAAC34B,EAAKyR,GACjBzR,EAAI44B,WAAU,SAAChM,GAAI,OAAKA,IAASnb,CAAK,IACxC,GACNzR,EAAIhF,KAAKyW,EAEb,EAwKArV,EAAOC,QA7Ja,SAAC1B,EAAS8T,GAC5B,IAIA5C,EAA4BhN,OAAOC,OAAO,CAAE,EAJ3B,CACf43B,MAAO,EACP3qB,SAAU,IAE6CpR,GAAjD+7B,EAAK7qB,EAAL6qB,MAAO3qB,EAAQF,EAARE,SAEXnR,EAASU,EAAMgS,SACburB,EAAkB,IAAIxoB,IACtByoB,EAAe,IAAIzoB,IAEnByD,EAAKb,EAAK3F,SACVyG,EAAKd,EAAK3F,SA8IhB,OAxIiBhS,EAAMC,WAAWkT,GACzB5T,SAAQ,SAACW,EAASuC,GACzB,IAAMg7B,EAAgB9lB,EAAKuC,MAAMvC,EAAK3F,SAAUpR,EAAMC,MAAMX,GAAU,EAAIk7B,GACpEsC,EAAoB98B,EAAM4S,UAAUP,EAAK+W,gBAAgB/W,EAAKjB,SAAU2F,EAAKuC,MAAMvC,EAAK3F,SAAUyrB,GAAgB,KAAOv9B,GACzHy9B,EAAeZ,EAAeU,EAAeC,GACnDp+B,EAASw9B,EAAcx9B,EAAQq+B,GAG/B,IADA,IAAMl9B,EAAWP,EAAQO,SAChBhB,EAAI,EAAGA,EAAIgB,EAASX,OAAQL,IAAK,CACxCu9B,EAAiBO,EAAiB98B,EAAShB,GAAImB,EAAMC,MAAMX,IAC3D,IAAM6S,GAAKtT,EAAI,GAAKgB,EAASX,OACvByV,EAAO,CAAC9U,EAAShB,GAAIgB,EAASsS,IACpCmqB,EAAeM,EAAcjoB,EAAM3U,EAAMC,MAAMX,GACjD,CACF,IAOAs9B,EAAaj+B,SAAQ,SAAC+xB,GACpB,IAAM/b,EAAO+b,EAAK,GACZsM,EAAStM,EAAK,GACd9X,EAAajE,EAAK,GAClB4D,EAAW5D,EAAK,GAGhBsoB,EAAQlmB,EAAK1B,SAAS0B,EAAK3F,SAAUmH,EAAUK,GACrD7B,EAAKmF,UAAU+gB,EAAOA,GAQtB,IAPA,IAAMC,EAAQF,EAAO,GACfG,EAAQpmB,EAAKsF,MAAMtF,EAAK3F,SAAU8rB,EAAOD,GAG3CG,EAAS,GAGJv+B,EAAI,EAAGA,EAAIgR,EAAUhR,IAC5B49B,EAAeW,EAASv+B,EAAIqZ,EAAMrI,GAIpC,IAAK,IAAIhR,EAAI,EAAGw+B,EAAOL,EAAO99B,OAAQL,EAAIw+B,EAAMx+B,IAAK,CACnD,IAAMwjB,EAAc2a,EAAOn+B,GACrBy+B,EAAKvmB,EAAK4I,IAAIwd,EAAO9a,GACrBkb,EAAKxmB,EAAK4I,IAAIud,EAAO7a,GACvB9M,EAAQ/G,KAAK+f,MAAM+O,EAAIC,GAEvBhoB,EAAQ,IAAGA,GAAS2C,GACxBukB,EAAeW,EAAQ7nB,IACvBA,EAAQ/G,KAAK+f,OAAO+O,GAAKC,IACb,IAAGhoB,GAAS2C,GACxBukB,EAAeW,EAAQ7nB,EACzB,CAYA,IANA,IACIioB,EACAC,EAFEC,GAHNN,EAASA,EAAOtI,KAAKkH,IAGI98B,OAGnBy+B,EAAoB,GACpBC,EAAkB,GAClB9mB,EAAW,GACRjY,GAAK,EAAGA,EAAI6+B,EAAW7+B,IAAK,CACnC,IAAM0W,EAAQ6nB,EAAQv+B,EAAI,EAAMA,EAAI6+B,EAAa7+B,GAC3Cy+B,EAAK9uB,KAAK4K,IAAI7D,GACdgoB,EAAK/uB,KAAK0K,IAAI3D,GACpBwB,EAAKuC,MAAM1B,EAAIslB,EAAOK,EAAK/C,GAC3BzjB,EAAKuC,MAAMzB,EAAIslB,EAAOG,EAAK9C,GAC3BzjB,EAAKgD,IAAInC,EAAIA,EAAIC,GACjB,IAAMgW,EAAK9W,EAAKgD,IAAIhD,EAAK3F,SAAUwH,EAAYhB,GACzCkW,EAAK/W,EAAKgD,IAAIhD,EAAK3F,SAAUmH,EAAUX,GACzCimB,GAAO,EAMX,GALIh/B,GAAK,GACHkY,EAAKnH,SAASie,EAAI2P,GAAU9gB,IAC9BmhB,GAAO,IAGNA,EAAM,CACT,GAAIh/B,GAAK,EAAG,CACV8+B,EAAkB7+B,KAAK+uB,GACvB+P,EAAgB9+B,KAAKgvB,GACrB,IAAMxd,EAAS,CAACmtB,EAAQ3P,EAAID,EAAI2P,GAC1Bl+B,EAAUU,EAAMoR,OAAOd,GAC7BwG,EAAShY,KAAKQ,EAChB,CACAk+B,EAAS3P,EACT4P,EAAS3P,CACX,CACF,CACA8P,EAAgBpqB,UAChBsD,EAAShY,KAAKkB,EAAMoR,OAAOusB,IAC3B7mB,EAAShY,KAAKkB,EAAMoR,OAAOwsB,IAE3B,IAAME,EAAW1+B,EAAMgS,OAAO0F,GAC9BpY,EAASw9B,EAAcx9B,EAAQo/B,EACjC,IAKAnB,EAAgBh+B,SAAQ,SAAC+xB,GAQvB,IAPA,IAAM9wB,EAAS8wB,EAAK,GACdsM,EAAStM,EAAK,GAEdqN,EAAQf,EAAO,GAEjBgB,EAAY,KACZC,EAAyB,EACpBp/B,EAAI,EAAGA,EAAIm+B,EAAO99B,OAAQL,IAAK,CACtC,IAAMqgB,EAAS8d,EAAOn+B,GAChBwd,EAAQtF,EAAKsF,MAAMzE,EAAImmB,EAAO7e,GAC9Bgf,EAAcnnB,EAAK7X,OAAOmd,GAC5B6hB,EAAc,KACZA,EAAcD,IAChBA,EAAyBC,EACzBF,EAAY9e,EAGlB,CACK8e,IACHA,EAAYjnB,EAAK+K,WAAWlK,EAAImmB,IAElC,IAAMI,EAAQpnB,EAAKsF,MAAMzE,EAAImmB,EAAOC,GACpCjnB,EAAKmF,UAAUiiB,EAAOA,GACtB,IAAMC,EAAQrnB,EAAKsF,MAAMxE,EAAIsmB,EAAOJ,GAC9BM,EAASpC,EAAO,CACpBniB,OAAQ,CAACla,EAAO,GAAIA,EAAO,GAAIA,EAAO,IACtCuY,OAAQqiB,EACR3qB,SAAUA,EACVyuB,KAAM,CAACP,EAAOI,EAAOC,KAEvB1/B,EAASw9B,EAAcx9B,EAAQ2/B,EACjC,IACOjL,EAAa10B,EACtB,yBC7NA,IAAM2T,EAAO/T,EAAQ,OACfyY,EAAOzY,EAAQ,OAEfc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OA6BtB4B,EAAOC,QAzBgB,SAACo+B,EAAcC,GAClBznB,EAAK4I,IAAI3f,EAAMC,MAAMu+B,GAAWD,GAClC,IACdC,EAAWx+B,EAAMoX,OAAOonB,IAO1B,IAJA,IAAMnnB,EAAc,CAACmnB,GAEfC,EAAWz+B,EAAM4S,UAAUP,EAAK+W,gBAAgB/W,EAAKjB,SAAUmtB,GAAeC,GAC9Ez9B,EAAcy9B,EAAS3+B,SAASX,OAC7BL,EAAI,EAAGA,EAAIkC,EAAalC,IAAK,CACpC,IAAM6/B,EAAS7/B,EAAKkC,EAAc,EAAMlC,EAAI,EAAI,EAC1C8/B,EAAkB3+B,EAAMoR,OAAO,CACnCotB,EAAS3+B,SAAShB,GAClB4/B,EAAS5+B,SAAShB,GAClB4/B,EAAS5+B,SAAS6+B,GAClBF,EAAS3+B,SAAS6+B,KAEpBrnB,EAAYvY,KAAK6/B,EACnB,CAGA,OAFAtnB,EAAYvY,KAAKkB,EAAMoX,OAAOqnB,IAEvBr/B,EAAMgS,OAAOiG,EACtB,yBCxBAnX,EAAOC,QAAU,CACfy+B,OAAQtgC,EAAQ,OAChB8e,OAAQ9e,EAAQ,+BCTlB,IAAM6D,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhBugC,EAAcvgC,EAAQ,OACtBwgC,EAAcxgC,EAAQ,OA6B5B4B,EAAOC,QAbQ,SAAC1B,GAAwB,QAAA8D,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GAEjC,GAAuB,KADvBlE,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1C,IAAMiD,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgBkgC,EAAYrgC,EAASG,GAC/C6E,EAAMT,IAAIpE,GAAgBigC,EAAYpgC,EAASG,GAE5CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCjCA,IAAA7B,EAAqB1D,EAAQ,OAArBoe,EAAG1a,EAAH0a,IAAKxE,EAAGlW,EAAHkW,IAEPwV,EAAYpvB,EAAQ,OACpB+lB,EAAQ/lB,EAAQ,OAChBgU,EAAOhU,EAAQ,OACfkgB,EAAOlgB,EAAQ,OAoKrB4B,EAAOC,QAxJkB,SAAC1B,EAAS6R,GACjC,IAMAX,EAA2ChN,OAAOC,OAAO,CAAE,EAN1C,CACf43B,MAAO,EACPC,QAAS,OACTxd,QAAQ,EACRpN,SAAU,IAE4DpR,GAAlE+7B,EAAK7qB,EAAL6qB,MAAOC,EAAO9qB,EAAP8qB,QAASxd,EAAMtN,EAANsN,OAAQpN,EAAQF,EAARE,SAE9B,GAAIrB,KAAKkD,IAAI8oB,GAAS9d,EAAK,OAAOpM,EAElC,IAAIyuB,EAAWtgC,EAAQwe,OAASuB,EAAKlO,GAAU,EAC9B,IAAbyuB,IAAgBA,EAAW,GAG/B,IAAMC,EAAgBD,EAAW,GAAOvE,GAAS,GAASuE,EAAW,GAAOvE,EAAQ,EACpFA,EAAQhsB,KAAKkD,IAAI8oB,GAOjB,IALA,IAAIyE,EAAkB,KAClBC,EAAY,GACVC,EAAa,GACbC,EAAK9sB,EAAKlB,SACVY,EAAI1B,EAAOpR,OACRL,EAAI,EAAGA,EAAImT,EAAGnT,IAAK,CAC1B,IAAMsT,GAAKtT,EAAI,GAAKmT,EACd4K,EAAKtM,EAAOzR,GACZgvB,EAAKvd,EAAO6B,GAElB6sB,EAAc1sB,EAAK+C,SAAS+pB,EAAIxiB,EAAIiR,GAAMvb,EAAK+C,SAAS+pB,EAAIvR,EAAIjR,GAChEtK,EAAK4M,OAAOkgB,EAAIA,GAChB9sB,EAAK4J,UAAUkjB,EAAIA,GAEnB9sB,EAAKgH,MAAM8lB,EAAIA,EAAI5E,GAEnB,IAAM6E,EAAK/sB,EAAKyH,IAAIzH,EAAKlB,SAAUwL,EAAIwiB,GACjCE,EAAKhtB,EAAKyH,IAAIzH,EAAKlB,SAAUyc,EAAIuR,GAEjCG,EAAiB,CAACF,EAAIC,GAC5B,GAAuB,MAAnBL,IACEhiB,IAAYA,GAAgB,IAAN9K,GAAU,CAElC,IAAMqtB,EAAK9R,EAAUuR,EAAgB,GAAIA,EAAgB,GAAIM,EAAe,GAAIA,EAAe,IAC3FC,GAEFN,EAAUnqB,MAEVwqB,EAAe,GAAKC,GAEpBL,EAAWrgC,KAAK,CAAE+R,EAAG+L,EAAI6iB,GAAIR,EAAiBS,GAAIH,GAEtD,CAEFN,EAAkB,CAACI,EAAIC,IAEb,IAANntB,GAAY8K,KAEhBiiB,EAAUpgC,KAAKygC,EAAe,IAC9BL,EAAUpgC,KAAKygC,EAAe,IAChC,CAEA,GAAItiB,GAA6B,MAAnBgiB,EAAyB,CAErC,IAAMI,EAAKH,EAAU,GACfI,EAAKJ,EAAU,GACfM,EAAK9R,EAAUuR,EAAgB,GAAIA,EAAgB,GAAII,EAAIC,GACjE,GAAIE,EAEFN,EAAU,GAAKM,EACfN,EAAUnqB,UACL,CACL,IAAM6H,EAAKtM,EAAO,GACZqvB,EAAa,CAACN,EAAIC,GACxBH,EAAWrgC,KAAK,CAAE+R,EAAG+L,EAAI6iB,GAAIR,EAAiBS,GAAIC,GACpD,CACF,CAIA,GAAgB,SAAZlF,EAAoB,CAEtB,IAAMmF,EAAa,IAAIzrB,IACvB+qB,EAAUvgC,SAAQ,SAAC6R,EAAO3O,GAAK,OAAK+9B,EAAW79B,IAAIyO,EAAO3O,EAAM,IAGhE,IAAMg+B,EAAQxb,EAAMjT,SACdwT,EAAQP,EAAMjT,SACpB+tB,EAAWxgC,SAAQ,SAAC0/B,GAClBha,EAAM/Q,WAAWusB,EAAOxB,EAAOoB,GAAG,GAAIpB,EAAOoB,GAAG,IAChDpb,EAAM/Q,WAAWsR,EAAOyZ,EAAOqB,GAAG,GAAIrB,EAAOqB,GAAG,IAChD,IAAMF,EAAKnb,EAAMY,sBAAsB4a,EAAOjb,GAC9C,GAAIxV,OAAOsB,SAAS8uB,EAAG,KAAOpwB,OAAOsB,SAAS8uB,EAAG,IAAK,CACpD,IAAM5iB,EAAKyhB,EAAOoB,GAAG,GACf5gC,EAAI+gC,EAAWnrB,IAAImI,GACzBsiB,EAAUrgC,GAAK2gC,EACfN,GAAWrgC,EAAI,GAAKqgC,EAAUhgC,aAAU2T,CAC1C,KAAO,CAEL,IAAM+J,EAAKyhB,EAAOqB,GAAG,GACf7gC,EAAI+gC,EAAWnrB,IAAImI,GACzBsiB,EAAUrgC,QAAKgU,CACjB,CACF,IACAqsB,EAAYA,EAAUn8B,QAAO,SAACwL,GAAC,YAAWsE,IAANtE,CAAe,GACrD,CAEA,GAAgB,UAAZksB,EAAqB,CAEvB,IAAIqF,EAAiBtxB,KAAKC,MAAMoB,EAAW,GACrCqF,EAAK5C,EAAKlB,SAChB+tB,EAAWxgC,SAAQ,SAAC0/B,GAElB,IAAIU,EAAWzsB,EAAKiD,MAAMjD,EAAK+C,SAASH,EAAImpB,EAAOqB,GAAG,GAAIrB,EAAOxtB,IAWjE,GAVAkuB,GAAYzsB,EAAKiD,MAAMjD,EAAK+C,SAASH,EAAImpB,EAAOoB,GAAG,GAAIpB,EAAOxtB,IAC1DmuB,GAAeD,EAAW,IAC5BA,GAAsBvwB,KAAK0V,IACZ,IAAG6a,GAAsBvwB,KAAK0V,KAEzC8a,GAAgBD,EAAW,IAC/BA,GAAsBvwB,KAAK0V,IACZ,IAAG6a,GAAsBvwB,KAAK0V,IAG9B,IAAb6a,EAAkB,CAMpB,IAHA,IAAMxkB,EAAOwkB,GADbe,EAAiBtxB,KAAKC,MAAMoB,GAAYrB,KAAKkD,IAAIqtB,GAAY7mB,KAEvD6nB,EAAQztB,EAAKiD,MAAMjD,EAAK+C,SAASH,EAAImpB,EAAOoB,GAAG,GAAIpB,EAAOxtB,IAC1DmvB,EAAe,GACZnhC,EAAI,EAAGA,EAAIihC,EAAgBjhC,IAAK,CACvC,IAAMoqB,EAAU8W,EAASxlB,EAAO1b,EAC1B2R,EAAQ8B,EAAKkc,iBAAiBlc,EAAKlB,SAAU6X,GACnD3W,EAAKgH,MAAM9I,EAAOA,EAAOgqB,GACzBloB,EAAKyH,IAAIvJ,EAAOA,EAAO6tB,EAAOxtB,GAC9BmvB,EAAalhC,KAAK0R,EACpB,CACA,GAAIwvB,EAAa9gC,OAAS,EAAG,KAAA+gC,EACrBrjB,EAAKyhB,EAAOoB,GAAG,GACjB5gC,EAAIqgC,EAAUxC,WAAU,SAAClsB,GAAK,OAAK8B,EAAKc,OAAOwJ,EAAIpM,EAAM,IAC7D3R,GAAKA,EAAI,GAAKqgC,EAAUhgC,QACxB+gC,EAAAf,GAAU1pB,OAAM2J,MAAA8gB,EAAA,CAACphC,EAAG,GAACa,OAAKsgC,GAC5B,CACF,KAAO,CAEL,IAAMpjB,EAAKyhB,EAAOqB,GAAG,GACf7gC,EAAIqgC,EAAUxC,WAAU,SAAClsB,GAAK,OAAK8B,EAAKc,OAAOwJ,EAAIpM,EAAM,IAC/D0uB,EAAU1pB,OAAO3W,EAAG,EACtB,CACF,GACF,CACA,OAAOqgC,CACT,yBCvKA,IAAMz7B,EAAQnF,EAAQ,OAChB2Z,EAAQ3Z,EAAQ,OAEhBi8B,EAAmBj8B,EAAQ,OA2CjC4B,EAAOC,QAhCa,SAAC1B,EAAS8T,GAC5B,IAKA5C,EAAqChN,OAAOC,OAAO,CAAE,EALpC,CACf43B,MAAO,EACPC,QAAS,OACT5qB,SAAU,GAEsDpR,GAA1D+7B,EAAK7qB,EAAL6qB,MAAOC,EAAO9qB,EAAP8qB,QAAS5qB,EAAQF,EAARE,SAExB,GAAkB,SAAZ4qB,GAAkC,YAAZA,GAAqC,UAAZA,EACnD,MAAM,IAAI75B,MAAM,iDAIlB,IAAM6U,EAAWhS,EAAMgQ,WAAWlB,GAe5BmoB,EAdcjlB,EAAS3R,KAAI,SAAC62B,GAChC,IAAMuF,EAAQzqB,EAAS8B,QAAO,SAAC+G,EAAKhf,GAAO,OAAKgf,EAAMrG,EAAMsG,gBAAgBoc,EAAS1iB,EAAM7G,OAAO9R,GAAS,GAAE,GAS7G,OAAOi7B,EANP97B,EAAU,CACR+7B,MAHe0F,EAAQ,IAAO,EAGb1F,GAASA,EAC1BC,QAAAA,EACAxd,QAAQ,EACRpN,SAAAA,GAE+B8qB,EACnC,IAG6BpjB,QAAO,SAAC7E,EAAOkoB,GAAU,OAAKloB,EAAMhT,OAAO+D,EAAMkQ,QAAQlQ,EAAM6P,WAAWsnB,IAAa,GAAE,IACtH,OAAOn3B,EAAM2N,OAAOspB,EACtB,yBC5CA,IAAMh3B,EAAQpF,EAAQ,OAEhBi8B,EAAmBj8B,EAAQ,OA6BjC4B,EAAOC,QAlBa,SAAC1B,EAAS8T,GAC5B,IAAM4tB,EAAW,CACf3F,MAAO,EACPC,QAAS,OACTxd,OAAQ1K,EAASkG,SACjB5I,SAAU,IAEZF,EAA6ChN,OAAOC,OAAO,CAAE,EAAGu9B,EAAU1hC,GAAlE+7B,EAAK7qB,EAAL6qB,MAAOC,EAAO9qB,EAAP8qB,QAASxd,EAAMtN,EAANsN,OAAQpN,EAAQF,EAARE,SAEhC,GAAkB,SAAZ4qB,GAAkC,YAAZA,GAAqC,UAAZA,EACnD,MAAM,IAAI75B,MAAM,iDAIlB,IAAMmY,EAAYwhB,EADlB97B,EAAU,CAAE+7B,MAAAA,EAAOC,QAAAA,EAASxd,OAAAA,EAAQpN,SAAAA,GACQnM,EAAMgQ,SAASnB,IAC3D,OAAO7O,EAAM4P,WAAW,CAAE2J,OAAQA,GAAUlE,EAC9C,yBC7BA,IAAQyF,EAASlgB,EAAQ,OAAjBkgB,KACA/K,EAAenV,EAAQ,OAAvBmV,WACA8K,EAAoBjgB,EAAQ,OAA5BigB,gBA2EF6hB,EAAW,SAACC,EAAMC,GACtB,IAAIrrB,EACAsrB,EAQJ,OAPAF,EAAK1hC,SAAQ,SAAC+xB,EAAM7uB,GAClB,IAAMmU,EAAQsqB,EAAM5P,SACP7d,IAAT0tB,GAAsBvqB,EAAQuqB,KAChCtrB,EAAYpT,EACZ0+B,EAAOvqB,EAEX,IACOf,CACT,EAEA/U,EAAOC,QArEa,SAACoS,GACnB,IAAMkD,EAAWhC,EAAWlB,GACtBiuB,EAAS,GACTC,EAAQ,GACdhrB,EAAS9W,SAAQ,SAACg8B,EAAS97B,GACzB,IAAM4S,EAAI+M,EAAKmc,GACXlpB,EAAI,EACNgvB,EAAM3hC,KAAKD,GACF4S,EAAI,GACb+uB,EAAO1hC,KAAKD,EAEhB,IAGA,IAAMy4B,EAAW,GACXoJ,EAAU,GA+BhB,OA9BAF,EAAO7hC,SAAQ,SAAC4E,EAAG1E,GACjB,IAAM8hC,EAAQlrB,EAASlS,GACvB+zB,EAASz4B,GAAK,GACd4hC,EAAM9hC,SAAQ,SAACyP,EAAG+D,GAChB,IAAMyuB,EAAOnrB,EAASrH,GAElBmQ,EAAgB,CAACqiB,EAAK,IAAK,CAAE/gC,SAAU8gC,MACzCrJ,EAASz4B,GAAGC,KAAKsP,GACZsyB,EAAQvuB,KAAIuuB,EAAQvuB,GAAK,IAC9BuuB,EAAQvuB,GAAGrT,KAAKD,GAEpB,GACF,IAGA4hC,EAAM9hC,SAAQ,SAACyP,EAAG+D,GAEhB,GAAIuuB,EAAQvuB,IAAMuuB,EAAQvuB,GAAGjT,OAAS,EAAG,CAEvC,IAAM2hC,EAAeT,EAASM,EAAQvuB,IAAI,SAAC5D,GAAC,OAAK+oB,EAAS/oB,GAAGrP,MAAM,IACnEwhC,EAAQvuB,GAAGxT,SAAQ,SAAC4P,EAAG1P,GACjBA,IAAMgiC,IAERvJ,EAAS/oB,GAAK+oB,EAAS/oB,GAAGxL,QAAO,SAAC8N,GAAC,OAAKA,IAAMzC,CAAC,IAEnD,GACF,CACF,IAGOkpB,EAASxzB,KAAI,SAAC28B,EAAO5hC,GAAC,MAAM,CACjC8hC,MAAOlrB,EAAS+qB,EAAO3hC,IACvB4hC,MAAOA,EAAM38B,KAAI,SAACsK,GAAC,OAAKqH,EAASrH,EAAE,IACpC,GACH,yBCvEA,IAAApM,EAAqE1D,EAAQ,OAArEwiC,EAAY9+B,EAAZ8+B,aAAcC,EAAa/+B,EAAb++B,cAAeC,EAAah/B,EAAbg/B,cAAeC,EAAYj/B,EAAZi/B,aACpD/+B,EAAkC5D,EAAQ,OAAlCkgB,EAAItc,EAAJsc,KAAM0iB,EAAeh/B,EAAfg/B,gBAiCRC,EAAgB,SAACP,EAAMQ,GAC3B,IAAMC,EAASC,EAAeV,EAAMQ,GACpC,IAAKC,EACH,OAAOD,EAGT,IAAMG,EAAgBN,EAAaI,EAAQT,GAGrCY,EAAiBV,EAAaO,EAAQA,EAAOI,MAInD,OAHAX,EAAaS,EAAeA,EAAcE,MAGnCL,IAAcC,EAASG,EAAiBJ,CACjD,EAKME,EAAiB,SAACV,EAAMQ,GAC5B,IAIIM,EAJAnzB,EAAI6yB,EACFO,EAAKf,EAAKrnB,EACVqoB,EAAKhB,EAAKpnB,EACZqoB,GAAMC,IAKV,EAAG,CACD,GAAIF,GAAMrzB,EAAEiL,GAAKooB,GAAMrzB,EAAEkzB,KAAKjoB,GAAKjL,EAAEkzB,KAAKjoB,IAAMjL,EAAEiL,EAAG,CACnD,IAAMD,EAAIhL,EAAEgL,GAAKqoB,EAAKrzB,EAAEiL,IAAMjL,EAAEkzB,KAAKloB,EAAIhL,EAAEgL,IAAMhL,EAAEkzB,KAAKjoB,EAAIjL,EAAEiL,GAC9D,GAAID,GAAKooB,GAAMpoB,EAAIsoB,EAAI,CAErB,GADAA,EAAKtoB,EACDA,IAAMooB,EAAI,CACZ,GAAIC,IAAOrzB,EAAEiL,EAAG,OAAOjL,EACvB,GAAIqzB,IAAOrzB,EAAEkzB,KAAKjoB,EAAG,OAAOjL,EAAEkzB,IAChC,CAEAC,EAAInzB,EAAEgL,EAAIhL,EAAEkzB,KAAKloB,EAAIhL,EAAIA,EAAEkzB,IAC7B,CACF,CAEAlzB,EAAIA,EAAEkzB,IACR,OAASlzB,IAAM6yB,GAEf,IAAKM,EAAG,OAAO,KAEf,GAAIC,IAAOE,EAAI,OAAOH,EAMtB,IAAMK,EAAOL,EACPM,EAAKN,EAAEnoB,EACP0oB,EAAKP,EAAEloB,EACT0oB,EAASJ,IAEbvzB,EAAImzB,EAEJ,EAAG,CACD,GAAIC,GAAMpzB,EAAEgL,GAAKhL,EAAEgL,GAAKyoB,GAAML,IAAOpzB,EAAEgL,GACnC2nB,EAAgBU,EAAKK,EAAKN,EAAKE,EAAID,EAAII,EAAIC,EAAIL,EAAKK,EAAKJ,EAAKF,EAAIC,EAAIrzB,EAAEgL,EAAGhL,EAAEiL,GAAI,CACnF,IAAMrM,EAAMqB,KAAKkD,IAAIkwB,EAAKrzB,EAAEiL,IAAMmoB,EAAKpzB,EAAEgL,GAErCynB,EAAczyB,EAAGqyB,KAAUzzB,EAAM+0B,GAAW/0B,IAAQ+0B,IAAW3zB,EAAEgL,EAAImoB,EAAEnoB,GAAMhL,EAAEgL,IAAMmoB,EAAEnoB,GAAK4oB,EAAqBT,EAAGnzB,OACtHmzB,EAAInzB,EACJ2zB,EAAS/0B,EAEb,CAEAoB,EAAIA,EAAEkzB,IACR,OAASlzB,IAAMwzB,GAEf,OAAOL,CACT,EAKMS,EAAuB,SAACT,EAAGnzB,GAAC,OAAKiQ,EAAKkjB,EAAEU,KAAMV,EAAGnzB,EAAE6zB,MAAQ,GAAK5jB,EAAKjQ,EAAEkzB,KAAMC,EAAGA,EAAED,MAAQ,CAAC,EAK3FY,EAAc,SAACtC,GACnB,IAAIxxB,EAAIwxB,EACJuC,EAAWvC,EACf,IACMxxB,EAAEgL,EAAI+oB,EAAS/oB,GAAMhL,EAAEgL,IAAM+oB,EAAS/oB,GAAKhL,EAAEiL,EAAI8oB,EAAS9oB,KAAI8oB,EAAW/zB,GAC7EA,EAAIA,EAAEkzB,WACClzB,IAAMwxB,GAEf,OAAOuC,CACT,EAEApiC,EAAOC,QAzHgB,SAAC2S,EAAMyvB,EAAanB,EAAWoB,GAGpD,IAFA,IAAMtM,EAAQ,GAELr3B,EAAI,EAAGooB,EAAMsb,EAAYrjC,OAAQL,EAAIooB,EAAKpoB,IAAK,CACtD,IAAMkhC,EAAQwC,EAAY1jC,GAAK2jC,EACzBC,EAAM5jC,EAAIooB,EAAM,EAAIsb,EAAY1jC,EAAI,GAAK2jC,EAAM1vB,EAAK5T,OACpDmhC,EAAOU,EAAcjuB,EAAMitB,EAAO0C,EAAKD,GAAK,GAC9CnC,IAASA,EAAKoB,OAAMpB,EAAKqC,SAAU,GACvCxM,EAAMp3B,KAAKujC,EAAYhC,GACzB,CAEAnK,EAAMpB,MAAK,SAACrjB,EAAGxD,GAAC,OAAKwD,EAAE8H,EAAItL,EAAEsL,CAAC,IAG9B,IAAK,IAAI1a,EAAI,EAAGA,EAAIq3B,EAAMh3B,OAAQL,IAChCuiC,EAAYD,EAAcjL,EAAMr3B,GAAIuiC,GACpCA,EAAYN,EAAaM,EAAWA,EAAUK,MAGhD,OAAOL,CACT,yBC7BA,IAAMuB,EAAiBrkC,EAAQ,OAC/B0D,EAAmC1D,EAAQ,OAAnCskC,EAAU5gC,EAAV4gC,WAAYC,EAAU7gC,EAAV6gC,WACpB3gC,EAA+F5D,EAAQ,OAA/FwkC,EAAsB5gC,EAAtB4gC,uBAAwBhC,EAAY5+B,EAAZ4+B,aAAciC,EAAe7gC,EAAf6gC,gBAAiBhC,EAAa7+B,EAAb6+B,cAAeE,EAAY/+B,EAAZ++B,aAC9E+B,EAAkC1kC,EAAQ,OAAlCkgB,EAAIwkB,EAAJxkB,KAAM0iB,EAAe8B,EAAf9B,gBAmDR+B,EAAe,SAAfA,EAAgBC,EAAKC,EAAWX,EAAKY,EAAMC,EAAMC,EAASC,GAC9D,GAAKL,EAAL,EAGKK,GAAQD,GAASE,EAAWN,EAAKE,EAAMC,EAAMC,GAOlD,IALA,IACIlB,EACAX,EAFAM,EAAOmB,EAKJA,EAAId,OAASc,EAAIzB,MAItB,GAHAW,EAAOc,EAAId,KACXX,EAAOyB,EAAIzB,KAEP6B,EAAUG,EAAYP,EAAKE,EAAMC,EAAMC,GAAWI,EAAMR,GAE1DC,EAAUrkC,KAAKsjC,EAAKvjC,EAAI2jC,GACxBW,EAAUrkC,KAAKokC,EAAIrkC,EAAI2jC,GACvBW,EAAUrkC,KAAK2iC,EAAK5iC,EAAI2jC,GAExBI,EAAWM,GAGXA,EAAMzB,EAAKA,KACXM,EAAON,EAAKA,UAQd,IAHAyB,EAAMzB,KAGMM,EAAM,CAEXwB,EAIe,IAATA,EAETN,EADAC,EAAMJ,EAAuBhC,EAAaoC,GAAMC,EAAWX,GACzCW,EAAWX,EAAKY,EAAMC,EAAMC,EAAS,GAGrC,IAATC,GACTI,EAAYT,EAAKC,EAAWX,EAAKY,EAAMC,EAAMC,GAT7CL,EAAanC,EAAaoC,GAAMC,EAAWX,EAAKY,EAAMC,EAAMC,EAAS,GAYvE,KACF,CAhDc,CAkDlB,EAKMI,EAAQ,SAACR,GACb,IAAMzxB,EAAIyxB,EAAId,KACRn0B,EAAIi1B,EACJryB,EAAIqyB,EAAIzB,KAEd,GAAIjjB,EAAK/M,EAAGxD,EAAG4C,IAAM,EAAG,OAAO,EAK/B,IAFA,IAAItC,EAAI20B,EAAIzB,KAAKA,KAEVlzB,IAAM20B,EAAId,MAAM,CACrB,GAAIlB,EAAgBzvB,EAAE8H,EAAG9H,EAAE+H,EAAGvL,EAAEsL,EAAGtL,EAAEuL,EAAG3I,EAAE0I,EAAG1I,EAAE2I,EAAGjL,EAAEgL,EAAGhL,EAAEiL,IAAMgF,EAAKjQ,EAAE6zB,KAAM7zB,EAAGA,EAAEkzB,OAAS,EACxF,OAAO,EAETlzB,EAAIA,EAAEkzB,IACR,CAEA,OAAO,CACT,EAEMgC,EAAc,SAACP,EAAKE,EAAMC,EAAMC,GACpC,IAAM7xB,EAAIyxB,EAAId,KACRn0B,EAAIi1B,EACJryB,EAAIqyB,EAAIzB,KAEd,GAAIjjB,EAAK/M,EAAGxD,EAAG4C,IAAM,EAAG,OAAO,EAgB/B,IAbA,IAAM+yB,EAAQnyB,EAAE8H,EAAItL,EAAEsL,EAAK9H,EAAE8H,EAAI1I,EAAE0I,EAAI9H,EAAE8H,EAAI1I,EAAE0I,EAAMtL,EAAEsL,EAAI1I,EAAE0I,EAAItL,EAAEsL,EAAI1I,EAAE0I,EACnEsqB,EAAQpyB,EAAE+H,EAAIvL,EAAEuL,EAAK/H,EAAE+H,EAAI3I,EAAE2I,EAAI/H,EAAE+H,EAAI3I,EAAE2I,EAAMvL,EAAEuL,EAAI3I,EAAE2I,EAAIvL,EAAEuL,EAAI3I,EAAE2I,EACnEsqB,EAAQryB,EAAE8H,EAAItL,EAAEsL,EAAK9H,EAAE8H,EAAI1I,EAAE0I,EAAI9H,EAAE8H,EAAI1I,EAAE0I,EAAMtL,EAAEsL,EAAI1I,EAAE0I,EAAItL,EAAEsL,EAAI1I,EAAE0I,EACnEwqB,EAAQtyB,EAAE+H,EAAIvL,EAAEuL,EAAK/H,EAAE+H,EAAI3I,EAAE2I,EAAI/H,EAAE+H,EAAI3I,EAAE2I,EAAMvL,EAAEuL,EAAI3I,EAAE2I,EAAIvL,EAAEuL,EAAI3I,EAAE2I,EAGnEwqB,EAAOC,EAAOL,EAAOC,EAAOT,EAAMC,EAAMC,GACxCY,EAAOD,EAAOH,EAAOC,EAAOX,EAAMC,EAAMC,GAE1C/0B,EAAI20B,EAAIiB,MACRnyB,EAAIkxB,EAAIkB,MAGL71B,GAAKA,EAAEmS,GAAKsjB,GAAQhyB,GAAKA,EAAE0O,GAAKwjB,GAAM,CAC3C,GAAI31B,IAAM20B,EAAId,MAAQ7zB,IAAM20B,EAAIzB,MAC9BP,EAAgBzvB,EAAE8H,EAAG9H,EAAE+H,EAAGvL,EAAEsL,EAAGtL,EAAEuL,EAAG3I,EAAE0I,EAAG1I,EAAE2I,EAAGjL,EAAEgL,EAAGhL,EAAEiL,IACrDgF,EAAKjQ,EAAE6zB,KAAM7zB,EAAGA,EAAEkzB,OAAS,EAAG,OAAO,EAGvC,GAFAlzB,EAAIA,EAAE41B,MAEFnyB,IAAMkxB,EAAId,MAAQpwB,IAAMkxB,EAAIzB,MAC9BP,EAAgBzvB,EAAE8H,EAAG9H,EAAE+H,EAAGvL,EAAEsL,EAAGtL,EAAEuL,EAAG3I,EAAE0I,EAAG1I,EAAE2I,EAAGxH,EAAEuH,EAAGvH,EAAEwH,IACrDgF,EAAKxM,EAAEowB,KAAMpwB,EAAGA,EAAEyvB,OAAS,EAAG,OAAO,EACvCzvB,EAAIA,EAAEoyB,KACR,CAGA,KAAO71B,GAAKA,EAAEmS,GAAKsjB,GAAM,CACvB,GAAIz1B,IAAM20B,EAAId,MAAQ7zB,IAAM20B,EAAIzB,MAC9BP,EAAgBzvB,EAAE8H,EAAG9H,EAAE+H,EAAGvL,EAAEsL,EAAGtL,EAAEuL,EAAG3I,EAAE0I,EAAG1I,EAAE2I,EAAGjL,EAAEgL,EAAGhL,EAAEiL,IACrDgF,EAAKjQ,EAAE6zB,KAAM7zB,EAAGA,EAAEkzB,OAAS,EAAG,OAAO,EACvClzB,EAAIA,EAAE41B,KACR,CAGA,KAAOnyB,GAAKA,EAAE0O,GAAKwjB,GAAM,CACvB,GAAIlyB,IAAMkxB,EAAId,MAAQpwB,IAAMkxB,EAAIzB,MAC9BP,EAAgBzvB,EAAE8H,EAAG9H,EAAE+H,EAAGvL,EAAEsL,EAAGtL,EAAEuL,EAAG3I,EAAE0I,EAAG1I,EAAE2I,EAAGxH,EAAEuH,EAAGvH,EAAEwH,IACrDgF,EAAKxM,EAAEowB,KAAMpwB,EAAGA,EAAEyvB,OAAS,EAAG,OAAO,EACvCzvB,EAAIA,EAAEoyB,KACR,CAEA,OAAO,CACT,EAKMT,EAAc,SAAC5D,EAAOoD,EAAWX,EAAKY,EAAMC,EAAMC,GAEtD,IAAI7xB,EAAIsuB,EACR,EAAG,CAED,IADA,IAAI9xB,EAAIwD,EAAEgwB,KAAKA,KACRxzB,IAAMwD,EAAE2wB,MAAM,CACnB,GAAI3wB,EAAE5S,IAAMoP,EAAEpP,GAAKkkC,EAAgBtxB,EAAGxD,GAAI,CAExC,IAAI4C,EAAIowB,EAAaxvB,EAAGxD,GASxB,OANAwD,EAAIqvB,EAAarvB,EAAGA,EAAEgwB,MACtB5wB,EAAIiwB,EAAajwB,EAAGA,EAAE4wB,MAGtBwB,EAAaxxB,EAAG0xB,EAAWX,EAAKY,EAAMC,EAAMC,QAC5CL,EAAapyB,EAAGsyB,EAAWX,EAAKY,EAAMC,EAAMC,EAE9C,CAEAr1B,EAAIA,EAAEwzB,IACR,CAEAhwB,EAAIA,EAAEgwB,IACR,OAAShwB,IAAMsuB,EACjB,EAKMyD,EAAa,SAACzD,EAAOqD,EAAMC,EAAMC,GACrC,IAAI/0B,EAAIwxB,EACR,GACc,OAARxxB,EAAEmS,IAAYnS,EAAEmS,EAAIujB,EAAO11B,EAAEgL,EAAGhL,EAAEiL,EAAG4pB,EAAMC,EAAMC,IACrD/0B,EAAE41B,MAAQ51B,EAAE6zB,KACZ7zB,EAAE61B,MAAQ71B,EAAEkzB,KACZlzB,EAAIA,EAAEkzB,WACClzB,IAAMwxB,GAEfxxB,EAAE41B,MAAMC,MAAQ,KAChB71B,EAAE41B,MAAQ,KAEVtB,EAAWt0B,GAAG,SAACA,GAAC,OAAKA,EAAEmS,CAAC,GAC1B,EAKMujB,EAAS,SAAC1qB,EAAGC,EAAG4pB,EAAMC,EAAMC,GAehC,OAPA/pB,EAAqB,aADrBA,EAAqB,YADrBA,EAAqB,YADrBA,EAAqB,WAHrBA,EAAI,OAASA,EAAI6pB,GAAQE,GAGf/pB,GAAK,IACLA,GAAK,IACLA,GAAK,IACLA,GAAK,KAKfC,EAAqB,aADrBA,EAAqB,YADrBA,EAAqB,YADrBA,EAAqB,WAPrBA,EAAI,OAASA,EAAI6pB,GAAQC,GAOf9pB,GAAK,IACLA,GAAK,IACLA,GAAK,IACLA,GAAK,KAEE,CACnB,EAEAtZ,EAAOC,QA5Oa,SAAC2S,EAAMyvB,GAAyB,IAQ9Ca,EAAMC,EAAMgB,EAAMC,EAAMhB,EARUd,EAAGhgC,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,EACtC+hC,EAAWhC,GAAeA,EAAYrjC,OACtCslC,EAAWD,EAAWhC,EAAY,GAAKC,EAAM1vB,EAAK5T,OACpDkiC,EAAYL,EAAcjuB,EAAM,EAAG0xB,EAAUhC,GAAK,GAChDW,EAAY,GAElB,IAAK/B,GAAaA,EAAUK,OAASL,EAAUgB,KAAM,OAAOe,EAO5D,GAHIoB,IAAUnD,EAAYuB,EAAe7vB,EAAMyvB,EAAanB,EAAWoB,IAGnE1vB,EAAK5T,OAAS,GAAKsjC,EAAK,CAC1BY,EAAOiB,EAAOvxB,EAAK,GACnBuwB,EAAOiB,EAAOxxB,EAAK,GAEnB,IAAK,IAAIjU,EAAI2jC,EAAK3jC,EAAI2lC,EAAU3lC,GAAK2jC,EAAK,CACxC,IAAMjpB,EAAIzG,EAAKjU,GACT2a,EAAI1G,EAAKjU,EAAI,GACf0a,EAAI6pB,IAAMA,EAAO7pB,GACjBC,EAAI6pB,IAAMA,EAAO7pB,GACjBD,EAAI8qB,IAAMA,EAAO9qB,GACjBC,EAAI8qB,IAAMA,EAAO9qB,EACvB,CAIA8pB,EAAsB,KADtBA,EAAU90B,KAAKc,IAAI+0B,EAAOjB,EAAMkB,EAAOjB,IACb,EAAIC,EAAU,CAC1C,CAIA,OAFAL,EAAa7B,EAAW+B,EAAWX,EAAKY,EAAMC,EAAMC,GAE7CH,CACT,mECjDMN,EAAavkC,EAAQ,MAErBo3B,EAAIM,GACR,SAAAN,EAAa72B,EAAG0a,EAAGC,GAAG,aAAAoc,EAAA,KAAAF,GAEpB3T,KAAKljB,EAAIA,EAGTkjB,KAAKxI,EAAIA,EACTwI,KAAKvI,EAAIA,EAGTuI,KAAKqgB,KAAO,KACZrgB,KAAK0f,KAAO,KAGZ1f,KAAKrB,EAAI,KAGTqB,KAAKoiB,MAAQ,KACbpiB,KAAKqiB,MAAQ,KAGbriB,KAAK2gB,SAAU,CACjB,IAiCFxiC,EAAOC,QAAU,CAAEu1B,KAAAA,EAAM+O,WA3BN,SAAC5lC,EAAG0a,EAAGC,EAAGkrB,GAC3B,IAAMn2B,EAAI,IAAImnB,EAAK72B,EAAG0a,EAAGC,GAYzB,OAVKkrB,GAIHn2B,EAAEkzB,KAAOiD,EAAKjD,KACdlzB,EAAE6zB,KAAOsC,EACTA,EAAKjD,KAAKW,KAAO7zB,EACjBm2B,EAAKjD,KAAOlzB,IANZA,EAAE6zB,KAAO7zB,EACTA,EAAEkzB,KAAOlzB,GAQJA,CACT,EAaqCq0B,WARlB,SAACr0B,GAClBA,EAAEkzB,KAAKW,KAAO7zB,EAAE6zB,KAChB7zB,EAAE6zB,KAAKX,KAAOlzB,EAAEkzB,KAEZlzB,EAAE41B,QAAO51B,EAAE41B,MAAMC,MAAQ71B,EAAE61B,OAC3B71B,EAAE61B,QAAO71B,EAAE61B,MAAMD,MAAQ51B,EAAE41B,MACjC,EAEiDtB,WAAAA,qBCJjD3iC,EAAOC,QAlDY,SAACkgC,EAAMsE,GACxB,IAAI9lC,EAAG0P,EAAGD,EAAG8H,EAAGwuB,EACZC,EAAS,EAEb,EAAG,CACDt2B,EAAI8xB,EACJA,EAAO,KACP,IAAIyE,EAAO,KAGX,IAFAF,EAAY,EAELr2B,GAAG,CACRq2B,IACAt2B,EAAIC,EACJ,IAAIw2B,EAAQ,EACZ,IAAKlmC,EAAI,EAAGA,EAAIgmC,IACdE,IACAz2B,EAAIA,EAAE81B,OAFgBvlC,KAQxB,IAFA,IAAImmC,EAAQH,EAELE,EAAQ,GAAMC,EAAQ,GAAK12B,GAClB,IAAVy2B,IAA0B,IAAVC,IAAgB12B,GAAKq2B,EAAGp2B,IAAMo2B,EAAGr2B,KACnD8H,EAAI7H,EACJA,EAAIA,EAAE61B,MACNW,MAEA3uB,EAAI9H,EACJA,EAAIA,EAAE81B,MACNY,KAGEF,EAAMA,EAAKV,MAAQhuB,EAClBiqB,EAAOjqB,EAEZA,EAAE+tB,MAAQW,EACVA,EAAO1uB,EAGT7H,EAAID,CACN,CAEAw2B,EAAKV,MAAQ,KACbS,GAAU,CACZ,OAASD,EAAY,GAErB,OAAOvE,CACT,yBCnDA,IAAAr+B,EAAyC1D,EAAQ,OAAzCo3B,EAAI1zB,EAAJ0zB,KAAM+O,EAAUziC,EAAVyiC,WAAY7B,EAAU5gC,EAAV4gC,WAClBpkB,EAASlgB,EAAQ,OAAjBkgB,KA6BFsiB,EAAe,SAACf,EAAO0C,GAC3B,IAAK1C,EAAO,OAAOA,EACd0C,IAAKA,EAAM1C,GAEhB,IACIkF,EADA12B,EAAIwxB,EAER,GAGE,GAFAkF,GAAQ,EAEH12B,EAAEm0B,UAAYtvB,EAAO7E,EAAGA,EAAEkzB,OAAqC,IAA5BjjB,EAAKjQ,EAAE6zB,KAAM7zB,EAAGA,EAAEkzB,MAMxDlzB,EAAIA,EAAEkzB,SANgE,CAGtE,GAFAmB,EAAWr0B,IACXA,EAAIk0B,EAAMl0B,EAAE6zB,QACF7zB,EAAEkzB,KAAM,MAClBwD,GAAQ,CACV,QAGOA,GAAS12B,IAAMk0B,GAExB,OAAOA,CACT,EA8CMzB,EAAgB,SAACvvB,EAAGxD,GAAC,OAAKuQ,EAAK/M,EAAE2wB,KAAM3wB,EAAGA,EAAEgwB,MAAQ,EACtDjjB,EAAK/M,EAAGxD,EAAGwD,EAAEgwB,OAAS,GAAKjjB,EAAK/M,EAAGA,EAAE2wB,KAAMn0B,IAAM,EACjDuQ,EAAK/M,EAAGxD,EAAGwD,EAAE2wB,MAAQ,GAAK5jB,EAAK/M,EAAGA,EAAEgwB,KAAMxzB,GAAK,CAAC,EA2D9Ci3B,EAAa,SAACrX,EAAIsX,EAAIrX,EAAIsX,GAC9B,IAAMC,EAAK72B,KAAK82B,KAAK9mB,EAAKqP,EAAIsX,EAAIrX,IAC5ByX,EAAK/2B,KAAK82B,KAAK9mB,EAAKqP,EAAIsX,EAAIC,IAC5BI,EAAKh3B,KAAK82B,KAAK9mB,EAAKsP,EAAIsX,EAAIvX,IAC5B4X,EAAKj3B,KAAK82B,KAAK9mB,EAAKsP,EAAIsX,EAAID,IAElC,OAAIE,IAAOE,GAAMC,IAAOC,MAEb,IAAPJ,IAAYK,EAAU7X,EAAIC,EAAIqX,QACvB,IAAPI,IAAYG,EAAU7X,EAAIuX,EAAID,QACvB,IAAPK,IAAYE,EAAU5X,EAAID,EAAIuX,OACvB,IAAPK,IAAYC,EAAU5X,EAAIqX,EAAIC,MAGpC,EAKMM,EAAY,SAACn3B,EAAGD,EAAGT,GAAC,OAAKS,EAAEiL,GAAK/K,KAAKc,IAAIf,EAAEgL,EAAG1L,EAAE0L,IAClDjL,EAAEiL,GAAK/K,KAAKe,IAAIhB,EAAEgL,EAAG1L,EAAE0L,IACvBjL,EAAEkL,GAAKhL,KAAKc,IAAIf,EAAEiL,EAAG3L,EAAE2L,IACvBlL,EAAEkL,GAAKhL,KAAKe,IAAIhB,EAAEiL,EAAG3L,EAAE2L,EAAE,EAEvBmsB,EAAa,SAAC7yB,EAAMitB,EAAO0C,EAAKD,GAEpC,IADA,IAAI7wB,EAAM,EACD9S,EAAIkhC,EAAO5tB,EAAIswB,EAAMD,EAAK3jC,EAAI4jC,EAAK5jC,GAAK2jC,EAC/C7wB,IAAQmB,EAAKX,GAAKW,EAAKjU,KAAOiU,EAAKjU,EAAI,GAAKiU,EAAKX,EAAI,IACrDA,EAAItT,EAGN,OAAO8S,CACT,EAKMyB,EAAS,SAACya,EAAIC,GAAE,OAAKD,EAAGtU,IAAMuU,EAAGvU,GAAKsU,EAAGrU,IAAMsU,EAAGtU,CAAC,EAEzDtZ,EAAOC,QAAU,CAAE2iC,uBA7IY,SAAC/C,EAAOoD,EAAWX,GAChD,IAAIj0B,EAAIwxB,EACR,EAAG,CACD,IAAMtuB,EAAIlD,EAAE6zB,KACNn0B,EAAIM,EAAEkzB,KAAKA,MAEZruB,EAAO3B,EAAGxD,IAAMi3B,EAAWzzB,EAAGlD,EAAGA,EAAEkzB,KAAMxzB,IAAM+yB,EAAcvvB,EAAGxD,IAAM+yB,EAAc/yB,EAAGwD,KAC1F0xB,EAAUrkC,KAAK2S,EAAE5S,EAAI2jC,GACrBW,EAAUrkC,KAAKyP,EAAE1P,EAAI2jC,GACrBW,EAAUrkC,KAAKmP,EAAEpP,EAAI2jC,GAGrBI,EAAWr0B,GACXq0B,EAAWr0B,EAAEkzB,MAEblzB,EAAIwxB,EAAQ9xB,GAGdM,EAAIA,EAAEkzB,IACR,OAASlzB,IAAMwxB,GAEf,OAAOe,EAAavyB,EACtB,EAuH2CuyB,aAAAA,EAAciC,gBAnDjC,SAACtxB,EAAGxD,GAAC,OAAKwD,EAAEgwB,KAAK5iC,IAAMoP,EAAEpP,GAC7C4S,EAAE2wB,KAAKvjC,IAAMoP,EAAEpP,IAhEO,SAAC4S,EAAGxD,GAC5B,IAAIM,EAAIkD,EACR,EAAG,CACD,GAAIlD,EAAE1P,IAAM4S,EAAE5S,GAAK0P,EAAEkzB,KAAK5iC,IAAM4S,EAAE5S,GAAK0P,EAAE1P,IAAMoP,EAAEpP,GAAK0P,EAAEkzB,KAAK5iC,IAAMoP,EAAEpP,GACjEqmC,EAAW32B,EAAGA,EAAEkzB,KAAMhwB,EAAGxD,GAAI,OAAO,EACxCM,EAAIA,EAAEkzB,IACR,OAASlzB,IAAMkD,GAEf,OAAO,CACT,CAwDKm0B,CAAkBn0B,EAAGxD,KAEpB+yB,EAAcvvB,EAAGxD,IAAM+yB,EAAc/yB,EAAGwD,IA9CzB,SAACA,EAAGxD,GACvB,IAAIM,EAAIkD,EACJo0B,GAAS,EACPC,GAAMr0B,EAAE8H,EAAItL,EAAEsL,GAAK,EACnBwsB,GAAMt0B,EAAE+H,EAAIvL,EAAEuL,GAAK,EACzB,GACQjL,EAAEiL,EAAIusB,IAASx3B,EAAEkzB,KAAKjoB,EAAIusB,GAAQx3B,EAAEkzB,KAAKjoB,IAAMjL,EAAEiL,GAClDssB,GAAMv3B,EAAEkzB,KAAKloB,EAAIhL,EAAEgL,IAAMwsB,EAAKx3B,EAAEiL,IAAMjL,EAAEkzB,KAAKjoB,EAAIjL,EAAEiL,GAAKjL,EAAEgL,IAAMssB,GAAUA,GAC/Et3B,EAAIA,EAAEkzB,WACClzB,IAAMkD,GAEf,OAAOo0B,CACT,CAkCoDG,CAAav0B,EAAGxD,KAC3DuQ,EAAK/M,EAAE2wB,KAAM3wB,EAAGxD,EAAEm0B,OAAS5jB,EAAK/M,EAAGxD,EAAEm0B,KAAMn0B,KAC5CmF,EAAO3B,EAAGxD,IAAMuQ,EAAK/M,EAAE2wB,KAAM3wB,EAAGA,EAAEgwB,MAAQ,GAAKjjB,EAAKvQ,EAAEm0B,KAAMn0B,EAAGA,EAAEwzB,MAAQ,EAC5E,EA4CqEV,cA9LpD,SAACjuB,EAAMitB,EAAO0C,EAAKD,EAAKnqB,GAC5C,IAAIqsB,EAEJ,GAAIrsB,IAAestB,EAAW7yB,EAAMitB,EAAO0C,EAAKD,GAAO,EACrD,IAAK,IAAI3jC,EAAIkhC,EAAOlhC,EAAI4jC,EAAK5jC,GAAK2jC,EAChCkC,EAAOD,EAAW5lC,EAAGiU,EAAKjU,GAAIiU,EAAKjU,EAAI,GAAI6lC,QAG7C,IAAK,IAAI7lC,EAAI4jC,EAAMD,EAAK3jC,GAAKkhC,EAAOlhC,GAAK2jC,EACvCkC,EAAOD,EAAW5lC,EAAGiU,EAAKjU,GAAIiU,EAAKjU,EAAI,GAAI6lC,GAS/C,OALIA,GAAQtxB,EAAOsxB,EAAMA,EAAKjD,QAC5BmB,EAAW8B,GACXA,EAAOA,EAAKjD,MAGPiD,CACT,EA2KyF1D,cAAAA,EAAeC,aA3EnF,SAACxvB,EAAGxD,GACvB,IAAMg4B,EAAK,IAAIvQ,EAAKjkB,EAAE5S,EAAG4S,EAAE8H,EAAG9H,EAAE+H,GAC1B+S,EAAK,IAAImJ,EAAKznB,EAAEpP,EAAGoP,EAAEsL,EAAGtL,EAAEuL,GAC1B0sB,EAAKz0B,EAAEgwB,KACP0E,EAAKl4B,EAAEm0B,KAcb,OAZA3wB,EAAEgwB,KAAOxzB,EACTA,EAAEm0B,KAAO3wB,EAETw0B,EAAGxE,KAAOyE,EACVA,EAAG9D,KAAO6D,EAEV1Z,EAAGkV,KAAOwE,EACVA,EAAG7D,KAAO7V,EAEV4Z,EAAG1E,KAAOlV,EACVA,EAAG6V,KAAO+D,EAEH5Z,CACT,oEC5IM9oB,EAAQnF,EAAQ,OAChB2B,EAAQ3B,EAAQ,OAChBgU,EAAOhU,EAAQ,OACfyY,EAAOzY,EAAQ,OACf8nC,EAAiB9nC,EAAQ,OACzB+nC,EAAc/nC,EAAQ,OAOtBgoC,EAAgB,wBACpB,SAAAA,EAAatzB,GAAO,IAAAykB,EAAA,KAAA7B,EAAA,KAAA0Q,GAClBvkB,KAAK9hB,MAAQmmC,EAAepzB,GAI5B,IAAM6O,EAAc9K,EAAK+K,WAAW/K,EAAK3F,SAAU2Q,KAAK9hB,OAClDsmC,EAAOxvB,EAAKsF,MAAMtF,EAAK3F,SAAU2Q,KAAK9hB,MAAO4hB,GACnDE,KAAKtiB,EAAIsX,EAAKmF,UAAUqqB,EAAMA,GAC9BxkB,KAAKC,EAAIjL,EAAKsF,MAAMtF,EAAK3F,SAAU2Q,KAAKtiB,EAAGsiB,KAAK9hB,OAGhD8hB,KAAKykB,SAAW,IAAIryB,IAGpB,IAAMsyB,EAAYzzB,EAAMoB,MAAMtQ,KAAI,SAACsS,GAAC,OAAKA,EAAEtS,KAAI,SAACrE,GAAC,OAAKg4B,EAAK5U,KAAKpjB,EAAE,GAAC,IAG7D8S,EAAW9O,EAAM2N,OAAOq1B,GAC9B1kB,KAAK2kB,MAAQL,EAAY9zB,EAC3B,CA4BC,OA1BDyjB,EAAAsQ,EAAA,EAAA/xB,IAAA,OAAAyB,MAGA,SAAM2wB,GACJ,IAAM1sB,EAAU3H,EAAKY,WAAW6D,EAAK4I,IAAIgnB,EAAS5kB,KAAKC,GAAIjL,EAAK4I,IAAIgnB,EAAS5kB,KAAKtiB,IAElF,OADAsiB,KAAKykB,SAASzkC,IAAIkY,EAAS0sB,GACpB1sB,CACT,GAEA,CAAA1F,IAAA,OAAAyB,MAGA,SAAMiE,GAEJ,IAAM2sB,EAAW7kB,KAAKykB,SAAS/xB,IAAIwF,GACnC,GAAI2sB,EACF,OAAOA,EAEP3jC,QAAQ4jC,IAAI,wCACZ,IAAMjvB,EAAKb,EAAKuC,MAAMvC,EAAK3F,SAAU2Q,KAAKC,EAAG/H,EAAQ,IAC/CpC,EAAKd,EAAKuC,MAAMvC,EAAK3F,SAAU2Q,KAAKtiB,EAAGwa,EAAQ,IAE/C6sB,EAAc/vB,EAAKuC,MAAMvC,EAAK3F,SAAUnR,EAAOA,EAAM,IACrDob,EAAKtE,EAAKgD,IAAInC,EAAIA,EAAIkvB,GAC5B,OAAO/vB,EAAKgD,IAAIlC,EAAIA,EAAIwD,EAE5B,KAACirB,CAAA,CAhDmB,GAmDtBpmC,EAAOC,QAAUmmC,qBChDjBpmC,EAAOC,QAAU,CAAEqe,KAFN,SAACjQ,EAAGD,EAAGT,GAAC,OAAMS,EAAEkL,EAAIjL,EAAEiL,IAAM3L,EAAE0L,EAAIjL,EAAEiL,IAAMjL,EAAEiL,EAAIhL,EAAEgL,IAAM1L,EAAE2L,EAAIlL,EAAEkL,EAAE,EAEtD0nB,gBAXD,SAACthB,EAAIC,EAAIqP,EAAIC,EAAI4X,EAAIzf,EAAIwe,EAAIC,GAAE,OACpDgB,EAAKjB,IAAOjmB,EAAKkmB,IAAOnmB,EAAKkmB,IAAOxe,EAAKye,IAAO,IAC5CnmB,EAAKkmB,IAAO3W,EAAK4W,IAAO7W,EAAK4W,IAAOjmB,EAAKkmB,IAAO,IAChD7W,EAAK4W,IAAOxe,EAAKye,IAAOgB,EAAKjB,IAAO3W,EAAK4W,IAAO,CAAC,0BCPxD,IAAM1zB,EAAO/T,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEhB0U,EAAQ1U,EAAQ,OAChB0oC,EAAc1oC,EAAQ,MAEtB2oC,EAAe3oC,EAAQ,OAEvB4oC,EAAkB,SAACjoC,EAAU4C,EAAOslC,GACxC,IAAIC,EAAY,KAIhB,OAHI3jC,EAAMT,IAAImkC,KAAOC,EAAYp0B,EAAMq0B,UAAU5jC,EAAMkQ,QAAQwzB,KAC3DnnC,EAAMgD,IAAImkC,KAAOC,EAAYp0B,EAAMM,WAAWtT,EAAM0T,SAASyzB,KAE7C,IAAbloC,GAA+B,IAAbA,EAAiB+T,EAAMJ,UAAUP,EAAK+W,gBAAgB/W,EAAKjB,SAAU,CAAC,EAAG,EAAGnS,IAAYmoC,GAAa,IAChI,EAgGAlnC,EAAOC,QAnEmB,SAAC1B,EAAS0oC,GAClC,IAAMhH,EAAW,CACfmH,eAAgB,EAChBC,UAAU,EACVC,QAAQ,EACRlqB,OAAO,EACPmqB,QAAQ,EACRC,SAAUR,GAEZv3B,EAAgFhN,OAAOC,OAAO,CAAE,EAAGu9B,EAAU1hC,GAArG6oC,EAAc33B,EAAd23B,eAAgBC,EAAQ53B,EAAR43B,SAAUC,EAAM73B,EAAN63B,OAAQlqB,EAAK3N,EAAL2N,MAAOmqB,EAAM93B,EAAN83B,OAAkBE,EAAQh4B,EAAlB+3B,SAEzD,GAAIJ,EAAiB,EAAG,MAAM,IAAI1mC,MAAM,oCAGpC6mC,IAEFN,EAAOH,EAAYG,IASrB,IANA,IAAMS,EAAON,EAAiB,EAE1BO,EAAa,KACbC,EAAW,KACXC,EAAY,KACZjxB,EAAW,GACNvT,EAAI,EAAGA,EAAI+jC,EAAgB/jC,IAAK,CAGvC,IAAMykC,EAAeL,EAASpkC,EAAIqkC,EAAMrkC,EAAG4jC,GAE3C,GAAIa,EAAc,CAChB,IAAKh1B,EAAMhQ,IAAIglC,GAAe,MAAM,IAAIpnC,MAAM,mDAG9C,GAAqB,IADPoS,EAAMi1B,QAAQD,GAClB9oC,OAAc,MAAM,IAAI0B,MAAM,mEAEpCmnC,IACFjxB,EAAWA,EAASpX,OAAOunC,EAAac,EAAWC,KAI3C,IAANzkC,IAASskC,EAAaG,GACtBzkC,IAAO+jC,EAAiB,IAAIQ,EAAWE,GAE3CD,EAAYC,CACd,CACF,CAEA,GAAIR,EAAQ,CAEV,IAAMU,EAAcl1B,EAAM3T,WAAWyoC,GACrChxB,EAAWA,EAASpX,OAAOwoC,EAC7B,CACA,GAAIX,EAAU,CAEZ,IAAMY,EAAgBn1B,EAAM3T,WAAWwoC,GAAY/jC,IAAI9D,EAAMoX,QAC7DN,EAAWA,EAASpX,OAAOyoC,EAC7B,CAOA,OANKZ,GAAaC,GAEZlqB,IAAUtK,EAAMI,OAAO00B,EAAUD,KACnC/wB,EAAWA,EAASpX,OAAOunC,EAAaa,EAAUD,KAG/CzoC,EAAMgS,OAAO0F,EACtB,wBC/GA,IAAQoB,EAAQ5Z,EAAQ,OAAhB4Z,IACFlF,EAAQ1U,EAAQ,OAChB+T,EAAO/T,EAAQ,OACf8pC,EAAoB9pC,EAAQ,OAC5BmF,EAAQnF,EAAQ,OA4GtB4B,EAAOC,QAlFgB,SAAC1B,EAAS8T,GAC/B,IASI4U,EATEgZ,EAAW,CACf5qB,MAAO2C,EACP/C,WAAY,EACZgS,MAAO,GACPkhB,UAAW,EACXC,oBAAqB,IAEvB34B,EAA8DhN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAAlF8W,EAAK5F,EAAL4F,MAAO8yB,EAAS14B,EAAT04B,UAAWC,EAAmB34B,EAAnB24B,oBAAqBnzB,EAAUxF,EAAVwF,WAK7CgS,GADG1oB,EAAQ0oB,OAAS1oB,EAAQ8pC,OACpB9pC,EAAQ8pC,QAAUhzB,EAAQ2C,GAE1BzZ,EAAQ0oB,MAAQ1oB,EAAQ0oB,MAAQgZ,EAAShZ,MAMnD,GAAImhB,EAFwB,EAEqB,MAAM,IAAI1nC,MAAM,+DAEjE,IAAM4nC,EAAa/kC,EAAMkQ,QAAQpB,GACjC,GAA0B,IAAtBi2B,EAAWtpC,OAAc,MAAM,IAAI0B,MAAM,sCAG7C,IAAM6nC,EAAsBD,EAAWzlC,QAAO,SAACQ,GAAC,OAAMA,EAAE,GAAG,IAAM,CAAC,IAE9D6jC,EAAYp0B,EAAMq0B,UAAUmB,GAEG,IAA/BC,EAAoBvpC,SAEtBkoC,EAAYp0B,EAAMQ,QAAQ4zB,IAG5B,IAIIzwB,EAJE+xB,EAAqBl6B,KAAKqK,MAAMyvB,EAAsBpwB,EAAM1J,KAAKkD,IAAI6D,IACrE1F,EAAW64B,GAAsB,EAAIA,EAAqB,EAE1DC,EAAQt2B,EAAKjB,SAiCnB,OAAOg3B,EACL,CAEEd,eAAgBz3B,EAAW,EAC3B63B,SAnCkB,SAACzoC,EAAU4C,EAAOslC,GACtC,IAAMyB,EAAYzzB,EAAaI,EAAQ1F,EAAWhO,EAC5CgnC,EAAUR,EAAYx4B,EAAWhO,EACjCinC,GAAWF,EAAYzzB,GAAc+C,EAAMiP,EAyBjD,OAfA9U,EAAKuE,SACH+xB,EAEAt2B,EAAK+W,gBAAgB/W,EAAKjB,SAAU,CAACy3B,EAAS,EAAGC,EAAUt6B,KAAK82B,KAAK/vB,KAErElD,EAAKiX,cAAcjX,EAAKjB,UAAW8G,EAAM,EAAI1J,KAAK82B,KAAK/vB,KAGzDoB,EAAStE,EAAKjB,SACdiB,EAAKuE,SACHD,EAEAtE,EAAKmX,cAAcnX,EAAKjB,SAAUw3B,GAClCD,GAEK31B,EAAMJ,UAAU+D,EAAQwwB,EACjC,GAQEC,EAEJ,yBC9GA,IAAMjlC,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhByqC,EAAqBzqC,EAAQ,OAC7B0qC,EAAqB1qC,EAAQ,MAwCnC4B,EAAOC,QAvBe,SAAC1B,GAAwB,QAAA8D,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GACxC,IAMAiN,EAAmDhN,OAAOC,OAAO,CAAE,EANlD,CACf2lC,OAAQ,EACRU,WAAY,EACZC,WAAY,EACZzB,QAAQ,GAEsEhpC,GAAxE8pC,EAAM54B,EAAN44B,OAAQU,EAAUt5B,EAAVs5B,WAAYC,EAAUv5B,EAAVu5B,WAAYzB,EAAM93B,EAAN83B,OAGxC,GAAuB,KADvBjpC,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1CnC,EAAU,CAAE2e,OAAQ,CAAC,EAAG,EAAGmrB,GAASU,WAAAA,EAAYC,WAAAA,EAAYzB,OAAAA,GAE5D,IAAM5jC,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgBoqC,EAAmBvqC,EAASG,GACtD6E,EAAMT,IAAIpE,GAAgBmqC,EAAmBtqC,EAASG,GAEnDA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBC5CA,IAAMwO,EAAO/T,EAAQ,OACfyY,EAAOzY,EAAQ,OAEfmF,EAAQnF,EAAQ,OAEhB0U,EAAQ1U,EAAQ,OAEhB8pC,EAAoB9pC,EAAQ,OAwDlC4B,EAAOC,QA3Cc,SAAC1B,EAAS8T,GAC7B,IAMA5C,EAAiDhN,OAAOC,OAAO,CAAE,EANhD,CACfwa,OAAQ,CAAC,EAAG,EAAG,GACf6rB,WAAY,EACZC,WAAY,GACZzB,QAAQ,GAEoEhpC,GAAxE2e,EAAMzN,EAANyN,OAAQ6rB,EAAUt5B,EAAVs5B,WAAYC,EAAUv5B,EAAVu5B,WAAYzB,EAAM93B,EAAN83B,OAEtC,GAAIyB,EAAa,EAAG,MAAM,IAAItoC,MAAM,gCAEjB,IAAfqoC,IACFC,EAAa,GAIf,IAAMC,EAAUpyB,EAAK/S,MAAMoZ,GAErBgsB,EAAY3lC,EAAMkQ,QAAQpB,GAChC,GAAyB,IAArB62B,EAAUlqC,OAAc,MAAM,IAAI0B,MAAM,sCAE5C,IAAMwmC,EAAYp0B,EAAMq0B,UAAU+B,GAC9BD,EAAQ,GAAK,GAAGn2B,EAAMQ,QAAQ4zB,EAAWA,GAE7C,IAAMzwB,EAAStE,EAAKjB,SAgBpB,OAAOg3B,EAPP3pC,EAAU,CACR6oC,eAAgB4B,EAAa,EAC7B3B,UAAU,EACVC,QAAQ,EACRC,OAAAA,EACAC,SAbkB,SAACzoC,EAAU4C,EAAOslC,GACpC,IAAMkC,EAAYxnC,EAAQqnC,EAAaD,EACjCK,EAAUvyB,EAAKuC,MAAMvC,EAAK3F,SAAU+3B,EAAStnC,EAAQqnC,GAG3D,OAFA72B,EAAKuE,SAASD,EAAQtE,EAAKmX,cAAc7S,EAAQ0yB,GAAYh3B,EAAK+W,gBAAgB/W,EAAKjB,SAAUk4B,IAE1Ft2B,EAAMJ,UAAU+D,EAAQwwB,EACjC,GASkCC,EACpC,wBC7DA,IAAM3jC,EAAQnF,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhByqC,EAAqBzqC,EAAQ,OAoBnC4B,EAAOC,QARc,SAAC1B,EAAS8T,GAC7B,IAAKA,EAASkG,SAAU,MAAM,IAAI7X,MAAM,gCAExC,IAAM0P,EAAS5M,EAAMgQ,SAASnB,GACxBmhB,EAAYjwB,EAAM6P,WAAWhD,GACnC,OAAOy4B,EAAmBtqC,EAASi1B,EACrC,yBCrBA,IAAMvxB,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhBirC,EAA0BjrC,EAAQ,OAClCkrC,EAA0BlrC,EAAQ,MAsCxC4B,EAAOC,QAtBoB,SAAC1B,GAAwB,QAAA8D,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GAC7C,IAIAiN,EAAyBhN,OAAOC,OAAO,CAAC,EAJvB,CACf6mC,KAAM,EACNlB,OAAQ,GAE2C9pC,GAA7CgrC,EAAI95B,EAAJ85B,KAAMlB,EAAM54B,EAAN44B,OAGd,GAAuB,KADvB/pC,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1C,GAAI6oC,GAAQ,EAAG,MAAM,IAAI7oC,MAAM,yBAC/B,GAAI2nC,GAAU,EAAG,MAAM,IAAI3nC,MAAM,2BAEjC,IAAMiD,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgB2qC,EAAwB9qC,EAASG,GAC3D6E,EAAMT,IAAIpE,GAAgB4qC,EAAwB/qC,EAASG,GAExDA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,wBC1CA,IAAQ2a,EAASlgB,EAAQ,OAAjBkgB,KAEF/a,EAAQnF,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhBsgC,EAAStgC,EAAQ,OAEjByqC,EAAqBzqC,EAAQ,OAsCnC4B,EAAOC,QA3ByB,SAAC1B,EAAS8T,GACxC,IAIA5C,EAAyBhN,OAAOC,OAAO,CAAE,EAJxB,CACf6mC,KAAM,EACNlB,OAAQ,GAE4C9pC,GAA9CgrC,EAAI95B,EAAJ85B,KAAMlB,EAAM54B,EAAN44B,OAEd9pC,EAAQ+7B,MAAQiP,EAChBhrC,EAAQ2e,OAAS,CAAC,EAAG,EAAGmrB,GAGxB,IAAM9yB,EAAWhS,EAAMgQ,WAAWlB,GAClC,GAAwB,IAApBkD,EAASvW,OAAc,MAAM,IAAI0B,MAAM,sCAG3C,IAMM85B,EANWjlB,EAAS3R,KAAI,SAAC62B,GAE7B,OADInc,EAAKmc,GAAW,GAAGA,EAAQnnB,UACxBorB,EAAOngC,EAASiF,EAAM4P,WAAW,CAAE2J,QAAQ,GAAQ0d,GAC5D,IAG0BpjB,QAAO,SAAC7E,EAAOg3B,GAAI,OAAKh3B,EAAMhT,OAAO+D,EAAMkQ,QAAQ+1B,GAAM,GAAE,IAC/EpW,EAAc7vB,EAAM2N,OAAOspB,GAEjC,OAAOqO,EAAmBtqC,EAAS60B,EACrC,yBC3CA,IAAM5vB,EAAQpF,EAAQ,OAEhBsgC,EAAStgC,EAAQ,OAEjByqC,EAAqBzqC,EAAQ,OA4BnC4B,EAAOC,QAjByB,SAAC1B,EAAS8T,GACxC,IAIA5C,EAAyBhN,OAAOC,OAAO,CAAE,EAJxB,CACf6mC,KAAM,EACNlB,OAAQ,GAE4C9pC,GAA9CgrC,EAAI95B,EAAJ85B,KAAMlB,EAAM54B,EAAN44B,OAMd,GAJA9pC,EAAQ+7B,MAAQiP,EAChBhrC,EAAQ2e,OAAS,CAAC,EAAG,EAAGmrB,GAGF,IADP7kC,EAAMgQ,SAASnB,GACnBrT,OAAc,MAAM,IAAI0B,MAAM,sCAEzC,IAAM0yB,EAAcsL,EAAOngC,EAAS8T,GACpC,OAAOw2B,EAAmBtqC,EAAS60B,EACrC,yBC9BA,IAAQpb,EAAQ5Z,EAAQ,OAAhB4Z,IACF7F,EAAO/T,EAAQ,OAEbqrC,EAAYrrC,EAAQ,OAApBqrC,QAEFlmC,EAAQnF,EAAQ,OAEhB0U,EAAQ1U,EAAQ,OAEhB8pC,EAAoB9pC,EAAQ,OAgIlC4B,EAAOC,QA9Ge,SAAC1B,EAAS8T,GAC9B,IAAM4tB,EAAW,CACftwB,SAAU,GACVsF,WAAY,EACZI,MAAO2C,EACP0xB,SAAU,OAEZj6B,EAAgDhN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAAtEoR,EAAQF,EAARE,SAAUsF,EAAUxF,EAAVwF,WAAYI,EAAK5F,EAAL4F,MAAOq0B,EAAQj6B,EAARi6B,SAEnC,GAAI/5B,EAAW,EAAG,MAAM,IAAIjP,MAAM,mCAElCuU,EAAa3G,KAAKkD,IAAIyD,GAAc+C,EAAM/C,EAAa+C,EAAM/C,EAC7DI,EAAQ/G,KAAKkD,IAAI6D,GAAS2C,EAAM3C,EAAQ2C,EAAM3C,EAE9C,IAAIs0B,EAAW10B,EAAaI,EAG5B,IAFAs0B,EAAWr7B,KAAKkD,IAAIm4B,GAAY3xB,EAAM2xB,EAAW3xB,EAAM2xB,GAExC10B,EAAY,CACzB,IAAMoE,EAAIpE,EACVA,EAAa00B,EACbA,EAAWtwB,CACb,CACA,IAAIuwB,EAAgBD,EAAW10B,EAG/B,GAFI20B,GAAiB,IAAKA,EAAgB5xB,GAEtC1J,KAAKkD,IAAIo4B,GAAiB5xB,EAAK,CAEjC,IAAM6xB,EAAkB7xB,EAAMrI,EAC9BA,EAAWrB,KAAKC,MAAMD,KAAKkD,IAAIo4B,GAAiBC,GAC5Cv7B,KAAKkD,IAAIo4B,GAAkBj6B,EAAWk6B,GAAkBl6B,GAC9D,CAQA,IAAI24B,EAAa/kC,EAAMkQ,QAAQpB,GAC/B,GAA0B,IAAtBi2B,EAAWtpC,OAAc,MAAM,IAAI0B,MAAM,sCAY7C,IAAMopC,EAAsBxB,EAAWzlC,QAAO,SAACQ,GAAC,OAAMA,EAAE,GAAG,GAAK,CAAC,IAC3DklC,EAAsBD,EAAWzlC,QAAO,SAACQ,GAAC,OAAMA,EAAE,GAAG,IAAM,CAAC,IAClCymC,EAAoB9qC,OAAS,GAAKupC,EAAoBvpC,OAAS,GAKnD,QAAb0qC,IACzBI,EAAoB9qC,OAASupC,EAAoBvpC,QACnDspC,EAAaA,EAAW1kC,KAAI,SAAC6O,GAC3B,IAAIM,EAASN,EAAK,GACdQ,EAASR,EAAK,GAGlB,MAAO,CAFPM,EAAS,CAACzE,KAAKe,IAAI0D,EAAO,GAAI,GAAIA,EAAO,IACzCE,EAAS,CAAC3E,KAAKe,IAAI4D,EAAO,GAAI,GAAIA,EAAO,IAE3C,IAEAZ,EAAW9O,EAAM+P,QAAQ/P,EAAM2N,OAAOo3B,IACtCj2B,EAAWo3B,EAAQp3B,IACVk2B,EAAoBvpC,QAAU8qC,EAAoB9qC,SAC3DspC,EAAaA,EAAW1kC,KAAI,SAAC6O,GAC3B,IAAIM,EAASN,EAAK,GACdQ,EAASR,EAAK,GAGlB,MAAO,CAFPM,EAAS,CAACzE,KAAKc,IAAI2D,EAAO,GAAI,GAAIA,EAAO,IACzCE,EAAS,CAAC3E,KAAKc,IAAI6D,EAAO,GAAI,GAAIA,EAAO,IAE3C,IAEAZ,EAAW9O,EAAM2N,OAAOo3B,KAI5B,IAAMyB,EAAmBH,EAAgBj6B,EACnCq6B,EAAW17B,KAAKkD,IAAIo4B,GAAiB5xB,EACrCkvB,EAAYp0B,EAAMq0B,UAAU5jC,EAAMkQ,QAAQpB,IAChDS,EAAMQ,QAAQ4zB,EAAWA,GAEzB,IAAMzwB,EAAStE,EAAKjB,SAmBpB,OAAOg3B,EAPP3pC,EAAU,CACR6oC,eAAgBz3B,EAAW,EAC3B03B,SAAU2C,EACV1C,OAAQ0C,EACR5sB,OAAQ4sB,EACRxC,SAhBkB,SAACzoC,EAAU4C,EAAOslC,GACpC,IAAIkC,EAAYY,EAAmBpoC,EAAQsT,EAO3C,OALI20B,IAAkB5xB,GAAOrW,IAAUgO,IACrCw5B,EAAYl0B,GAEd9C,EAAKuE,SAASD,EAAQtE,EAAKmX,cAAc7S,EAAQ0yB,GAAYh3B,EAAKiX,cAAcjX,EAAKjB,SAAU8G,EAAM,IAE9FlF,EAAMJ,UAAU+D,EAAQwwB,EACjC,GASkCC,EACpC,yBCvIA,IAAQ1qB,EAAQpe,EAAQ,OAAhBoe,IACF3F,EAAOzY,EAAQ,OAEf0B,EAAQ1B,EAAQ,OAEhB0U,EAAQ1U,EAAQ,OAGhB6rC,EAAM,SAANA,EAAO14B,EAAGxD,GACd,OAAIwD,IAAMxD,EAAYwD,EAClBA,EAAIxD,EAAYk8B,EAAIl8B,EAAGwD,GACjB,IAANxD,EAAkB,EACZ,IAANA,EAAkBwD,EACf04B,EAAIl8B,EAAGwD,EAAIxD,EACpB,EAMMm8B,EAAmB,SAACC,EAAWj2B,GAEnC,IAAMk2B,EAAWD,EAAYj2B,EAAMlV,OACnC,GAAiB,IAAborC,EACF,OAAOl2B,EAGT,IAAMm2B,EAAUxzB,EAAK7D,WAAWo3B,EAAUA,EAAUA,GAE9CE,EAAW,GAajB,OAZAp2B,EAAMzV,SAAQ,SAACgW,GACb,IAAM81B,EAAY1zB,EAAK1B,SAAS0B,EAAK3F,SAAUuD,EAAK,GAAIA,EAAK,IAC7DoC,EAAK4X,OAAO8b,EAAWA,EAAWF,GAIlC,IADA,IAAInI,EAAOztB,EAAK,GACP9V,EAAI,EAAGA,GAAKyrC,IAAYzrC,EAAG,CAClC,IAAM4iC,EAAO1qB,EAAKgD,IAAIhD,EAAK3F,SAAUgxB,EAAMqI,GAC3CD,EAAS1rC,KAAK,CAACsjC,EAAMX,IACrBW,EAAOX,CACT,CACF,IACO+I,CACT,EAEME,EAAWhuB,EAAMA,EAAM,EAAKlO,KAAK4K,IAAI5K,KAAK0V,GAAK,GAgCrDhkB,EAAOC,QA1Bc,SAACwqC,EAAQC,GAC5B,IApCWn5B,EAAGxD,EAoCV48B,EAAS73B,EAAMi1B,QAAQ0C,GACvBG,EAAS93B,EAAMi1B,QAAQ2C,GAE3B,GAAIC,EAAO3rC,SAAW4rC,EAAO5rC,OAAQ,CAEnC,IAAMmrC,GAzCG54B,EAyCao5B,EAAO3rC,OAzCjB+O,EAyCyB68B,EAAO5rC,OAzCzBuS,EAAIxD,EAAKk8B,EAAI14B,EAAGxD,IA0C/Bo8B,IAAcQ,EAAO3rC,SAAQ2rC,EAAST,EAAiBC,EAAWQ,IAClER,IAAcS,EAAO5rC,SAAQ4rC,EAASV,EAAiBC,EAAWS,GACxE,CAEA,IAAMC,EAAQ,GAYd,OAXAF,EAAOlsC,SAAQ,SAACqsC,EAAOnsC,GACrB,IAAMosC,EAAQH,EAAOjsC,GAEfqsC,EAAQlrC,EAAMoR,OAAO,CAAC45B,EAAM,GAAIA,EAAM,GAAIC,EAAM,KAChDE,EAAYnrC,EAAMyd,YAAYytB,GAChC97B,OAAOsB,SAASy6B,IAAcA,EAAYT,GAASK,EAAMjsC,KAAKosC,GAElE,IAAME,EAAQprC,EAAMoR,OAAO,CAAC45B,EAAM,GAAIC,EAAM,GAAIA,EAAM,KAChDI,EAAYrrC,EAAMyd,YAAY2tB,GAChCh8B,OAAOsB,SAAS26B,IAAcA,EAAYX,GAASK,EAAMjsC,KAAKssC,EACpE,IACOL,CACT,yBCpEA7qC,EAAOC,QAAU,CACfioC,kBAAmB9pC,EAAQ,OAC3BgtC,cAAehtC,EAAQ,OACvBitC,mBAAoBjtC,EAAQ,OAC5BktC,cAAeltC,EAAQ,OACvBmtC,eAAgBntC,EAAQ,MACxBotC,QAASptC,EAAQ,OACjB0U,MAAO1U,EAAQ,+BCdjB,IAAM6D,EAAU7D,EAAQ,OAElBkvB,EAAoBlvB,EAAQ,OAC5B2B,EAAQ3B,EAAQ,OAChB+T,EAAO/T,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEhB8xB,EAAiB9xB,EAAQ,OAEzB07B,EAAa17B,EAAQ,OA2E3B4B,EAAOC,QArBS,SAAC1B,GAAwB,QAAA8D,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GAClC,IAIAiN,EAAyBhN,OAAOC,OAAO,CAAE,EAJxB,CACfkkB,KAAM,CAAC,EAAG,EAAG,GACbtD,OAAQ,CAAC,EAAG,EAAG,IAEqC/kB,GAA9CqoB,EAAInX,EAAJmX,KAAMtD,EAAM7T,EAAN6T,OAGd,GAAuB,KADvBhlB,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1CnC,EAAU,CAAEqoB,KAAAA,EAAMtD,OAAAA,GAElB,IAAM3f,EAAUrF,EAAQsF,KAAI,SAAClF,GAG3B,OAAIQ,EAAM4D,IAAIpE,GAnEG,SAACH,EAAS8T,GAE7B,IAAMo5B,EAAY1rC,EAAMitB,mBAAmBjtB,EAAMmR,SAAU3S,EAAQqoB,KAAMroB,EAAQ+kB,QACjF,GAAIpU,OAAOkW,MAAMqmB,EAAU,KAAOv8B,OAAOkW,MAAMqmB,EAAU,KAAOv8B,OAAOkW,MAAMqmB,EAAU,KAAOv8B,OAAOkW,MAAMqmB,EAAU,IACnH,MAAM,IAAI/qC,MAAM,mCAGlB,IAAMquB,EAAUmB,EAAe7d,GACzBq5B,EAAe3c,EAAUA,EAAUzgB,KAAKoD,KAAK,GAAK,EAExD,GAAgB,IAAZqd,EAAe,OAAOxrB,EAAM2N,SAKhC,IAFA,IAAM0F,EAAW1X,EAAMC,WAAWkT,GAC9Bs5B,EAAY,GACPhtC,EAAI,EAAGA,EAAIiY,EAAS5X,OAAQL,IAAK,CACxC,IAAMka,EAAYjC,EAASjY,GAAGgB,SAASiE,KAAI,SAACrE,GAAC,OAAKQ,EAAMmtB,kBAAkBue,EAAWlsC,EAAE,IACjF6E,EAAUtE,EAAMoR,OAAO2H,GAEvB8K,EAAW7jB,EAAMC,MAAMqE,GACxBkpB,EAAkBme,EAAW9nB,KAE9B7jB,EAAMyd,YAAYnZ,GAAWsnC,GACjCC,EAAU/sC,KAAKwF,GACjB,CAGA,IAAKkpB,EAAkBme,EAAW,CAAC,EAAG,EAAG,IAAK,CAC5C,IAAM5M,EAAW1sB,EAAKgX,mBAAmBhX,EAAKjB,SAAUu6B,EAAW,CAAC,EAAG,EAAG,IAC1EE,EAAYA,EAAU/nC,KAAI,SAACyK,GAAC,OAAKvO,EAAM4S,UAAUmsB,EAAUxwB,EAAE,GAC/D,CAMA,IAAMu9B,GAHND,EAAYA,EAAU/W,MAAK,SAACrjB,EAAGxD,GAAC,OAAKjO,EAAMyd,YAAYxP,GAAKjO,EAAMyd,YAAYhM,EAAE,KAGpD3N,KAAI,SAACyK,GAAC,OAAK9K,EAAM6P,WAAW/E,EAAE1O,SAAS,IACnE,OAAOm6B,EAAW8R,EACpB,CA6BkCC,CAAattC,EAASG,GAC7CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCrFA,IAAM5D,EAAQ3B,EAAQ,OAChByY,EAAOzY,EAAQ,OAuCrB4B,EAAOC,QA3BgB,SAAC6S,GACtB,IAAMoB,EAAQpB,EAAMoB,MACpB,GAAIA,EAAMlV,OAAS,EAAG,MAAM,IAAI0B,MAAM,yDAGtC,IAIIorC,EAJEC,EAAW73B,EAAMmD,QAAO,SAAC/G,EAAOmE,GAAI,OAAKoC,EAAKgD,IAAIhD,EAAK3F,SAAUZ,EAAOmE,EAAK,GAAG,GAAEoC,EAAK3F,UAC7F2F,EAAKuC,MAAM2yB,EAAUA,EAAU,EAAI73B,EAAMlV,QAIzC,IAAI0Q,EAAW,EACfwE,EAAMzV,SAAQ,SAACgW,GAEb,IAAKoC,EAAK3D,OAAOuB,EAAK,GAAIA,EAAK,IAAK,CAClC,IAAMnF,EAAIuH,EAAK+X,gBAAgBmd,EAAUt3B,EAAK,IAC1CnF,EAAII,IACNo8B,EAAer3B,EACf/E,EAAWJ,EAEf,CACF,IAEA,IAAM08B,EAAa93B,EAAM+3B,MAAK,SAACx3B,GAAI,OAAKoC,EAAK3D,OAAOuB,EAAK,GAAIq3B,EAAa,GAAG,IAE7E,OAAO/rC,EAAMqT,WAAWrT,EAAMmR,SAAU86B,EAAW,GAAIF,EAAa,GAAIA,EAAa,GACvF,yBCtCA,IAAM56B,EAAS9S,EAAQ,OAEjByY,EAAOzY,EAAQ,OAyBrB4B,EAAOC,QAfO,WACZ,IAAI6Q,EACAgC,EAUJ,OATsB,IAAlBxQ,UAAOtD,QACT8R,EAAMI,IACN4B,EAAKxQ,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,KAELwO,EAAGxO,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,GACHwQ,EAAKxQ,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,IAGPwO,EAAIoD,MAAQpB,EAAMoB,MAAMtQ,KAAI,SAAC6Q,GAAI,MAAK,CAACoC,EAAK/S,MAAM2Q,EAAK,IAAKoC,EAAK/S,MAAM2Q,EAAK,IAAI,IACzE3D,CACT,qBCNA9Q,EAAOC,QAPQ,SAACiU,GAId,OAHKA,IACHA,EAAQ,IAEH,CAAEA,MAAAA,EACX,wBCjBA,IAAM2C,EAAOzY,EAAQ,OA0BrB4B,EAAOC,QAjBQ,SAACsR,EAAGxD,GACjB,IAAMm+B,EAAS36B,EAAE2C,MACXi4B,EAASp+B,EAAEmG,MAEjB,OAAIg4B,EAAOltC,SAAWmtC,EAAOntC,QAIbktC,EAAO70B,QAAO,SAAC+G,EAAKguB,EAAOztC,GACzC,IAAM0tC,EAAQF,EAAOxtC,GACf2Q,EAAIuH,EAAK+X,gBAAgBwd,EAAM,GAAIC,EAAM,IAC/C,OAAOjuB,GAAQ9O,EAAIJ,OAAO2c,OAC5B,IAAG,EAGL,yBCxBA,IAAMhV,EAAOzY,EAAQ,OAEf8S,EAAS9S,EAAQ,OAgCvB4B,EAAOC,QAfY,SAACmQ,GAClB,IAAK7N,MAAMmB,QAAQ0M,GAAS,MAAM,IAAI1P,MAAM,qCAC5C,GAAI0P,EAAOpR,OAAS,EAAG,MAAM,IAAI0B,MAAM,sDAGvC,IAAMwT,EAAQ,GACVf,EAAY/C,EAAOA,EAAOpR,OAAS,GAMvC,OALAoR,EAAO3R,SAAQ,SAAC6R,GACO,IAAjBA,EAAMtR,QAAckV,EAAMtV,KAAK,CAACiY,EAAKyY,SAASzY,EAAK3F,SAAUiC,GAAY0D,EAAKyY,SAASzY,EAAK3F,SAAUZ,KACrF,IAAjBA,EAAMtR,QAAckV,EAAMtV,KAAK,CAACuU,EAAW7C,IAC/C6C,EAAY7C,CACd,IACOY,EAAOgD,EAChB,yBChCA,IAAM2C,EAAOzY,EAAQ,OAEf8S,EAAS9S,EAAQ,OAwBvB4B,EAAOC,QAXW,SAACuS,GACjB,IAAKjQ,MAAMmB,QAAQ8O,GAAQ,MAAM,IAAI9R,MAAM,oCAG3C,IAAMwT,EAAQ,GAId,OAHA1B,EAAM/T,SAAQ,SAACgU,GACbyB,EAAMtV,KAAK,CAACiY,EAAKyY,SAASzY,EAAK3F,SAAUuB,EAAK,IAAKoE,EAAKyY,SAASzY,EAAK3F,SAAUuB,EAAK,KACvF,IACOvB,EAAOgD,EAChB,yBCnBAlU,EAAOC,QAAU,CACfimC,eAAgB9nC,EAAQ,OACxB0F,MAAO1F,EAAQ,OACf8S,OAAQ9S,EAAQ,OAChB8U,OAAQ9U,EAAQ,MAChBgV,WAAYhV,EAAQ,OACpB+oC,UAAW/oC,EAAQ,OACnB0E,IAAK1E,EAAQ,OACbkV,QAASlV,EAAQ,OACjB2pC,QAAS3pC,EAAQ,OACjBe,WAAYf,EAAQ,OACpB+Q,SAAU/Q,EAAQ,OAClBsU,UAAWtU,EAAQ,2BCArB4B,EAAOC,QAXK,SAACvB,GACX,SAAIA,GAA4B,kBAAXA,GACf,UAAWA,GACT6D,MAAMmB,QAAQhF,EAAOwV,OAM/B,wBCfA,IAAM2C,EAAOzY,EAAQ,OACf8S,EAAS9S,EAAQ,OA4DvB4B,EAAOC,QAvDQ,SAAC6S,GACd,IAAKA,EAAMoB,MAAO,OAAOpB,EACzB,IAAIoB,EAAQpB,EAAMoB,MACZF,EAAY,IAAIC,IAChBuD,EAAY,IAAIvD,KAGtBC,EAAQA,EAAMrR,QAAO,SAACqT,GAAC,OAAMW,EAAK3D,OAAOgD,EAAE,GAAIA,EAAE,GAAG,KAG9CzX,SAAQ,SAACgW,GACb,IAAM63B,EAAQ73B,EAAK,GAAGtF,WAChBo9B,EAAS93B,EAAK,GAAGtF,WACvB6E,EAAUnS,IAAIyqC,EAAO73B,EAAK,IAC1BT,EAAUnS,IAAI0qC,EAAQ93B,EAAK,IAC3B+C,EAAU3V,IAAIyqC,GAAQ90B,EAAUjD,IAAI+3B,IAAU,GAAK,GACnD90B,EAAU3V,IAAI0qC,GAAS/0B,EAAUjD,IAAIg4B,IAAW,GAAK,EACvD,IAGA,IAAMC,EAAY,GACZC,EAAa,GA+BnB,OA9BAj1B,EAAU/Y,SAAQ,SAAC6Y,EAAO5X,GACpB4X,EAAQ,GAAGk1B,EAAU5tC,KAAKc,GAC1B4X,EAAQ,GAAGm1B,EAAW7tC,KAAKc,EACjC,IAGA8sC,EAAU/tC,SAAQ,SAAC69B,GACjB,IAIIoQ,EAJEh1B,EAAK1D,EAAUO,IAAI+nB,GAGrBqQ,EAAe/K,IAEnB6K,EAAWhuC,SAAQ,SAACmuC,GAClB,IAAMj1B,EAAK3D,EAAUO,IAAIq4B,GACnBl9B,EAAWmH,EAAKnH,SAASgI,EAAIC,GAC/BjI,EAAWi9B,IACbA,EAAej9B,EACfg9B,EAAkB/0B,EAEtB,IACA5U,QAAQC,KAAK,sCAADxD,OAAuCkY,EAAE,QAAAlY,OAAOktC,EAAe,cAAAltC,OAAamtC,IAGxFz4B,EAAQA,EAAMtQ,KAAI,SAAC6Q,GACjB,OAAIA,EAAK,GAAGtF,aAAemtB,EAAa,CAACoQ,EAAiBj4B,EAAK,IAC3DA,EAAK,GAAGtF,aAAemtB,EAAa,CAAC7nB,EAAK,GAAIi4B,GAC3Cj4B,CACT,GACF,IAEOvD,EAAOgD,EAChB,yBC3DA,IAAMhD,EAAS9S,EAAQ,OAyBvB4B,EAAOC,QAfS,WACd,IAAI6Q,EACAgC,EAUJ,OATsB,IAAlBxQ,UAAOtD,QACT8R,EAAMI,IACN4B,EAAKxQ,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,KAELwO,EAAGxO,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,GACHwQ,EAAKxQ,UAAAtD,QAAA,OAAA2T,EAAArQ,UAAA,IAGPwO,EAAIoD,MAAQpB,EAAMoB,MAAMtQ,KAAI,SAAC6Q,GAAI,MAAK,CAACA,EAAK,GAAIA,EAAK,GAAG,IACjD3D,CACT,qBCXA9Q,EAAOC,QAFS,SAAC6S,GAAK,OAAKA,EAAMoB,KAAK,8CCVhCpU,EAAQ1B,EAAQ,OAChByuC,EAASzuC,EAAQ,OACjBgoC,EAAmBhoC,EAAQ,OAqCjC4B,EAAOC,QA7BY,SAAC6S,GAClB,IAAMg6B,EAAY,IAAI1G,EAAiBtzB,GAEjC8D,EAAW,GAuBjB,OAtBAk2B,EAAUtG,MAAM/nC,SAAQ,SAAAgZ,GAAsB,IAAnBgpB,EAAKhpB,EAALgpB,MAAOF,EAAK9oB,EAAL8oB,MAE5B5+B,EAAQ8+B,EAAMzhC,OACZ+tC,EAAa,GACnBxM,EAAM9hC,SAAQ,SAACiiC,EAAM/hC,GACnBouC,EAAWnuC,KAAK+C,GAChBA,GAAS++B,EAAK1hC,MAChB,IAQA,IALA,IAAMW,EAAW,CAAC8gC,GAAKjhC,OAAA0f,EAAKqhB,IAAOyM,OAC7Bp6B,EAAOjT,EAASqtC,OAEhBC,EAAY,SAACtuC,GAAC,OAAKmuC,EAAUlqB,KAAKjjB,EAAShB,GAAG,EAC9CuuC,EAAUL,EAAOj6B,EAAMm6B,GACpBpuC,EAAI,EAAGA,EAAIuuC,EAAQluC,OAAQL,GAAK,EAAG,CAE1C,IAAMwuC,EAAMD,EAAQp6B,MAAMnU,EAAGA,EAAI,GAAGiF,IAAIqpC,GACxCr2B,EAAShY,KAAKkB,EAAM2e,mBAAmB0uB,EAAKL,EAAU/sC,OACxD,CACF,IAEO6W,CACT,yBCrCA,IAAMC,EAAOzY,EAAQ,OAcrB4B,EAAOC,QAFU,SAAC6S,GAAK,UAAAtT,OAAuBsT,EAAMoB,MAT5CmD,QAAO,SAAC7Y,EAAQiW,GAAI,OACxBjW,EAAU,IAAJgB,OAAQqX,EAAK1H,SAASsF,EAAK,IAAG,MAAAjV,OAAKqX,EAAK1H,SAASsF,EAAK,IAAG,MAAK,GACnE,IAOqD,6BCZ1D,IAAMoC,EAAOzY,EAAQ,OAEf8S,EAAS9S,EAAQ,OAkBvB4B,EAAOC,QALW,SAACwW,EAAQ3D,GACzB,IAAMoB,EAAQpB,EAAMoB,MAAMtQ,KAAI,SAAC6Q,GAAI,MAAK,CAACoC,EAAKnE,UAAUmE,EAAK3F,SAAUuD,EAAK,GAAIgC,GAASI,EAAKnE,UAAUmE,EAAK3F,SAAUuD,EAAK,GAAIgC,GAAQ,IACxI,OAAOvF,EAAOgD,EAChB,yBClBA,IAAMjS,EAAU7D,EAAQ,OAClBs0B,EAA0Bt0B,EAAQ,MAElCmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhBgvC,EAAYhvC,EAAQ,OACpBivC,EAAYjvC,EAAQ,OACpBkvC,EAAYlvC,EAAQ,OA0C1B4B,EAAOC,QAjBM,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAEzB,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAKgyB,EAAwBv0B,GAC3B,MAAM,IAAIuC,MAAM,6CAGlB,IAAM2R,EAAWlU,EAAW,GAC5B,OAAIqF,EAAMV,IAAIuP,GAAkB+6B,EAAUjvC,GACtCoF,EAAMT,IAAIuP,GAAkBg7B,EAAUlvC,GACtCe,EAAM4D,IAAIuP,GAAkBi7B,EAAUnvC,GAGnCkU,CACT,yBCjDA,IAAMpQ,EAAU7D,EAAQ,OAElBq0B,EAAQr0B,EAAQ,OAEhBmvC,EAAOnvC,EAAQ,OAsCrB4B,EAAOC,QAXW,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAE9B,IADArE,EAAa8D,EAAQ9D,IACNa,OAAS,EAAG,MAAM,IAAI0B,MAAM,6BAG3C,IADA,IAAM+gB,EAAQ,GACL9iB,EAAI,EAAGA,EAAIR,EAAWa,OAAQL,IACrC8iB,EAAM7iB,KAAK2uC,EAAKpvC,EAAWQ,EAAI,GAAIR,EAAWQ,KAEhD,OAAO8zB,EAAMhR,EACf,yBCxCA,IAAMxf,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAEhBovC,EAAcpvC,EAAQ,OACtBqvC,EAAiBrvC,EAAQ,OAsB/B4B,EAAOC,QAfW,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAC9BrE,EAAa8D,EAAQ9D,GAGrB,IAAMgW,EAASs5B,EAAetvC,GAExBuvC,EAAaF,EAAYr5B,GAG/B,OAAIu5B,EAAW1uC,OAAS,EAAUuE,EAAM2N,SAGjC3N,EAAM6P,WAAWs6B,EAC1B,yBCzBA,IAAMzrC,EAAU7D,EAAQ,OAElBc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEhBuvC,EAAYvvC,EAAQ,OACpBqvC,EAAiBrvC,EAAQ,OAyB/B4B,EAAOC,QAlBW,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAG9B,GAA0B,KAF1BrE,EAAa8D,EAAQ9D,IAENa,OAAc,OAAOb,EAAW,GAG/C,IAAMgW,EAASs5B,EAAetvC,GAIxByY,EAFQ+2B,EAAUx5B,EAAQ,CAAEy5B,mBAAmB,IAE9BhqC,KAAI,SAACiqC,GAC1B,IAAMluC,EAAWkuC,EAAKjqC,KAAI,SAACjC,GAAK,OAAKwS,EAAOxS,EAAM,IAClD,OAAO7B,EAAMoR,OAAOvR,EACtB,IAEA,OAAOT,EAAMgS,OAAO0F,EACtB,yBC7BA,IAAM3U,EAAU7D,EAAQ,OAElBoF,EAAQpF,EAAQ,OAEhBovC,EAAcpvC,EAAQ,OACtBqvC,EAAiBrvC,EAAQ,OAmB/B4B,EAAOC,QAZW,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAC9BrE,EAAa8D,EAAQ9D,GAGrB,IAAMgW,EAASs5B,EAAetvC,GAExBuvC,EAAaF,EAAYr5B,GAG/B,OAAO3Q,EAAM4P,WAAW,CAAE2J,QAAQ,GAAQ2wB,EAC5C,yBCtBA,IAAMt7B,EAAOhU,EAAQ,OA6Cf0vC,EAAM,SAACp2B,EAAIC,EAAIwD,GAAE,OAAMxD,EAAG,GAAKD,EAAG,KAAOyD,EAAG,GAAKzD,EAAG,KAAOC,EAAG,GAAKD,EAAG,KAAOyD,EAAG,GAAKzD,EAAG,GAAG,EAI3Fq2B,EAAY,SAACz0B,EAAGD,GAGpB,OAAU,IAANC,GAAiB,IAAND,GACLuoB,KAEAvoB,EAAIC,CAEhB,EAEAtZ,EAAOC,QAnDa,SAAC+tC,GAEnB,IAAI3+B,EAAM+C,EAAKY,WAAW4uB,IAAUA,KACpCoM,EAAavvC,SAAQ,SAAC6R,IAChBA,EAAM,GAAKjB,EAAI,IAAOiB,EAAM,KAAOjB,EAAI,IAAMiB,EAAM,GAAKjB,EAAI,MAC9DA,EAAMiB,EAEV,IAGA,IAAMF,EAAS,GACf49B,EAAavvC,SAAQ,SAAC6R,GAEpB,IAAM+E,EAAQ04B,EAAUz9B,EAAM,GAAKjB,EAAI,GAAIiB,EAAM,GAAKjB,EAAI,IACpD4+B,EAAS77B,EAAKwc,gBAAgBte,EAAOjB,GAC3Ce,EAAOxR,KAAK,CAAE0R,MAAAA,EAAO+E,MAAAA,EAAO44B,OAAAA,GAC9B,IAGA79B,EAAOwkB,MAAK,SAACsZ,EAAKC,GAAG,OAAKD,EAAI74B,QAAU84B,EAAI94B,MACxC64B,EAAI74B,MAAQ84B,EAAI94B,MAChB64B,EAAID,OAASE,EAAIF,MAAM,IAE3B,IAAM/X,EAAQ,GAUd,OATA9lB,EAAO3R,SAAQ,SAAC6R,GAEd,IADA,IAAI89B,EAAMlY,EAAMl3B,OACTovC,EAAM,GAAKN,EAAI5X,EAAMkY,EAAM,GAAIlY,EAAMkY,EAAM,GAAI99B,EAAMA,QAAUpB,OAAO2c,SAC3EqK,EAAMrhB,MACNu5B,EAAMlY,EAAMl3B,OAEdk3B,EAAMt3B,KAAK0R,EAAMA,MACnB,IAEO4lB,CACT,yBClCAl2B,EAAOC,QAAU,CACfstC,KAAMnvC,EAAQ,OACdiwC,UAAWjwC,EAAQ,yECVfyb,EAAMzb,EAAQ,OACdymB,EAAOzmB,EAAQ,OACf+d,EAAQ/d,EAAQ,OAChBqhB,EAAMrhB,EAAQ,OACdY,EAASZ,EAAQ,OACjB4d,EAAY5d,EAAQ,OACpBgb,EAAQhb,EAAQ,OAChB+W,EAAW/W,EAAQ,OASnBkwC,EAAWlwC,EAAQ,OAMnBmwC,EAAI,wBACR,SAAAA,IAAe7Y,EAAA,KAAA6Y,GACb1sB,KAAK7C,OAAS,GACd6C,KAAKwP,SAAW,GAEhBxP,KAAK3E,OAAS,EAEd2E,KAAK2sB,QAAU,KACf3sB,KAAK4sB,KAZO,EAaZ5sB,KAAKpN,KAAO,KACZoN,KAAK6sB,UAAY,CACnB,CAoSC,OApSA5Y,EAAAyY,EAAA,EAAAl6B,IAAA,UAAAyB,MAED,SAASnX,GACP,GAAiB,kBAANA,EACT,MAAM+B,MAAM,qBAGd,IADA,IAAIiuC,EAAK9sB,KAAKpN,KACP9V,EAAI,GACTgwC,EAAKA,EAAGpN,KACR5iC,GAAK,EAEP,KAAOA,EAAI,GACTgwC,EAAKA,EAAGzM,KACRvjC,GAAK,EAEP,OAAOgwC,CACT,GAAC,CAAAt6B,IAAA,gBAAAyB,MAED,WACE,IAAM84B,EAAK/sB,KAAKpN,KACVo6B,EAAKD,EAAGrN,KACVuN,EAAKD,EAAGtN,KACN5pB,EAAKxC,EAAS,GAAI05B,EAAGE,OAAOz+B,MAAOs+B,EAAGG,OAAOz+B,OAC7C7B,EAAI,GACJiJ,EAAK,GAIX,IAFAmK,KAAK6sB,UAAY,EACjB7sB,KAAK7C,OAAS,CAAC,EAAG,EAAG,GACd8vB,IAAOF,GACZ/pB,EAAKnN,EAAIC,GACTxC,EAASwC,EAAIm3B,EAAGC,OAAOz+B,MAAOs+B,EAAGG,OAAOz+B,OACxCuJ,EAAIgI,KAAK7C,OAAQ6C,KAAK7C,OAAQ7C,EAAM1N,EAAGiJ,EAAIC,IAC3Cm3B,EAAKA,EAAGvN,KACR1f,KAAK6sB,WAAa,EAEpB7sB,KAAKvD,KAAOtf,EAAO6iB,KAAK7C,QAIxB6C,KAAK7C,OAAS5F,EAAMyI,KAAK7C,OAAQ6C,KAAK7C,OAAQ,EAAI6C,KAAKvD,KACzD,GAAC,CAAAjK,IAAA,uBAAAyB,MAED,SAAsBk5B,GAEpB,GADAntB,KAAKotB,gBACDptB,KAAKvD,KAAO0wB,EAAS,CAEvB,IAAIE,EACAC,EAAmB,EACnB16B,EAAOoN,KAAKpN,KAGhB,EAAG,CACD,IAAMqS,EAAgBrS,EAAKqS,gBACvBA,EAAgBqoB,IAClBD,EAAUz6B,EACV06B,EAAmBroB,GAErBrS,EAAOA,EAAK8sB,IACd,OAAS9sB,IAASoN,KAAKpN,MAEvB,IAAMkZ,EAAKuhB,EAAQtK,OAAOt0B,MACpBsd,EAAKshB,EAAQH,OAAOz+B,MACpB8+B,EAAYj6B,EAAS,GAAIyY,EAAID,GAC7B0hB,EAAY/gC,KAAKoD,KAAKy9B,GAE5B/1B,EAAMg2B,EAAWA,EAAW,EAAIC,GAEhC,IAAMC,EAAgB7vB,EAAIoC,KAAK7C,OAAQowB,GAEvCh2B,EAAMg2B,EAAWA,GAAYE,GAC7Bz1B,EAAIgI,KAAK7C,OAAQ6C,KAAK7C,OAAQowB,GAE9BpzB,EAAU6F,KAAK7C,OAAQ6C,KAAK7C,OAC9B,CACF,GAAC,CAAA3K,IAAA,kBAAAyB,MAED,WACE+L,KAAKwP,SAAW,CAAC,EAAG,EAAG,GACvB,IAAI5c,EAAOoN,KAAKpN,KAChB,GACEoF,EAAIgI,KAAKwP,SAAUxP,KAAKwP,SAAU5c,EAAKs6B,OAAOz+B,OAC9CmE,EAAOA,EAAK8sB,WACL9sB,IAASoN,KAAKpN,MACvB2E,EAAMyI,KAAKwP,SAAUxP,KAAKwP,SAAU,EAAIxP,KAAK6sB,UAC/C,GAAC,CAAAr6B,IAAA,2BAAAyB,MAED,SAA0Bk5B,GACD,qBAAZA,EACTntB,KAAK0tB,qBAAqBP,GAE1BntB,KAAKotB,gBAEPptB,KAAK2tB,kBACL3tB,KAAK3E,OAASuC,EAAIoC,KAAK7C,OAAQ6C,KAAKwP,SACtC,GAAC,CAAAhd,IAAA,kBAAAyB,MAED,SAAiBxF,GACf,OAAOmP,EAAIoC,KAAK7C,OAAQ1O,GAASuR,KAAK3E,MACxC,GAEA,CAAA7I,IAAA,mBAAAyB,MAQA,SAAkBosB,EAAMX,GACtB,IAAIkO,EACJ,GAAIvN,EAAKwN,SAAS7B,OAAStM,EAAKmO,SAAS7B,KAAM,CAE7C,IACI8B,EADEC,EAAerO,EAAKmO,SAAS7B,KAE/B3L,IAASrgB,KAAKpN,OAChBoN,KAAKpN,KAAO8sB,GAEiB,IAA3BqO,EAAalB,WAefiB,EAAepO,EAAKmO,SAASxN,KAAKwN,SAClCE,EAAanB,KAlJL,EAmJRgB,EAAgBG,IAahBD,EAAepO,EAAKmO,SAASnO,KAGzBqO,EAAan7B,OAASk7B,EAAazN,OACrC0N,EAAan7B,KAAOk7B,GAStBA,EAAazN,KAAOyN,EAAazN,KAAKA,KACtCyN,EAAazN,KAAKX,KAAOoO,GAU3BpO,EAAKW,KAAOA,EAAKA,KACjBX,EAAKW,KAAKX,KAAOA,EAQjBA,EAAKsO,YAAYF,GAEjBC,EAAaE,0BACf,MAaE5N,EAAKX,KAAOA,EACZA,EAAKW,KAAOA,EAEd,OAAOuN,CACT,GAAC,CAAAp7B,IAAA,qBAAAyB,MAED,SAAoBi6B,EAAcC,GAChC,IAAML,EAAeI,EAAaL,SAC5BE,EAAeD,EAAa9B,KAElCmC,EAAepxC,KAAKgxC,GACpBA,EAAanB,KA5ND,EA4OZ,IANA,IAsBIh6B,EAaAg7B,EAnCAQ,EAAmBF,EAAa7N,KAChCgO,EAAmBH,EAAaxO,KAChC4O,EAAmBR,EAAazN,KAChCkO,EAAmBT,EAAapO,KAG7B0O,EAAiBP,SAAS7B,OAAS+B,GACxCK,EAAmBA,EAAiB/N,KACpCkO,EAAmBA,EAAiB7O,KAGtC,KAAO2O,EAAiBR,SAAS7B,OAAS+B,GACxCM,EAAmBA,EAAiB3O,KACpC4O,EAAmBA,EAAiBjO,KAUtC,IAAKztB,EAAO27B,EAAkB37B,IAAS07B,EAAiB5O,KAAM9sB,EAAOA,EAAK8sB,KACxE9sB,EAAKo5B,KAAOhsB,KAuBd,OAjBAA,KAAKpN,KAAOy7B,GAMZT,EAAgB5tB,KAAKwuB,iBAAiBF,EAAkBD,KAEtDF,EAAepxC,KAAK6wC,IAEtBA,EAAgB5tB,KAAKwuB,iBAAiBJ,EAAkBG,KAEtDJ,EAAepxC,KAAK6wC,GAGtB5tB,KAAKiuB,2BAEEE,CACT,GAAC,CAAA37B,IAAA,iBAAAyB,MAED,WACE,IAAMo3B,EAAU,GACZz4B,EAAOoN,KAAKpN,KAChB,GACEy4B,EAAQtuC,KAAK6V,EAAKs6B,OAAOptC,OACzB8S,EAAOA,EAAK8sB,WACL9sB,IAASoN,KAAKpN,MACvB,OAAOy4B,CACT,IAAC,EAAA74B,IAAA,iBAAAyB,MAED,SAAuBd,EAAI0C,EAAIC,GAAiB,IAAbq3B,EAAO1sC,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,EACrCurC,EAAO,IAAIU,EACXK,EAAK,IAAIN,EAASt5B,EAAI64B,GACtBgB,EAAK,IAAIP,EAAS52B,EAAIm2B,GACtBiB,EAAK,IAAIR,EAAS32B,EAAIk2B,GAU5B,OAPAe,EAAGrN,KAAOuN,EAAG5M,KAAO2M,EACpBA,EAAGtN,KAAOqN,EAAG1M,KAAO4M,EACpBA,EAAGvN,KAAOsN,EAAG3M,KAAO0M,EAGpBf,EAAKp5B,KAAOm6B,EACZf,EAAKiC,yBAAyBd,GACvBnB,CACT,KAACU,CAAA,CA/SO,GAkTVvuC,EAAOC,QAAU,CACfqwC,QAvTc,EAwTdC,WAvTiB,EAwTjBC,QAvTc,EAwTdjC,KAAAA,oEC5UI7+B,EAAWtR,EAAQ,OACnBwwB,EAAkBxwB,EAAQ,OAS1BkwC,EAAQ,wBACZ,SAAAA,EAAa5uC,EAAQmuC,GAAMnY,EAAA,KAAA4Y,GACzBzsB,KAAKniB,OAASA,EACdmiB,KAAKgsB,KAAOA,EACZhsB,KAAK0f,KAAO,KACZ1f,KAAKqgB,KAAO,KACZrgB,KAAK6tB,SAAW,IAClB,CAmCC,OAnCA5Z,EAAAwY,EAAA,EAAAj6B,IAAA,OAAAyB,MAED,WACE,OAAO+L,KAAKniB,MACd,GAAC,CAAA2U,IAAA,OAAAyB,MAED,WACE,OAAO+L,KAAKqgB,KACRrgB,KAAKqgB,KAAKxiC,OACV,IACN,GAAC,CAAA2U,IAAA,SAAAyB,MAED,WACE,OAAI+L,KAAK+iB,OACAl1B,EACLmS,KAAK+iB,OAAOt0B,MACZuR,KAAKktB,OAAOz+B,QAGR,CACV,GAAC,CAAA+D,IAAA,gBAAAyB,MAED,WACE,OAAI+L,KAAK+iB,OACAhW,EACL/M,KAAK+iB,OAAOt0B,MACZuR,KAAKktB,OAAOz+B,QAGR,CACV,GAAC,CAAA+D,IAAA,cAAAyB,MAED,SAAarB,GACXoN,KAAK6tB,SAAWj7B,EAChBA,EAAKi7B,SAAW7tB,IAClB,KAACysB,CAAA,CA1CW,GA6CdtuC,EAAOC,QAAUquC,sFCvDX7uB,EAAMrhB,EAAQ,OAEdqyC,EAAoBryC,EAAQ,OAC5BsyC,EAAiBtyC,EAAQ,OAEzBuyC,EAAavyC,EAAQ,OACrBwyC,EAASxyC,EAAQ,MACvB0D,EAA+C1D,EAAQ,OAA/CmwC,EAAIzsC,EAAJysC,KAAM+B,EAAOxuC,EAAPwuC,QAASC,EAAUzuC,EAAVyuC,WAAYC,EAAO1uC,EAAP0uC,QAc7BK,EAAS,wBACb,SAAAA,EAAazgC,GACX,GADmBslB,EAAA,KAAAmb,IACdtuC,MAAMmB,QAAQ0M,GACjB,MAAM0gC,UAAU,8BAElB,GAAI1gC,EAAOpR,OAAS,EAClB,MAAM0B,MAAM,2CAGdmhB,KAAKkvB,WAAa,EAGlBlvB,KAAKmvB,OAAS,EACdnvB,KAAKovB,QAAU7gC,EAAOpR,OAEtB6iB,KAAKqvB,MAAQ,GACbrvB,KAAKsvB,SAAW,GAWhBtvB,KAAKuvB,QAAU,IAAIT,EACnB9uB,KAAKwvB,UAAY,IAAIV,EAGrB9uB,KAAKliB,SAAW,GAChB,IAAK,IAAIhB,EAAI,EAAGA,EAAIyR,EAAOpR,OAAQL,GAAK,EACtCkjB,KAAKliB,SAASf,KAAK,IAAIgyC,EAAOxgC,EAAOzR,GAAIA,IAE3CkjB,KAAKmuB,eAAiB,GACtBnuB,KAAKyvB,mBAAqB,EAC5B,CAorBC,OAprBAxb,EAAA+a,EAAA,EAAAx8B,IAAA,kBAAAyB,MAED,SAAiBpW,EAAQmuC,GACvBnuC,EAAOmuC,KAAOA,EACTA,EAAKW,QAGR3sB,KAAKuvB,QAAQG,aAAa1D,EAAKW,QAAS9uC,GAFxCmiB,KAAKuvB,QAAQv3B,IAAIna,GAInBmuC,EAAKW,QAAU9uC,CACjB,GAEA,CAAA2U,IAAA,uBAAAyB,MAQA,SAAsBpW,EAAQmuC,GACxBnuC,IAAWmuC,EAAKW,UAEd9uC,EAAO6hC,MAAQ7hC,EAAO6hC,KAAKsM,OAASA,EAEtCA,EAAKW,QAAU9uC,EAAO6hC,KAGtBsM,EAAKW,QAAU,MAGnB3sB,KAAKuvB,QAAQza,OAAOj3B,EACtB,GAEA,CAAA2U,IAAA,4BAAAyB,MAQA,SAA2B+3B,GACzB,GAAIA,EAAKW,QAAS,CAMhB,IADA,IAAIjM,EAAMsL,EAAKW,QACRjM,EAAIhB,MAAQgB,EAAIhB,KAAKsM,OAASA,GACnCtL,EAAMA,EAAIhB,KAUZ,OARA1f,KAAKuvB,QAAQI,YAAY3D,EAAKW,QAASjM,GAOvCA,EAAIhB,KAAO,KACJsM,EAAKW,OACd,CACF,GAEA,CAAAn6B,IAAA,qBAAAyB,MAcA,SAAoB+3B,EAAM4D,GACxB,IAAMC,EAAe7vB,KAAK8vB,0BAA0B9D,GACpD,GAAI6D,EACF,GAAKD,EAWH,IADA,IAAIp7B,EACK3W,EAASgyC,EAAchyC,EAAQA,EAAS2W,EAAY,CAC3DA,EAAa3W,EAAO6hC,KACHkQ,EAAcG,gBAAgBlyC,EAAO4Q,OAGvCuR,KAAKkvB,UAClBlvB,KAAKgwB,gBAAgBnyC,EAAQ+xC,GAE7B5vB,KAAKwvB,UAAUx3B,IAAIna,EAEvB,MAnBAmiB,KAAKwvB,UAAUS,OAAOJ,EAsB5B,GAEA,CAAAr9B,IAAA,yBAAAyB,MAMA,SAAwBq7B,GAItB,IADA,IAAIY,EAAalwB,KAAKwvB,UAAUW,QACvBtyC,EAASqyC,EAAYryC,EAAQA,EAASqyC,EAAY,CACzDA,EAAaryC,EAAO6hC,KAGpB,IAFA,IAAI0Q,EAAcpwB,KAAKkvB,UACnBmB,OAAO,EACFvzC,EAAI,EAAGA,EAAIwyC,EAASnyC,OAAQL,GAAK,EAAG,CAC3C,IAAMkvC,EAAOsD,EAASxyC,GACtB,GAAIkvC,EAAKY,OAAS6B,EAAS,CACzB,IAAMxvB,EAAO+sB,EAAK+D,gBAAgBlyC,EAAO4Q,OAKzC,GAJIwQ,EAAOmxB,IACTA,EAAcnxB,EACdoxB,EAAUrE,GAERoE,EAAc,IAAOpwB,KAAKkvB,UAC5B,KAEJ,CACF,CAEImB,GACFrwB,KAAKgwB,gBAAgBnyC,EAAQwyC,EAEjC,CACF,GAEA,CAAA79B,IAAA,kBAAAyB,MAKA,WACE,IAQInX,EAAGsT,EARD5C,EAAM,GACND,EAAM,GAGN+iC,EAAc,GAEdC,EAAc,GAKpB,IAAKzzC,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACtBwzC,EAAYxzC,GAAKyzC,EAAYzzC,GAAKkjB,KAAKliB,SAAS,GAGlD,IAAKhB,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACtB0Q,EAAI1Q,GAAKyQ,EAAIzQ,GAAKkjB,KAAKliB,SAAS,GAAG2Q,MAAM3R,GAI3C,IAAKA,EAAI,EAAGA,EAAIkjB,KAAKliB,SAASX,OAAQL,GAAK,EAAG,CAC5C,IAAMe,EAASmiB,KAAKliB,SAAShB,GACvB2R,EAAQ5Q,EAAO4Q,MAErB,IAAK2B,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAClB3B,EAAM2B,GAAK5C,EAAI4C,KACjB5C,EAAI4C,GAAK3B,EAAM2B,GACfkgC,EAAYlgC,GAAKvS,GAIrB,IAAKuS,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAClB3B,EAAM2B,GAAK7C,EAAI6C,KACjB7C,EAAI6C,GAAK3B,EAAM2B,GACfmgC,EAAYngC,GAAKvS,EAGvB,CAQA,OALAmiB,KAAKkvB,UAAY,EAAI7hC,OAAO2c,SAC1Bvd,KAAKc,IAAId,KAAKkD,IAAInC,EAAI,IAAKf,KAAKkD,IAAIpC,EAAI,KACxCd,KAAKc,IAAId,KAAKkD,IAAInC,EAAI,IAAKf,KAAKkD,IAAIpC,EAAI,KACxCd,KAAKc,IAAId,KAAKkD,IAAInC,EAAI,IAAKf,KAAKkD,IAAIpC,EAAI,MAEnC,CAAC+iC,EAAaC,EACvB,GAEA,CAAA/9B,IAAA,uBAAAyB,MAIA,WACE,IAEI6B,EAAIwD,EACJxc,EAAGsT,EAHDtS,EAAWkiB,KAAKliB,SACtB0yC,EAAmBxwB,KAAKywB,kBAAiBC,EAAA18B,EAAAw8B,EAAA,GAAlChjC,EAAGkjC,EAAA,GAAEnjC,EAAGmjC,EAAA,GAQXN,EAAc,EACdO,EAAW,EACf,IAAK7zC,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CACzB,IAAM+Q,EAAWN,EAAIzQ,GAAG2R,MAAM3R,GAAK0Q,EAAI1Q,GAAG2R,MAAM3R,GAC5C+Q,EAAWuiC,IACbA,EAAcviC,EACd8iC,EAAW7zC,EAEf,CACA,IAAMqW,EAAK3F,EAAImjC,GACT96B,EAAKtI,EAAIojC,GAIf,IADAP,EAAc,EACTtzC,EAAI,EAAGA,EAAIkjB,KAAKliB,SAASX,OAAQL,GAAK,EAAG,CAC5C,IAAMe,EAASmiB,KAAKliB,SAAShB,GAC7B,GAAIe,IAAWsV,GAAMtV,IAAWgY,EAAI,CAClC,IAAMhI,EAAW+gC,EACf/wC,EAAO4Q,MAAO0E,EAAG1E,MAAOoH,EAAGpH,OAEzBZ,EAAWuiC,IACbA,EAAcviC,EACdiI,EAAKjY,EAET,CACF,CAIA,IAAMsf,EAAS0xB,EAAe,GAAI17B,EAAG1E,MAAOoH,EAAGpH,MAAOqH,EAAGrH,OAEnDmiC,EAAShzB,EAAIzK,EAAG1E,MAAO0O,GAE7B,IADAizB,GAAe,EACVtzC,EAAI,EAAGA,EAAIkjB,KAAKliB,SAASX,OAAQL,GAAK,EAAG,CAC5C,IAAMe,EAASmiB,KAAKliB,SAAShB,GAC7B,GAAIe,IAAWsV,GAAMtV,IAAWgY,GAAMhY,IAAWiY,EAAI,CACnD,IAAMjI,EAAWpB,KAAKkD,IAAIiO,EAAIT,EAAQtf,EAAO4Q,OAASmiC,GAClD/iC,EAAWuiC,IACbA,EAAcviC,EACdyL,EAAKzb,EAET,CACF,CA2BA,IAAMwxC,EAAQ,GACd,GAAIzxB,EAAItE,EAAG7K,MAAO0O,GAAUyzB,EAAS,EAWnC,IARAvB,EAAMtyC,KACJ2vC,EAAKmE,eAAe19B,EAAI0C,EAAIC,GAC5B42B,EAAKmE,eAAev3B,EAAIzD,EAAI1C,GAC5Bu5B,EAAKmE,eAAev3B,EAAIxD,EAAID,GAC5B62B,EAAKmE,eAAev3B,EAAInG,EAAI2C,IAIzBhZ,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CACzB,IAAMsT,GAAKtT,EAAI,GAAK,EAEpBuyC,EAAMvyC,EAAI,GAAGg0C,QAAQ,GAAG9C,YAAYqB,EAAM,GAAGyB,QAAQ1gC,IAErDi/B,EAAMvyC,EAAI,GAAGg0C,QAAQ,GAAG9C,YAAYqB,EAAMj/B,EAAI,GAAG0gC,QAAQ,GAC3D,MAYA,IARAzB,EAAMtyC,KACJ2vC,EAAKmE,eAAe19B,EAAI2C,EAAID,GAC5B62B,EAAKmE,eAAev3B,EAAInG,EAAI0C,GAC5B62B,EAAKmE,eAAev3B,EAAIzD,EAAIC,GAC5B42B,EAAKmE,eAAev3B,EAAIxD,EAAI3C,IAIzBrW,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CACzB,IAAMsT,GAAKtT,EAAI,GAAK,EAEpBuyC,EAAMvyC,EAAI,GAAGg0C,QAAQ,GAAG9C,YAAYqB,EAAM,GAAGyB,SAAS,EAAIh0C,GAAK,IAE/DuyC,EAAMvyC,EAAI,GAAGg0C,QAAQ,GAAG9C,YAAYqB,EAAMj/B,EAAI,GAAG0gC,QAAQ,GAC3D,CAIF,IAAKh0C,EAAI,EAAGA,EAAI,EAAGA,GAAK,EACtBkjB,KAAKqvB,MAAMtyC,KAAKsyC,EAAMvyC,IAIxB,IAAKA,EAAI,EAAGA,EAAIgB,EAASX,OAAQL,GAAK,EAAG,CACvC,IAAMe,EAASC,EAAShB,GACxB,GAAIe,IAAWsV,GAAMtV,IAAWgY,GAAMhY,IAAWiY,GAAMjY,IAAWyb,EAAI,CACpE82B,EAAcpwB,KAAKkvB,UACnB,IAAImB,OAAO,EACX,IAAKjgC,EAAI,EAAGA,EAAI,EAAGA,GAAK,EAAG,CACzB,IAAMvC,EAAWwhC,EAAMj/B,GAAG2/B,gBAAgBlyC,EAAO4Q,OAC7CZ,EAAWuiC,IACbA,EAAcviC,EACdwiC,EAAUhB,EAAMj/B,GAEpB,CAEIigC,GACFrwB,KAAKgwB,gBAAgBnyC,EAAQwyC,EAEjC,CACF,CACF,GAAC,CAAA79B,IAAA,yBAAAyB,MAED,WAGE,IADA,IAAM88B,EAAc,GACXj0C,EAAI,EAAGA,EAAIkjB,KAAKqvB,MAAMlyC,OAAQL,GAAK,EAAG,CAC7C,IAAMkvC,EAAOhsB,KAAKqvB,MAAMvyC,GACpBkvC,EAAKY,OAAS6B,GAChBsC,EAAYh0C,KAAKivC,EAErB,CACAhsB,KAAKqvB,MAAQ0B,CACf,GAAC,CAAAv+B,IAAA,eAAAyB,MAED,SAAc83B,GAEZ,IADA,IAAMiF,EAAc,GACXl0C,EAAI,EAAGA,EAAIkjB,KAAKqvB,MAAMlyC,OAAQL,GAAK,EAAG,CAC7C,GAAIkjB,KAAKqvB,MAAMvyC,GAAG8vC,OAAS6B,EACzB,MAAM5vC,MAAM,mDAEd,IAAMwsC,EAAUrrB,KAAKqvB,MAAMvyC,GAAGm0C,iBAC9B,GAAIlF,EACFiF,EAAYj0C,KAAKsuC,QAEjB,IAAK,IAAIj7B,EAAI,EAAGA,EAAIi7B,EAAQluC,OAAS,EAAGiT,GAAK,EAC3C4gC,EAAYj0C,KACV,CAACsuC,EAAQ,GAAIA,EAAQj7B,EAAI,GAAIi7B,EAAQj7B,EAAI,IAIjD,CACA,OAAO4gC,CACT,GAEA,CAAAx+B,IAAA,kBAAAyB,MAWA,WACE,IAAK+L,KAAKuvB,QAAQ2B,UAAW,CAC3B,IAAIC,EAAWtzC,EACXuyC,EAAc,EACZgB,EAAUpxB,KAAKuvB,QAAQY,QAAQnE,KACrC,IAAKnuC,EAASuzC,EAAQzE,QAAS9uC,GAAUA,EAAOmuC,OAASoF,EAASvzC,EAASA,EAAO6hC,KAAM,CACtF,IAAM7xB,EAAWujC,EAAQrB,gBAAgBlyC,EAAO4Q,OAC5CZ,EAAWuiC,IACbA,EAAcviC,EACdsjC,EAAYtzC,EAEhB,CACA,OAAOszC,CACT,CACF,GAEA,CAAA3+B,IAAA,iBAAAyB,MAWA,SAAgBo9B,EAAUC,EAAWtF,EAAMuF,GAMzC,IAAI3+B,EAJJoN,KAAKwxB,mBAAmBxF,GAExBA,EAAKY,KAAO+B,EASV/7B,EANG0+B,EAMIA,EAAU5R,KALV4R,EAAYtF,EAAK8E,QAAQ,GAkBlC,EAAG,CACD,IAAMhD,EAAel7B,EAAKi7B,SACpBE,EAAeD,EAAa9B,KAC9B+B,EAAanB,OAAS6B,IACpBV,EAAagC,gBAAgBsB,GAAYrxB,KAAKkvB,UAChDlvB,KAAKyxB,eAAeJ,EAAUvD,EAAcC,EAAcwD,GAE1DA,EAAQx0C,KAAK6V,IAGjBA,EAAOA,EAAK8sB,IACd,OAAS9sB,IAAS0+B,EACpB,GAEA,CAAA9+B,IAAA,mBAAAyB,MAQA,SAAkBk9B,EAAWO,GAe3B,IAAM1F,EAAOU,EAAKmE,eAChBM,EACAO,EAAY3O,OACZ2O,EAAYxE,QAMd,OAJAltB,KAAKqvB,MAAMtyC,KAAKivC,GAGhBA,EAAK8E,SAAS,GAAG9C,YAAY0D,EAAY7D,UAClC7B,EAAK8E,QAAQ,EACtB,GAEA,CAAAt+B,IAAA,cAAAyB,MAOA,SAAak9B,EAAWI,GAEtB,IAAII,EAAeC,EADnB5xB,KAAKsvB,SAAW,GAEhB,IAAK,IAAIxyC,EAAI,EAAGA,EAAIy0C,EAAQp0C,OAAQL,GAAK,EAAG,CAC1C,IAAM40C,EAAcH,EAAQz0C,GAEtB+0C,EAAW7xB,KAAK8xB,iBAAiBX,EAAWO,GAC7CC,EAIHE,EAASnS,KAAKsO,YAAY4D,GAH1BD,EAAgBE,EAKlB7xB,KAAKsvB,SAASvyC,KAAK80C,EAAS7F,MAC5B4F,EAAmBC,CACrB,CACAF,EAAcjS,KAAKsO,YAAY4D,EACjC,GAEA,CAAAp/B,IAAA,uBAAAyB,MAWA,SAAsBrB,GACpB,OAAOA,EAAKo5B,KAAK+D,gBAAgBn9B,EAAKi7B,SAAS7B,KAAKxc,SACtD,GAEA,CAAAhd,IAAA,kBAAAyB,MAoCA,SAAiB+3B,EAAM+F,GACrB,IAAIn/B,EAAOo5B,EAAKp5B,KACZo/B,GAAS,EACTlF,EAAK,EACT,EAAG,CACD,GAAIA,GAAMd,EAAKa,UACb,MAAMhuC,MAAM,kCAEd,IAAMkvC,EAAen7B,EAAKi7B,SAAS7B,KAC/BiG,GAAQ,EAsCZ,GA3oBmB,IAsnBfF,GACE/xB,KAAKkyB,qBAAqBt/B,IAASoN,KAAKkvB,WACxClvB,KAAKkyB,qBAAqBt/B,EAAKi7B,WAAa7tB,KAAKkvB,aACnD+C,GAAQ,GAGNjG,EAAKvvB,KAAOsxB,EAAatxB,KACvBuD,KAAKkyB,qBAAqBt/B,IAASoN,KAAKkvB,UAC1C+C,GAAQ,EACCjyB,KAAKkyB,qBAAqBt/B,EAAKi7B,WAAa7tB,KAAKkvB,YAC1D8C,GAAS,GAGPhyB,KAAKkyB,qBAAqBt/B,EAAKi7B,WAAa7tB,KAAKkvB,UACnD+C,GAAQ,EACCjyB,KAAKkyB,qBAAqBt/B,IAASoN,KAAKkvB,YACjD8C,GAAS,GAKXC,EAAO,CAKT,IADA,IAAM9D,EAAiBnC,EAAKmG,mBAAmBv/B,EAAM,IAC5C9V,EAAI,EAAGA,EAAIqxC,EAAehxC,OAAQL,GAAK,EAC9CkjB,KAAKwxB,mBAAmBrD,EAAerxC,GAAIkvC,GAE7C,OAAO,CACT,CAEAp5B,EAAOA,EAAK8sB,KACZoN,GAAM,CACR,OAASl6B,IAASo5B,EAAKp5B,MAIvB,OAHKo/B,IACHhG,EAAKY,KAAO8B,IAEP,CACT,GAEA,CAAAl8B,IAAA,kBAAAyB,MAkBA,SAAiBk9B,GACf,IAAMI,EAAU,GAEhBvxB,KAAKwvB,UAAU96B,QAIfsL,KAAKoyB,qBAAqBjB,EAAWA,EAAUnF,MAC/ChsB,KAAKyxB,eAAeN,EAAU1iC,MAAO,KAAM0iC,EAAUnF,KAAMuF,GAC3DvxB,KAAKqyB,YAAYlB,EAAWI,GAI5B,IAAK,IAAIz0C,EAAI,EAAGA,EAAIkjB,KAAKsvB,SAASnyC,OAAQL,GAAK,EAAG,CAChD,IAAMkvC,EAAOhsB,KAAKsvB,SAASxyC,GAC3B,GAAIkvC,EAAKY,OAAS6B,EAChB,KAAOzuB,KAAKsyB,gBAAgBtG,EAlsBK,KAosBrC,CAKA,IAAK,IAAIlvC,EAAI,EAAGA,EAAIkjB,KAAKsvB,SAASnyC,OAAQL,GAAK,EAAG,CAChD,IAAMkvC,EAAOhsB,KAAKsvB,SAASxyC,GAC3B,GAAIkvC,EAAKY,OAAS8B,EAEhB,IADA1C,EAAKY,KAAO6B,EACLzuB,KAAKsyB,gBAAgBtG,EA5sBX,KA8sBrB,CAGAhsB,KAAKuyB,uBAAuBvyB,KAAKsvB,SACnC,GAAC,CAAA98B,IAAA,QAAAyB,MAED,WACE,IAAIk9B,EAEJ,IADAnxB,KAAKwyB,uBACGrB,EAAYnxB,KAAKyyB,mBACvBzyB,KAAK0yB,gBAAgBvB,GAEvBnxB,KAAK2yB,wBACP,KAAC3D,CAAA,CAztBY,GA4tBf7wC,EAAOC,QAAU4wC,kEC1uBXD,EAAM9a,GACV,SAAA8a,EAAatgC,EAAO3O,GAAO,aAAA+zB,EAAA,KAAAkb,GACzB/uB,KAAKvR,MAAQA,EAEbuR,KAAKlgB,MAAQA,EAEbkgB,KAAK0f,KAAO,KACZ1f,KAAKqgB,KAAO,KAEZrgB,KAAKgsB,KAAO,IACd,IAGF7tC,EAAOC,QAAU2wC,mECbXD,EAAU,wBACd,SAAAA,IAAejb,EAAA,KAAAib,GACb9uB,KAAKktB,KAAO,KACZltB,KAAK+iB,KAAO,IACd,CAmIC,OAnIA9O,EAAA6a,EAAA,EAAAt8B,IAAA,QAAAyB,MAED,WACE+L,KAAKktB,KAAOltB,KAAK+iB,KAAO,IAC1B,GAEA,CAAAvwB,IAAA,eAAAyB,MAOA,SAAc6S,EAAQoN,GACpBA,EAAKmM,KAAOvZ,EAAOuZ,KACnBnM,EAAKwL,KAAO5Y,EACPoN,EAAKmM,KAGRnM,EAAKmM,KAAKX,KAAOxL,EAFjBlU,KAAKktB,KAAOhZ,EAIdpN,EAAOuZ,KAAOnM,CAChB,GAEA,CAAA1hB,IAAA,cAAAyB,MAOA,SAAa6S,EAAQoN,GACnBA,EAAKmM,KAAOvZ,EACZoN,EAAKwL,KAAO5Y,EAAO4Y,KACdxL,EAAKwL,KAGRxL,EAAKwL,KAAKW,KAAOnM,EAFjBlU,KAAK+iB,KAAO7O,EAIdpN,EAAO4Y,KAAOxL,CAChB,GAEA,CAAA1hB,IAAA,MAAAyB,MAOA,SAAKigB,GACElU,KAAKktB,KAGRltB,KAAK+iB,KAAKrD,KAAOxL,EAFjBlU,KAAKktB,KAAOhZ,EAIdA,EAAKmM,KAAOrgB,KAAK+iB,KAEjB7O,EAAKwL,KAAO,KACZ1f,KAAK+iB,KAAO7O,CACd,GAEA,CAAA1hB,IAAA,SAAAyB,MAOA,SAAQigB,GASN,IARKlU,KAAKktB,KAGRltB,KAAK+iB,KAAKrD,KAAOxL,EAFjBlU,KAAKktB,KAAOhZ,EAIdA,EAAKmM,KAAOrgB,KAAK+iB,KAGV7O,EAAKwL,MACVxL,EAAOA,EAAKwL,KAEd1f,KAAK+iB,KAAO7O,CACd,GAEA,CAAA1hB,IAAA,SAAAyB,MAMA,SAAQigB,GACDA,EAAKmM,KAGRnM,EAAKmM,KAAKX,KAAOxL,EAAKwL,KAFtB1f,KAAKktB,KAAOhZ,EAAKwL,KAKdxL,EAAKwL,KAGRxL,EAAKwL,KAAKW,KAAOnM,EAAKmM,KAFtBrgB,KAAK+iB,KAAO7O,EAAKmM,IAIrB,GAEA,CAAA7tB,IAAA,cAAAyB,MAQA,SAAavE,EAAGxD,GACTwD,EAAE2wB,KAGL3wB,EAAE2wB,KAAKX,KAAOxzB,EAAEwzB,KAFhB1f,KAAKktB,KAAOhhC,EAAEwzB,KAKXxzB,EAAEwzB,KAGLxzB,EAAEwzB,KAAKW,KAAO3wB,EAAE2wB,KAFhBrgB,KAAK+iB,KAAOrzB,EAAE2wB,IAIlB,GAAC,CAAA7tB,IAAA,QAAAyB,MAED,WACE,OAAO+L,KAAKktB,IACd,GAAC,CAAA16B,IAAA,UAAAyB,MAED,WACE,OAAQ+L,KAAKktB,IACf,KAAC4B,CAAA,CAvIa,GA0IhB3wC,EAAOC,QAAU0wC,yBCjJjB,IAAMx0B,EAAQ/d,EAAQ,OAChB4d,EAAY5d,EAAQ,OACpB+W,EAAW/W,EAAQ,OAiBzB4B,EAAOC,QARa,SAAC6Q,EAAKmC,EAAQ0R,EAAQ0I,GACxC,IAAMvQ,EAAM,CAAC,EAAG,EAAG,GAInB,OAHA3H,EAASrE,EAAKmC,EAAQ0R,GACtBxP,EAAS2H,EAAK6H,EAAQ0I,GACtBlR,EAAMrL,EAAKA,EAAKgM,GACTd,EAAUlL,EAAKA,EACxB,yBCjBA,IAAM+/B,EAAYzyC,EAAQ,OAe1B4B,EAAOC,QANQ,SAACmQ,GAAyB,IAAjB7R,EAAO+D,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC3BmyC,EAAW,IAAI5D,EAAUzgC,GAE/B,OADAqkC,EAASC,QACFD,EAASE,aAAap2C,EAAQqvC,kBACvC,yBCbA,IAAMzxB,EAAQ/d,EAAQ,OAChB+W,EAAW/W,EAAQ,OACnBywB,EAAgBzwB,EAAQ,OAuC9B4B,EAAOC,QAFmB,SAACqQ,EAAOiB,EAAGxD,GAAC,OAAKO,KAAKoD,KA5BxB,SAACrD,EAAGkD,EAAGxD,GAe7B,IAAM6mC,EAAK,GACLC,EAAK,GAEX1/B,EAASy/B,EAAI7mC,EAAGwD,GAChB4D,EAAS0/B,EAAIxmC,EAAGkD,GAChB,IAAM+M,EAAOuQ,EAAc1S,EAHhB,GAG0B04B,EAAID,IACnCvxC,EAAIwrB,EAAc+lB,GACxB,GAAU,IAANvxC,EACF,MAAM3C,MAAM,8BAEd,OAAO4d,EAAOjb,CAChB,CAEqDyxC,CAAgBxkC,EAAOiB,EAAGxD,GAAG,yBCvClF,IAAMxK,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OA+BtB4B,EAAOC,QA1BgB,SAAC9B,GACtB,IAAM42C,EAAQ,IAAIC,IACZhH,EAAe,GAEfiH,EAAW,SAAC3kC,GAChB,IAAM+D,EAAM/D,EAAMnB,WACb4lC,EAAMzgC,IAAID,KACb25B,EAAapvC,KAAK0R,GAClBykC,EAAMl7B,IAAIxF,GAEd,EAaA,OAXAlW,EAAWM,SAAQ,SAAC4T,GACd9O,EAAMT,IAAIuP,GACZ9O,EAAMiQ,SAASnB,GAAU5T,QAAQw2C,GACxB/1C,EAAM4D,IAAIuP,GAEnBnT,EAAMsU,SAASnB,GAAU5T,SAAQ,SAAC2R,GAAM,OAAKA,EAAO3R,QAAQw2C,EAAS,IAC5DzxC,EAAMV,IAAIuP,IACnB7O,EAAMgQ,SAASnB,GAAU5T,QAAQw2C,EAErC,IAEOjH,CACT,yBC/BA,IAAM/rC,EAAU7D,EAAQ,OAElB8xB,EAAiB9xB,EAAQ,OAEzBmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhB82C,EAAe92C,EAAQ,OACvB+2C,EAAgB/2C,EAAQ,OACxBg3C,EAAmBh3C,EAAQ,OAC3Bi3C,EAAsBj3C,EAAQ,OAsEpC4B,EAAOC,QAbY,SAAC1B,GAA2B,QAAA8D,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,EAAA,GAAAF,UAAAE,GAExC,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAMiD,EAAUxF,EAAWyF,KAAI,SAACyO,GAC9B,GAAI7O,EAAMV,IAAIuP,GAAW,OA1DL,SAAC9T,EAAS8T,GAAQ,OAAKA,CAAQ,CA0DnBijC,CAAgB/2C,EAAS8T,GACzD,GAAI9O,EAAMT,IAAIuP,GAAW,OAvDL,SAAC9T,EAAS8T,GAAQ,OAAKA,CAAQ,CAuDnBkjC,CAAgBh3C,EAAS8T,GACzD,GAAInT,EAAM4D,IAAIuP,GAAW,OApDL,SAAC9T,EAAS8T,GAChC,IAKA5C,EAAwChN,OAAOC,OAAO,CAAC,EALtC,CACfQ,MAAM,EACNsyC,UAAU,EACVryC,aAAa,GAEqD5E,GAA5D2E,EAAIuM,EAAJvM,KAAMsyC,EAAQ/lC,EAAR+lC,SAAUryC,EAAWsM,EAAXtM,YAElB4rB,EAAUmB,EAAe7d,GAC3BuE,EAAW1X,EAAMC,WAAWkT,GAG5BnP,IACF0T,EAAWs+B,EAAanmB,EAASnY,IAI/B4+B,IAEF5+B,EAAWu+B,EAAcpmB,EAASnY,IAIhCzT,IACFyT,EAAWw+B,EAAiBx+B,GAC5BA,EAAWy+B,EAAoBtmB,EAASnY,IAI1C,IAAM9S,EAAQrB,OAAOC,OAAO,CAAC,EAAG2P,GAGhC,OAFAvO,EAAM8S,SAAWA,EAEV9S,CACT,CAmBoC2xC,CAAgBl3C,EAAS8T,GACzD,MAAM,IAAI3R,MAAM,mBAClB,IACA,OAA0B,IAAnBiD,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCxEA3D,EAAOC,QAAU,CACfgD,WAAY7E,EAAQ,OACpB8E,KAAM9E,EAAQ,OACd80B,aAAc90B,EAAQ,yECVlB8lB,EAAY9lB,EAAQ,OACpByY,EAAOzY,EAAQ,OACf0B,EAAQ1B,EAAQ,OAEhBs3C,GAAS,EAETC,EAAS,SAACj2C,GAAM,SAAAF,OAAQE,EAAM,EAE9Bk2C,EAAU,SAACC,EAASC,EAAqBC,EAAmBC,EAASC,EAASC,GAClF,IAAMC,EAAWR,EAAOK,GAClBI,EAAST,EAAOM,GAEtB,IAAMI,EAAa,GAAH72C,OAAM22C,EAAQ,KAAA32C,OAAI42C,GAC5BE,EAAiB,GAAH92C,OAAM42C,EAAM,KAAA52C,OAAI22C,GACpC,GAAIN,EAAQvhC,IAAIgiC,GAGd,OADAC,EAAWV,EAASC,EAAqBC,EAAmBE,EAASD,EAAS,MACvE,KAGT,IAAMQ,EAAa,CACjBR,QAASA,EACTC,QAASA,EACTC,aAAcA,GAiBhB,OAfML,EAAQvhC,IAAI+hC,GAGhBR,EAAQthC,IAAI8hC,GAAYz3C,KAAK43C,GAF7BX,EAAQh0C,IAAIw0C,EAAY,CAACG,IAIvBV,EAAoBxhC,IAAI6hC,GAC1BL,EAAoBvhC,IAAI4hC,GAAUv3C,KAAKy3C,GAEvCP,EAAoBj0C,IAAIs0C,EAAU,CAACE,IAEjCN,EAAkBzhC,IAAI8hC,GACxBL,EAAkBxhC,IAAI6hC,GAAQx3C,KAAKy3C,GAEnCN,EAAkBl0C,IAAIu0C,EAAQ,CAACC,IAE1BA,CACT,EAEME,EAAa,SAACV,EAASC,EAAqBC,EAAmBC,EAASC,EAASC,GACrF,IAAMC,EAAWR,EAAOK,GAClBI,EAAST,EAAOM,GAChBQ,EAAU,GAAHj3C,OAAM22C,EAAQ,KAAA32C,OAAI42C,GAI/B,IAFA,IAAIM,GAAO,EACLC,EAAWd,EAAQthC,IAAIkiC,GACpB93C,EAAI,EAAGA,EAAIg4C,EAAS33C,OAAQL,IAAK,CACxC,IAAMi4C,EAAUD,EAASh4C,GACrB83C,EAAUd,EAAOiB,EAAQZ,SAC7B,GAAIS,IAAYN,KAChBM,EAAUd,EAAOiB,EAAQX,YACTG,IACK,OAAjBF,GACEU,EAAQV,eAAiBA,IAD/B,CAGAQ,EAAM/3C,EACN,KAFA,CAGF,CAEAg4C,EAASrhC,OAAOohC,EAAK,GACG,IAApBC,EAAS33C,QACX62C,EAAQ7/B,OAAOygC,GAIjBC,EAAMZ,EAAoBvhC,IAAI4hC,GAAUze,QAAQ+e,GAEhDX,EAAoBvhC,IAAI4hC,GAAU7gC,OAAOohC,EAAK,GACG,IAA7CZ,EAAoBvhC,IAAI4hC,GAAUn3C,QACpC82C,EAAoB9/B,OAAOmgC,GAG7BO,EAAMX,EAAkBxhC,IAAI6hC,GAAQ1e,QAAQ+e,GAE5CV,EAAkBxhC,IAAI6hC,GAAQ9gC,OAAOohC,EAAK,GACG,IAAzCX,EAAkBxhC,IAAI6hC,GAAQp3C,QAChC+2C,EAAkB//B,OAAOogC,EAE7B,EAmNAp2C,EAAOC,QAtLkB,SAAC2W,GAIxB,IADA,IAAMi/B,EAAU,IAAI5hC,IACXiiC,EAAe,EAAGA,EAAet/B,EAAS5X,OAAQk3C,IAAgB,CACzE,IAAM92C,EAAUwX,EAASs/B,GACnBr1C,EAAczB,EAAQO,SAASX,OACrC,GAAI6B,GAAe,EAGjB,IAFA,IAAInB,EAASN,EAAQO,SAAS,GAC1Bk3C,EAAYlB,EAAOj2C,GACd85B,EAAc,EAAGA,EAAc34B,EAAa24B,IAAe,CAClE,IAAIC,EAAkBD,EAAc,EAChCC,IAAoB54B,IAAa44B,EAAkB,GAEvD,IAAMqd,EAAa13C,EAAQO,SAAS85B,GAC9Bsd,EAAgBpB,EAAOmB,GAEvBL,EAAU,GAAHj3C,OAAMq3C,EAAS,KAAAr3C,OAAIu3C,GAC1BT,EAAiB,GAAH92C,OAAMu3C,EAAa,KAAAv3C,OAAIq3C,GAC3C,GAAIhB,EAAQvhC,IAAIgiC,GAAiB,CAI/B,IAAMU,EAAKnB,EAAQthC,IAAI+hC,GACvBU,EAAG1hC,QAAQ,EAAG,GACI,IAAd0hC,EAAGh4C,QACL62C,EAAQ7/B,OAAOsgC,EAEnB,KAAO,CACL,IAAMM,EAAU,CACdZ,QAASt2C,EACTu2C,QAASa,EACTZ,aAAcA,GAEVL,EAAQvhC,IAAImiC,GAGhBZ,EAAQthC,IAAIkiC,GAAS73C,KAAKg4C,GAF1Bf,EAAQh0C,IAAI40C,EAAS,CAACG,GAI1B,CACAl3C,EAASo3C,EACTD,EAAYE,CACd,MAEAh0C,QAAQC,KAAK,yDAEjB,CAEA,GAAI6yC,EAAQtM,KAAO,EAAG,CAEpB,IAGyC/zB,EAHnCsgC,EAAsB,IAAI7hC,IAC1B8hC,EAAoB,IAAI9hC,IACxBgjC,EAAe,IAAIhjC,IAAKwB,EAAAC,EACImgC,GAAO,QAAA7gB,EAAA,WAAE,IAAApf,EAAAC,EAAAL,EAAAM,MAAA,GAA/B2gC,EAAO7gC,EAAA,GAAE+gC,EAAQ/gC,EAAA,GAC3BqhC,EAAap1C,IAAI40C,GAAS,GAC1BE,EAASl4C,SAAQ,SAACm4C,GAChB,IAAMT,EAAWR,EAAOiB,EAAQZ,SAC1BI,EAAST,EAAOiB,EAAQX,SAC1BH,EAAoBxhC,IAAI6hC,GAC1BL,EAAoBvhC,IAAI4hC,GAAUv3C,KAAK63C,GAEvCX,EAAoBj0C,IAAIs0C,EAAU,CAACM,IAEjCV,EAAkBzhC,IAAI8hC,GACxBL,EAAkBxhC,IAAI6hC,GAAQx3C,KAAK63C,GAEnCV,EAAkBl0C,IAAIu0C,EAAQ,CAACK,GAEnC,GACF,EAhBA,IAAAhhC,EAAApS,MAAAmS,EAAAC,EAAA3D,KAAA6D,MAAAqf,GAkBA,OAAA/e,IAAAR,EAAAS,EAAAD,GAAA,SAAAR,EAAAjH,GAAA,CAEA,IADA,IAAM2I,EAAcP,EAAS9D,MAAM,GAEZ,IAAjB+iC,EAAQtM,MADD,CACkB,IAEO2N,EAFPC,EAAAzhC,EAEPmgC,EAAQuB,QAAM,IAApC,IAAAD,EAAA9zC,MAAA6zC,EAAAC,EAAArlC,KAAA6D,MAAsC,KAA3B8gC,EAAOS,EAAAphC,MAChBmhC,EAAap1C,IAAI40C,GAAS,EAC5B,CAAC,OAAAxgC,IAAAkhC,EAAAjhC,EAAAD,GAAA,SAAAkhC,EAAA3oC,GAAA,CAGD,IADA,IAAI6oC,GAAgB,IACP,CACX,IAAMC,EAAW/0C,MAAMg1C,KAAKN,EAAaG,QACzC,GAAwB,IAApBE,EAASt4C,OAAc,MAC3B,IAAMw4C,EAAiBF,EAAS,GAC5BG,GAAe,EACnB,GAAI5B,EAAQvhC,IAAIkjC,GAAiB,CAC/B,IAAMb,EAAWd,EAAQthC,IAAIijC,GACzB9B,EAEJ,IADA,IAAMkB,EAAUD,EAAS,GAChBe,EAAiB,EAAGA,EAAiB,EAAGA,IAAkB,CACjE,IAAMC,EAAkC,IAAnBD,EAAwBd,EAAQZ,QAAUY,EAAQX,QACjE2B,EAAgC,IAAnBF,EAAwBd,EAAQX,QAAUW,EAAQZ,QAC/D6B,EAAiBlC,EAAOgC,GACxBG,EAAenC,EAAOiC,GACxBG,EAAgB,GACG,IAAnBL,EACE3B,EAAkBzhC,IAAIujC,KACxBE,EAAgBhC,EAAkBxhC,IAAIsjC,IAGpC/B,EAAoBxhC,IAAIujC,KAC1BE,EAAgBjC,EAAoBvhC,IAAIsjC,IAG5C,IAAK,IAAIG,EAAoB,EAAGA,EAAoBD,EAAc/4C,OAAQg5C,IAAqB,CAC7F,IAAMC,EAAkBF,EAAcC,GAChCE,EAAerC,EAAQthC,IAAI0jC,GAAiB,GAC5CE,EAA8C,IAAnBT,EAAwBQ,EAAalC,QAAUkC,EAAajC,QACvFmC,EAA4C,IAAnBV,EAAwBQ,EAAajC,QAAUiC,EAAalC,QACrFqC,EAA6B1C,EAAOwC,GACTxC,EAAOyC,GAExC,GAAIC,IAA+BP,EAAc,CAE/CvB,EAAWV,EAASC,EAAqBC,EAAmB4B,EAAaC,EAAW,MACpFrB,EAAWV,EAASC,EAAqBC,EAAmB6B,EAAWD,EAAa,MACpFF,GAAe,EACfC,EAAiB,EACjBL,GAAgB,EAChB,KACF,CACE,IAAMiB,EAAWX,EACXY,EAASX,EACTY,GAAWL,EACXp1B,GAAYlM,EAAK1B,SAAS0B,EAAK3F,SAAUsnC,GAAUF,GAEnD7pC,GAAIoI,EAAK4I,IAAI5I,EAAK1B,SAAS0B,EAAK3F,SAAUqnC,EAAQD,GAAWv1B,IAAalM,EAAK4I,IAAIsD,GAAWA,IACpG,GAAKtU,GAAI,GAAOA,GAAI,EAAI,CACtB,IAAM8W,GAAe1O,EAAKuC,MAAMvC,EAAK3F,SAAU6R,GAAWtU,IAG1D,GAFAoI,EAAKgD,IAAI0L,GAAcA,GAAc+yB,GACbzhC,EAAK+X,gBAAgBrJ,GAAcgzB,GACpCr0B,EAAU1H,IAAM0H,EAAU1H,IAAM,CAOrD,IALA,IAAM05B,GAAegC,EAAahC,aAC5B92C,GAAU+X,EAAY++B,IAEtBuC,GAAqB9C,EAAOuC,EAAajC,SAC3CyC,IAA2B,EACtB/5C,GAAI,EAAGA,GAAIS,GAAQO,SAASX,OAAQL,KAC3C,GAAIg3C,EAAOv2C,GAAQO,SAAShB,OAAQ85C,GAAoB,CACtDC,GAA0B/5C,GAC1B,KACF,CAEE+2C,EAEJ,IAAMiD,GAAcv5C,GAAQO,SAASmT,MAAM,GAC3C6lC,GAAYrjC,OAAOojC,GAAyB,EAAGd,GAC/C,IAAMgB,GAAa94C,EAAMoR,OAAOynC,IAEhCxhC,EAAY++B,IAAgB0C,GAG5BrC,EAAWV,EAASC,EAAqBC,EAAmBmC,EAAalC,QAASkC,EAAajC,QAASC,IACxG,IAAM2C,GAAcjD,EAAQC,EAASC,EAAqBC,EAAmBmC,EAAalC,QAAS4B,EAAW1B,IACxG4C,GAAclD,EAAQC,EAASC,EAAqBC,EAAmB6B,EAAWM,EAAajC,QAASC,IAC1F,OAAhB2C,IAAsB5B,EAAap1C,IAAIg3C,IAAa,GACpC,OAAhBC,IAAsB7B,EAAap1C,IAAIi3C,IAAa,GACxDrB,GAAe,EACfC,EAAiB,EACjBL,GAAgB,EAChB,KACF,CACF,CAEJ,CACF,CACF,CACII,GACFR,EAAajhC,OAAOwhC,EAExB,CACA,IAAKH,EAAe,KACtB,CACAzgC,EAAWO,CACb,CAGA,OAFA0+B,EAAQt/B,QAEDK,CACT,yBCnSA,IAAM0W,EAAoBlvB,EAAQ,OAC5ByY,EAAOzY,EAAQ,OAEf0B,EAAQ1B,EAAQ,OAGhB26C,EAAc,SAAC35C,GAGnB,IAFA,IAAMgR,EAAStQ,EAAM0T,SAASpU,GACxB8U,EAAQ,GACLvV,EAAI,EAAGA,EAAIyR,EAAOpR,OAAQL,IAAK,CACtC,IAAMsT,GAAKtT,EAAI,GAAKyR,EAAOpR,OACrByV,EAAO,CACXiD,GAAItH,EAAOzR,GACXgZ,GAAIvH,EAAO6B,IAEbiC,EAAMtV,KAAK6V,EACb,CAEA,IAAK,IAAI9V,EAAI,EAAGA,EAAIuV,EAAMlV,OAAQL,IAAK,CACrC,IAAMsT,GAAKtT,EAAI,GAAKyR,EAAOpR,OAC3BkV,EAAMvV,GAAG4iC,KAAOrtB,EAAMjC,GACtBiC,EAAMjC,GAAGiwB,KAAOhuB,EAAMvV,EACxB,CACA,OAAOuV,CACT,EAEM8kC,EAAa,SAAC9kC,EAAOO,GACzB,IAAMJ,EAAM,GAAH7U,OAAMiV,EAAKiD,GAAE,KAAAlY,OAAIiV,EAAKkD,IAC/BzD,EAAMrS,IAAIwS,EAAKI,EACjB,EAEMwkC,EAAa,SAAC/kC,EAAOO,GACzB,IAAMJ,EAAM,GAAH7U,OAAMiV,EAAKiD,GAAE,KAAAlY,OAAIiV,EAAKkD,IAC/BzD,EAAM8B,OAAO3B,EACf,EAEM6kC,EAAmB,SAAChlC,EAAOO,GAC/B,IAAMJ,EAAM,GAAH7U,OAAMiV,EAAKkD,GAAE,KAAAnY,OAAIiV,EAAKiD,IAC/B,OAAOxD,EAAMK,IAAIF,EACnB,EAGM8kC,EAAyB,SAACvnC,EAAS89B,EAAU1wB,GACjD,IAAIhK,EAAKpD,EAAQswB,KAAKxqB,GAClBA,EAAK9F,EAAQswB,KAAKvqB,GAClBA,EAAK+3B,EAASnO,KAAK5pB,GACjByhC,EAASC,EAAerkC,EAAI0C,EAAIC,EAAIqH,GAO1C,OALAhK,EAAK06B,EAASxN,KAAKxqB,GACnBA,EAAKg4B,EAASxN,KAAKvqB,GACnBA,EAAK/F,EAAQ2vB,KAAK5pB,GAGX,CAACyhC,EAFOC,EAAerkC,EAAI0C,EAAIC,EAAIqH,GAG5C,EAEMtH,EAAKb,EAAK3F,SACVyG,EAAKd,EAAK3F,SAEVmoC,EAAiB,SAAClmC,EAAW7C,EAAOiP,EAAWP,GACnD,IAAMs6B,EAAKziC,EAAK1B,SAASuC,EAAIpH,EAAO6C,GAC9BomC,EAAK1iC,EAAK1B,SAASwC,EAAI4H,EAAWjP,GAExC,OADAuG,EAAKsF,MAAMm9B,EAAIA,EAAIC,GACZ1iC,EAAK4I,IAAI65B,EAAIt6B,EACtB,EA2BMw6B,EAAwB,SAACC,GAC7B,GAAIA,EAAez6C,OAAS,EAAG,OAAOy6C,EAMtC,IAJA,IAAMz6B,EAASy6B,EAAe,GAAG15C,MAC3B6W,EAAW6iC,EAAe3mC,QAC1B4mC,EAAW,IAAIzlC,IAEd2C,EAAS5X,OAAS,GAGvB,IAFA,IAAMI,EAAUwX,EAASb,QACnB7B,EAAQ6kC,EAAY35C,GACjBT,EAAI,EAAGA,EAAIuV,EAAMlV,OAAQL,IAAK,CACrC,IAAMiT,EAAUsC,EAAMvV,GAChB+wC,EAAWwJ,EAAiBQ,EAAU9nC,GAC5C,GAAI89B,EAAU,CACZ,IAAMxS,EAASic,EAAuBvnC,EAAS89B,EAAU1wB,GACzD,GAAIke,EAAO,IAAM,GAAKA,EAAO,IAAM,EAAG,CACpC,IAAM6N,EAAQ2E,EAASnO,KACjBoY,EAAQ/nC,EAAQ2vB,KAEtB3vB,EAAQswB,KAAKX,KAAOmO,EAASnO,KAC7B3vB,EAAQ2vB,KAAKW,KAAOwN,EAASxN,KAE7BwN,EAASxN,KAAKX,KAAO3vB,EAAQ2vB,KAC7BmO,EAASnO,KAAKW,KAAOtwB,EAAQswB,KAG7BtwB,EAAQ8F,GAAK,KACb9F,EAAQ+F,GAAK,KACb/F,EAAQ2vB,KAAO,KACf3vB,EAAQswB,KAAO,KAEf+W,EAAWS,EAAUhK,GAErBA,EAASh4B,GAAK,KACdg4B,EAAS/3B,GAAK,KACd+3B,EAASnO,KAAO,KAChBmO,EAASxN,KAAO,KAEhB,IAAM0X,EAAa,SAACzZ,EAAM0O,EAAIC,GAC5B,IAAM+K,EAAU,CACdniC,GAAIo3B,EAAGp3B,GACPC,GAAIk3B,EAAGl3B,GACP4pB,KAAMsN,EAAGtN,KACTW,KAAM4M,EAAG5M,MAGX4M,EAAG5M,KAAKX,KAAOsY,EACfhL,EAAGtN,KAAKW,KAAO2X,EAEfZ,EAAW9Y,EAAM0O,GACjBA,EAAGn3B,GAAK,KACRm3B,EAAGl3B,GAAK,KACRk3B,EAAGtN,KAAO,KACVsN,EAAG3M,KAAO,KAEV+W,EAAW9Y,EAAM2O,GACjBA,EAAGp3B,GAAK,KACRo3B,EAAGn3B,GAAK,KACRm3B,EAAGvN,KAAO,KACVuN,EAAG5M,KAAO,IACZ,EAEkB,IAAdhF,EAAO,IACT0c,EAAWF,EAAU3O,EAAOA,EAAM7I,MAElB,IAAdhF,EAAO,IACT0c,EAAWF,EAAUC,EAAOA,EAAMzX,KAEtC,CACF,MACMtwB,EAAQ2vB,MAAMyX,EAAWU,EAAU9nC,EAE3C,CAIF,IAAMkoC,EAAe,GAQrB,OAPAJ,EAASj7C,SAAQ,SAACgW,GAChB,IAAMrV,EAtGe,SAACqV,GAGxB,IAFA,IAAIrV,EACEgR,EAAS,GACRqE,EAAK8sB,MAAM,CAChB,IAAMA,EAAO9sB,EAAK8sB,KAElBnxB,EAAOxR,KAAK6V,EAAKiD,IAEjBjD,EAAKiD,GAAK,KACVjD,EAAKkD,GAAK,KACVlD,EAAK8sB,KAAO,KACZ9sB,EAAKytB,KAAO,KAEZztB,EAAO8sB,CACT,CAEA,OADInxB,EAAOpR,OAAS,IAAGI,EAAUU,EAAMoR,OAAOd,IACvChR,CACT,CAqFoB26C,CAAiBtlC,GAC7BrV,GAAS06C,EAAal7C,KAAKQ,EACjC,IAEAs6C,EAASnjC,QAEFujC,CACT,EA+BA95C,EAAOC,QArBe,SAAC8uB,EAASnY,GAC9B,IAAMojC,EAAmB,GACzBpjC,EAASnY,SAAQ,SAACW,GAChB,IAAMk1B,EAAU0lB,EAAiB/N,MAAK,SAACgO,GAAO,OAXhCt0B,EAW8Cs0B,EAAQ,GAX9Cr0B,EAWkD9lB,EAAMC,MAAMX,GATlFkP,KAAKkD,IAAImU,EAAO,GAAKC,EAAO,IAAM,OAC7B0H,EAAkB3H,EAAQC,GAHpB,IAACD,EAAQC,CAWuE,IACzF0O,EACeA,EAAQ,GAChB11B,KAAKQ,GAEd46C,EAAiBp7C,KAAK,CAACkB,EAAMC,MAAMX,GAAU,CAACA,IAElD,IAEA,IAAI06C,EAAe,GAMnB,OALAE,EAAiBv7C,SAAQ,SAAC61B,GACxB,IAAMmlB,EAAiBnlB,EAAQ,GACzB4lB,EAAuBV,EAAsBC,GACnDK,EAAeA,EAAat6C,OAAO06C,EACrC,IACOJ,CACT,yBC7MA,IAAQt9B,EAAQpe,EAAQ,OAAhBoe,IAEF2H,EAAQ/lB,EAAQ,OAChBgU,EAAOhU,EAAQ,OACfsjB,EAAmBtjB,EAAQ,OAC3BmvB,EAAiCnvB,EAAQ,OAE/C4D,EAAuC5D,EAAQ,OAAvC+7C,EAAYn4C,EAAZm4C,aAAcre,EAAY95B,EAAZ85B,aAEhBh8B,EAAQ1B,EAAQ,OA+UtB4B,EAAOC,QAxU6B,SAACw5C,GACnC,GAAIA,EAAez6C,OAAS,EAAG,OAAOy6C,EAgBtC,IAdA,IAAMK,EAAe,GACfl5C,EAAc64C,EAAez6C,OAC7Be,EAAQD,EAAMC,MAAM05C,EAAe,IACnCW,EAAa,IAAI14B,EAAiB3hB,GAClCs6C,EAAoB,GACpBC,EAA0B,GAC1BC,EAAsB,IAAItmC,IAC1BumC,EAA8B,IAAIvmC,IAKlCwmC,EAAkB,IAAIxmC,IACtBymC,EAA2B,GAAKl+B,EAC7B05B,EAAe,EAAGA,EAAet1C,EAAas1C,IAAgB,CACrE,IAAMyE,EAASlB,EAAevD,GAC1B0E,EAAa,GACb/5C,EAAc85C,EAAOh7C,SAASX,OAC9B67C,GAAY,EAChB,GAAIh6C,EAAc,EAAG,CAGnB,IAFA,IAAIsf,OAAI,EACJG,OAAI,EACC3hB,EAAI,EAAGA,EAAIkC,EAAalC,IAAK,CACpC,IAAIm8C,EAAQV,EAAWz3B,KAAKg4B,EAAOh7C,SAAShB,IAGtCo8C,EAAiBzsC,KAAKC,MAAMusC,EAAM,GAAKJ,GACzCM,OAAI,EACJP,EAAgBnmC,IAAIymC,GACtBC,EAAOP,EAAgBlmC,IAAIwmC,GAClBN,EAAgBnmC,IAAIymC,EAAiB,GAC9CC,EAAOP,EAAgBlmC,IAAIwmC,EAAiB,GACnCN,EAAgBnmC,IAAIymC,EAAiB,GAC9CC,EAAOP,EAAgBlmC,IAAIwmC,EAAiB,IAE5CC,EAAOF,EAAM,GACbL,EAAgB54C,IAAIk5C,EAAgBD,EAAM,KAE5CA,EAAQ1oC,EAAKY,WAAW8nC,EAAM,GAAIE,GAClCJ,EAAWh8C,KAAKk8C,GAChB,IAAMxhC,EAAIwhC,EAAM,IACL,IAANn8C,GAAa2a,EAAI6G,KACpBA,EAAO7G,EACPuhC,EAAWl8C,IAEF,IAANA,GAAa2a,EAAIgH,KACpBA,EAAOhH,GAET,IAAI2hC,EAAiBT,EAA4BjmC,IAAI+E,GAChD2hC,IACHA,EAAiB,CAAC,EAClBT,EAA4B34C,IAAIyX,EAAG2hC,IAErCA,EAAe/E,IAAgB,CACjC,CACA,GAAI/1B,GAAQG,EAEVs6B,EAAa,GACb/5C,EAAc,EACdg6C,GAAY,MACP,CACL,IAAII,EAAiBV,EAAoBhmC,IAAI4L,GACxC86B,IACHA,EAAiB,GACjBV,EAAoB14C,IAAIse,EAAM86B,IAEhCA,EAAer8C,KAAKs3C,EACtB,CACF,CAEA0E,EAAWtnC,UACXunC,EAAWh6C,EAAcg6C,EAAW,EACpCR,EAAkBz7C,KAAKg8C,GACvBN,EAAwB17C,KAAKi8C,EAC/B,CAEA,IAAMK,EAAe,GACrBV,EAA4B/7C,SAAQ,SAAC08C,EAAU7hC,GAAC,OAAK4hC,EAAat8C,KAAK0a,EAAE,IACzE4hC,EAAatmB,KAAKkH,GAelB,IAFA,IAAIsf,EAAiB,GACjBC,EAAoB,GAAErmB,EAAA,WAWxB,IATA,IAiDIsmB,EAjDEC,EAAmB,GACnBC,EAAcN,EAAaO,GAO3BC,EAA2BlB,EAA4BjmC,IAAIinC,GACxDG,EAAqB,EAAGA,EAAqBP,EAAep8C,SAAU28C,EAAoB,CACjG,IAAMC,EAAgBR,EAAeO,GAC/BzF,EAAe0F,EAAc1F,aACnC,GAAIwF,EAAyBxF,GAAe,CAO1C,IALA,IAAM0E,EAAaP,EAAkBnE,GAC/Br1C,EAAc+5C,EAAW57C,OAC3B68C,EAAqBD,EAAcE,gBACnCC,EAAsBH,EAAcI,mBAE3B,CACX,IAAIC,EAAsBJ,EAAqB,EAE/C,GADII,GAAuBp7C,IAAao7C,EAAsB,GAC1DrB,EAAWqB,GAAqB,KAAOT,EAAa,MACxDK,EAAqBI,CACvB,CACA,IAAIC,EAAuBH,EAAsB,EAKjD,GAJIG,EAAuB,IAAGA,EAAuBr7C,EAAc,GAC/D+5C,EAAWsB,GAAsB,KAAOV,IAC1CO,EAAsBG,GAEnBL,IAAuBD,EAAcE,iBAAqBD,IAAuBE,EAGpFX,EAAe9lC,OAAOqmC,EAAoB,KACxCA,MACG,CACLC,EAAcE,gBAAkBD,EAChCD,EAAcI,iBAAmBD,EACjCH,EAAcO,QAAUvB,EAAWiB,GACnCD,EAAcQ,SAAWxB,EAAWmB,GACpC,IAAIE,EAAsBJ,EAAqB,EAC3CI,GAAuBp7C,IAAao7C,EAAsB,GAC9DL,EAAcS,WAAazB,EAAWqB,GACtC,IAAIC,EAAuBH,EAAsB,EAC7CG,EAAuB,IAAGA,EAAuBr7C,EAAc,GACnE+6C,EAAcU,YAAc1B,EAAWsB,EACzC,CACF,CACF,CAEA,GAAIT,GAAUP,EAAal8C,OAAS,EAElCo8C,EAAiB,GACjBE,EAAkB,SACb,CAEL,IAAMiB,EAAoB,IAAOf,GADjCF,EAAkBpsC,OAAOgsC,EAAaO,EAAS,MAGzCe,EAAyBjC,EAAoBhmC,IAAIinC,GACvD,IAAK,IAAMiB,KAAmBD,EAAwB,CAQpD,IAPA,IAAMtG,EAAesG,EAAuBC,GACtC7B,EAAaP,EAAkBnE,GAC/Br1C,EAAc+5C,EAAW57C,OACzB09C,EAAiBpC,EAAwBpE,GAG3CyG,EAAqBD,IACZ,CACX,IAAI/9C,EAAIg+C,EAAqB,EAE7B,GADIh+C,GAAKkC,IAAalC,EAAI,GACtBi8C,EAAWj8C,GAAG,KAAO68C,EAAa,MACtC,GAAI78C,IAAM+9C,EAAgB,MAC1BC,EAAqBh+C,CACvB,CAEA,IADA,IAAIi+C,EAAsBF,IACb,CACX,IAAI/9C,EAAIi+C,EAAsB,EAE9B,GADIj+C,EAAI,IAAGA,EAAIkC,EAAc,GACzB+5C,EAAWj8C,GAAG,KAAO68C,EAAa,MACtC,GAAI78C,IAAMg+C,EAAoB,MAC9BC,EAAsBj+C,CACxB,CACA,IAAIs9C,EAAsBU,EAAqB,EAC3CV,GAAuBp7C,IAAao7C,EAAsB,GAC9D,IAAIC,EAAuBU,EAAsB,EAC7CV,EAAuB,IAAGA,EAAuBr7C,EAAc,GACnE,IAAMg8C,EAAmB,CACvB3G,aAAcA,EACd4F,gBAAiBa,EACjBX,iBAAkBY,EAClBT,QAASvB,EAAW+B,GACpBP,SAAUxB,EAAWgC,GACrBP,WAAYzB,EAAWqB,GACvBK,YAAa1B,EAAWsB,IAE1B/B,EAAaiB,EAAgByB,GAAkB,SAACC,EAAKC,GACnD,IAAMC,EAAKzvB,EAA+BuvB,EAAIX,QAASW,EAAIT,WAAYE,GACjEU,EAAK1vB,EAA+BwvB,EAAIZ,QAASY,EAAIV,WAAYE,GACvE,OAAIS,EAAKC,EAAW,EAChBD,EAAKC,GAAY,EACd,CACT,GACF,CACF,CAIA,IAAK,IAAMC,KAAoB9B,EAAgB,CAC7C,IAAMQ,EAAgBR,EAAe8B,GAEjC7jC,EAAIkU,EAA+BquB,EAAcO,QAASP,EAAcS,WAAYb,GAClFW,EAAU/pC,EAAKY,WAAWqG,EAAGmiC,GACnCniC,EAAIkU,EAA+BquB,EAAcQ,SAAUR,EAAcU,YAAad,GACtF,IAAMY,EAAWhqC,EAAKY,WAAWqG,EAAGmiC,GACpCniC,EAAIkU,EAA+BquB,EAAcO,QAASP,EAAcS,WAAYf,GACpF,IAAMe,EAAajqC,EAAKY,WAAWqG,EAAGiiC,GACtCjiC,EAAIkU,EAA+BquB,EAAcQ,SAAUR,EAAcU,YAAahB,GACtF,IAAMgB,EAAclqC,EAAKY,WAAWqG,EAAGiiC,GACjC6B,EAAa,CACjBhB,QAASA,EACTC,SAAUA,EACVC,WAAYA,EACZC,YAAaA,EACbc,SAAUj5B,EAAM/Q,WAAW+Q,EAAMjT,SAAUirC,EAASE,GACpDgB,UAAWl5B,EAAM/Q,WAAW+Q,EAAMjT,SAAUorC,EAAaF,IAE3D,GAAIb,EAAiBv8C,OAAS,EAAG,CAC/B,IAAMs+C,GAAiB/B,EAAiBA,EAAiBv8C,OAAS,GAC5Du6C,GAAKnnC,EAAK1C,SAASytC,EAAWhB,QAASmB,GAAelB,UACtDmB,GAAKnrC,EAAK1C,SAASytC,EAAWd,WAAYiB,GAAehB,aAC1D/C,GAAK/8B,GAAS+gC,GAAK/gC,IAEtB2gC,EAAWhB,QAAUmB,GAAenB,QACpCgB,EAAWC,SAAWE,GAAeF,SACrCD,EAAWd,WAAaiB,GAAejB,WACvCd,EAAiBjmC,OAAOimC,EAAiBv8C,OAAS,EAAG,GAEzD,CACAu8C,EAAiB38C,KAAKu+C,EACxB,CACA,GAAI1B,EAAS,EAAG,CAId,IAFA,IAAM+B,GAAuB,IAAIxI,IAC3ByI,GAAiB,IAAIzI,IAClBr2C,GAAI,EAAGA,GAAI48C,EAAiBv8C,OAAQL,KAE3C,IADA,IAAM++C,GAAcnC,EAAiB58C,IAC5Bg/C,GAAK,EAAGA,GAAKtC,EAAkBr8C,OAAQ2+C,KAC9C,IAAKF,GAAenpC,IAAIqpC,IAAK,CAG3B,IAAMC,GAAcvC,EAAkBsC,IACtC,GAAIvrC,EAAK1C,SAASkuC,GAAYvB,WAAYqB,GAAYvB,SAAW3/B,GAC3DpK,EAAK1C,SAASkuC,GAAYtB,YAAaoB,GAAYtB,UAAY5/B,EAAK,CAEtEihC,GAAe5jC,IAAI8jC,IAEnB,IAAMjmC,GAAKyM,EAAMpB,UAAU26B,GAAYN,UACjCzlC,GAAKwM,EAAMpB,UAAU66B,GAAYR,UACjC7D,GAAK7hC,GAAG,GAAKC,GAAG,GAEhBwD,GAAKgJ,EAAMpB,UAAU26B,GAAYL,WACjCQ,GAAK15B,EAAMpB,UAAU66B,GAAYP,WACjCE,GAAKpiC,GAAG,GAAK0iC,GAAG,GAEhBC,GAAoBxvC,KAAKkD,IAAI+nC,IAAM/8B,EACnCuhC,GAAqBzvC,KAAKkD,IAAI+rC,IAAM/gC,GACjBshC,IAAsBvE,IAAM,KAC3BwE,IAAuBR,IAAM,KAIrDG,GAAYP,WAAaS,GAAYT,WACrCO,GAAYI,kBAAoBA,GAChCJ,GAAYK,mBAAqBA,GACjCP,GAAqB3jC,IAAI8jC,KAE3B,KACF,CAEJ,CAGJ,IAAK,IAAIA,GAAK,EAAGA,GAAKtC,EAAkBr8C,OAAQ2+C,KAC9C,IAAKH,GAAqBlpC,IAAIqpC,IAAK,CAGjC,IAAMC,GAAcvC,EAAkBsC,IACtCC,GAAYT,WAAWa,YAAYp/C,KAAKg/C,GAAYtB,aAChDlqC,EAAK1C,SAASkuC,GAAYtB,YAAasB,GAAYvB,YAAc7/B,GAEnEohC,GAAYT,WAAWc,WAAWr/C,KAAKg/C,GAAYvB,YAGrDuB,GAAYT,WAAWc,WAAW3qC,UAClC,IACM4qC,GADWN,GAAYT,WAAWa,YAAYx+C,OAAOo+C,GAAYT,WAAWc,YACtDr6C,KAAI,SAACu6C,GAAO,OAAK/D,EAAWx3B,KAAKu7B,EAAQ,IAC/D/+C,GAAUU,EAAM2e,mBAAmBy/B,GAAYn+C,GAGjDX,GAAQO,SAASX,QAAQ86C,EAAal7C,KAAKQ,GACjD,CAEJ,CACA,IAAK,IAAIT,GAAI,EAAGA,GAAI48C,EAAiBv8C,OAAQL,KAAK,CAChD,IAAM++C,GAAcnC,EAAiB58C,IAChC++C,GAAYP,YAaVO,GAAYI,mBACfJ,GAAYP,WAAWc,WAAWr/C,KAAK8+C,GAAYvB,SAEhDuB,GAAYK,oBACfL,GAAYP,WAAWa,YAAYp/C,KAAK8+C,GAAYtB,YAftDsB,GAAYP,WAAa,CACvBc,WAAY,GACZD,YAAa,IAEfN,GAAYP,WAAWc,WAAWr/C,KAAK8+C,GAAYvB,SAC/C/pC,EAAK1C,SAASguC,GAAYvB,QAASuB,GAAYtB,UAAY5/B,GAE7DkhC,GAAYP,WAAWa,YAAYp/C,KAAK8+C,GAAYtB,UAW1D,CACAf,EAAoBE,CACtB,EApOSE,EAAS,EAAGA,EAASP,EAAal8C,OAAQy8C,IAAQzmB,IAqO3D,OAAO8kB,CACT,8CCtVM56C,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OACdyiB,EAASziB,EAAQ,OAAjByiB,KACFu9B,EAA8BhgD,EAAQ,OAkCtCigD,EAAmB,SAACznC,GAIxB,IAHA,IAAI0nC,EAAW,CAAC1nC,GACV2nC,EAAc,GACpBvpB,EAAA,SAAAwpB,GAEE,IAAMC,EAAgB,GAChB1N,EAA0B,IAAdyN,EAAkB,MAAc39B,EAClDy9B,EAAS7/C,SAAQ,SAACigD,GAEhBA,EAAQ9pB,KAAK+pB,EAAiBH,EAAWzN,IAIzC,IADA,IAAIlhC,EAAa,EACRlR,EAAI,EAAGA,EAAI+/C,EAAQ1/C,OAAQL,IAE9B+/C,EAAQ//C,GAAGoB,MAAMy+C,GAAaE,EAAQ7uC,GAAY9P,MAAMy+C,GAAazN,IAEnEpyC,EAAIkR,IAAe,EACrB0uC,EAAY3/C,KAAK8/C,EAAQ7uC,IAEzB4uC,EAAc7/C,KAAK8/C,EAAQ5rC,MAAMjD,EAAYlR,IAE/CkR,EAAalR,GAIb+/C,EAAQ1/C,OAAS6Q,IAAe,EAClC0uC,EAAY3/C,KAAK8/C,EAAQ7uC,IAEzB4uC,EAAc7/C,KAAK8/C,EAAQ5rC,MAAMjD,GAErC,IAEAyuC,EAAWG,CACb,EA9BSD,EAAY,EAAGA,GAAa,EAAGA,IAAWxpB,EAAAwpB,GAgCnD,IAAMhgD,EAAS,GAOf,OALA8/C,EAAS7/C,SAAQ,SAACigD,GACZA,EAAQ,KAAIlgD,EAAOkgD,EAAQ,GAAG/8C,OAAS+8C,EAC7C,IACAH,EAAY9/C,SAAQ,SAACW,GAAcZ,EAAOY,EAAQuC,OAASvC,CAAQ,IAE5DZ,CACT,EAEMmgD,EAAmB,SAACH,EAAWzN,GAAS,OAAK,SAACx/B,EAAGxD,GACrD,OAAIwD,EAAExR,MAAMy+C,GAAazwC,EAAEhO,MAAMy+C,GAAazN,EACrC,EACEhjC,EAAEhO,MAAMy+C,GAAajtC,EAAExR,MAAMy+C,GAAazN,GAC3C,EAEH,CACT,CAAC,EAED/wC,EAAOC,QA/Ec,SAACoS,GACpB,GAAIA,EAASusC,eACX,OAAOvsC,EAGT,IAAMuE,EAAW1X,EAAMC,WAAWkT,GAAUzO,KAAI,SAACxE,EAASuC,GAAK,MAAM,CAAEhC,SAAUP,EAAQO,SAAUI,MAAOD,EAAMC,MAAMX,GAAUuC,MAAOA,EAAO,IACxIk9C,EAAaR,EAAiBznC,GAE9BkoC,EAAe,GACrBD,EAAWpgD,SAAQ,SAACsgD,GAClB,GAAIx8C,MAAMmB,QAAQq7C,GAAQ,CACxB,IAAMC,EAA+BZ,EAA4BW,GACjED,EAAalgD,KAAIqgB,MAAjB6/B,EAAY5/B,EAAS8/B,GACvB,MACEF,EAAalgD,KAAKmgD,EAEtB,IAEA,IAAMvgD,EAASU,EAAMgS,OAAO4tC,GAG5B,OAFAtgD,EAAOogD,gBAAiB,EAEjBpgD,CACT,yBCnCA,IAAMyD,EAAU7D,EAAQ,OAElBgU,EAAOhU,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhB8xB,EAAiB9xB,EAAQ,OAEzB82C,EAAe92C,EAAQ,OA8C7B4B,EAAOC,QAbM,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAEzB,GAA0B,KAD1BrE,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,6BAE7C,IAAMiD,EAAUxF,EAAWyF,KAAI,SAACyO,GAC9B,OAAI7O,EAAMV,IAAIuP,GApCA,SAACA,GACjB,IAAM0c,EAAUmB,EAAe7d,GAEzBwG,EADSrV,EAAMgQ,SAASnB,GACLzO,KAAI,SAAC0M,GAAK,OAAK8B,EAAKlP,KAAKkP,EAAKlB,SAAUZ,EAAOye,EAAQ,IAEhF,OAAOvrB,EAAM0N,OAAO2H,EACtB,CA8BoComC,CAAU5sC,GACtC9O,EAAMT,IAAIuP,GA7BA,SAACA,GACjB,IAAM0c,EAAUmB,EAAe7d,GAE3BuB,EADUrQ,EAAMkQ,QAAQpB,GACPzO,KAAI,SAAC6O,GAAI,MAAK,CAACL,EAAKlP,KAAKkP,EAAKlB,SAAUuB,EAAK,GAAIsc,GAAU3c,EAAKlP,KAAKkP,EAAKlB,SAAUuB,EAAK,GAAIsc,GAAS,IAG3H,OADAnb,EAAWA,EAAS/Q,QAAO,SAAC4P,GAAI,OAAML,EAAKc,OAAOT,EAAK,GAAIA,EAAK,GAAG,IAC5DlP,EAAM2N,OAAO0C,EACtB,CAsBoCsrC,CAAU7sC,GACtCnT,EAAM4D,IAAIuP,GArBA,SAACA,GACjB,IAAM0c,EAAUmB,EAAe7d,GACzBuE,EAAW1X,EAAMC,WAAWkT,GAC5B8E,EAAc+9B,EAAanmB,EAASnY,GAC1C,OAAO1X,EAAMgS,OAAOiG,EACtB,CAgBoCgoC,CAAU9sC,GACnCA,CACT,IACA,OAA0B,IAAnB1O,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBCtDA,IAAMkT,EAAOzY,EAAQ,OAEf0B,EAAQ1B,EAAQ,OA6BtB4B,EAAOC,QAnBc,SAAC8uB,EAASnY,GAC7B,IAAIO,EAAcP,EAAShT,KAAI,SAACxE,GAI9B,IAHA,IAAMggD,EAAehgD,EAAQO,SAASiE,KAAI,SAACy7C,GAAO,OAAKxoC,EAAK3T,KAAK2T,EAAK3F,SAAUmuC,EAAStwB,EAAQ,IAE3F4pB,EAAc,GACXh6C,EAAI,EAAGA,EAAIygD,EAAapgD,OAAQL,IAAK,CAC5C,IAAMsT,GAAKtT,EAAI,GAAKygD,EAAapgD,OAC5B6X,EAAK3D,OAAOksC,EAAazgD,GAAIygD,EAAantC,KAAK0mC,EAAY/5C,KAAKwgD,EAAazgD,GACpF,CACA,IAAMi6C,EAAa94C,EAAMoR,OAAOynC,GAEhC,OADIv5C,EAAQqE,QAAOm1C,EAAWn1C,MAAQrE,EAAQqE,OACvCm1C,CACT,IAEMlN,EAAe3c,EAAUA,EAAUzgB,KAAKoD,KAAK,GAAK,EAExD,OADAyF,EAAcA,EAAYtU,QAAO,SAACzD,GAAO,OAvBtB,SAAC2vB,EAAS3vB,GAC7B,IAAMkf,EAAOhQ,KAAKkD,IAAI1R,EAAMyd,YAAYne,IACxC,OAAQ8P,OAAOsB,SAAS8N,IAASA,EAAOyQ,CAC1C,CAoBgDuwB,CAAa5T,EAAatsC,EAAQ,IACzE+X,CACT,yBC7BA,IAAMN,EAAOzY,EAAQ,OACf0B,EAAQ1B,EAAQ,OA2CtB4B,EAAOC,QARqB,SAAC8uB,EAASnY,GACpC,IAAMqsB,EAAY,GAIlB,OAHArsB,EAASnY,SAAQ,SAACW,IAnCO,SAAC2vB,EAAS3vB,EAAS6jC,GAC5C,IAAMsc,EAAKngD,EAAQO,SAASX,OAC5B,GAAIugD,EAAK,EAAG,CACV,GAAIA,EAAK,EAAG,CAEV,IAAMxT,EAAW,CAAC,EAAG,EAAG,GACxB3sC,EAAQO,SAASlB,SAAQ,SAAC4gD,GAAO,OAAKxoC,EAAKgD,IAAIkyB,EAAUA,EAAUsT,EAAQ,IAC3ExoC,EAAK3T,KAAK6oC,EAAUl1B,EAAK4X,OAAOsd,EAAUA,EAAU,CAACwT,EAAIA,EAAIA,IAAMxwB,GACnE,IAAK,IAAIpwB,EAAI,EAAGA,EAAI4gD,EAAI5gD,IAAK,CAC3B,IAAM6f,EAAO1e,EAAMoR,OAAO,CAAC66B,EAAU3sC,EAAQO,SAAShB,GAAIS,EAAQO,UAAUhB,EAAI,GAAK4gD,KACjFngD,EAAQqE,QAAO+a,EAAK/a,MAAQrE,EAAQqE,OACxCw/B,EAAUrkC,KAAK4f,EACjB,CACA,MACF,CAEA,IAAMwsB,EAAQlrC,EAAMoR,OAAO,CAAC9R,EAAQO,SAAS,GAAIP,EAAQO,SAAS,GAAIP,EAAQO,SAAS,KACjFurC,EAAQprC,EAAMoR,OAAO,CAAC9R,EAAQO,SAAS,GAAIP,EAAQO,SAAS,GAAIP,EAAQO,SAAS,KAMvF,OALIP,EAAQqE,QACVunC,EAAMvnC,MAAQrE,EAAQqE,MACtBynC,EAAMznC,MAAQrE,EAAQqE,YAExBw/B,EAAUrkC,KAAKosC,EAAOE,EAExB,CAEAjI,EAAUrkC,KAAKQ,EACjB,CASIogD,CAAmBzwB,EAAS3vB,EAAS6jC,EACvC,IACOA,CACT,wBC1CA,IAAMhhC,EAAU7D,EAAQ,OAClBqhD,EAAmBrhD,EAAQ,OAC3BwxB,EAA8BxxB,EAAQ,OACpCyrB,EAAczrB,EAAQ,OAAtByrB,UA+BF61B,EAAkB,SAACrtC,EAAUstC,EAAOC,GAGxC,IAFA,IAAMnwB,EAASG,EAA4Bvd,GACrCwtC,EAAc,CAAC,EAAG,EAAG,GAClBlhD,EAAI,EAAGA,EAAI,EAAGA,IACJ,WAAbghD,EAAMhhD,GACRkhD,EAAYlhD,GAAKihD,EAAWjhD,IAAM8wB,EAAO,GAAG9wB,GAAK8wB,EAAO,GAAG9wB,IAAM,EAC3C,QAAbghD,EAAMhhD,GACfkhD,EAAYlhD,GAAKihD,EAAWjhD,GAAK8wB,EAAO,GAAG9wB,GACrB,QAAbghD,EAAMhhD,KACfkhD,EAAYlhD,GAAKihD,EAAWjhD,GAAK8wB,EAAO,GAAG9wB,IAI/C,OAAOkrB,EAAUg2B,EAAaxtC,EAChC,EAwCArS,EAAOC,QAzBO,SAAC1B,GAA2B,QAAA8D,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,EAAA,GAAAF,UAAAE,GACnC,IAQAq4B,EADAt8B,EAlEsB,SAACA,GACvB,IAAKgE,MAAMmB,QAAQnF,EAAQohD,QAAUphD,EAAQohD,MAAM3gD,OAAS,EAAG,MAAM,IAAI0B,MAAM,kDAE/E,GADAnC,EAAQohD,MAAQF,EAAiBlhD,EAAQohD,MAAO,OAAQ,GACuC,IAA3FphD,EAAQohD,MAAM98C,QAAO,SAACi9C,GAAI,MAAK,CAAC,SAAU,MAAO,MAAO,QAAQC,SAASD,EAAK,IAAE9gD,OAAc,MAAM,IAAI0B,MAAM,8DAElH,IAAK6B,MAAMmB,QAAQnF,EAAQqhD,aAAerhD,EAAQqhD,WAAW5gD,OAAS,EAAG,MAAM,IAAI0B,MAAM,uDAEzF,GADAnC,EAAQqhD,WAAaH,EAAiBlhD,EAAQqhD,WAAY,EAAG,GAC2C,IAApGrhD,EAAQqhD,WAAW/8C,QAAO,SAACm9C,GAAQ,OAAM9wC,OAAOsB,SAASwvC,IAAyB,MAAZA,CAAgB,IAAGhhD,OAAc,MAAM,IAAI0B,MAAM,6DAE3H,GAA+B,mBAApBnC,EAAQ0hD,QAAuB,MAAM,IAAIv/C,MAAM,6CAE1D,OAAOnC,CACT,CAsDY2hD,CAFV3hD,EAAUkE,OAAOC,OAAO,CAAC,EALR,CACfi9C,MAAO,CAAC,SAAU,SAAU,OAC5BC,WAAY,CAAC,EAAG,EAAG,GACnBK,SAAS,GAE2B1hD,IAGhCohD,EAAK9kB,EAAL8kB,MAAOC,EAAU/kB,EAAV+kB,WAAYK,EAAOplB,EAAPolB,QAEzB,GAA0B,KAD1B9hD,EAAa8D,EAAQ9D,IACNa,OAAc,MAAM,IAAI0B,MAAM,oDAE7C,GAAIk/C,EAAW/8C,QAAO,SAAC4N,GAAG,OAAY,MAAPA,CAAW,IAAEzR,OAAQ,CAClD,IAAMywB,EAASG,EAA4BzxB,GAC3CyhD,EA3DiC,SAACA,EAAYD,EAAOlwB,GACvD,IAAK,IAAI9wB,EAAI,EAAGA,EAAI,EAAGA,IACA,MAAjBihD,EAAWjhD,KACI,WAAbghD,EAAMhhD,GACRihD,EAAWjhD,IAAM8wB,EAAO,GAAG9wB,GAAK8wB,EAAO,GAAG9wB,IAAM,EAC1B,QAAbghD,EAAMhhD,GACfihD,EAAWjhD,GAAK8wB,EAAO,GAAG9wB,GACJ,QAAbghD,EAAMhhD,KACfihD,EAAWjhD,GAAK8wB,EAAO,GAAG9wB,KAIhC,OAAOihD,CACT,CA8CiBO,CAA6BP,EAAYD,EAAOlwB,EAC/D,CAMA,OAA6B,KAJ3BtxB,EADE8hD,EACWP,EAAgBvhD,EAAYwhD,EAAOC,GAEnCzhD,EAAWyF,KAAI,SAACyO,GAAQ,OAAKqtC,EAAgBrtC,EAAUstC,EAAOC,EAAW,KAEtE5gD,OAAeb,EAAW,GAAKA,CACnD,wBCtFA,IAAM8D,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAEhBugB,EAAqBvgB,EAAQ,OAE3ByrB,EAAczrB,EAAQ,OAAtByrB,UAEFu2B,EAAiB,SAAC7hD,EAASG,GAC/B,IAIA+Q,EAA6BhN,OAAOC,OAAO,CAAC,EAJ3B,CACf07B,KAAM,EAAC,GAAM,GAAM,GACnBwhB,WAAY,CAAC,EAAG,EAAG,IAEoCrhD,GAAjD6/B,EAAI3uB,EAAJ2uB,KAAMwhB,EAAUnwC,EAAVmwC,WAERnwB,EAAS9Q,EAAmBjgB,GAC5Bwe,EAAS,CAAC,EAAG,EAAG,GAItB,OAHIkhB,EAAK,KAAIlhB,EAAO,GAAK0iC,EAAW,IAAMnwB,EAAO,GAAG,IAAOA,EAAO,GAAG,GAAKA,EAAO,GAAG,IAAM,IACtF2O,EAAK,KAAIlhB,EAAO,GAAK0iC,EAAW,IAAMnwB,EAAO,GAAG,IAAOA,EAAO,GAAG,GAAKA,EAAO,GAAG,IAAM,IACtF2O,EAAK,KAAIlhB,EAAO,GAAK0iC,EAAW,IAAMnwB,EAAO,GAAG,IAAOA,EAAO,GAAG,GAAKA,EAAO,GAAG,IAAM,IACnF5F,EAAU3M,EAAQxe,EAC3B,EAcMkb,EAAS,SAACrb,GAAwB,QAAA8D,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GACjC,IAKA69C,EAA6B59C,OAAOC,OAAO,CAAC,EAL3B,CACf07B,KAAM,EAAC,GAAM,GAAM,GACnBwhB,WAAY,CAAC,EAAG,EAAG,IAGoCrhD,GAAjD6/B,EAAIiiB,EAAJjiB,KAAMwhB,EAAUS,EAAVT,WAGd,GAAuB,KADvBthD,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAC1C,GAA0B,IAAtBk/C,EAAW5gD,OAAc,MAAM,IAAI0B,MAAM,2CAE7CnC,EAAU,CAAE6/B,KAAAA,EAAMwhB,WAAAA,GAElB,IAAMj8C,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,IACV6E,EAAMT,IAAIpE,IACVQ,EAAM4D,IAAIpE,GAFgB0hD,EAAe7hD,EAASG,GAG/CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,EA0BA3D,EAAOC,QAAU,CACf2Z,OAAAA,EACA0mC,QApBc,WAAH,QAAAC,EAAAj+C,UAAAtD,OAAOV,EAAO,IAAAiE,MAAAg+C,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPliD,EAAOkiD,GAAAl+C,UAAAk+C,GAAA,OAAK5mC,EAAO,CAAEwkB,KAAM,EAAC,GAAM,GAAO,IAAU9/B,EAAQ,EAqB7EmiD,QAbc,WAAH,QAAAC,EAAAp+C,UAAAtD,OAAOV,EAAO,IAAAiE,MAAAm+C,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPriD,EAAOqiD,GAAAr+C,UAAAq+C,GAAA,OAAK/mC,EAAO,CAAEwkB,KAAM,EAAC,GAAO,GAAM,IAAU9/B,EAAQ,EAc7EsiD,QANc,WAAH,QAAAC,EAAAv+C,UAAAtD,OAAOV,EAAO,IAAAiE,MAAAs+C,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPxiD,EAAOwiD,GAAAx+C,UAAAw+C,GAAA,OAAKlnC,EAAO,CAAEwkB,KAAM,EAAC,GAAO,GAAO,IAAS9/B,EAAQ,0BC3E/E0B,EAAOC,QAAU,CACf8gD,MAAO3iD,EAAQ,MAEfwb,OAAQxb,EAAAA,MAAAA,OACRkiD,QAASliD,EAAAA,MAAAA,QACTqiD,QAASriD,EAAAA,MAAAA,QACTwiD,QAASxiD,EAAAA,MAAAA,QAET4iD,OAAQ5iD,EAAAA,OAAAA,OACRqrC,QAASrrC,EAAAA,OAAAA,QACT6iD,QAAS7iD,EAAAA,OAAAA,QACT8iD,QAAS9iD,EAAAA,OAAAA,QAETqrB,OAAQrrB,EAAAA,OAAAA,OACRsrB,QAAStrB,EAAAA,OAAAA,QACTurB,QAASvrB,EAAAA,OAAAA,QACTwrB,QAASxrB,EAAAA,OAAAA,QAETgb,MAAOhb,EAAAA,OAAAA,MACP+iD,OAAQ/iD,EAAAA,OAAAA,OACRgjD,OAAQhjD,EAAAA,OAAAA,OACRijD,OAAQjjD,EAAAA,OAAAA,OAERsU,UAAWtU,EAAQ,OAEnByrB,UAAWzrB,EAAAA,OAAAA,UACXkjD,WAAYljD,EAAAA,OAAAA,WACZmjD,WAAYnjD,EAAAA,OAAAA,WACZojD,WAAYpjD,EAAAA,OAAAA,mCCnCd,IAAM6D,EAAU7D,EAAQ,OAElB+T,EAAO/T,EAAQ,OACf2B,EAAQ3B,EAAQ,OAEhBmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAchB4iD,EAAS,SAACziD,GAAwB,QAAA8D,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GACjC,IAIAiN,EAA2BhN,OAAOC,OAAO,CAAC,EAJzB,CACf4gB,OAAQ,CAAC,EAAG,EAAG,GACftE,OAAQ,CAAC,EAAG,EAAG,IAEsCzgB,GAA/C+kB,EAAM7T,EAAN6T,OAAQtE,EAAMvP,EAANuP,OAGhB,GAAuB,KADvB1gB,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1C,IAAM+gD,EAAgB1hD,EAAMitB,mBAAmBjtB,EAAMmR,SAAU8N,EAAQsE,GAEvE,GAAIpU,OAAOkW,MAAMq8B,EAAc,IAC7B,MAAM,IAAI/gD,MAAM,4DAGlB,IAAM+V,EAAStE,EAAKqX,cAAcrX,EAAKjB,SAAUuwC,GAE3C99C,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgB8E,EAAMkP,UAAU+D,EAAQ/X,GAClD6E,EAAMT,IAAIpE,GAAgB6E,EAAMmP,UAAU+D,EAAQ/X,GAClDQ,EAAM4D,IAAIpE,GAAgBQ,EAAMwT,UAAU+D,EAAQ/X,GAC/CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,EA0BA3D,EAAOC,QAAU,CACf+gD,OAAAA,EACAvX,QApBc,WAAH,QAAA8W,EAAAj+C,UAAAtD,OAAOV,EAAO,IAAAiE,MAAAg+C,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPliD,EAAOkiD,GAAAl+C,UAAAk+C,GAAA,OAAKQ,EAAO,CAAEhiC,OAAQ,CAAC,EAAG,EAAG,IAAM1gB,EAAQ,EAqBpE2iD,QAbc,WAAH,QAAAP,EAAAp+C,UAAAtD,OAAOV,EAAO,IAAAiE,MAAAm+C,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPriD,EAAOqiD,GAAAr+C,UAAAq+C,GAAA,OAAKK,EAAO,CAAEhiC,OAAQ,CAAC,EAAG,EAAG,IAAM1gB,EAAQ,EAcpE4iD,QANc,WAAH,QAAAL,EAAAv+C,UAAAtD,OAAOV,EAAO,IAAAiE,MAAAs+C,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPxiD,EAAOwiD,GAAAx+C,UAAAw+C,GAAA,OAAKE,EAAO,CAAEhiC,OAAQ,CAAC,EAAG,EAAG,IAAM1gB,EAAQ,0BCtEtE,IAAM2D,EAAU7D,EAAQ,OAElB+T,EAAO/T,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAYhBqrB,EAAS,SAACyT,GAAuB,QAAA76B,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GAChC,IAAKD,MAAMmB,QAAQw5B,GAAS,MAAM,IAAIx8B,MAAM,2BAG5C,GAAuB,KADvBpC,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAI1C,IADAw8B,EAASA,EAAOpqB,QACToqB,EAAOl+B,OAAS,GAAGk+B,EAAOt+B,KAAK,GAEtC,IAAMooB,EAAMkW,EAAO,GACbjW,EAAQiW,EAAO,GACfhW,EAAOgW,EAAO,GAEdzmB,EAAStE,EAAK8W,sBAAsB9W,EAAKjB,SAAU8V,EAAKC,EAAOC,GAE/DvjB,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgB8E,EAAMkP,UAAU+D,EAAQ/X,GAClD6E,EAAMT,IAAIpE,GAAgB6E,EAAMmP,UAAU+D,EAAQ/X,GAClDQ,EAAM4D,IAAIpE,GAAgBQ,EAAMwT,UAAU+D,EAAQ/X,GAC/CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,EA6BA3D,EAAOC,QAAU,CACfwpB,OAAAA,EACAC,QAtBc,SAACrU,GAAK,QAAAkrC,EAAAj+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAg+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPliD,EAAOkiD,EAAA,GAAAl+C,UAAAk+C,GAAA,OAAK/2B,EAAO,CAACpU,EAAO,EAAG,GAAI/W,EAAQ,EAuBnEqrB,QAdc,SAACtU,GAAK,QAAAqrC,EAAAp+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAm+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPriD,EAAOqiD,EAAA,GAAAr+C,UAAAq+C,GAAA,OAAKl3B,EAAO,CAAC,EAAGpU,EAAO,GAAI/W,EAAQ,EAenEsrB,QANc,SAACvU,GAAK,QAAAwrC,EAAAv+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAs+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPxiD,EAAOwiD,EAAA,GAAAx+C,UAAAw+C,GAAA,OAAKr3B,EAAO,CAAC,EAAG,EAAGpU,GAAQ/W,EAAQ,0BCpErE,IAAM2D,EAAU7D,EAAQ,OAElB+T,EAAO/T,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAYhBgb,EAAQ,SAACsoC,GAAwB,QAAAr/C,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GAChC,IAAKD,MAAMmB,QAAQg+C,GAAU,MAAM,IAAIhhD,MAAM,4BAG7C,GAAuB,KADvBpC,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAI1C,IADAghD,EAAUA,EAAQ5uC,QACX4uC,EAAQ1iD,OAAS,GAAG0iD,EAAQ9iD,KAAK,GAExC,GAAI8iD,EAAQ,IAAM,GAAKA,EAAQ,IAAM,GAAKA,EAAQ,IAAM,EAAG,MAAM,IAAIhhD,MAAM,4BAE3E,IAAM+V,EAAStE,EAAK6W,YAAY7W,EAAKjB,SAAUwwC,GAEzC/9C,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgB8E,EAAMkP,UAAU+D,EAAQ/X,GAClD6E,EAAMT,IAAIpE,GAAgB6E,EAAMmP,UAAU+D,EAAQ/X,GAClDQ,EAAM4D,IAAIpE,GAAgBQ,EAAMwT,UAAU+D,EAAQ/X,GAC/CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,EA6BA3D,EAAOC,QAAU,CACfmZ,MAAAA,EACA+nC,OAtBa,SAACQ,GAAM,QAAApB,EAAAj+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAg+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPliD,EAAOkiD,EAAA,GAAAl+C,UAAAk+C,GAAA,OAAKpnC,EAAM,CAACuoC,EAAQ,EAAG,GAAIrjD,EAAQ,EAuBnE8iD,OAda,SAACO,GAAM,QAAAjB,EAAAp+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAm+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPriD,EAAOqiD,EAAA,GAAAr+C,UAAAq+C,GAAA,OAAKvnC,EAAM,CAAC,EAAGuoC,EAAQ,GAAIrjD,EAAQ,EAenE+iD,OANa,SAACM,GAAM,QAAAd,EAAAv+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAs+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPxiD,EAAOwiD,EAAA,GAAAx+C,UAAAw+C,GAAA,OAAK1nC,EAAM,CAAC,EAAG,EAAGuoC,GAASrjD,EAAQ,0BClErE,IAAM2D,EAAU7D,EAAQ,OAElBmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OA2BtB4B,EAAOC,QAfW,SAACwW,GAAuB,QAAApU,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GAInC,GAAuB,KADvBlE,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAE1C,IAAMiD,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgB8E,EAAMkP,UAAU+D,EAAQ/X,GAClD6E,EAAMT,IAAIpE,GAAgB6E,EAAMmP,UAAU+D,EAAQ/X,GAClDQ,EAAM4D,IAAIpE,GAAgBQ,EAAMwT,UAAU+D,EAAQ/X,GAC/CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,yBC7BA,IAAM1B,EAAU7D,EAAQ,OAElB+T,EAAO/T,EAAQ,OAEfmF,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAYhByrB,EAAY,SAAC3M,GAAuB,QAAA7a,EAAAC,UAAAtD,OAAZV,EAAO,IAAAiE,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAPlE,EAAOkE,EAAA,GAAAF,UAAAE,GACnC,IAAKD,MAAMmB,QAAQwZ,GAAS,MAAM,IAAIxc,MAAM,2BAG5C,GAAuB,KADvBpC,EAAU2D,EAAQ3D,IACNU,OAAc,MAAM,IAAI0B,MAAM,6BAI1C,IADAwc,EAASA,EAAOpK,QACToK,EAAOle,OAAS,GAAGke,EAAOte,KAAK,GAEtC,IAAM6X,EAAStE,EAAK+W,gBAAgB/W,EAAKjB,SAAUgM,GAE7CvZ,EAAUrF,EAAQsF,KAAI,SAAClF,GAC3B,OAAI8E,EAAMV,IAAIpE,GAAgB8E,EAAMkP,UAAU+D,EAAQ/X,GAClD6E,EAAMT,IAAIpE,GAAgB6E,EAAMmP,UAAU+D,EAAQ/X,GAClDQ,EAAM4D,IAAIpE,GAAgBQ,EAAMwT,UAAU+D,EAAQ/X,GAC/CA,CACT,IACA,OAA0B,IAAnBiF,EAAQ3E,OAAe2E,EAAQ,GAAKA,CAC7C,EA6BA3D,EAAOC,QAAU,CACf4pB,UAAAA,EACAy3B,WAtBiB,SAACpkC,GAAM,QAAAqjC,EAAAj+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAg+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPliD,EAAOkiD,EAAA,GAAAl+C,UAAAk+C,GAAA,OAAK32B,EAAU,CAAC3M,EAAQ,EAAG,GAAI5e,EAAQ,EAuB3EijD,WAdiB,SAACrkC,GAAM,QAAAwjC,EAAAp+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAm+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPriD,EAAOqiD,EAAA,GAAAr+C,UAAAq+C,GAAA,OAAK92B,EAAU,CAAC,EAAG3M,EAAQ,GAAI5e,EAAQ,EAe3EkjD,WANiB,SAACtkC,GAAM,QAAA2jC,EAAAv+C,UAAAtD,OAAKV,EAAO,IAAAiE,MAAAs+C,EAAA,EAAAA,EAAA,KAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAPxiD,EAAOwiD,EAAA,GAAAx+C,UAAAw+C,GAAA,OAAKj3B,EAAU,CAAC,EAAG,EAAG3M,GAAS5e,EAAQ,yBChE7E,IAAAwD,EAAqB1D,EAAQ,OAArBoe,EAAG1a,EAAH0a,IAAKxE,EAAGlW,EAAHkW,IAEP5F,EAAOhU,EAAQ,OAEfoF,EAAQpF,EAAQ,OAEtB4D,EAAuC5D,EAAQ,MAAvCwjD,EAAI5/C,EAAJ4/C,KAAMC,EAAK7/C,EAAL6/C,MAAOC,EAAa9/C,EAAb8/C,cA6ErB9hD,EAAOC,QA/DK,SAAC1B,GACX,IAAM0hC,EAAW,CACfrmB,OAAQ,CAAC,EAAG,GACZ3B,OAAQ,EACRhD,WAAY,EACZ00B,SAAU3xB,EACV+pC,aAAa,EACbpyC,SAAU,IAEZF,EAAsEhN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAA5Fqb,EAAMnK,EAANmK,OAAQ3B,EAAMxI,EAANwI,OAAQhD,EAAUxF,EAAVwF,WAAY00B,EAAQl6B,EAARk6B,SAAUoY,EAAWtyC,EAAXsyC,YAAapyC,EAAQF,EAARE,SAEzD,IAAKmyC,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,6CAC/C,IAAKkhD,EAAK3pC,EAAQ,GAAI,MAAM,IAAIvX,MAAM,oCACtC,IAAKmhD,EAAM5sC,EAAY,GAAI,MAAM,IAAIvU,MAAM,+BAC3C,IAAKmhD,EAAMlY,EAAU,GAAI,MAAM,IAAIjpC,MAAM,6BACzC,IAAKmhD,EAAMlyC,EAAU,GAAI,MAAM,IAAIjP,MAAM,iCAKzC,IAAIm+B,EAAW7mB,GAHf/C,GAA0B+C,IAC1B2xB,GAAsB3xB,KAIpB6mB,EAAW8K,EAAW10B,GAEpBA,EAAa00B,IACf9K,EAAW8K,GAAY3xB,EAAM/C,IAG/B,IAGI3E,EAHE0xC,EAAW1zC,KAAK+gB,MAAOpX,EAASA,EAAWA,EAASA,EAAWuE,EAAMA,IAAS,EAAIvE,EAASA,IAE3FgqC,EAAU7vC,EAAKtO,MAAM8V,GAErBsoC,EAAa,GACnB,GAAIrjB,EAAWmjB,EAEb1xC,EAAQ8B,EAAKkc,iBAAiBlc,EAAKlB,SAAU+D,GAC7C7C,EAAKgH,MAAM9I,EAAOA,EAAO2H,GACzB7F,EAAKyH,IAAIvJ,EAAOA,EAAO2xC,GACvBC,EAAWtjD,KAAK0R,OACX,CAEL,IAAM6J,EAAW7L,KAAKc,IAAI,EAAGd,KAAKC,MAAMoB,GAAYkvB,EAAW7mB,KAAS,EACpEmqC,EAA0B,GAAXhoC,EAAiB0kB,EAChCsjB,EAAe,MAAMA,EAAe,KAGxC,IADA,IAAMC,EAAaL,EAAe5nC,EAAW,EAAKA,EACzCxb,EAAI,EAAGA,GAAKyjD,EAAYzjD,IAAK,CACpC,IAAI0b,EAAO1b,EACPojD,KACF1nC,GAAQ1b,EAAI,IAAMwb,EAAW,EAAIgoC,GAAgBhoC,EAAWgoC,GACjD,IAAG9nC,EAAO,GACjBA,EAAOF,IAAUE,EAAOF,IAE9B,IAAM9E,EAAQJ,EAAcoF,GAAQwkB,EAAW1kB,GAC/C7J,EAAQ8B,EAAKkc,iBAAiBlc,EAAKlB,SAAUmE,GAC7CjD,EAAKgH,MAAM9I,EAAOA,EAAO2H,GACzB7F,EAAKyH,IAAIvJ,EAAOA,EAAO2xC,GACvBC,EAAWtjD,KAAK0R,EAClB,CACF,CACA,OAAO9M,EAAM4P,WAAW,CAAE2J,QAAQ,GAASmlC,EAC7C,yBCjFA,IAAQlqC,EAAQ5Z,EAAQ,OAAhB4Z,IAEFqqC,EAAUjkD,EAAQ,OAEhByjD,EAAUzjD,EAAQ,MAAlByjD,MAiCR7hD,EAAOC,QAjBQ,SAAC1B,GACd,IAAM0hC,EAAW,CACfrmB,OAAQ,CAAC,EAAG,GACZ3B,OAAQ,EACRhD,WAAY,EACZ00B,SAAU3xB,EACVrI,SAAU,IAEZF,EAAyDhN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAA/Eqb,EAAMnK,EAANmK,OAAQ3B,EAAMxI,EAANwI,OAAQhD,EAAUxF,EAAVwF,WAAY00B,EAAQl6B,EAARk6B,SAAUh6B,EAAQF,EAARE,SAE5C,IAAKkyC,EAAM5pC,EAAQ,GAAI,MAAM,IAAIvX,MAAM,2BAIvC,OAAO2hD,EAAQ,CAAEzoC,OAAAA,EAAQ3B,OAFzBA,EAAS,CAACA,EAAQA,GAEehD,WAAAA,EAAY00B,SAAAA,EAAUh6B,SAAAA,GACzD,oBCrBA3P,EAAOC,QAAU,CACf6hD,cAdoB,SAACrtB,EAAO6tB,GAC5B,SAAI//C,MAAMmB,QAAQ+wB,IAAUA,EAAMz1B,QAAUsjD,IACnC7tB,EAAM9d,OAAM,SAAC7E,GAAC,OAAK5C,OAAOsB,SAASsB,EAAE,GAGhD,EAUE8vC,KAPW,SAAC9rC,EAAOysC,GAAQ,OAAMrzC,OAAOsB,SAASsF,IAAUA,EAAQysC,CAAQ,EAQ3EV,MALY,SAAC/rC,EAAOysC,GAAQ,OAAMrzC,OAAOsB,SAASsF,IAAUA,GAASysC,CAAQ,yBCZ/E,IAAMC,EAASpkD,EAAQ,OAEfyjD,EAAUzjD,EAAQ,MAAlByjD,MA2BR7hD,EAAOC,QAdM,SAAC1B,GACZ,IAIAkR,EAAuBhN,OAAOC,OAAO,CAAC,EAJrB,CACfkX,OAAQ,CAAC,EAAG,EAAG,GACf2vB,KAAM,GAE2ChrC,GAA7Cqb,EAAMnK,EAANmK,OAAQ2vB,EAAI95B,EAAJ85B,KAEd,IAAKsY,EAAMtY,EAAM,GAAI,MAAM,IAAI7oC,MAAM,yBAIrC,OAAO8hD,EAAO,CAAE5oC,OAAAA,EAAQ2vB,KAFxBA,EAAO,CAACA,EAAMA,EAAMA,IAGtB,yBC3BA,IAAMrqC,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEd0jD,EAAkB1jD,EAAQ,MAA1B0jD,cAmDR9hD,EAAOC,QAtCQ,SAAC1B,GACd,IAIAkR,EAAyBhN,OAAOC,OAAO,CAAC,EAJvB,CACfkX,OAAQ,CAAC,EAAG,EAAG,GACf2vB,KAAM,CAAC,EAAG,EAAG,IAEsChrC,GAA7Cqb,EAAMnK,EAANmK,OAAQ2vB,EAAI95B,EAAJ85B,KAEhB,IAAKuY,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,gDAC/C,IAAKohD,EAAcvY,EAAM,GAAI,MAAM,IAAI7oC,MAAM,2DAC7C,IAAK6oC,EAAK5yB,OAAM,SAAC7E,GAAC,OAAKA,GAAK,CAAC,IAAG,MAAM,IAAIpR,MAAM,gCAGhD,OAAgB,IAAZ6oC,EAAK,IAAwB,IAAZA,EAAK,IAAwB,IAAZA,EAAK,GAAiBrqC,EAAMgS,SAEnDhS,EAAMgS,OAEnB,CACE,CAAC,CAAC,EAAG,EAAG,EAAG,GAAI,EAAE,EAAG,EAAG,IACvB,CAAC,CAAC,EAAG,EAAG,EAAG,GAAI,CAAC,EAAI,EAAG,IACvB,CAAC,CAAC,EAAG,EAAG,EAAG,GAAI,CAAC,GAAI,EAAG,IACvB,CAAC,CAAC,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAI,IACvB,CAAC,CAAC,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,IACvB,CAAC,CAAC,EAAG,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,KACtBtN,KAAI,SAAC6+C,GACL,IAAMryC,EAASqyC,EAAK,GAAG7+C,KAAI,SAACjF,GAM1B,MALY,CACVib,EAAO,GAAM2vB,EAAK,GAAK,GAAM,KAAW,EAAJ5qC,GAAS,GAC7Cib,EAAO,GAAM2vB,EAAK,GAAK,GAAM,KAAW,EAAJ5qC,GAAS,GAC7Cib,EAAO,GAAM2vB,EAAK,GAAK,GAAM,KAAW,EAAJ5qC,GAAS,GAGjD,IACA,OAAOmB,EAAMoR,OAAOd,EACtB,IAGJ,yBCpDA,IAAMlR,EAAQd,EAAQ,OAEhBskD,EAAmBtkD,EAAQ,OAEzByjD,EAAUzjD,EAAQ,MAAlByjD,MAyCR7hD,EAAOC,QAzBU,SAAC1B,GAChB,IAMAkR,EAA6ChN,OAAOC,OAAO,CAAC,EAN3C,CACfkX,OAAQ,CAAC,EAAG,EAAG,GACfyuB,OAAQ,EACRpwB,OAAQ,EACRtI,SAAU,IAE6DpR,GAAjEqb,EAAMnK,EAANmK,OAAQyuB,EAAM54B,EAAN44B,OAAQpwB,EAAMxI,EAANwI,OAAQtI,EAAQF,EAARE,SAEhC,IAAKkyC,EAAM5pC,EAAQ,GAAI,MAAM,IAAIvX,MAAM,2BAGvC,OAAe,IAAX2nC,GAA2B,IAAXpwB,EAAqB/Y,EAAMgS,SAUxCwxC,EARY,CACjB9oC,OAAAA,EACAyuB,OAAAA,EACAsa,YAAa,CAAC1qC,EAAQA,GACtB2qC,UAAW,CAAC3qC,EAAQA,GACpBtI,SAAAA,GAIJ,yBC3CA,IAAA7N,EAAqB1D,EAAQ,OAArBoe,EAAG1a,EAAH0a,IAAKxE,EAAGlW,EAAHkW,IAEPnB,EAAOzY,EAAQ,OAEfc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEtB4D,EAAqB5D,EAAQ,OAArB8a,EAAGlX,EAAHkX,IAAKF,EAAGhX,EAAHgX,IAEb8pB,EAAuC1kC,EAAQ,MAAvCwjD,EAAI9e,EAAJ8e,KAAMC,EAAK/e,EAAL+e,MAAOC,EAAahf,EAAbgf,cA0HrB9hD,EAAOC,QAxGkB,SAAC1B,GACxB,IAAM0hC,EAAW,CACfrmB,OAAQ,CAAC,EAAG,EAAG,GACfyuB,OAAQ,EACRsa,YAAa,CAAC,EAAG,GACjB1tC,WAAY,EACZ2tC,UAAW,CAAC,EAAG,GACfjZ,SAAU3xB,EACVrI,SAAU,IAEZF,EAAiFhN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAAvGqb,EAAMnK,EAANmK,OAAQyuB,EAAM54B,EAAN44B,OAAQsa,EAAWlzC,EAAXkzC,YAAa1tC,EAAUxF,EAAVwF,WAAY2tC,EAASnzC,EAATmzC,UAAWjZ,EAAQl6B,EAARk6B,SAAUh6B,EAAQF,EAARE,SAEpE,IAAKmyC,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,gDAC/C,IAAKkhD,EAAKvZ,EAAQ,GAAI,MAAM,IAAI3nC,MAAM,oCACtC,IAAKohD,EAAca,EAAa,GAAI,MAAM,IAAIjiD,MAAM,kDACpD,IAAKiiD,EAAYhsC,OAAM,SAAC7E,GAAC,OAAKA,GAAK,CAAC,IAAG,MAAM,IAAIpR,MAAM,uCACvD,IAAKohD,EAAcc,EAAW,GAAI,MAAM,IAAIliD,MAAM,gDAClD,IAAKkiD,EAAUjsC,OAAM,SAAC7E,GAAC,OAAKA,GAAK,CAAC,IAAG,MAAM,IAAIpR,MAAM,qCACrD,GAAIkiD,EAAUjsC,OAAM,SAAC7E,GAAC,OAAW,IAANA,CAAO,KAAK6wC,EAAYhsC,OAAM,SAAC7E,GAAC,OAAW,IAANA,CAAO,IAAG,MAAM,IAAIpR,MAAM,wCAC1F,IAAKmhD,EAAM5sC,EAAY,GAAI,MAAM,IAAIvU,MAAM,+BAC3C,IAAKmhD,EAAMlY,EAAU,GAAI,MAAM,IAAIjpC,MAAM,6BACzC,IAAKmhD,EAAMlyC,EAAU,GAAI,MAAM,IAAIjP,MAAM,iCAKzC,IAAIm+B,EAAW7mB,GAHf/C,GAA0B+C,IAC1B2xB,GAAsB3xB,KAIpB6mB,EAAW8K,EAAW10B,GAEpBA,EAAa00B,IACf9K,EAAW8K,GAAY3xB,EAAM/C,IAG/B,IAAM4tC,EAAYv0C,KAAKe,IAAIszC,EAAY,GAAIA,EAAY,GAAIC,EAAU,GAAIA,EAAU,IAC7EZ,EAAW1zC,KAAK+gB,MAAOwzB,EAAYA,EAAcA,EAAYA,EAAcrmC,EAAMA,IAC5D,EAAIqmC,EAAYA,IAC3C,GAAIhkB,EAAWmjB,EAAU,MAAM,IAAIthD,MAAM,gEAgCzC,IA9BA,IAAMoiD,EAASx0C,KAAKC,MAAMoB,GAAYkvB,EAAW7mB,IAE3C6nB,EAAQhpB,EAAK7D,WAAW,EAAG,GAAKq1B,EAAS,GACzC9F,EAAM1rB,EAAK7D,WAAW,EAAG,EAAGq1B,EAAS,GACrC0a,EAAMlsC,EAAK1B,SAAS0B,EAAK3F,SAAUqxB,EAAK1C,GAExCmjB,EAAQnsC,EAAK7D,WAAW,EAAG,EAAG,GAC9BiwC,EAAQpsC,EAAK7D,WAAW,EAAG,EAAG,GAE9B0E,EAAKb,EAAK3F,SACVyG,EAAKd,EAAK3F,SACViK,EAAKtE,EAAK3F,SACVZ,EAAQ,SAAC4lB,EAAOpjB,EAAOmF,GAC3B,IAAM5C,EAAQvC,EAAQ+rB,EAAW5pB,EAOjC,OANA4B,EAAKuC,MAAM1B,EAAIsrC,EAAO/qC,EAAO,GAAKe,EAAI3D,IACtCwB,EAAKuC,MAAMzB,EAAIsrC,EAAOhrC,EAAO,GAAKiB,EAAI7D,IACtCwB,EAAKgD,IAAInC,EAAIA,EAAIC,GAEjBd,EAAKuC,MAAM+B,EAAI4nC,EAAK7sB,GACpBrf,EAAKgD,IAAIsB,EAAIA,EAAI0kB,GACVhpB,EAAKgD,IAAIhD,EAAK3F,SAAUwG,EAAIyD,EACrC,EAGM/H,EAAa,WAAe,QAAA/Q,EAAAC,UAAAtD,OAAXoR,EAAM,IAAA7N,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAN4N,EAAM5N,GAAAF,UAAAE,GAC3B,IAAMqW,EAAYzI,EAAOxM,KAAI,SAAC0M,GAAK,OAAKuG,EAAKgD,IAAIhD,EAAK3F,SAAUZ,EAAOsJ,EAAO,IAC9E,OAAO9Z,EAAMoR,OAAO2H,EACtB,EAEMjC,EAAW,GACRjY,EAAI,EAAGA,EAAImkD,EAAQnkD,IAAK,CAC/B,IAAMyd,EAAKzd,EAAImkD,EACXzmC,GAAM1d,EAAI,GAAKmkD,EAEfjkB,IAAa7mB,GAAOrZ,IAAMmkD,EAAS,IAAGzmC,EAAK,GAE3CumC,EAAU,KAAOD,EAAY,IAAMC,EAAU,KAAOD,EAAY,IAClE/rC,EAAShY,KAAKwU,EAAWysB,EAAOvvB,EAAM,EAAG+L,EAAIumC,GAAYtyC,EAAM,EAAG8L,EAAIwmC,KACtEhsC,EAAShY,KAAKwU,EAAW9C,EAAM,EAAG+L,EAAIumC,GAAYtyC,EAAM,EAAG+L,EAAIumC,GAAYtyC,EAAM,EAAG8L,EAAIwmC,GAAYtyC,EAAM,EAAG8L,EAAIwmC,KACjHhsC,EAAShY,KAAKwU,EAAWmvB,EAAKjyB,EAAM,EAAG8L,EAAIwmC,GAAYtyC,EAAM,EAAG+L,EAAIumC,OAEhED,EAAY,GAAK,GAAKA,EAAY,GAAK,GACzC/rC,EAAShY,KAAKwU,EAAWysB,EAAOvvB,EAAM,EAAG+L,EAAIsmC,GAAcryC,EAAM,EAAG8L,EAAIumC,MAEtEA,EAAY,GAAK,GAAKA,EAAY,GAAK,IACzC/rC,EAAShY,KAAKwU,EAAW9C,EAAM,EAAG8L,EAAIumC,GAAcryC,EAAM,EAAG+L,EAAIsmC,GAAcryC,EAAM,EAAG8L,EAAIwmC,KAE1FA,EAAU,GAAK,GAAKA,EAAU,GAAK,GACrChsC,EAAShY,KAAKwU,EAAWmvB,EAAKjyB,EAAM,EAAG8L,EAAIwmC,GAAYtyC,EAAM,EAAG+L,EAAIumC,MAElEA,EAAU,GAAK,GAAKA,EAAU,GAAK,IACrChsC,EAAShY,KAAKwU,EAAW9C,EAAM,EAAG8L,EAAIwmC,GAAYtyC,EAAM,EAAG+L,EAAIsmC,GAAcryC,EAAM,EAAG+L,EAAIumC,KAGhG,CAQA,OAPI/jB,EAAW7mB,IACbpB,EAAShY,KAAKwU,EAAWysB,EAAOvvB,EAAM,EAAG,EAAGqyC,GAAcpgB,IAC1D3rB,EAAShY,KAAKwU,EAAW9C,EAAM,EAAG,EAAGqyC,GAAcryC,EAAM,EAAG,EAAGsyC,GAAYrgB,IAC3E3rB,EAAShY,KAAKwU,EAAWysB,EAAO0C,EAAKjyB,EAAM,EAAG,EAAGqyC,KACjD/rC,EAAShY,KAAKwU,EAAW9C,EAAM,EAAG,EAAGqyC,GAAcpgB,EAAKjyB,EAAM,EAAG,EAAGsyC,MAEvD1jD,EAAMgS,OAAO0F,EAE9B,yBCjIA,IAAA9U,EAAqB1D,EAAQ,OAArBoe,EAAG1a,EAAH0a,IAAKxE,EAAGlW,EAAHkW,IAEP5F,EAAOhU,EAAQ,OAEfmF,EAAQnF,EAAQ,OAEtB4D,EAAqB5D,EAAQ,OAArB8a,EAAGlX,EAAHkX,IAAKF,EAAGhX,EAAHgX,IAEb8pB,EAAiC1kC,EAAQ,MAAjCyjD,EAAK/e,EAAL+e,MAAOC,EAAahf,EAAbgf,cAqEf9hD,EAAOC,QArDS,SAAC1B,GACf,IAAM0hC,EAAW,CACfrmB,OAAQ,CAAC,EAAG,GACZ3B,OAAQ,CAAC,EAAG,GACZhD,WAAY,EACZ00B,SAAU3xB,EACVrI,SAAU,IAEZF,EAAyDhN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAA/Eqb,EAAMnK,EAANmK,OAAQ3B,EAAMxI,EAANwI,OAAQhD,EAAUxF,EAAVwF,WAAY00B,EAAQl6B,EAARk6B,SAAUh6B,EAAQF,EAARE,SAE5C,IAAKmyC,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,6CAC/C,IAAKohD,EAAc7pC,EAAQ,GAAI,MAAM,IAAIvX,MAAM,6CAC/C,IAAKuX,EAAOtB,OAAM,SAAC7E,GAAC,OAAKA,GAAK,CAAC,IAAG,MAAM,IAAIpR,MAAM,kCAClD,IAAKmhD,EAAM5sC,EAAY,GAAI,MAAM,IAAIvU,MAAM,+BAC3C,IAAKmhD,EAAMlY,EAAU,GAAI,MAAM,IAAIjpC,MAAM,6BACzC,IAAKmhD,EAAMlyC,EAAU,GAAI,MAAM,IAAIjP,MAAM,kCAGzC,GAAkB,IAAduX,EAAO,IAA0B,IAAdA,EAAO,GAAU,OAAO1U,EAAM2N,SAKrD,IAAI2tB,EAAW7mB,GAHf/C,GAA0B+C,IAC1B2xB,GAAsB3xB,KAIpB6mB,EAAW8K,EAAW10B,GAEpBA,EAAa00B,IACf9K,EAAW8K,GAAY3xB,EAAM/C,IAG/B,IAAM4tC,EAAYv0C,KAAKe,IAAI4I,EAAO,GAAIA,EAAO,IAG7C,GAAI4mB,EAFavwB,KAAK+gB,MAAOwzB,EAAYA,EAAcA,EAAYA,EAAcrmC,EAAMA,IAC5D,EAAIqmC,EAAYA,IAClB,MAAM,IAAIniD,MAAM,gEAEzCiP,EAAWrB,KAAKC,MAAMoB,GAAYkvB,EAAW7mB,IAE7C,IAAMiqC,EAAU7vC,EAAKtO,MAAM8V,GACrBS,EAAOwkB,EAAWlvB,EAElBS,EAAS,GACfT,EAAYkvB,EAAW7mB,EAAOrI,EAAW,EAAIA,EAC7C,IAAK,IAAIhR,EAAI,EAAGA,EAAIgR,EAAUhR,IAAK,CACjC,IAAM0W,EAASgF,EAAO1b,EAAKsW,EACrB3E,EAAQ8B,EAAKY,WAAWiF,EAAO,GAAKe,EAAI3D,GAAQ4C,EAAO,GAAKiB,EAAI7D,IACtEjD,EAAKyH,IAAIvJ,EAAO2xC,EAAS3xC,GACzBF,EAAOxR,KAAK0R,EACd,CAEA,OADIuuB,EAAW7mB,GAAK5H,EAAOxR,KAAKqjD,GACzB1+C,EAAM6P,WAAWhD,EAC1B,yBC3EA,IAAQ4H,EAAQ5Z,EAAQ,OAAhB4Z,IACFnB,EAAOzY,EAAQ,OAEfc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEtB4D,EAAqB5D,EAAQ,OAArB8a,EAAGlX,EAAHkX,IAAKF,EAAGhX,EAAHgX,IAEb8pB,EAAiC1kC,EAAQ,MAAjCyjD,EAAK/e,EAAL+e,MAAOC,EAAahf,EAAbgf,cA0Ff9hD,EAAOC,QA3EW,SAAC1B,GACjB,IAMAkR,EAA2ChN,OAAOC,OAAO,CAAC,EANzC,CACfkX,OAAQ,CAAC,EAAG,EAAG,GACf3B,OAAQ,CAAC,EAAG,EAAG,GACftI,SAAU,GACVyuB,KAAM,CAAC,CAAC,EAAG,EAAG,GAAI,CAAC,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,KAEgC7/B,GAA/Dqb,EAAMnK,EAANmK,OAAQ3B,EAAMxI,EAANwI,OAAQtI,EAAQF,EAARE,SAAUyuB,EAAI3uB,EAAJ2uB,KAElC,IAAK0jB,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,gDAC/C,IAAKohD,EAAc7pC,EAAQ,GAAI,MAAM,IAAIvX,MAAM,gDAC/C,IAAKuX,EAAOtB,OAAM,SAAC7E,GAAC,OAAKA,GAAK,CAAC,IAAG,MAAM,IAAIpR,MAAM,kCAClD,IAAKmhD,EAAMlyC,EAAU,GAAI,MAAM,IAAIjP,MAAM,iCAGzC,GAAkB,IAAduX,EAAO,IAA0B,IAAdA,EAAO,IAA0B,IAAdA,EAAO,GAAU,OAAO/Y,EAAMgS,SAWxE,IATA,IAKIgyC,EALEC,EAAUtsC,EAAKuC,MAAMvC,EAAK3F,SAAU2F,EAAKmF,UAAUnF,EAAK3F,SAAUktB,EAAK,IAAKnmB,EAAO,IACnFmrC,EAAUvsC,EAAKuC,MAAMvC,EAAK3F,SAAU2F,EAAKmF,UAAUnF,EAAK3F,SAAUktB,EAAK,IAAKnmB,EAAO,IACnForC,EAAUxsC,EAAKuC,MAAMvC,EAAK3F,SAAU2F,EAAKmF,UAAUnF,EAAK3F,SAAUktB,EAAK,IAAKnmB,EAAO,IAEnFqrC,EAAYh1C,KAAKqK,MAAMhJ,EAAW,GAElCiH,EAAW,GACX+W,EAAK9W,EAAK3F,SACV0c,EAAK/W,EAAK3F,SACPw5B,EAAS,EAAGA,GAAU/6B,EAAU+6B,IAAU,CACjD,IAAMr1B,EAAQ2C,EAAM0yB,EAAS/6B,EACvB4zC,EAAgB1sC,EAAKgD,IAAIhD,EAAK3F,SAAU2F,EAAKuC,MAAMuU,EAAIw1B,EAASnqC,EAAI3D,IAASwB,EAAKuC,MAAMwU,EAAIw1B,EAASlqC,EAAI7D,KAC/G,GAAIq1B,EAAS,EAEX,IADA,IAAI8Y,OAAY,EAAEC,OAAY,EACrBC,EAAS,EAAGA,GAAUJ,EAAWI,IAAU,CAClD,IAAMz8B,EAAQjP,EAAM,EAAI0rC,EAASJ,EAC3BK,EAAW3qC,EAAIiO,GACf28B,EAAW1qC,EAAI+N,GACrB,GAAIy8B,EAAS,EAAG,CACd,IAAItzC,EAAS,GACTE,OAAK,EACTA,EAAQuG,EAAK1B,SAAS0B,EAAK3F,SAAU2F,EAAKuC,MAAMuU,EAAIu1B,EAAmBM,GAAe3sC,EAAKuC,MAAMwU,EAAIy1B,EAASI,IAC9GrzC,EAAOxR,KAAKiY,EAAKgD,IAAIvJ,EAAOA,EAAOsJ,IACnCtJ,EAAQuG,EAAK1B,SAAS0B,EAAK3F,SAAU2F,EAAKuC,MAAMuU,EAAI41B,EAAeC,GAAe3sC,EAAKuC,MAAMwU,EAAIy1B,EAASI,IAC1GrzC,EAAOxR,KAAKiY,EAAKgD,IAAIvJ,EAAOA,EAAOsJ,IAC/B8pC,EAASJ,IACXhzC,EAAQuG,EAAK1B,SAAS0B,EAAK3F,SAAU2F,EAAKuC,MAAMuU,EAAI41B,EAAeI,GAAW9sC,EAAKuC,MAAMwU,EAAIy1B,EAASO,IACtGxzC,EAAOxR,KAAKiY,EAAKgD,IAAIvJ,EAAOA,EAAOsJ,KAErCtJ,EAAQuG,EAAK1B,SAAS0B,EAAK3F,SAAU2F,EAAKuC,MAAMuU,EAAIu1B,EAAmBS,GAAW9sC,EAAKuC,MAAMwU,EAAIy1B,EAASO,IAC1GxzC,EAAOxR,KAAKiY,EAAKgD,IAAIvJ,EAAOA,EAAOsJ,IAEnChD,EAAShY,KAAKkB,EAAMoR,OAAOd,IAE3BA,EAAS,GACTE,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2F,EAAKuC,MAAMuU,EAAIu1B,EAAmBM,GAAe3sC,EAAKuC,MAAMwU,EAAIy1B,EAASI,IACzGrzC,EAAOxR,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU0I,EAAQtJ,IAC5CA,EAAQuG,EAAKgD,IAAIvJ,EAAOuG,EAAKuC,MAAMuU,EAAI41B,EAAeC,GAAe3sC,EAAKuC,MAAMwU,EAAIy1B,EAASI,IAC7FrzC,EAAOxR,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU0I,EAAQtJ,IACxCozC,EAASJ,IACXhzC,EAAQuG,EAAKgD,IAAIvJ,EAAOuG,EAAKuC,MAAMuU,EAAI41B,EAAeI,GAAW9sC,EAAKuC,MAAMwU,EAAIy1B,EAASO,IACzFxzC,EAAOxR,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU0I,EAAQtJ,KAE9CA,EAAQuG,EAAKgD,IAAIvJ,EAAOuG,EAAKuC,MAAMuU,EAAIu1B,EAAmBS,GAAW9sC,EAAKuC,MAAMwU,EAAIy1B,EAASO,IAC7FxzC,EAAOxR,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU0I,EAAQtJ,IAC5CF,EAAOkD,UAEPsD,EAAShY,KAAKkB,EAAMoR,OAAOd,GAC7B,CACAozC,EAAeG,EACfF,EAAeG,CACjB,CAEFV,EAAoBK,CACtB,CACA,OAAOrkD,EAAMgS,OAAO0F,EACtB,yBChGA,IAAMzE,EAAO/T,EAAQ,OACfyY,EAAOzY,EAAQ,OAEfc,EAAQd,EAAQ,OAEhBylD,EAAazlD,EAAQ,OAEnByjD,EAAUzjD,EAAQ,MAAlByjD,MAoIR7hD,EAAOC,QAvHgB,SAAC1B,GACtB,IAIAkR,EAA4BhN,OAAOC,OAAO,CAAC,EAJ1B,CACfuV,OAAQ,EACR6rC,UAAW,GAE2CvlD,GAAlD0Z,EAAMxI,EAANwI,OAAQ6rC,EAASr0C,EAATq0C,UAEd,IAAKjC,EAAM5pC,EAAQ,GAAI,MAAM,IAAIvX,MAAM,2BACvC,IAAKmhD,EAAMiC,EAAW,GAAI,MAAM,IAAIpjD,MAAM,iCAG1C,GAAe,IAAXuX,EAAc,OAAO/Y,EAAMgS,SAG/B4yC,EAAYx1C,KAAKC,MAAMu1C,EAAY,GA6FnC,IA3FA,IAAMhwC,EAAK,CACT,CAAC,QAAU,GAAW,SACtB,CAAC,SAAW,EAAU,SACtB,EAAE,SAAW,EAAU,SACvB,EAAE,QAAU,GAAW,SACvB,CAAC,GAAW,QAAU,SACtB,CAAC,EAAU,QAAU,SACrB,CAAC,EAAU,SAAW,SACtB,CAAC,GAAW,SAAW,SACvB,EAAE,SAAW,SAAW,GACxB,CAAC,SAAW,SAAW,GACvB,CAAC,QAAU,QAAU,GACrB,EAAE,QAAU,QAAU,IAElBiwC,EAAK,CAAC,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,GAAI,CAAC,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,GACnI,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,GAAI,GAAI,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,GAAI,GAAI,GAAI,CAAC,EAAG,EAAG,IAEjGC,EAAoB,SAAC31C,EAAGy1C,EAAW5mC,GAiBvC,IAhBA,IAAMyQ,EAAKtf,EAAE,GACPuf,EAAKvf,EAAE,GACPwf,EAAKxf,EAAE,GACTyD,EAAIoL,EACFvM,EAAI,GACJnC,EAAI,GAWD7P,EAAI,EAAGA,EAAImlD,EAAWnlD,IAC7B,IAAK,IAAIsT,EAAI,EAAGA,EAAI6xC,EAAYnlD,EAAGsT,IAAK,CACtC,IAAMmK,EAAKzd,EAAImlD,EACTznC,GAAM1d,EAAI,GAAKmlD,EACfvkB,EAAKttB,GAAK6xC,EAAYnlD,GACtB6gC,GAAMvtB,EAAI,IAAM6xC,EAAYnlD,GAC5BslD,EAAKH,EAAYnlD,EAAI,EAAIsT,GAAK6xC,EAAYnlD,EAAI,GAAK,EACnDyP,EAAI,GAEVA,EAAE,GAAK81C,EAAKA,EAAKv2B,EAAIC,EAAI2R,GAAK1R,EAAIzR,GAClChO,EAAE,GAAK81C,EAAKA,EAAKv2B,EAAIC,EAAI4R,GAAK3R,EAAIzR,GAClChO,EAAE,GAAK81C,EAAKA,EAAKv2B,EAAIC,EAAIq2B,GAAKp2B,EAAIxR,GAGlC,IAAK,IAAIb,EAAI,EAAGA,EAAI,EAAGA,IAErB,IADA,IAAM7N,EAAIkJ,EAAK7X,OAAOoP,EAAEoN,IACfrN,EAAI,EAAGA,EAAI,EAAGA,IACrBC,EAAEoN,GAAGrN,IAAMR,EAMf,GAHAgD,EAAE/R,KAAKwP,EAAE,GAAIA,EAAE,GAAIA,EAAE,IACrBI,EAAE5P,KAAK,CAACkT,EAAGA,EAAI,EAAGA,EAAI,IAAKA,GAAK,EAE5BG,EAAI6xC,EAAYnlD,EAAI,EAAG,CACzB,IAAMwlD,EAAKL,EAAYnlD,EAAI,GAAKsT,EAAI,IAAM6xC,EAAYnlD,EAAI,GAAK,EAC/DyP,EAAE,GAAK81C,EAAKA,EAAKv2B,EAAIC,EAAI4R,GAAK3R,EAAIzR,GAClChO,EAAE,GAAK81C,EAAKA,EAAKv2B,EAAIC,EAAIu2B,GAAKt2B,EAAIxR,GAClCjO,EAAE,GAAK81C,EAAKA,EAAKv2B,EAAIC,EAAIq2B,GAAKp2B,EAAIxR,GAGlC,IAAK,IAAIb,EAAI,EAAGA,EAAI,EAAGA,IAErB,IADA,IAAM7N,EAAIkJ,EAAK7X,OAAOoP,EAAEoN,IACfrN,EAAI,EAAGA,EAAI,EAAGA,IACrBC,EAAEoN,GAAGrN,IAAMR,EAGfgD,EAAE/R,KAAKwP,EAAE,GAAIA,EAAE,GAAIA,EAAE,IACrBI,EAAE5P,KAAK,CAACkT,EAAGA,EAAI,EAAGA,EAAI,IAAKA,GAAK,CAClC,CACF,CAEF,MAAO,CAAE1B,OAAQO,EAAGsyB,UAAWz0B,EAAG0O,OAAQpL,EAC5C,EAEMoyC,EAAO,SAAC3yC,EAAGxD,EAAGS,GAGlB,IAFA,IAAM41C,EAAK,EAAI51C,EACTmC,EAAI,GACDhS,EAAI,EAAGA,EAAI,EAAGA,IACrBgS,EAAEhS,GAAK4S,EAAE5S,GAAKylD,EAAKr2C,EAAEpP,GAAK6P,EAE5B,OAAOmC,CACT,EAEIP,EAAS,GACT8gC,EAAQ,GACRh0B,EAAS,EAEJve,EAAI,EAAGA,EAAIolD,EAAG/kD,OAAQL,IAAK,CAClC,IAAMmP,EAAIk2C,EAAkB,CAAClwC,EAAGiwC,EAAGplD,GAAG,IAAKmV,EAAGiwC,EAAGplD,GAAG,IAAKmV,EAAGiwC,EAAGplD,GAAG,KAAMmlD,EAAW5mC,GACnF9M,EAASA,EAAO5Q,OAAOsO,EAAEsC,QACzB8gC,EAAQA,EAAM1xC,OAAOsO,EAAEm1B,WACvB/lB,EAASpP,EAAEoP,MACb,CAEA,IAAI7K,EAAWwxC,EAAW,CAAEzzC,OAAQA,EAAQ8gC,MAAOA,EAAOpS,YAAa,WAEvE,OADe,IAAX7mB,IAAc5F,EAAWnT,EAAMwT,UAAUP,EAAK6W,YAAY7W,EAAKjB,SAAU,CAAC+G,EAAQA,EAAQA,IAAU5F,IACjGA,CACT,yBCjIArS,EAAOC,QAAU,CACfokD,IAAKjmD,EAAQ,MACbkmD,OAAQlmD,EAAQ,OAChBmmD,KAAMnmD,EAAQ,MACdokD,OAAQpkD,EAAQ,OAChBw/B,SAAUx/B,EAAQ,OAClBskD,iBAAkBtkD,EAAQ,OAC1BikD,QAASjkD,EAAQ,OACjBomD,UAAWpmD,EAAQ,OACnBqmD,eAAgBrmD,EAAQ,OACxBimB,KAAMjmB,EAAQ,OACdgB,QAAShB,EAAQ,OACjBylD,WAAYzlD,EAAQ,OACpBsmD,UAAWtmD,EAAQ,OACnBumD,cAAevmD,EAAQ,OACvBwmD,gBAAiBxmD,EAAQ,OACzBymD,iBAAkBzmD,EAAQ,OAC1B29B,OAAQ39B,EAAQ,MAChB0mD,OAAQ1mD,EAAQ,OAChB2mD,KAAM3mD,EAAQ,OACd4mD,MAAO5mD,EAAQ,OACf6mD,SAAU7mD,EAAQ,+BC7BpB,IAAMoF,EAAQpF,EAAQ,OAkBtB4B,EAAOC,QANM,SAACmQ,GACZ,IAAK7N,MAAMmB,QAAQ0M,GAAS,MAAM,IAAI1P,MAAM,2BAE5C,OAAO8C,EAAM4P,WAAW,CAAC,EAAGhD,EAC9B,yBChBA,IAAM7M,EAAQnF,EAAQ,OAqEtB4B,EAAOC,QA9CS,SAAC1B,GACf,IAIAkR,EAA0BhN,OAAOC,OAAO,CAAC,EAJxB,CACf0N,OAAQ,GACRwM,MAAO,IAE6Cre,GAA9C6R,EAAMX,EAANW,OAAQwM,EAAKnN,EAALmN,MAEhB,IAAMra,MAAMmB,QAAQ0M,KAAW7N,MAAMmB,QAAQkZ,GAAS,MAAM,IAAIlc,MAAM,mCAEtE,IAAIwkD,EAAc90C,EACd7N,MAAMmB,QAAQ0M,EAAO,MAClB7N,MAAMmB,QAAQ0M,EAAO,GAAG,MAE3B80C,EAAc,CAAC90C,KAInB80C,EAAYzmD,SAAQ,SAAC0hC,EAAMxhC,GACzB,IAAK4D,MAAMmB,QAAQy8B,GAAO,MAAM,IAAIz/B,MAAM,kBAAoB/B,EAAI,qBAClE,GAAIwhC,EAAKnhC,OAAS,EAAG,MAAM,IAAI0B,MAAM,kBAAoB/B,EAAI,sCAC7DwhC,EAAK1hC,SAAQ,SAAC6R,EAAO2B,GACnB,IAAK1P,MAAMmB,QAAQ4M,GAAQ,MAAM,IAAI5P,MAAM,kBAAoB/B,EAAI,WAAasT,EAAI,qBACpF,GAAI3B,EAAMtR,OAAS,EAAG,MAAM,IAAI0B,MAAM,kBAAoB/B,EAAI,WAAasT,EAAI,kCACjF,GACF,IAEA,IAAIkzC,EAAcvoC,EAClB,GAAqB,IAAjBA,EAAM5d,OAAc,CAEtB,IAAIsY,EAAQ,EACZ6tC,EAAcD,EAAYthD,KAAI,SAACu8B,GAAI,OAAKA,EAAKv8B,KAAI,SAAC0M,GAAK,OAAKgH,GAAO,GAAC,GACtE,CAGA,IAAM8tC,EAAY,GAClBF,EAAYzmD,SAAQ,SAAC0hC,GAAI,OAAKA,EAAK1hC,SAAQ,SAAC6R,GAAK,OAAK80C,EAAUxmD,KAAK0R,EAAM,GAAC,IAE5E,IAAIkC,EAAQ,GAMZ,OALA2yC,EAAY1mD,SAAQ,SAACoe,GACnB,IAAMwoC,EAAcxoC,EAAKjZ,KAAI,SAACjC,GAAK,OAAKyjD,EAAUzjD,EAAM,IAClD0Q,EAAW9O,EAAM6P,WAAWiyC,GAClC7yC,EAAQA,EAAMhT,OAAO+D,EAAMkQ,QAAQpB,GACrC,IACO9O,EAAM2N,OAAOsB,EACtB,yBCnEA,IAAMtT,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEd0jD,EAAkB1jD,EAAQ,MAA1B0jD,cAmER9hD,EAAOC,QAhDY,SAAC1B,GAClB,IAAM0hC,EAAW,CACf7vB,OAAQ,GACR8gC,MAAO,GACPnwB,YAAQpO,EACRmsB,YAAa,WAEfrvB,EAA+ChN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAAnE6R,EAAMX,EAANW,OAAQ8gC,EAAKzhC,EAALyhC,MAAOnwB,EAAMtR,EAANsR,OAAQ+d,EAAWrvB,EAAXqvB,YAE/B,IAAMv8B,MAAMmB,QAAQ0M,KAAW7N,MAAMmB,QAAQwtC,GAC3C,MAAM,IAAIxwC,MAAM,mCAElB,GAAI0P,EAAOpR,OAAS,EAClB,MAAM,IAAI0B,MAAM,qCAElB,GAAIwwC,EAAMlyC,OAAS,EACjB,MAAM,IAAI0B,MAAM,kCAElB,GAAIqgB,EAAQ,CACV,IAAKxe,MAAMmB,QAAQqd,GACjB,MAAM,IAAIrgB,MAAM,2BAElB,GAAIqgB,EAAO/hB,SAAWkyC,EAAMlyC,OAC1B,MAAM,IAAI0B,MAAM,6CAEpB,CACA0P,EAAO3R,SAAQ,SAAC6R,EAAO3R,GACrB,IAAKmjD,EAAcxxC,EAAO,GAAI,MAAM,IAAI5P,MAAM,SAADlB,OAAUb,EAAC,uCAC1D,IACAuyC,EAAMzyC,SAAQ,SAACovC,EAAMlvC,GACnB,GAAIkvC,EAAK7uC,OAAS,EAAG,MAAM,IAAI0B,MAAM,QAADlB,OAASb,EAAC,oCAC9C,IAAKmjD,EAAcjU,EAAMA,EAAK7uC,QAAS,MAAM,IAAI0B,MAAM,QAADlB,OAASb,EAAC,gCAClE,IAGoB,YAAhBmgC,GACFoS,EAAMzyC,SAAQ,SAACovC,GAAI,OAAKA,EAAKv6B,SAAS,IAGxC,IAAMsD,EAAWs6B,EAAMttC,KAAI,SAACiqC,EAAMyX,GAChC,IAAMlmD,EAAUU,EAAMoR,OAAO28B,EAAKjqC,KAAI,SAAC2hD,GAAM,OAAKn1C,EAAOm1C,EAAO,KAEhE,OADIxkC,GAAUA,EAAOukC,KAASlmD,EAAQqE,MAAQsd,EAAOukC,IAC9ClmD,CACT,IAEA,OAAOF,EAAMgS,OAAO0F,EACtB,yBCpEA,IAAMxE,EAAOhU,EAAQ,OAEfmF,EAAQnF,EAAQ,OAEd0jD,EAAkB1jD,EAAQ,MAA1B0jD,cAuCR9hD,EAAOC,QA1BW,SAAC1B,GACjB,IAIAkR,EAAyBhN,OAAOC,OAAO,CAAC,EAJvB,CACfkX,OAAQ,CAAC,EAAG,GACZ2vB,KAAM,CAAC,EAAG,IAEyChrC,GAA7Cqb,EAAMnK,EAANmK,OAAQ2vB,EAAI95B,EAAJ85B,KAEhB,IAAKuY,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,6CAC/C,IAAKohD,EAAcvY,EAAM,GAAI,MAAM,IAAI7oC,MAAM,2CAC7C,IAAK6oC,EAAK5yB,OAAM,SAAC7E,GAAC,OAAKA,GAAK,CAAC,IAAG,MAAM,IAAIpR,MAAM,gCAGhD,GAAgB,IAAZ6oC,EAAK,IAAwB,IAAZA,EAAK,GAAU,OAAOhmC,EAAM2N,SAEjD,IAAMZ,EAAQ,CAACi5B,EAAK,GAAK,EAAGA,EAAK,GAAK,GAChCic,EAAQ,CAACl1C,EAAM,IAAKA,EAAM,IAE1BF,EAAS,CACbgC,EAAK+C,SAAS/C,EAAKlB,SAAU0I,EAAQtJ,GACrC8B,EAAKyH,IAAIzH,EAAKlB,SAAU0I,EAAQ4rC,GAChCpzC,EAAKyH,IAAIzH,EAAKlB,SAAU0I,EAAQtJ,GAChC8B,EAAK+C,SAAS/C,EAAKlB,SAAU0I,EAAQ4rC,IAEvC,OAAOjiD,EAAM6P,WAAWhD,EAC1B,yBCzCA,IAAAtO,EAAqB1D,EAAQ,OAArBoe,EAAG1a,EAAH0a,IAAKxE,EAAGlW,EAAHkW,IAEP5F,EAAOhU,EAAQ,OACfyY,EAAOzY,EAAQ,OAEfc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEtB4D,EAAqB5D,EAAQ,OAArB8a,EAAGlX,EAAHkX,IAAKF,EAAGhX,EAAHgX,IAEb8pB,EAAiC1kC,EAAQ,MAAjCyjD,EAAK/e,EAAL+e,MAAOC,EAAahf,EAAbgf,cACTU,EAASpkD,EAAQ,OAEjBqnD,EAAgB,SAAC7rC,EAAQ2vB,EAAMtxB,EAAQtI,EAAUmD,EAAO4yC,GAC5D,IAAMz+B,EAASjP,EAAM,EAAKlF,EAAQnD,EAC5Bg0C,EAAW3qC,EAAIiO,GACf28B,EAAW1qC,EAAI+N,GAEf0+B,EAAgBh2C,EAAWmD,EAC7B8yC,EAAc3tC,EAAS0rC,EACvBkC,EAActc,EAAK,IAAMtxB,EAAUA,EAAS2rC,GAC3C8B,IAAUG,EAAe5tC,EAAUA,EAAS2rC,EAAara,EAAK,IAEnEqc,EAAcA,EAAcppC,EAAMopC,EAAc,EAUhD,IARA,IAAME,EAAUjvC,EAAKgD,IAAIhD,EAAK3F,SAAU0I,EAAQ,CAAC2vB,EAAK,GAAKtxB,EAAQsxB,EAAK,GAAKtxB,EAAQ4tC,IAC/EE,EAAUlvC,EAAKgD,IAAIhD,EAAK3F,SAAU0I,EAAQ,CAAC3B,EAASsxB,EAAK,GAAIA,EAAK,GAAKtxB,EAAQ4tC,IAC/EG,EAAUnvC,EAAKgD,IAAIhD,EAAK3F,SAAU0I,EAAQ,CAAC3B,EAASsxB,EAAK,GAAItxB,EAASsxB,EAAK,GAAIsc,IAC/EI,EAAUpvC,EAAKgD,IAAIhD,EAAK3F,SAAU0I,EAAQ,CAAC2vB,EAAK,GAAKtxB,EAAQA,EAASsxB,EAAK,GAAIsc,IAC/EK,EAAgB,GAChBC,EAAgB,GAChBC,EAAgB,GAChBC,EAAgB,GACb1nD,EAAI,EAAGA,GAAKgnD,EAAehnD,IAAK,CACvC,IAAMoqB,EAAU48B,EAAgB,EAAI3tC,EAAM,EAAIrZ,EAAIgnD,EAAgB,EAC5DxH,EAAU/rC,EAAKkc,iBAAiBlc,EAAKlB,SAAU6X,GACrD3W,EAAKgH,MAAM+kC,EAASA,EAASyH,GAC7B,IAAMU,EAAUzvC,EAAKyY,SAASzY,EAAK3F,SAAUitC,GAC7C+H,EAActnD,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU40C,EAASQ,IACpDzvC,EAAK+S,QAAQ08B,EAASA,EAAS,CAAC,EAAG,EAAG,GAAItuC,EAAM,GAChDmuC,EAAcvnD,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU60C,EAASO,IACpDzvC,EAAK+S,QAAQ08B,EAASA,EAAS,CAAC,EAAG,EAAG,GAAItuC,EAAM,GAChDouC,EAAcxnD,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU80C,EAASM,IACpDzvC,EAAK+S,QAAQ08B,EAASA,EAAS,CAAC,EAAG,EAAG,GAAItuC,EAAM,GAChDquC,EAAcznD,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU+0C,EAASK,GACtD,CACA,OAAKZ,EAOE,CAACQ,EAAeC,EAAeC,EAAeC,IANnDH,EAAc5yC,UACd6yC,EAAc7yC,UACd8yC,EAAc9yC,UACd+yC,EAAc/yC,UACP,CAAC+yC,EAAeD,EAAeD,EAAeD,GAGzD,EAEMK,EAAgB,SAACC,EAAiBC,GAEtC,IADA,IAAM7vC,EAAW,GACRjY,EAAI,EAAGA,EAAI6nD,EAAgBxnD,OAAQL,IAG1C,IAFA,IAAMgT,EAAW60C,EAAgB7nD,GAC3BiT,EAAU60C,EAAe9nD,GACtBsT,EAAI,EAAGA,EAAKN,EAAS3S,OAAS,EAAIiT,IACzC2E,EAAShY,KAAKkB,EAAMoR,OAAO,CAACS,EAASM,GAAIN,EAASM,EAAI,GAAIL,EAAQK,MAE9DA,EAAKL,EAAQ5S,OAAS,GACxB4X,EAAShY,KAAKkB,EAAMoR,OAAO,CAACU,EAAQK,GAAIN,EAASM,EAAI,GAAIL,EAAQK,EAAI,MAI3E,OAAO2E,CACT,EAEM8vC,EAAc,SAACF,EAAiBC,GAEpC,IADA,IAAM7vC,EAAW,GACRjY,EAAI,EAAGA,EAAI6nD,EAAgBxnD,OAAQL,IAAK,CAC/C,IAAIgT,EAAW60C,EAAgB7nD,GAC3BiT,EAAU60C,EAAe9nD,GACvB+d,EAAK/K,EAASA,EAAS3S,OAAS,GAChC2nD,EAAK/0C,EAAQA,EAAQ5S,OAAS,GAE9BiT,GAAKtT,EAAI,GAAK6nD,EAAgBxnD,OACpC2S,EAAW60C,EAAgBv0C,GAC3BL,EAAU60C,EAAex0C,GACzB,IAAM0b,EAAKhc,EAAS,GACdi1C,EAAKh1C,EAAQ,GAEnBgF,EAAShY,KAAKkB,EAAMoR,OAAO,CAACwL,EAAIiR,EAAIi5B,EAAID,IAC1C,CACA,OAAO/vC,CACT,EAEMiwC,EAAc,SAACC,EAAeC,GAGlCD,GADAA,EAAgB,CAACA,EAAc,GAAIA,EAAc,GAAIA,EAAc,GAAIA,EAAc,KACvDljD,KAAI,SAACu6B,GAAM,OAAKA,EAAOrrB,QAAQQ,SAAS,IAEtE,IAAM0zC,EAAe,GACrBF,EAAcroD,SAAQ,SAAC0/B,GACrBA,EAAO1/B,SAAQ,SAAC6R,GAAK,OAAK02C,EAAapoD,KAAK0R,EAAM,GACpD,IAEA,IAAM22C,EAAY,GAClBF,EAAWtoD,SAAQ,SAAC0/B,GAClBA,EAAO1/B,SAAQ,SAAC6R,GAAK,OAAK22C,EAAUroD,KAAK0R,EAAM,GACjD,IAGA,IADA,IAAMsG,EAAW,GACRjY,EAAI,EAAGA,EAAIsoD,EAAUjoD,OAAQL,IAAK,CACzC,IAAMsT,GAAKtT,EAAI,GAAKsoD,EAAUjoD,OAC9B4X,EAAShY,KAAKkB,EAAMoR,OAAO,CAAC81C,EAAaroD,GAAIqoD,EAAa/0C,GAAIg1C,EAAUh1C,GAAIg1C,EAAUtoD,KACxF,CACA,OAAOiY,CACT,EAgFA5W,EAAOC,QAjEe,SAAC1B,GACrB,IAMAkR,EAA8ChN,OAAOC,OAAO,CAAC,EAN5C,CACfkX,OAAQ,CAAC,EAAG,EAAG,GACf2vB,KAAM,CAAC,EAAG,EAAG,GACb2d,YAAa,GACbv3C,SAAU,IAE8DpR,GAApEqb,EAAMnK,EAANmK,OAAQ2vB,EAAI95B,EAAJ85B,KAAM2d,EAAWz3C,EAAXy3C,YAAav3C,EAAQF,EAARE,SAEjC,IAAKmyC,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,gDAC/C,IAAKohD,EAAcvY,EAAM,GAAI,MAAM,IAAI7oC,MAAM,8CAC7C,IAAK6oC,EAAK5yB,OAAM,SAAC7E,GAAC,OAAKA,GAAK,CAAC,IAAG,MAAM,IAAIpR,MAAM,gCAChD,IAAKmhD,EAAMqF,EAAa,GAAI,MAAM,IAAIxmD,MAAM,gCAC5C,IAAKmhD,EAAMlyC,EAAU,GAAI,MAAM,IAAIjP,MAAM,iCAGzC,GAAgB,IAAZ6oC,EAAK,IAAwB,IAAZA,EAAK,IAAwB,IAAZA,EAAK,GAAU,OAAOrqC,EAAMgS,SAGlE,GAAoB,IAAhBg2C,EAAmB,OAAO1E,EAAO,CAAE5oC,OAAAA,EAAQ2vB,KAAAA,IAI/C,GAAI2d,GAFJ3d,EAAOA,EAAK3lC,KAAI,SAACrE,GAAC,OAAKA,EAAI,CAAC,KAEJ,GAAKid,GACzB0qC,EAAe3d,EAAK,GAAK/sB,GACzB0qC,EAAe3d,EAAK,GAAK/sB,EAAM,MAAM,IAAI9b,MAAM,iEAEnDiP,EAAWrB,KAAKC,MAAMoB,EAAW,GAKjC,IAHA,IAAIw3C,EAAiB,KACjBC,EAAiB,KACjBxwC,EAAW,GACN9D,EAAQ,EAAGA,GAASnD,EAAUmD,IAAS,CAC9C,IAAMu0C,EAAa5B,EAAc7rC,EAAQ2vB,EAAM2d,EAAav3C,EAAUmD,GAAO,GACvEw0C,EAAa7B,EAAc7rC,EAAQ2vB,EAAM2d,EAAav3C,EAAUmD,GAAO,GAe7E,GAbc,IAAVA,IACF8D,EAAWA,EAASpX,OAAOqnD,EAAYS,EAAYD,KAGjDF,IACFvwC,EAAWA,EAASpX,OAAO+mD,EAAcY,EAAgBE,GACvDX,EAAYS,EAAgBE,KAE5BD,IACFxwC,EAAWA,EAASpX,OAAO+mD,EAAca,EAAgBE,GACvDZ,EAAYU,EAAgBE,KAG5Bx0C,IAAUnD,EAAU,CAEtB,IAAIS,EAASi3C,EAAWzjD,KAAI,SAACu6B,GAAM,OAAKA,EAAO,EAAE,IACjDvnB,EAAShY,KAAKkB,EAAMoR,OAAOd,IAE3BA,EAASk3C,EAAW1jD,KAAI,SAACu6B,GAAM,OAAKA,EAAO,EAAE,IAC7CvnB,EAAShY,KAAKkB,EAAMoR,OAAOd,GAC7B,CAEA+2C,EAAiBE,EACjBD,EAAiBE,CACnB,CAEA,OAAOpoD,EAAMgS,OAAO0F,EACtB,yBC9LA,IAAA9U,EAAqB1D,EAAQ,OAArBoe,EAAG1a,EAAH0a,IAAKxE,EAAGlW,EAAHkW,IAEPnB,EAAOzY,EAAQ,OAEfc,EAAQd,EAAQ,OAChB0B,EAAQ1B,EAAQ,OAEtB4D,EAAqB5D,EAAQ,OAArB8a,EAAGlX,EAAHkX,IAAKF,EAAGhX,EAAHgX,IAEb8pB,EAAiC1kC,EAAQ,MAAjCyjD,EAAK/e,EAAL+e,MAAOC,EAAahf,EAAbgf,cACTlkB,EAAWx/B,EAAQ,OAwIzB4B,EAAOC,QAxHiB,SAAC1B,GACvB,IAOAkR,EAA0DhN,OAAOC,OAAO,CAAC,EAPxD,CACfkX,OAAQ,CAAC,EAAG,EAAG,GACfyuB,OAAQ,EACRpwB,OAAQ,EACRivC,YAAa,GACbv3C,SAAU,IAE0EpR,GAA9Eqb,EAAMnK,EAANmK,OAAQyuB,EAAM54B,EAAN44B,OAAQpwB,EAAMxI,EAANwI,OAAQivC,EAAWz3C,EAAXy3C,YAAav3C,EAAQF,EAARE,SAE7C,IAAKmyC,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,gDAC/C,IAAKmhD,EAAMxZ,EAAQ,GAAI,MAAM,IAAI3nC,MAAM,2BACvC,IAAKmhD,EAAM5pC,EAAQ,GAAI,MAAM,IAAIvX,MAAM,2BACvC,IAAKmhD,EAAMqF,EAAa,GAAI,MAAM,IAAIxmD,MAAM,gCAC5C,GAAIwmD,EAAcjvC,EAAQ,MAAM,IAAIvX,MAAM,+CAC1C,IAAKmhD,EAAMlyC,EAAU,GAAI,MAAM,IAAIjP,MAAM,iCAGzC,GAAe,IAAX2nC,GAA2B,IAAXpwB,EAAc,OAAO/Y,EAAMgS,SAG/C,GAAoB,IAAhBg2C,EAAmB,OAAOtpB,EAAS,CAAEhkB,OAAAA,EAAQyuB,OAAAA,EAAQpwB,OAAAA,IAEzD,IAOIsvC,EAPE1nB,EAAQ,CAAC,EAAG,GAAKwI,EAAS,GAC1B9F,EAAM,CAAC,EAAG,EAAG8F,EAAS,GACtBtlB,EAAYlM,EAAK1B,SAAS0B,EAAK3F,SAAUqxB,EAAK1C,GAGpD,GAAK,EAAIqnB,EAFMrwC,EAAK7X,OAAO+jB,GAEOvG,EAAM,MAAM,IAAI9b,MAAM,gDAItD6mD,EADEj5C,KAAKkD,IAAIuR,EAAU,IAAMzU,KAAKkD,IAAIuR,EAAU,IAC9BlM,EAAK7D,WAAW,EAAG,EAAG,GAEtB6D,EAAK7D,WAAW,EAAG,EAAG,GAGxC,IAAMqwC,EAAUxsC,EAAKuC,MAAMvC,EAAK3F,SAAU2F,EAAKmF,UAAUnF,EAAK3F,SAAU6R,GAAYmkC,GAC9E/D,EAAUtsC,EAAKuC,MAAMvC,EAAK3F,SAAU2F,EAAKmF,UAAUnF,EAAK3F,SAAU2F,EAAKsF,MAAMtF,EAAK3F,SAAUmyC,EAASkE,IAAiBtvC,GACtHmrC,EAAUvsC,EAAKuC,MAAMvC,EAAK3F,SAAU2F,EAAKmF,UAAUnF,EAAK3F,SAAU2F,EAAKsF,MAAMtF,EAAK3F,SAAUiyC,EAASE,IAAWprC,GAEtHpB,EAAKgD,IAAIgmB,EAAOA,EAAOwjB,GACvBxsC,EAAK1B,SAASotB,EAAKA,EAAK8gB,GAcxB,IAZA,IAWIH,EAXEI,EAAYh1C,KAAKC,MAAM,IAAOoB,GAE9ByD,EAAa,SAAChD,GAElB,IAAMyI,EAAYzI,EAAOxM,KAAI,SAAC0M,GAAK,OAAKuG,EAAKgD,IAAIvJ,EAAOA,EAAOsJ,EAAO,IACtE,OAAO9Z,EAAMoR,OAAO2H,EACtB,EAEMjC,EAAW,GACXc,EAAKb,EAAK3F,SACVyG,EAAKd,EAAK3F,SAEPw5B,EAAS,EAAGA,GAAU/6B,EAAU+6B,IAAU,CACjD,IAAMr1B,EAAQ2C,EAAM0yB,EAAS/6B,EACvB4zC,EAAgB1sC,EAAKgD,IAAIhD,EAAK3F,SAAU2F,EAAKuC,MAAM1B,EAAIyrC,EAASnqC,EAAI3D,IAASwB,EAAKuC,MAAMzB,EAAIyrC,EAASlqC,EAAI7D,KAC/G,GAAIq1B,EAAS,EAAG,CAEd,IAAIt6B,EAAS,GACbA,EAAOxR,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU2uB,EAAO0jB,IAC3CnzC,EAAOxR,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAU2uB,EAAOqjB,IAC3C9yC,EAAOxR,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAUqxB,EAAK2gB,IACzC9yC,EAAOxR,KAAKiY,EAAKgD,IAAIhD,EAAK3F,SAAUqxB,EAAKghB,IACzC3sC,EAAShY,KAAKwU,EAAWhD,IAGzB,IADA,IAAIozC,OAAY,EAAEC,OAAY,EACrBC,EAAS,EAAGA,GAAUJ,EAAWI,IAAU,CAClD,IAAMz8B,EAAQjP,EAAM,EAAI0rC,EAASJ,EAC3BK,EAAW3qC,EAAIiO,GACf28B,EAAW1qC,EAAI+N,GACrB,GAAIy8B,EAAS,EAAG,CAEdtzC,EAAS,GACT,IAAIE,OAAK,EACTA,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2uB,EAAOhpB,EAAK1B,SAASuC,EAAIb,EAAKuC,MAAM1B,EAAIwrC,EAAmBM,GAAe3sC,EAAKuC,MAAMzB,EAAI0rC,EAASI,KAClIrzC,EAAOxR,KAAK0R,GACZA,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2uB,EAAOhpB,EAAK1B,SAASuC,EAAIb,EAAKuC,MAAM1B,EAAI6rC,EAAeC,GAAe3sC,EAAKuC,MAAMzB,EAAI0rC,EAASI,KAC9HrzC,EAAOxR,KAAK0R,GACRozC,EAASJ,IACXhzC,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2uB,EAAOhpB,EAAK1B,SAASuC,EAAIb,EAAKuC,MAAM1B,EAAI6rC,EAAeI,GAAW9sC,EAAKuC,MAAMzB,EAAI0rC,EAASO,KAC1HxzC,EAAOxR,KAAK0R,IAEdA,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2uB,EAAOhpB,EAAK1B,SAASuC,EAAIb,EAAKuC,MAAM1B,EAAIwrC,EAAmBS,GAAW9sC,EAAKuC,MAAMzB,EAAI0rC,EAASO,KAC9HxzC,EAAOxR,KAAK0R,GAEZsG,EAAShY,KAAKwU,EAAWhD,IAGzBA,EAAS,GACTE,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2F,EAAKuC,MAAM1B,EAAIwrC,EAAmBM,GAAe3sC,EAAKuC,MAAMzB,EAAI0rC,EAASI,IACzG5sC,EAAKgD,IAAIvJ,EAAOA,EAAOiyB,GACvBnyB,EAAOxR,KAAK0R,GACZA,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2F,EAAKuC,MAAM1B,EAAI6rC,EAAeC,GAAe3sC,EAAKuC,MAAMzB,EAAI0rC,EAASI,IACrG5sC,EAAKgD,IAAIvJ,EAAOA,EAAOiyB,GACvBnyB,EAAOxR,KAAK0R,GACRozC,EAASJ,IACXhzC,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2F,EAAKuC,MAAM1B,EAAI6rC,EAAeI,GAAW9sC,EAAKuC,MAAMzB,EAAI0rC,EAASO,IACjG/sC,EAAKgD,IAAIvJ,EAAOA,EAAOiyB,GACvBnyB,EAAOxR,KAAK0R,IAEdA,EAAQuG,EAAKgD,IAAIhD,EAAK3F,SAAU2F,EAAKuC,MAAM1B,EAAIwrC,EAAmBS,GAAW9sC,EAAKuC,MAAMzB,EAAI0rC,EAASO,IACrG/sC,EAAKgD,IAAIvJ,EAAOA,EAAOiyB,GACvBnyB,EAAOxR,KAAK0R,GACZF,EAAOkD,UAEPsD,EAAShY,KAAKwU,EAAWhD,GAC3B,CACAozC,EAAeG,EACfF,EAAeG,CACjB,CACF,CACAV,EAAoBK,CACtB,CAEA,OADerkD,EAAMgS,OAAO0F,EAE9B,yBChJA,IAAA9U,EAAqB1D,EAAQ,OAArBoe,EAAG1a,EAAH0a,IAAKxE,EAAGlW,EAAHkW,IAEP5F,EAAOhU,EAAQ,OAEfmF,EAAQnF,EAAQ,OAEtB4D,EAAiC5D,EAAQ,MAAjCyjD,EAAK7/C,EAAL6/C,MAAOC,EAAa9/C,EAAb8/C,cACT4C,EAAYtmD,EAAQ,OAoE1B4B,EAAOC,QArDkB,SAAC1B,GACxB,IAMAkR,EAA8ChN,OAAOC,OAAO,CAAC,EAN5C,CACfkX,OAAQ,CAAC,EAAG,GACZ2vB,KAAM,CAAC,EAAG,GACV2d,YAAa,GACbv3C,SAAU,IAE8DpR,GAApEqb,EAAMnK,EAANmK,OAAQ2vB,EAAI95B,EAAJ85B,KAAM2d,EAAWz3C,EAAXy3C,YAAav3C,EAAQF,EAARE,SAEjC,IAAKmyC,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,6CAC/C,IAAKohD,EAAcvY,EAAM,GAAI,MAAM,IAAI7oC,MAAM,2CAC7C,IAAK6oC,EAAK5yB,OAAM,SAAC7E,GAAC,OAAKA,GAAK,CAAC,IAAG,MAAM,IAAIpR,MAAM,gCAChD,IAAKmhD,EAAMqF,EAAa,GAAI,MAAM,IAAIxmD,MAAM,gCAC5C,IAAKmhD,EAAMlyC,EAAU,GAAI,MAAM,IAAIjP,MAAM,iCAGzC,GAAgB,IAAZ6oC,EAAK,IAAwB,IAAZA,EAAK,GAAU,OAAOhmC,EAAM2N,SAGjD,GAAoB,IAAhBg2C,EAAmB,OAAOxC,EAAU,CAAE9qC,OAAAA,EAAQ2vB,KAAAA,IAIlD,GAAI2d,GAFJ3d,EAAOA,EAAK3lC,KAAI,SAACrE,GAAC,OAAKA,EAAI,CAAC,KAEJ,GAAKid,GACzB0qC,EAAe3d,EAAK,GAAK/sB,EAAM,MAAM,IAAI9b,MAAM,iEAanD,IAXA,IAAMk/B,EAAiBtxB,KAAKC,MAAMoB,EAAW,GAGvCm2C,EAAU1zC,EAAKyH,IAAIzH,EAAKlB,SAAU0I,EAAQ,CAAC2vB,EAAK,GAAK2d,EAAa3d,EAAK,GAAK2d,IAC5EnB,EAAU3zC,EAAKyH,IAAIzH,EAAKlB,SAAU0I,EAAQ,CAACstC,EAAc3d,EAAK,GAAIA,EAAK,GAAK2d,IAC5ElB,EAAU5zC,EAAKyH,IAAIzH,EAAKlB,SAAU0I,EAAQ,CAACstC,EAAc3d,EAAK,GAAI2d,EAAc3d,EAAK,KACrF0c,EAAU7zC,EAAKyH,IAAIzH,EAAKlB,SAAU0I,EAAQ,CAAC2vB,EAAK,GAAK2d,EAAaA,EAAc3d,EAAK,KACrF2c,EAAgB,GAChBC,EAAgB,GAChBC,EAAgB,GAChBC,EAAgB,GACb1nD,EAAI,EAAGA,GAAKihC,EAAgBjhC,IAAK,CACxC,IAAMoqB,EAAU/Q,EAAM,EAAIrZ,EAAIihC,EACxBtvB,EAAQ8B,EAAKkc,iBAAiBlc,EAAKlB,SAAU6X,GACnD3W,EAAKgH,MAAM9I,EAAOA,EAAO42C,GACzBhB,EAActnD,KAAKwT,EAAKyH,IAAIzH,EAAKlB,SAAU40C,EAASx1C,IACpD8B,EAAKqX,OAAOnZ,EAAOA,EAAO8B,EAAKlB,SAAU8G,EAAM,GAC/CmuC,EAAcvnD,KAAKwT,EAAKyH,IAAIzH,EAAKlB,SAAU60C,EAASz1C,IACpD8B,EAAKqX,OAAOnZ,EAAOA,EAAO8B,EAAKlB,SAAU8G,EAAM,GAC/CouC,EAAcxnD,KAAKwT,EAAKyH,IAAIzH,EAAKlB,SAAU80C,EAAS11C,IACpD8B,EAAKqX,OAAOnZ,EAAOA,EAAO8B,EAAKlB,SAAU8G,EAAM,GAC/CquC,EAAcznD,KAAKwT,EAAKyH,IAAIzH,EAAKlB,SAAU+0C,EAAS31C,GACtD,CAEA,OAAO/M,EAAM6P,WAAW8yC,EAAc1mD,OAAO2mD,EAAeC,EAAeC,GAC7E,wBCzEA,IAAM7B,EAAYpmD,EAAQ,OAElByjD,EAAUzjD,EAAQ,MAAlByjD,MAgCR7hD,EAAOC,QAhBQ,SAAC1B,GACd,IAMAkR,EAAyChN,OAAOC,OAAO,CAAC,EANvC,CACfkX,OAAQ,CAAC,EAAG,EAAG,GACf3B,OAAQ,EACRtI,SAAU,GACVyuB,KAAM,CAAC,CAAC,EAAG,EAAG,GAAI,CAAC,GAAI,EAAG,GAAI,CAAC,EAAG,EAAG,KAE8B7/B,GAA/Dqb,EAAMnK,EAANmK,OAAQ3B,EAAMxI,EAANwI,OAAQtI,EAAQF,EAARE,SAAUyuB,EAAI3uB,EAAJ2uB,KAEhC,IAAKyjB,EAAM5pC,EAAQ,GAAI,MAAM,IAAIvX,MAAM,2BAIvC,OAAO8jD,EAAU,CAAE5qC,OAAAA,EAAQ3B,OAF3BA,EAAS,CAACA,EAAQA,EAAQA,GAEStI,SAAAA,EAAUyuB,KAAAA,GAC/C,yBChCA,IAAMsmB,EAAYtmD,EAAQ,OAElByjD,EAAUzjD,EAAQ,MAAlByjD,MA4BR7hD,EAAOC,QAdQ,SAAC1B,GACd,IAIAkR,EAAuBhN,OAAOC,OAAO,CAAC,EAJrB,CACfkX,OAAQ,CAAC,EAAG,GACZ2vB,KAAM,GAE2ChrC,GAA7Cqb,EAAMnK,EAANmK,OAAQ2vB,EAAI95B,EAAJ85B,KAEd,IAAKsY,EAAMtY,EAAM,GAAI,MAAM,IAAI7oC,MAAM,yBAIrC,OAAOgkD,EAAU,CAAE9qC,OAAAA,EAAQ2vB,KAF3BA,EAAO,CAACA,EAAMA,IAGhB,yBC5BA,IAAQvxB,EAAQ5Z,EAAQ,OAAhB4Z,IACF5F,EAAOhU,EAAQ,OAEfmF,EAAQnF,EAAQ,OAEtB4D,EAAuC5D,EAAQ,MAAvCwjD,EAAI5/C,EAAJ4/C,KAAMC,EAAK7/C,EAAL6/C,MAAOC,EAAa9/C,EAAb8/C,cAUf0F,EAAY,SAAC7nD,EAAUsY,EAAQhD,EAAY2E,GAI/C,IAHA,IAAMrI,EAAIyG,EAAMrY,EAEVyQ,EAAS,GACNzR,EAAI,EAAGA,EAAIgB,EAAUhB,IAAK,CACjC,IAAM2R,EAAQ8B,EAAKkc,iBAAiBlc,EAAKlB,SAAUK,EAAI5S,EAAIsW,GAC3D7C,EAAKgH,MAAM9I,EAAOA,EAAO2H,GACzB7F,EAAKyH,IAAIvJ,EAAOsJ,EAAQtJ,GACxBF,EAAOxR,KAAK0R,EACd,CACA,OAAOF,CACT,EA6DApQ,EAAOC,QA1CM,SAAC1B,GACZ,IAQAkR,EAA0EhN,OAAOC,OAAO,CAAC,EARxE,CACfkX,OAAQ,CAAC,EAAG,GACZja,SAAU,EACV8nD,YAAa,EACbC,YAAa,EACbC,QAAS,EACT1yC,WAAY,GAEwF1W,GAAhGqb,EAAMnK,EAANmK,OAAQja,EAAQ8P,EAAR9P,SAAU8nD,EAAWh4C,EAAXg4C,YAAaC,EAAWj4C,EAAXi4C,YAAaC,EAAOl4C,EAAPk4C,QAAS1yC,EAAUxF,EAAVwF,WAE3D,IAAK6sC,EAAcloC,EAAQ,GAAI,MAAM,IAAIlZ,MAAM,6CAC/C,IAAKmhD,EAAMliD,EAAU,GAAI,MAAM,IAAIe,MAAM,gCACzC,IAAKkhD,EAAK6F,EAAa,GAAI,MAAM,IAAI/mD,MAAM,yCAC3C,IAAKmhD,EAAM6F,EAAa,GAAI,MAAM,IAAIhnD,MAAM,yCAC5C,IAAKmhD,EAAM5sC,EAAY,GAAI,MAAM,IAAIvU,MAAM,wCAQ3C,GALAf,EAAW2O,KAAKC,MAAM5O,GACtBgoD,EAAUr5C,KAAKC,MAAMo5C,GAErB1yC,GAA0B+C,EAEN,IAAhB0vC,EAAmB,CACrB,IAAK7F,EAAM8F,EAAS,GAAI,MAAM,IAAIjnD,MAAM,+BACxCgnD,EAAcD,EA9DK,SAAC9nD,EAAUgoD,GAChC,OAAIhoD,EAAW,GAAKgoD,EAAU,GAAKA,EAAUhoD,EAAW,EAC/C2O,KAAK0K,IAAI1K,KAAK0V,GAAK2jC,EAAUhoD,GAAY2O,KAAK0K,IAAI1K,KAAK0V,IAAM2jC,EAAU,GAAKhoD,GAE9E,CACT,CAyDgCioD,CAAejoD,EAAUgoD,EACvD,CAQA,IANA,IAAM1F,EAAU7vC,EAAKtO,MAAM8V,GAErBiuC,EAAcL,EAAU7nD,EAAU8nD,EAAaxyC,EAAYgtC,GAC3D6F,EAAcN,EAAU7nD,EAAU+nD,EAAazyC,EAAa3G,KAAK0V,GAAKrkB,EAAUsiD,GAEhFrmB,EAAY,GACTj9B,EAAI,EAAGA,EAAIgB,EAAUhB,IAC5Bi9B,EAAUh9B,KAAKipD,EAAYlpD,IAC3Bi9B,EAAUh9B,KAAKkpD,EAAYnpD,IAG7B,OAAO4E,EAAM6P,WAAWwoB,EAC1B,yBCrFA,IAAQ5jB,EAAQ5Z,EAAQ,OAAhB4Z,IAEFszB,EAAgBltC,EAAQ,OACtBqrB,EAAWrrB,EAAQ,OAAnBqrB,OACAI,EAAczrB,EAAQ,OAAtByrB,UAEFy6B,EAASlmD,EAAQ,OAEvB2pD,EAAwB3pD,EAAQ,MAAxBwjD,EAAImG,EAAJnG,KAAMC,EAAKkG,EAALlG,MAuDd7hD,EAAOC,QArCO,SAAC1B,GACb,IAAM0hC,EAAW,CACfynB,YAAa,EACbM,cAAe,GACfP,YAAa,EACbQ,cAAe,GACfC,cAAe,EACfjzC,WAAY,EACZkzC,cAAenwC,GAEjBvI,EAA6GhN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAAjImpD,EAAWj4C,EAAXi4C,YAAaM,EAAav4C,EAAbu4C,cAAeP,EAAWh4C,EAAXg4C,YAAaQ,EAAax4C,EAAbw4C,cAAeC,EAAaz4C,EAAby4C,cAAejzC,EAAUxF,EAAVwF,WAAYkzC,EAAa14C,EAAb04C,cAE3F,IAAKvG,EAAK8F,EAAa,GAAI,MAAM,IAAIhnD,MAAM,yCAC3C,IAAKmhD,EAAMmG,EAAe,GAAI,MAAM,IAAItnD,MAAM,uCAC9C,IAAKkhD,EAAK6F,EAAa,GAAI,MAAM,IAAI/mD,MAAM,yCAC3C,IAAKmhD,EAAMoG,EAAe,GAAI,MAAM,IAAIvnD,MAAM,uCAC9C,IAAKmhD,EAAM5sC,EAAY,GAAI,MAAM,IAAIvU,MAAM,+BAC3C,IAAKkhD,EAAKuG,EAAe,GAAI,MAAM,IAAIznD,MAAM,2CAE7C,GAAIgnD,GAAeD,EAAa,MAAM,IAAI/mD,MAAM,8DAEhD,IAAI0nD,EAAc9D,EAAO,CAAErsC,OAAQyvC,EAAa/3C,SAAUq4C,IAa1D,OAXsB,IAAlBE,IACFE,EAAc3+B,EAAO,CAAC,EAAG,EAAGy+B,GAAgBE,IAG9CA,EAAcv+B,EAAU,CAAC49B,EAAa,GAAIW,GAOnC9c,EALgB,CACrBr2B,WAAYA,EACZI,MAAO8yC,EACPx4C,SAAUs4C,GAEyBG,EACvC,yBC7DA,IAAQvnC,EAASziB,EAAQ,OAAjByiB,KACFzO,EAAOhU,EAAQ,OAEfmF,EAAQnF,EAAQ,OAEd0jD,EAAkB1jD,EAAQ,MAA1B0jD,cAGFuG,EAAoB,SAAC92C,EAAGxD,EAAG4C,GAAC,OAAKrC,KAAK+gB,MAAO9d,EAAIA,EAAMxD,EAAIA,EAAM4C,EAAIA,IAAO,EAAIY,EAAIxD,GAAG,EA2DvFu6C,EAAW,SAACr6C,GAChB,IAAM0C,EAAI1C,EAAO,GACXs6C,EAAIt6C,EAAO,GACXsD,EAAItD,EAAO,GAEXF,EA7DiB,SAACwD,EAAGi3C,EAAGz6C,GAC9B,OAAIy6C,EAAI3nC,EACCvS,KAAKoD,KAAKH,EAAIA,EAAIxD,EAAIA,EAAI,EAAIwD,EAAIxD,EAAIO,KAAK0K,IAAIwvC,IAIjDl6C,KAAKoD,MAAMH,EAAIxD,IAAMwD,EAAIxD,GAAKwD,EAAIxD,EAAIy6C,EAAIA,GAAK,EAAIA,EAAIA,EAAI,IACpE,CAsDYC,CAAiB93C,EAAG43C,EAAGh3C,GAE3Bm3C,EAAIL,EAAkBt6C,EAAG4C,EAAGY,GAC5Bi3C,EAAIl6C,KAAK0V,GAAK0kC,EAAIH,EACxB,OAAO7V,EAAegW,EAAGH,EAAGC,EAAGj3C,EAAGxD,EAAG4C,EACvC,EA8BM+hC,EAAiB,SAACgW,EAAGH,EAAGC,EAAGj3C,EAAGxD,EAAG4C,GACrC,IAAM+L,EAAKtK,EAAKY,WAAW,EAAG,GACxB2a,EAAKvb,EAAKY,WAAWrC,EAAG,GACxBid,EAAKxb,EAAKY,WAAWzB,EAAG,GAE9B,OADAa,EAAKyH,IAAI+T,EAAIxb,EAAKqX,OAAOmE,EAAIA,EAAI,CAAC,EAAG,GAAItf,KAAK0V,GAAKukC,GAAI56B,GAChDpqB,EAAM6P,WAAW,CAACsJ,EAAIiR,EAAIC,GACnC,EAiDA5tB,EAAOC,QAlCU,SAAC1B,GAChB,IAIAkR,EAAuBhN,OAAOC,OAAO,CAAC,EAJrB,CACf21B,KAAM,MACNpqB,OAAQ,CAAC,EAAG,EAAG,IAEkC1P,GAA7C85B,EAAI5oB,EAAJ4oB,KAAMpqB,EAAMwB,EAANxB,OAEZ,GAAsB,kBAAVoqB,EAAoB,MAAM,IAAI33B,MAAM,kCAEhD,GAAmB,OADnB23B,EAAOA,EAAKswB,eACA,IAA0B,MAAZtwB,EAAK,IACZ,MAAZA,EAAK,IAA0B,MAAZA,EAAK,IACZ,MAAZA,EAAK,IAA0B,MAAZA,EAAK,GAAc,MAAM,IAAI33B,MAAM,oDAE7D,IAAKohD,EAAc7zC,EAAQ,GAAI,MAAM,IAAIvN,MAAM,6CAC/C,IAAKuN,EAAO0I,OAAM,SAAC7E,GAAC,OAAKA,EAAI,CAAC,IAAG,MAAM,IAAIpR,MAAM,6CAEjD,OAAQ23B,GACN,IAAK,MACH,OA7HW,SAAC6E,GAEhB,GADY5uB,KAAKkD,IAAI0rB,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAK5uB,KAAK0V,IACpDnD,EAAM,MAAM,IAAIngB,MAAM,+CAEhC,IAAMgoD,EAAIxrB,EAAO,GACXqrB,EAAIrrB,EAAO,GACXsrB,EAAIl6C,KAAK0V,GAAK0kC,EAAIH,EAMlBh3C,EADI,EACKjD,KAAK4K,IAAIsvC,GAAMl6C,KAAK4K,IAAIwvC,GACjC36C,EAFI,EAEKO,KAAK4K,IAAIsvC,GAAMl6C,KAAK4K,IAAIqvC,GACvC,OAAO7V,EAAegW,EAAGH,EAAGC,EAAGj3C,EAAGxD,EAHxB,EAIZ,CA8Ga66C,CAAS36C,GAClB,IAAK,MACH,OA7GW,SAACA,GAChB,IAAMy6C,EAAIz6C,EAAO,GACXs6C,EAAIt6C,EAAO,GACXu6C,EAAIl6C,KAAK0V,GAAKnD,EAAO6nC,EAAIH,EAE/B,GAAIC,EAAI3nC,EAAM,MAAM,IAAIngB,MAAM,+CAE9B,IAAM6Q,EAAItD,EAAO,GACXF,EAAKwD,EAAIjD,KAAK4K,IAAIwvC,GAAMp6C,KAAK4K,IAAIqvC,GACjC53C,EAAKY,EAAIjD,KAAK4K,IAAIwvC,GAAMp6C,KAAK4K,IAAIsvC,GACvC,OAAO9V,EAAegW,EAAGH,EAAGC,EAAGj3C,EAAGxD,EAAG4C,EACvC,CAkGak4C,CAAS56C,GAClB,IAAK,MACH,OAjGW,SAACA,GAChB,IAAMy6C,EAAIz6C,EAAO,GACXs6C,EAAIt6C,EAAO,GACXu6C,EAAIl6C,KAAK0V,GAAKnD,EAAO6nC,EAAIH,EAE/B,GAAIC,EAAI3nC,EAAM,MAAM,IAAIngB,MAAM,+CAE9B,IAAMiQ,EAAI1C,EAAO,GACXsD,EAAKZ,EAAIrC,KAAK4K,IAAIsvC,GAAMl6C,KAAK4K,IAAIwvC,GACjC36C,EAAK4C,EAAIrC,KAAK4K,IAAIsvC,GAAMl6C,KAAK4K,IAAIqvC,GACvC,OAAO7V,EAAegW,EAAGH,EAAGC,EAAGj3C,EAAGxD,EAAG4C,EACvC,CAsFam4C,CAAS76C,GAClB,IAAK,MACH,OAAOq6C,EAASr6C,GAClB,IAAK,MACH,OA1EW,SAACA,GAChB,IAAM0C,EAAI1C,EAAO,GACXsD,EAAItD,EAAO,GACXu6C,EAAIv6C,EAAO,GAEXy6C,EAAIp6C,KAAKy6C,KAAKx3C,EAAIjD,KAAK4K,IAAIsvC,GAAK73C,GAChC43C,EAAIj6C,KAAK0V,GAAK0kC,EAAIF,EAElBz6C,EAAK4C,EAAIrC,KAAK4K,IAAIsvC,GAAMl6C,KAAK4K,IAAIqvC,GACvC,OAAO7V,EAAegW,EAAGH,EAAGC,EAAGj3C,EAAGxD,EAAG4C,EACvC,CAgEaq4C,CAAS/6C,GAClB,IAAK,MACH,OA/DW,SAACsB,GAChB,IAAMgC,EAAIhC,EAAQ,GACZxB,EAAIwB,EAAQ,GACZoB,EAAIpB,EAAQ,GAClB,GAAMgC,EAAIxD,GAAM4C,GAAQ5C,EAAI4C,GAAMY,GAAQZ,EAAIY,GAAMxD,EAClD,MAAM,IAAIrN,MAAM,4FAGlB,IAAMgoD,EAAIL,EAAkBt6C,EAAG4C,EAAGY,GAC5Bg3C,EAAIF,EAAkB13C,EAAGY,EAAGxD,GAC5By6C,EAAIl6C,KAAK0V,GAAK0kC,EAAIH,EACxB,OAAO7V,EAAegW,EAAGH,EAAGC,EAAGj3C,EAAGxD,EAAG4C,EACvC,CAmDas4C,CAASh7C,GAClB,QACE,MAAM,IAAIvN,MAAM,oCAEtB,qBC7JAV,EAAOC,QAAU,CACfooC,OAAQ,GACR,GAAI,CAAC,IACL,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAG11B,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC5D,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,QAAIA,EAAW,GAAI,GAAI,GAAI,IAC9C,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,IAAK,OAAGA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,EAAG,GAAI,GAClG,GAAI,CAAC,GAAI,EAAG,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,IAAK,OAAGA,EAAW,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACvM,GAAI,CAAC,GAAI,GAAI,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,QAAIA,EAAW,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAC9O,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAC1P,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IACtD,GAAI,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,IAAK,GAC5E,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAC5E,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,GAAI,GAAI,EAAG,IACtE,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,OAAGA,EAAW,EAAG,EAAG,GAAI,GAC7C,GAAI,CAAC,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACzD,GAAI,CAAC,GAAI,EAAG,EAAG,GAAI,GACnB,GAAI,CAAC,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACpC,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GACrB,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IAC5H,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GACnC,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAC9G,GAAI,CAAC,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChH,GAAI,CAAC,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GACrD,GAAI,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC7H,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAC3K,GAAI,CAAC,GAAI,GAAI,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,IAC7C,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IAClN,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACxK,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,QAAIA,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClF,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,QAAIA,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACvG,GAAI,CAAC,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAC3B,GAAI,CAAC,GAAI,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,EAAG,GAAI,GAC7C,GAAI,CAAC,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAC1B,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GACxJ,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAC5Z,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,OAAGA,EAAW,EAAG,EAAG,GAAI,GACpE,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,QAAIA,EAAW,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GACvL,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACnI,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GACtH,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,EAAG,GAAI,GAC/F,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,GAAI,GAAI,IACtE,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,OAAGA,EAAW,GAAI,EAAG,GAAI,GACnK,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,GAAI,OAAGA,EAAW,EAAG,GAAI,GAAI,IACtE,GAAI,CAAC,EAAG,EAAG,GAAI,EAAG,GAClB,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACvE,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,GACrE,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,EAAG,GAAI,GAC3C,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GAChG,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GACtE,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IACxJ,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IAC3G,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,QAAIA,EAAW,GAAI,EAAG,IAAK,GACnL,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,QAAIA,EAAW,GAAI,GAAI,GAAI,GACtI,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACnJ,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,IAC5C,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,IACzE,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,EAAG,GAC5C,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GAChG,GAAI,CAAC,GAAI,EAAG,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,EAAG,GAC7C,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,EAAG,IACnD,GAAI,CAAC,GAAI,GAAI,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,EAAG,GAAI,GACtE,GAAI,CAAC,GAAI,EAAG,GAAI,GAAI,OAAGA,EAAW,EAAG,GAAI,GAAI,OAAGA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,GAAI,EAAG,IAAK,GACjG,GAAI,CAAC,GAAI,EAAG,GAAI,IAAK,GACrB,GAAI,CAAC,GAAI,EAAG,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,IAAK,OAAGA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,GAAI,EAAG,IAAK,GACnG,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,GAAI,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,GAAI,EAAG,GACrF,GAAI,CAAC,GAAI,GAAI,EAAG,IAAK,GACrB,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IACtD,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAChI,GAAI,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChI,GAAI,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACtG,IAAK,CAAC,GAAI,GAAI,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACjI,IAAK,CAAC,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAC5H,IAAK,CAAC,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,EAAG,IAClE,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,GAAI,EAAG,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACxK,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACnF,IAAK,CAAC,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,QAAIA,EAAW,EAAG,GAAI,EAAG,GACjE,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,QAAIA,EAAW,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACxF,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,EAAG,OAAGA,EAAW,EAAG,EAAG,GAAI,GACrE,IAAK,CAAC,EAAG,EAAG,GAAI,EAAG,GACnB,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACrJ,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GACnF,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,IAC3H,IAAK,CAAC,GAAI,EAAG,GAAI,GAAI,OAAGA,EAAW,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAClI,IAAK,CAAC,GAAI,GAAI,GAAI,IAAK,OAAGA,EAAW,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAClI,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,IACjE,IAAK,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC5H,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,OAAGA,EAAW,EAAG,GAAI,EAAG,IAC/D,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GAC/E,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,EAAG,GAC7C,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,GAAI,GACjG,IAAK,CAAC,GAAI,EAAG,GAAI,GAAI,OAAGA,EAAW,GAAI,GAAI,EAAG,GAC9C,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,OAAGA,EAAW,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACzE,IAAK,CAAC,GAAI,GAAI,GAAI,EAAG,OAAGA,EAAW,EAAG,GAAI,GAAI,QAAIA,EAAW,EAAG,EAAG,GAAI,GACvE,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,QAAIA,EAAW,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,OAAGA,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACrR,IAAK,CAAC,EAAG,EAAG,GAAI,GAAI,GACpB,IAAK,CAAC,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,QAAIA,EAAW,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,OAAGA,EAAW,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GACtR,IAAK,CAAC,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,QAAIA,EAAW,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,4BC3F/K3S,EAAOC,QAAU,CACfipD,WAAY9qD,EAAQ,OACpB+qD,WAAY/qD,EAAQ,+BCVtB,IAAMgrD,EAAehrD,EAAQ,OA8D7B4B,EAAOC,QA/BY,SAAC1B,EAAS8qD,GAC3B,IAAAC,EAEIF,EAAa7qD,EAAS8qD,GADxB1gB,EAAO2gB,EAAP3gB,QAAS4gB,EAAOD,EAAPC,QAASC,EAAKF,EAALE,MAAOC,EAAIH,EAAJG,KAAMphB,EAAMihB,EAANjhB,OAAQqhB,EAAaJ,EAAbI,cAErCC,EAAOH,EAAMI,WAAW,GACvBD,GAASF,EAAKE,KACjBA,EAAO,IAQT,IANA,IAAME,EAAQ,GAAGrqD,OAAOiqD,EAAKE,IACvBG,GAASzhB,EAASqhB,GAAiBD,EAAKphB,OACxC0hB,EAAkBL,EAAgB,EAClCM,EAAQH,EAAM9zC,QAAU+zC,EACxBn6C,EAAW,GACbs6C,EAAW,GACNtrD,EAAI,EAAGurD,EAAKL,EAAM7qD,OAAQL,EAAIurD,EAAIvrD,GAAK,EAAG,CACjD,IAAMwrD,EAAKL,EAAQD,EAAMlrD,GAAKgqC,EACxByhB,EAAKN,EAAQD,EAAMlrD,EAAI,GAAK4qD,EAAUQ,OAC3Bp3C,IAAbk3C,EAAMlrD,IAIVgR,EAAS/Q,KAAKqrD,GACdA,EAAW,GACXtrD,KALEsrD,EAASrrD,KAAK,CAACurD,EAAIC,GAMvB,CAIA,OAHIH,EAASjrD,QACX2Q,EAAS/Q,KAAKqrD,GAET,CAAED,MAAAA,EAAO3hB,OAAAA,EAAQ14B,SAAAA,EAC1B,yBC5DA,IAEM06C,EAAuB,CAC3B1hB,QAAS,EACT4gB,QAAS,EACTC,MAAO,IACPzI,MAAO,OACP0I,KAPkBrrD,EAAQ,OAQ1BiqC,OAAQ,GACRiiB,YAAa,kBACbC,cAAe,EACfb,cAAe,GAcjB1pD,EAAOC,QAVc,SAAC1B,EAASirD,GACxBA,GAA4B,kBAAZjrD,IACnBA,EAAU,CAAEirD,MAAOjrD,IAErBA,EAAUA,GAAW,CAAC,EACtB,IAAMisD,EAAS/nD,OAAOC,OAAO,CAAC,EAAG2nD,EAAsB9rD,GAEvD,OADAisD,EAAOhB,MAAQA,GAASgB,EAAOhB,MACxBgB,CACT,yBCvBA,IAAMtB,EAAa9qD,EAAQ,OACrBgrD,EAAehrD,EAAQ,OAGvBqsD,EAAgB,SAAClsD,EAAS8lB,GAK9B,IAJA,IAAA5U,EAAiBhN,OAAOC,OAAO,CAAE2W,EAAG,EAAGC,EAAG,GAAK/a,GAAW,CAAC,GAAnD8a,EAAC5J,EAAD4J,EAAGC,EAAC7J,EAAD6J,EACL3J,EAAW0U,EAAK1U,SAClB+6C,EAAU,KACVp6C,EAAQ,KACH3R,EAAI,EAAGurD,EAAKv6C,EAAS3Q,OAAQL,EAAIurD,EAAIvrD,IAE5C,IAAK,IAAIsT,EAAI,EAAG04C,GADhBD,EAAU/6C,EAAShR,IACUK,OAAQiT,EAAI04C,EAAI14C,IAC3C3B,EAAQo6C,EAAQz4C,GAChBy4C,EAAQz4C,GAAK,CAAC3B,EAAM,GAAK+I,EAAG/I,EAAM,GAAKgJ,GAG3C,OAAO+K,CACT,EA6EArkB,EAAOC,QAlDY,SAAC1B,EAAS6iB,GAC3B,IAIIziB,EAAGurD,EAAIb,EAAMuB,EAAMZ,EAAOh6C,EAJ9Bs5C,EAEIF,EAAa7qD,EAAS6iB,GADxBunB,EAAO2gB,EAAP3gB,QAAS4gB,EAAOD,EAAPC,QAASC,EAAKF,EAALE,MAAOC,EAAIH,EAAJG,KAAMphB,EAAMihB,EAANjhB,OAAQ0Y,EAAKuI,EAALvI,MAAO2I,EAAaJ,EAAbI,cAAeY,EAAWhB,EAAXgB,YAAaC,EAAajB,EAAbiB,cAEvElxC,EAASsvB,EAANrvB,EAAeiwC,EAEnBllC,EAAO,CAAE2lC,MAAO,EAAGr6C,SAAU,IAC3Bk7C,EAAQ,GACVC,EAAS,GACTC,EAAW,EACTC,EAAY3xC,EACZ4xC,EAAW,WACfJ,EAAMjsD,KAAKylB,GACX0mC,EAAWz8C,KAAKc,IAAI27C,EAAU1mC,EAAK2lC,OACnC3lC,EAAO,CAAE2lC,MAAO,EAAGr6C,SAAU,GAC/B,EACA,IAAKhR,EAAI,EAAGurD,EAAKV,EAAMxqD,OAAQL,EAAIurD,EAAIvrD,IACrC0qD,EAAOG,EAAM7qD,GACbisD,EAAO1B,EAAW,CAAEvgB,QAAStvB,EAAGkwC,QAASjwC,EAAGmwC,KAAAA,EAAMphB,OAAAA,EAAQqhB,cAAAA,GAAiBL,GAC9D,OAATA,GAMJW,EAAQY,EAAKZ,MAAQO,EACrBlmC,EAAK2lC,OAASA,EACd3wC,GAAK2wC,EACQ,MAATX,IACFhlC,EAAK1U,SAAW0U,EAAK1U,SAASnQ,OAAOorD,EAAKj7C,aAT1C0J,EAAI2xC,EACJ1xC,GAAKsxC,EAAKviB,OAASiiB,EACnBW,KAaJ,IAHI5mC,EAAK1U,SAAS3Q,QAChBisD,IAEGtsD,EAAI,EAAGurD,EAAKW,EAAM7rD,OAAQL,EAAIurD,EAAIvrD,IACrC0lB,EAAOwmC,EAAMlsD,GACTosD,EAAW1mC,EAAK2lC,QAClBh6C,EAAO+6C,EAAW1mC,EAAK2lC,MACT,UAAVjJ,EACF18B,EAAOomC,EAAc,CAAEpxC,EAAGrJ,GAAQqU,GACf,WAAV08B,IACT18B,EAAOomC,EAAc,CAAEpxC,EAAGrJ,EAAO,GAAKqU,KAG1CymC,EAASA,EAAOtrD,OAAO6kB,EAAK1U,UAE9B,OAAOm7C,CACT,+CC3FMvnD,EAAQnF,EAAQ,OAChBc,EAAQd,EAAQ,OAChBoF,EAAQpF,EAAQ,OAqBtB4B,EAAOC,QAdyB,SAACirD,GAC/B,IAAIC,EACsB31C,EADVC,EAAAC,EACIw1C,GAAM,IAA1B,IAAAz1C,EAAApS,MAAAmS,EAAAC,EAAA3D,KAAA6D,MAA4B,KAAjBy1C,EAAK51C,EAAAM,MACVu1C,EAAc,EAKlB,GAJI9nD,EAAMT,IAAIsoD,KAAQC,EAAc,GAChCnsD,EAAM4D,IAAIsoD,KAAQC,EAAc,GAChC7nD,EAAMV,IAAIsoD,KAAQC,EAAc,GAEhCF,GAAgBE,IAAgBF,EAAc,OAAO,EACzDA,EAAeE,CACjB,CAAC,OAAAp1C,GAAAR,EAAAS,EAAAD,EAAA,SAAAR,EAAAjH,GAAA,CACD,OAAO,CACT,qBCdAxO,EAAOC,QAFU,SAACsuB,GAAO,MAAe,oBAAVA,CAA8B,qBCG5DvuB,EAAOC,QAFS,SAAVgC,EAAWqpD,GAAG,OAAKA,EAAIj0C,QAAO,SAAC+G,EAAK3N,GAAG,OAAKlO,MAAMmB,QAAQ+M,GAAO2N,EAAI5e,OAAOyC,EAAQwO,IAAQ2N,EAAI5e,OAAOiR,EAAI,GAAE,GAAG,qBCFtHzQ,EAAOC,QAFc,SAACsR,EAAGxD,GAAC,OAAKwD,EAAIxD,CAAC,yBCGpC/N,EAAOC,QAAU,CACfyyB,wBAAyBt0B,EAAQ,MACjCmtD,SAAUntD,EAAQ,OAClB6D,QAAS7D,EAAQ,OACjB09B,aAAc19B,EAAQ,OACtB+7C,aAAc/7C,EAAQ,OACtBotD,iBAAkBptD,EAAQ,OAC1BqtD,SAAUrtD,EAAQ,2BCOpB4B,EAAOC,QAhBc,SAACw0B,EAAOwlB,EAASyR,GAGpC,IAFA,IAAIC,EAAY,EACZC,EAAan3B,EAAMz1B,OAChB4sD,EAAaD,GAAW,CAC7B,IAAME,EAAYv9C,KAAKC,OAAOo9C,EAAYC,GAAc,GAElCF,EAAYzR,EADdxlB,EAAMo3B,IAEN,EAClBF,EAAYE,EAAY,EAExBD,EAAaC,CAEjB,CACAp3B,EAAMnf,OAAOq2C,EAAW,EAAG1R,EAC7B,qBCFAj6C,EAAOC,QARkB,SAAC6rD,EAASC,EAASC,GAE1C,IADAF,EAAUA,EAAQh5C,QACXg5C,EAAQ9sD,OAASgtD,GACtBF,EAAQltD,KAAKmtD,GAEf,OAAOD,CACT,qBCNA9rD,EAAOC,QAFU,SAAC8oB,GAAO,OAAe,kBAAVA,CAA2B,yBCNzD,IAAQ/Q,EAAQ5Z,EAAQ,OAAhB4Z,IAiBRhY,EAAOC,QAPkB,SAACgY,EAAQg0C,EAAeC,GAC/C,IAAMC,EAAKF,EAAgB,EAAIh0C,EAASD,EAAMi0C,EAAgB,EACxDG,EAAKF,EAAe,EAAIl0C,EAAMk0C,EAAe,EAEnD,OAAO59C,KAAK8L,KAAK9L,KAAKc,IAAI+8C,EAAIC,EAAI,GACpC,qBCsBApsD,EAAOC,QApCa,SAACosD,GACnB,GAAyB,IAArBA,EAAUrtD,OACZ,MAAO,CAAC,CAAC,EAAG,EAAG,GAAI,CAAC,EAAG,EAAG,IAS5B,IANA,IAAMstD,EAAU/pD,MAAMmB,QAAQ2oD,IAAc9pD,MAAMmB,QAAQ2oD,EAAU,IAE9Dr7C,EAAas7C,EAASD,EAAU,GAAGrtD,OAAS,EAC5CqQ,EAAM,IAAI9M,MAAMyO,GAChB5B,EAAM,IAAI7M,MAAMyO,GAEbrS,EAAI,EAAGA,EAAIqS,EAAYrS,GAAK,EACnC0Q,EAAI1Q,GAAKijC,IACTxyB,EAAIzQ,IAAMijC,IAGZ,GAAI0qB,EACFD,EAAU5tD,SAAQ,SAAC8tD,GACjB,IAAK,IAAI5tD,EAAI,EAAGA,EAAIqS,EAAYrS,GAAK,EAAG,CACtC,IAAM6tD,EAAYF,EAASC,EAAS5tD,GAAK4tD,EACzCn9C,EAAIzQ,GAAK6tD,EAAYp9C,EAAIzQ,GAAK6tD,EAAYp9C,EAAIzQ,GAC9C0Q,EAAI1Q,GAAK6tD,EAAYn9C,EAAI1Q,GAAK6tD,EAAYn9C,EAAI1Q,EAChD,CACF,SAEA,IAAK,IAAIsT,EAAI,EAAGA,EAAIo6C,EAAUrtD,OAAQiT,GAAKjB,EACzC,IAAK,IAAIrS,EAAI,EAAGA,EAAIqS,EAAYrS,GAAK,EAAG,CACtC,IAAM6tD,EAAYH,EAAU1tD,EAAIsT,GAChC7C,EAAIzQ,GAAK6tD,EAAYp9C,EAAIzQ,GAAK6tD,EAAYp9C,EAAIzQ,GAC9C0Q,EAAI1Q,GAAK6tD,EAAYn9C,EAAI1Q,GAAK6tD,EAAYn9C,EAAI1Q,EAChD,CAIJ,MAAO,CAAC0Q,EAAKD,EACf,8CCpCMyH,EAAOzY,EAAQ,OAEb6D,EAAY7D,EAAQ,OAApB6D,QAEF6uB,EAAc1yB,EAAQ,OAiD5B4B,EAAOC,QAlCe,WAAmB,QAAAoC,EAAAC,UAAAtD,OAAfb,EAAU,IAAAoE,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAVrE,EAAUqE,GAAAF,UAAAE,GAGlC,IAAIiqD,GAFJtuD,EAAa8D,EAAQ9D,IAGVM,SAAQ,SAAC4T,GAClB,IAAIq6C,EAAQ57B,EAAYze,EAASg6C,WACjCK,EAAQA,EAAM9oD,KAAI,SAAC6rB,GAAM,OAAK5Y,EAAK81C,cAAcl9B,EAAQA,EAAQpd,EAASE,WAAW,IACjFk6C,GACF51C,EAAKxH,IAAIo9C,EAAK,GAAIA,EAAK,GAAIC,EAAM,IACjC71C,EAAKzH,IAAIq9C,EAAK,GAAIA,EAAK,GAAIC,EAAM,KAEjCD,EAAOC,CAEX,IAEA,IAAMr9C,EAAMwH,EAAKxH,IAAIwH,EAAK3F,SAAUu7C,EAAK,GAAIA,EAAK,IAC5Cr9C,EAAMyH,EAAKzH,IAAIyH,EAAK3F,SAAUu7C,EAAK,GAAIA,EAAK,IAE5CljB,EAAO1yB,EAAK1B,SAAS0B,EAAK3F,SAAU9B,EAAKC,GAC3CuK,EAAS/C,EAAKuC,MAAMvC,EAAK3F,SAAUq4B,EAAM,IAY7C,OAXA3vB,EAAS/C,EAAKgD,IAAID,EAAQvK,EAAKuK,GAIhB,CACbgzC,IAHU/1C,EAAKnH,SAASkK,EAAQxK,GAIhCwK,OAAMsF,EAAMtF,GACZvK,IAAG6P,EAAM7P,GACTD,IAAG8P,EAAM9P,GACTm6B,KAAIrqB,EAAMqqB,GAGd,yBCnDA,IAAM1yB,EAAOzY,EAAQ,OACf+T,EAAO/T,EAAQ,MA2DrB4B,EAAOC,QAAU,CACf4sD,kBA/BwB,SAAHp1C,GAAmB,IAAbq1C,EAAMr1C,EAANq1C,OACrBC,EAAiBl2C,EAAKnH,SAASo9C,EAAOP,SAAUO,EAAOnkC,QAEvD4jC,EAAW,CADAQ,OAIjB,MAAO,CAAEC,KAFI76C,EAAK86C,OAAO96C,EAAKjB,SAAUq7C,EAAUO,EAAOnkC,OAAQmkC,EAAOI,IAEzDX,SAAAA,EACjB,EAyBEY,aApBmB,SAACC,EAAQC,GAAiB,IAAbP,EAAMO,EAANP,OAW1BC,EAAiBl2C,EAAKnH,SAASo9C,EAAOP,SAAUO,EAAOnkC,QACvD4jC,EAAW11C,EAAKgD,IAAIhD,EAAK3F,SAXf,CACdo8C,IAAK,CAAC,GAAI,KAAU,GACpBC,OAAQ,CAAC,EAAG,GAAI,GAChB53B,MAAO,CAAC,EAAG,EAAG,GACdC,KAAM,CAAC,GAAI,EAAG,GACd43B,KAAM,EAAE,EAAG,EAAG,GACdC,MAAO,CAAC,EAAG,EAAG,GACd96C,UAAW,CAAC,EAAG,EAAG,IAI6By6C,GAAUxpD,KAAI,SAACyV,GAAC,OAAKA,EAAI0zC,CAAc,IAAGD,EAAOnkC,QAGlG,MAAO,CAAEqkC,KAFI76C,EAAK86C,OAAO96C,EAAKjB,SAAUq7C,EAAUO,EAAOnkC,OAAQmkC,EAAOI,IAEzDX,SAAAA,EACjB,EAKEmB,8BA5DoC,SAACC,GACrC,IAAQC,EAAyBD,EAAzBC,KAAMC,EAAmBF,EAAnBE,IAAKC,EAAcH,EAAdG,IAEXC,GAFyBJ,EAATK,KAEHL,EAAbI,UACFE,EAAa7vD,EAAAA,OAAAA,cAA6CuvD,EAAoB,CAAE3D,MAAO+D,EAAS,GAAI1lB,OAAQ0lB,EAAS,KACnHG,EAAmB9vD,EAAAA,OAAAA,YAAAA,eAC3B,OAAOqE,OAAOC,OAAO,CAAC,EAAGirD,EAAoBM,EAAY,CAAEC,eAAAA,GAAkB,CAAEN,KAAAA,EAAMC,IAAAA,EAAKC,IAAAA,GAC5F,EAsDEK,8BApDoC,SAACC,GACrC,IAAQN,EAAgBM,EAAhBN,IAAKO,EAAWD,EAAXC,OAKP3+C,EAAkG,GAAvFmH,EAAK7X,OAAO6X,EAAK1B,SAAS,GAAIi5C,EAAkB7B,SAAU6B,EAAkBzlC,SACvFqhC,EAAQ17C,KAAKrB,IAAI6gD,GAAOp+C,EAAW2+C,EACnChmB,EAAS/5B,KAAKrB,IAAI6gD,GAAOp+C,EAGvBk+C,EAAwBQ,EAAxBR,KAAMC,EAAkBO,EAAlBP,IAAKE,EAAaK,EAAbL,SACbO,EAAO,CAAEN,KAAM,EAAGJ,KAAAA,EAAMC,IAAAA,GACxBF,EAAqBvvD,EAAAA,OAAAA,YACrB6vD,EAAa7vD,EAAAA,OAAAA,cAA8CkwD,EAAM,CAAEtE,MAAAA,EAAO3hB,OAAAA,IAChF,OAAO5lC,OAAOC,OAAO,CAAC,EAAGirD,EAAoBS,EAAmBH,EAAY,CAAEC,eAAgBP,EAAmBO,eAAgBH,SAAAA,GACnI,0BC5BA,IAAM57C,EAAO/T,EAAQ,MAEfmwD,EAAc,CAClBvB,KAAM76C,EAAKuU,SAAS,IAAInlB,aAAa,KACrC0sD,WAAY97C,EAAKuU,SAAS,IAAInlB,aAAa,KAC3CkV,OAAQtE,EAAKuU,SAAS,IAAInlB,aAAa,KACvCqsD,KAAM,EACNC,IAAK,KACLX,GAAI,CAAC,EAAG,EAAG,GAEXsB,IAAK,IAAIjtD,aAAa,GACtBgrD,SAAU,CAAC,IAAK,IAAK,KACrB5jC,OAAQ,CAAC,EAAG,EAAG,GACfmlC,IAAKx/C,KAAK0V,GAAK,EACfqqC,OAAQ,EACRN,SAAU,CAAC,EAAG,EAAG,EAAG,GACpBC,KAAM,EACNE,eAAgB,gBAqBlBluD,EAAOC,QAAU,CAAEsuD,YAAAA,EAAaE,YAlBZ,CAAC,EAkBwBC,cAhBvB,SAAC5B,EAAQtD,GAC7B,IAAQQ,EAAkBR,EAAlBQ,MAAO3hB,EAAWmhB,EAAXnhB,OAETgmB,EAASrE,EAAQ3hB,EACjB0lB,EAAW,CAAC,EAAG,EAAG/D,EAAO3hB,GACzBsmB,EAAa7B,EAAOkB,KAEpBR,GAAQxD,EAAQ2E,EAChBlB,EAAQzD,EAAQ2E,EAChBpB,GAAUllB,EAASsmB,EACnBrB,EAAMjlB,EAASsmB,EAGrB,MAAO,CAAEV,WADU97C,EAAKy8C,MAAM,GAAIpB,EAAMC,EAAOF,EAAQD,EAAKR,EAAOc,KAAMd,EAAOe,KAC3DQ,OAAAA,EAAQN,SAAAA,EAC/B,0BCpCA,IAAM57C,EAAO/T,EAAQ,MACfyY,EAAOzY,EAAQ,OAEfmwD,EAAc,CAClBvB,KAAM76C,EAAKuU,SAAS,IAAInlB,aAAa,KACrC0sD,WAAY97C,EAAKuU,SAAS,IAAInlB,aAAa,KAC3CkV,OAAQtE,EAAKuU,SAAS,IAAInlB,aAAa,KACvCqsD,KAAM,EACNC,IAAK,KACLX,GAAI,CAAC,EAAG,EAAG,GAEXsB,IAAK,IAAIjtD,aAAa,GACtBgrD,SAAU,CAAC,IAAK,IAAK,KACrB5jC,OAAQ,CAAC,EAAG,EAAG,GACfmlC,IAAKx/C,KAAK0V,GAAK,EACfqqC,OAAQ,EACRN,SAAU,CAAC,EAAG,EAAG,EAAG,GACpBG,eAAgB,eAGZO,EAAc,CAAC,EACfxuB,EAAWx9B,OAAOC,OAAO,CAAC,EAAG6rD,EAAaE,GAoChDzuD,EAAOC,QAAU,CAAEsuD,YAAAA,EAAaE,YAAAA,EAAaxuB,SAAAA,EAAUyuB,cAlCjC,SAAC5D,EAAQgC,EAAQtD,GAErC,IAAM6E,EAAS7E,EAAMQ,MAAQR,EAAMnhB,OAE7B4lB,EAAa97C,EAAK08C,YAAY18C,EAAKuU,SAAS,IAAKomC,EAAOgB,IAAKO,EACjEvB,EAAOc,KACPd,EAAOe,KACHE,EAAW,CAAC,EAAG,EAAGvE,EAAMQ,MAAOR,EAAMnhB,QAGrCv3B,EAAMg6C,GAAU,CAAC,EAKvB,OAJAh6C,EAAIm9C,WAAaA,EACjBn9C,EAAIu9C,OAASA,EACbv9C,EAAIi9C,SAAWA,EAERj9C,CACT,EAkBsEg+C,OAhBvD,SAAChE,EAAQgC,GACjBA,IACHA,EAAShC,GAEX,IAAAiE,EAAiCjC,EAAzBP,EAAQwC,EAARxC,SAAU5jC,EAAMomC,EAANpmC,OAAQukC,EAAE6B,EAAF7B,GACpBhwC,EAASrG,EAAK1B,SAAS,GAAIo3C,EAAU5jC,GACrCqmC,EAAcn4C,EAAKgD,IAAIhD,EAAK3F,SAAUyX,EAAQzL,GAC9C+xC,EAAU98C,EAAK86C,OAAO96C,EAAKjB,SAAU89C,EAAarmC,EAAQukC,GAG1Dp8C,EAAMg6C,GAAU,CAAC,EAGvB,OAFAh6C,EAAIy7C,SAAWyC,EACfl+C,EAAIk8C,KAAOiC,EACJn+C,CACT,0BCvDA,IAAM+F,EAAOzY,EAAQ,OACf+T,EAAO/T,EAAQ,MACbgR,EAAwCd,KAAxCc,IAAKC,EAAmCf,KAAnCe,IAAKqC,EAA8BpD,KAA9BoD,KAAMsS,EAAwB1V,KAAxB0V,GAAI9K,EAAoB5K,KAApB4K,IAAKF,EAAe1K,KAAf0K,IAAKqV,EAAU/f,KAAV+f,MAEhC6gC,EAAgB9wD,EAAQ,OA2BxB+wD,EAAgB,CACpBC,OAAQ,CACNC,YAAa,IACbpd,YAAa,KAEfqd,KAAM,IACN9yC,IAAK,KACL+yC,UAAW,CACTC,MAAM,EACNC,QAAS,MACTC,UAAW,KAGbC,YAAa,CACX3B,MAAM,EACN4B,UAAW,EACXnmC,QAAQ,EACRomC,YAAa,EACbC,KAAK,EACLC,SAAU,GAEZC,WAAY,CACVC,SAAS,EACTC,MAAO,GAETC,kBAAkB,GAGdC,EAAgB,CAEpBC,WAAY,EACZC,SAAU,EACVl3C,MAAO,GAGH6mB,EAAWx9B,OAAOC,OAAO,CAAC,EAAG0tD,EAAejB,GAoQlDnvD,EAAOC,QAAU,CACfkvD,cAAAA,EACAiB,cAAAA,EACAnwB,SAAAA,EACA6uB,OAtQa,SAAHr3C,EAA0BqzC,GAAW,IAW3CxwC,EACAxB,EAZYy3C,EAAQ94C,EAAR84C,SAAUzD,EAAMr1C,EAANq1C,OAElBtwC,EAAc+zC,EAAd/zC,IAAK8yC,EAASiB,EAATjB,KACL/C,EAAqBO,EAArBP,SAAU5jC,EAAWmkC,EAAXnkC,OACZukC,EAAKqD,EAASrD,GAAKqD,EAASrD,GAAKJ,EAAOI,GAE1CsD,EAAgBD,EAASF,WACvBI,EAAcF,EAASD,SACvBI,EAAWH,EAASn3C,MAEpB8D,EAASrG,EAAK1B,SAAS,GAAIo3C,EAAU5jC,GAI7B,IAAVukC,EAAG,IAEL5yC,EAAQ+T,EAAMnR,EAAO,GAAIA,EAAO,IAEhCpE,EAAMuV,EAAM3c,EAAKwL,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAKA,EAAO,MAGxE5C,EAAQ+T,EAAMnR,EAAO,GAAIA,EAAO,IAChCpE,EAAMuV,EAAM3c,EAAKwL,EAAO,GAAKA,EAAO,GAAKA,EAAO,GAAKA,EAAO,IAAKA,EAAO,KAItEqzC,EAASP,WAAWC,SAAWM,EAASZ,YAAYlmC,SACtD+mC,GAAiB,EAAIliD,KAAK0V,GAAK,GAAK,GAAKusC,EAASP,WAAWE,OAG/D51C,GAASk2C,EAIT13C,EAAM1J,EAAIoN,EAAKnN,EAAI2U,EAAKxH,EAHxB1D,GAAO23C,IAKP,IAAMx4C,EAAS7I,EAAImhD,EAASnB,OAAOC,YAAahgD,EAAIkhD,EAASnB,OAAOnd,YAAap7B,EAAK7X,OAAOke,GAAUwzC,IAEzF,IAAVxD,EAAG,IACLhwC,EAAO,GAAKjF,EAASiB,EAAIJ,GAAOI,EAAIoB,GACpC4C,EAAO,GAAKjF,EAASe,EAAIF,GACzBoE,EAAO,GAAKjF,EAASiB,EAAIJ,GAAOE,EAAIsB,KAEpC4C,EAAO,GAAKjF,EAASiB,EAAIJ,GAAOI,EAAIoB,GACpC4C,EAAO,GAAKjF,EAASe,EAAIF,GACzBoE,EAAO,GAAKjF,EAASiB,EAAIJ,GAAOE,EAAIsB,IAGtC,IAAM00C,EAAcn4C,EAAKgD,IAAIhD,EAAK3F,SAAUyX,EAAQzL,GAC9C+xC,EAAU98C,EAAK86C,OAAO96C,EAAKjB,SAAU89C,EAAarmC,EAAQukC,GAE1DyD,EAAa,EAAIvhD,EAAIC,EAAIigD,EAAM,GAAM,KAiB3C,MAAO,CAELiB,SAAU,CACRF,WAAYG,EAAgBG,EAC5BL,SAAUG,EAAcE,EACxBv3C,MAAO,EACPw3C,QAtBoB/5C,EAAKnH,SAAS68C,EAAUyC,GAAe,MAyB7DlC,OAAQ,CACNP,SAAUyC,EACVhC,KAAMiC,GAIZ,EAoLExlC,OA3Ka,SAAH4jC,EAAqCh4C,GAAU,IAAzCk7C,EAAQlD,EAARkD,SAAUzD,EAAMO,EAANP,OAAM+D,EAAAxD,EAAE6C,MAAAA,OAAK,IAAAW,EAAG,EAACA,EAEzCR,EAEEE,EAFFF,WACAC,EACEC,EADFD,SAQF,OALIC,EAASZ,YAAYlmC,SACvB4mC,GAAeh7C,EAAM,GAAK66C,EAC1BI,GAAaj7C,EAAM,GAAK66C,GAGnB,CACLK,SAAU,CACRF,WAAAA,EACAC,SAAAA,GAEFxD,OAAAA,EAEJ,EA0JEkB,KAjJW,SAAH8C,GAAuD,IAAjDP,EAAQO,EAARP,SAAUzD,EAAMgE,EAANhE,OAAMiE,EAAAD,EAAEZ,MAAAA,OAAK,IAAAa,EAAG,EAACA,EAAIC,EAAS1uD,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,EACnD8W,EAAUm3C,EAAVn3C,MAEN,GAAIm3C,EAASZ,YAAY3B,MAAQlB,QAAwBn6C,IAAdq+C,GAAyC,IAAdA,IAAoB5rC,MAAM4rC,GAAY,CAC1G,IAKMC,GAJND,EAAaA,EAAYA,GADa,IAAzB1iD,KAAK82B,KAAK4rB,GAAmB,EAAI1iD,KAAK82B,KAAK4rB,IACXd,GAIfK,EAASn3C,MAEjC83C,EAAcr6C,EAAKnH,SAASo9C,EAAOP,SAAUO,EAAOnkC,QAAUsoC,EAMpE,GAJIC,EAAcX,EAASnB,OAAOC,aAAe6B,EAAcX,EAASnB,OAAOnd,cAC7E74B,GAAS43C,GAGmB,iBAA1BlE,EAAOoB,eAAmC,CAC5C,IAAMx+C,EAA4E,GAAjEmH,EAAK7X,OAAO6X,EAAK1B,SAAS,GAAI23C,EAAOP,SAAUO,EAAOnkC,SACjEqhC,EAAQ17C,KAAKrB,IAAI6/C,EAAOgB,KAAOp+C,EAAWo9C,EAAOuB,OACjDhmB,EAAS/5B,KAAKrB,IAAI6/C,EAAOgB,KAAOp+C,EAGtCo9C,EADmB1uD,EAAAA,OAAAA,cAAuD0uD,EAAQ,CAAE9C,MAAAA,EAAO3hB,OAAAA,GAE7F,CAOF,CACA,MAAO,CAAEkoB,SAAU,CAAEn3C,MAAAA,GAAS0zC,OAAAA,EAChC,EAiHEgD,IAxGU,SAAHqB,EAAqC72B,GAAU,IAAzCi2B,EAAQY,EAARZ,SAAUzD,EAAMqE,EAANrE,OAAMsE,EAAAD,EAAEjB,MAAAA,OAAK,IAAAkB,EAAG,EAACA,EAClCC,EAAYjzD,EAAQ,OAClB6vD,EAA+BnB,EAA/BmB,WAAYjB,EAAmBF,EAAnBE,KAAMe,EAAajB,EAAbiB,SACpBuD,EAAmBn/C,EAAKuE,SAAS,GAAIu3C,EAAYjB,GACjDuE,EAAcp/C,EAAK+E,OAAO,GAAIo6C,GAE9BE,EAAW,CACfzD,EAAS,GACTA,EAAS,GACT,GAEI0D,EAAS,CACb1D,EAAS,GAAKzzB,EAAM,GACpByzB,EAAS,GAAKzzB,EAAM,GACpB,GAEIo3B,EAAaL,EAAU,GAAIG,EAAUzD,EAAUwD,GAC/CI,EAAWN,EAAU,GAAII,EAAQ1D,EAAUwD,GAC3CK,EAAc/6C,EAAKnH,SAASo9C,EAAOP,SAAUO,EAAO0B,KAEpDtxC,EAASrG,EAAK1B,SAAS,GAAIu8C,EAAYC,GAAU/tD,KAAI,SAACyV,GAAC,OAAKA,EAAI62C,EAAQ0B,EAAcrB,EAASn3C,KAAK,IAE1G,MAAO,CACLm3C,SAAAA,EACAzD,OAAQ,CACNP,SAAU11C,EAAKgD,IAAIhD,EAAK3F,SAAU47C,EAAOP,SAAUrvC,GACnDyL,OAAQ9R,EAAKgD,IAAIhD,EAAK3F,SAAU47C,EAAOnkC,OAAQzL,IAGrD,EA4EEqyC,UAlEgB,SAAAsC,GAAoC,IAAjCtB,EAAQsB,EAARtB,SAAUzD,EAAM+E,EAAN/E,OAAQgF,EAAQD,EAARC,SAE7BvC,EAAcgB,EAAdhB,UACR,GAA0B,QAAtBA,EAAUE,QACZ,MAAO,CAAEc,SAAAA,EAAUzD,OAAAA,GAGrB,GAAwB,IAApBgF,EAAS9yD,OAAc,MAAO,CAAEuxD,SAAAA,EAAUzD,OAAAA,GAG9C,IAAM3uD,EAAa2zD,EAASluD,KAAI,SAACmuD,GAAM,OAAKA,EAAO1/C,QAAQ,IACrDod,EAASy/B,EAAc/wD,GAGrB2vD,EAA0BhB,EAA1BgB,IAAKnlC,EAAqBmkC,EAArBnkC,OAAQ4jC,EAAaO,EAAbP,SACbmD,EAAcjtD,OAAOC,OAAO,CAAC,EAAG6sD,EAAWJ,EAAcI,WAAzDG,UAUFsC,EAF2BviC,EAAOm9B,IAAM8C,EAAaphD,KAAKrB,IAAI6gD,EAAM,GAClDj3C,EAAKnH,SAASiZ,EAAQ4jC,GAG9C,MAAO,CACLO,OAAQ,CAAEnkC,OAAQ8G,EAAO7V,QACzB22C,SAAU,CAAEn3C,MAAO44C,GAEvB,EAoCEC,MA1BY,SAAHC,EAA0BC,GAAZD,EAAR3B,SAAqC,IAA3BzD,EAAMoF,EAANpF,OAczB,MAbgB,CACdA,OAAQ,CACNP,SAAU4F,EAAarF,OAAOP,SAC9B5jC,OAAQwpC,EAAarF,OAAOnkC,OAC5BslC,WAAY97C,EAAK08C,YAAY,GAAI/B,EAAOgB,IAAKhB,EAAOuB,OAAQvB,EAAOc,KAAMd,EAAOe,KAChFb,KAAMmF,EAAarF,OAAOE,MAE5BuD,SAAU,CACRF,WAAY8B,EAAa5B,SAASF,WAClCC,SAAU6B,EAAa5B,SAASD,SAChCl3C,MAAO+4C,EAAa5B,SAASn3C,OAInC,+CCpUAtX,EAA6B1D,EAAQ,OAA7B6D,EAAOH,EAAPG,QAASC,EAAOJ,EAAPI,QAETkwD,EAAch0D,EAAQ,MAAtBg0D,UAEFC,EAAoBj0D,EAAQ,OAC5Bk0D,EAAoBl0D,EAAQ,OAC5Bm0D,EAAoBn0D,EAAQ,OA4DlC4B,EAAOC,QA7BoB,SAAC1B,GAAuB,QAAA8D,EAAAC,UAAAtD,OAAXshC,EAAM,IAAA/9B,MAAAF,EAAA,EAAAA,EAAA,KAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAN89B,EAAM99B,EAAA,GAAAF,UAAAE,GAC5C,IAAMy9B,EAAW,CACfx8B,MAAO2uD,EACPI,eAAe,GAEjB/iD,EAAiChN,OAAOC,OAAO,CAAC,EAAGu9B,EAAU1hC,GAArDkF,EAAKgM,EAALhM,MAAO+uD,EAAa/iD,EAAb+iD,cAGflyB,GADAA,EAASr+B,EAAQC,EAAQo+B,KACTz9B,QAAO,SAAC49B,GAAK,OAAKA,GAAUA,aAAiBh+B,MAAO,IAEpE,IAAMqvD,EAAW,GAgBjB,OAfAxxB,EAAO7hC,SAAQ,SAACgiC,GACd,IAAItiC,EAAa,GACb,UAAWsiC,EACbtiC,EAAak0D,EAAkB,CAAE5uD,MAAAA,GAASg9B,GACjC,WAAYA,EACrBtiC,EAAao0D,EAAkB,CAAE9uD,MAAAA,GAASg9B,GACjC,aAAcA,IACvBtiC,EAAam0D,EAAkB,CAC7BG,eAAgBD,EAChBE,gBAAiB,GACjBjvD,MAAAA,GACCg9B,IAELqxB,EAASlzD,KAAIqgB,MAAb6yC,EAAQ5yC,EAlDa,SAAC/gB,GAcxB,OAbiBA,EAAWyF,KAAI,SAACyO,GAW/B,MAJe,CACbA,SAAAA,EACAsgD,QARc,CACdC,QAA2B,OAAlBvgD,EAASgmB,KAAgB,YAAc,WAChDw6B,MAAM,EACNC,YAAazgD,EAAS0gD,cACtBC,iBAAiB,GAOrB,GAEF,CAmCqBC,CAAiB90D,IACpC,IACO2zD,CACT,yBChEA,IAAM3/C,EAAO/T,EAAQ,MAEf80D,EAAW5kD,KAAKC,MAAM,SA+D5BvO,EAAOC,QAtDmB,SAAC1B,EAASkiC,GAClC,IAAMh9B,EAAUlF,EAAVkF,MAEA+O,EAAQiuB,EAAMjuB,MACpB,GAAqB,IAAjBA,EAAMxT,OAAc,MAAO,GAE3B,UAAWyhC,IAAOh9B,EAAQg9B,EAAMh9B,OAYpC,IAXA,IAAMsvD,EAAiBtvD,EAAM,GAAK,EAC5Bsd,EAAS,GACToyC,EAAgB7kD,KAAKC,MAAMiE,EAAMxT,OAAUk0D,GAAa,EAExDE,EAAW,SAACC,EAAYC,GAG5BvyC,EAAOniB,KAAKy0D,EAAYC,GAAYD,EACtC,EAEMl1D,EAAa,GACV2P,EAAI,EAAGA,EAAIqlD,EAAerlD,IAAK,CAKtC,IAJA,IAAMoP,EAASpP,EAAIolD,EACbK,EAASjlD,KAAKe,IAAI6N,EAASg2C,EAAU1gD,EAAMxT,QAC3CqtD,EAAY,GAET1tD,EAAIue,EAAQve,EAAI40D,EAAQ50D,IAAK,CACpC,IAAM8T,EAAOD,EAAM7T,GACnB,GAAI8T,EAAKhP,MAAO,CAEd,GAAsB,IAAlBsd,EAAO/hB,QAAgBqtD,EAAUrtD,OAAS,EAE5C,IADA,IAAMw0D,EAASnH,EAAUrtD,OAChBiT,EAAI,EAAGA,EAAIuhD,EAAQvhD,IAC1B8O,EAAOniB,KAAK6E,GAIhB2vD,EAAS3gD,EAAKhP,MAAOgP,EAAK6gD,SAC5B,MAAWvyC,EAAO/hB,QAChBo0D,EAAS3vD,GAEX4oD,EAAUztD,KAAK,CAAC6T,EAAK,GAAG,GAAIA,EAAK,GAAG,GAAI,IACxC45C,EAAUztD,KAAK,CAAC6T,EAAK,GAAG,GAAIA,EAAK,GAAG,GAAI,GAC1C,CAEA,IAAMghD,EAAUpH,EAAUzoD,KAAI,SAACyV,GAAC,MAAK,CAAC,EAAG,GAAI,EAAE,IACzC6zB,EAAUmf,EAAUzoD,KAAI,SAACyV,EAAG1a,GAAC,OAAKA,CAAC,IACnC4T,EAAakuB,EAAMluB,WAAaJ,EAAKrO,MAAM28B,EAAMluB,YAAcJ,EAAKjB,SAK1E/S,EAAWS,KAAK,CAAEy5B,KAAM,KAAMg0B,UAAAA,EAAWoH,QAAAA,EAASvmB,QAAAA,EAAS36B,WAAAA,EAAY9O,MAAAA,EAAOsd,OAAAA,EAAQgyC,cAAAA,GACxF,CACA,OAAO50D,CACT,yBC/DA,IAAM0Y,EAAOzY,EAAQ,OACf+T,EAAO/T,EAAQ,MA+Jfs1D,EAAe,SAACt0D,EAASqE,GAC7B,IAAIkwD,EAAYlwD,EAShB,OAPIrE,EAAQqE,QACVkwD,EAAYv0D,EAAQqE,OAGlBkwD,GAAaA,EAAU30D,OAAS,GAClC20D,EAAU/0D,KAAK,GAEV+0D,CACT,EAKMC,EAAkB,SAACx0D,GACvB,GAAIA,EAAQW,MAAO,OAAO8W,EAAK/S,MAAM1E,EAAQW,OAE7C,IAAMJ,EAAWP,EAAQO,SACnBktB,EAAKhW,EAAK3F,SAChB2F,EAAK1B,SAAS0X,EAAIltB,EAAS,GAAIA,EAAS,IACxC,IAAMmtB,EAAKjW,EAAK3F,SAChB2F,EAAK1B,SAAS2X,EAAIntB,EAAS,GAAIA,EAAS,IACxC,IAAMqf,EAASnI,EAAK3F,SAGpB,OAFA2F,EAAKsF,MAAM6C,EAAQ6N,EAAIC,GACvBjW,EAAKmF,UAAUgD,EAAQA,GAChBA,CACT,EA4BAhf,EAAOC,QA1MmB,SAAC1B,EAASkiC,GAClC,IAAMh9B,EAA0BlF,EAA1BkF,MAA0BlF,EAAnBk0D,eAET,UAAWhyB,IAAOh9B,EAAQg9B,EAAMh9B,OAQpC,IANA,IAAMmT,EAAW6pB,EAAM7pB,SACjBrE,EAAakuB,EAAMluB,WAAaJ,EAAKrO,MAAM28B,EAAMluB,YAAcJ,EAAKjB,SAEpE/S,EAAa,GAEf01D,EAAW,EACRA,EAAWj9C,EAAS5X,QAAQ,CAIjC,IAFA,IAAI80D,EAAS,EACTC,EAASF,EACJl1D,EAAIk1D,EAAUl1D,EAAIiY,EAAS5X,WAClC80D,GAAUl9C,EAASjY,GAAGgB,SAASX,QA3BpB,OA0B+BL,IAG1Co1D,IAUF,IANA,IAAM1H,EAAY,GACZoH,EAAU,GACVvmB,EAAU,GACVnsB,EAAS,GACTgyC,EAAiBtvD,EAAM,GAAK,EAEzB9E,EAAIk1D,EAAUl1D,EAAIo1D,EAAQp1D,IAAK,CAQtC,IAPA,IAAMS,EAAUwX,EAASjY,GACnBgB,EAAWP,EAAQO,SAEnBqf,EAAS40C,EAAgBx0D,GACzBu0D,EAAYD,EAAat0D,EAASqE,GAElCuwD,EAAiB,GACd/hD,EAAI,EAAGA,EAAItS,EAASX,OAAQiT,IAAK,CACxC,IAAMs6C,EAAW5sD,EAASsS,GAE1Bo6C,EAAUztD,KAAK2tD,GACfkH,EAAQ70D,KAAKogB,GACb+B,EAAOniB,KAAK+0D,GAEZ,IAAMhyD,EAAQ0qD,EAAUrtD,OAAS,EACjCg1D,EAAep1D,KAAK+C,EACtB,CAEA,IAAK,IAAIsQ,EAAI,EAAGA,EAAI+hD,EAAeh1D,OAAQiT,IACzCi7B,EAAQtuC,KAAK,CAACo1D,EAAe,GAAIA,EAAe/hD,EAAI,GAAI+hD,EAAe/hD,IAE3E,CAMA,IAAMI,EAAW,CACfgmB,KAAM,KACNg0B,UAAAA,EACAoH,QAAAA,EACAvmB,QAAAA,EACAnsB,OAAAA,EACAxO,WAAAA,EACAwgD,cAAAA,GAEF50D,EAAWS,KAAKyT,GAGhBwhD,EAAWE,CACb,CACA,OAAO51D,CACT,yBCrFA,IAAMgU,EAAO/T,EAAQ,MAIf80D,EAAW5kD,KAAKC,MAAM,SAAa,EAqDzCvO,EAAOC,QA5CmB,SAAC1B,EAASkiC,GAClC,IAAMh9B,EAAUlF,EAAVkF,MAEA2M,EAASqwB,EAAMrwB,OACrB,GAAsB,IAAlBA,EAAOpR,OAAc,MAAO,GAE5B,UAAWyhC,IAAOh9B,EAAQg9B,EAAMh9B,OAMpC,IALA,IAAMsvD,EAAiBtvD,EAAM,GAAK,EAE5B0vD,EAAgB7kD,KAAKC,MAAM6B,EAAOpR,OAAUk0D,GAAa,EAEzD/0D,EAAa,GACV2P,EAAI,EAAGA,EAAIqlD,EAAerlD,IAAK,CAKtC,IAJA,IAAMoP,EAASpP,EAAIolD,EACbK,EAASjlD,KAAKe,IAAI6N,EAASg2C,EAAU9iD,EAAOpR,QAC5CqtD,EAAY,GACd4H,OAAW,EACNt1D,EAAIue,EAAQve,EAAI40D,EAAQ50D,IAAK,CACpC,IAAM2R,EAAQF,EAAOzR,GACjBs1D,IACF5H,EAAUztD,KAAK,CAACq1D,EAAY,GAAIA,EAAY,GAAI,IAChD5H,EAAUztD,KAAK,CAAC0R,EAAM,GAAIA,EAAM,GAAI,KAEtC2jD,EAAc3jD,CAChB,CAEA,GAAKxC,EAAI,IAAOqlD,GAAiB1yB,EAAMloB,UAAY07C,EAAa,CAC9D,IAAM3jD,EAAQF,EAAO,GACrBi8C,EAAUztD,KAAK,CAACq1D,EAAY,GAAIA,EAAY,GAAI,IAChD5H,EAAUztD,KAAK,CAAC0R,EAAM,GAAIA,EAAM,GAAI,GACtC,CAEA,IAAMmjD,EAAUpH,EAAUzoD,KAAI,SAACyV,GAAC,MAAK,CAAC,EAAG,GAAI,EAAE,IACzC6zB,EAAUmf,EAAUzoD,KAAI,SAACyV,EAAG1a,GAAC,OAAKA,CAAC,IACnC4T,EAAakuB,EAAMluB,WAAaJ,EAAKrO,MAAM28B,EAAMluB,YAAcJ,EAAKjB,SAK1E/S,EAAWS,KAAK,CAAEy5B,KAAM,KAAMg0B,UAAAA,EAAWoH,QAAAA,EAASvmB,QAAAA,EAAS36B,WAAAA,EAAY9O,MAAAA,EAAOsvD,cAAAA,GAChF,CACA,OAAO50D,CACT,yBCvDA6B,EAAOC,QAAU,CACfi0D,cAAe91D,EAAQ,MACvB+1D,aAAc,CAEZC,SAAUh2D,EAAQ,OAClBi2D,SAAUj2D,EAAQ,OAClBk2D,SAAUl2D,EAAQ,MAClBm2D,UAAWn2D,EAAQ,QAErBo2D,QAAS,CACP1H,OAAQ1uD,EAAQ,OAChBq2D,aAAcr2D,EAAQ,OACtBywD,YAAazwD,EAAQ,QAEvBmyD,SAAU,CACRmE,MAAOt2D,EAAQ,QAEjBu2D,mBAAoBv2D,EAAQ,+BCjB9B,IAAM+T,EAAO/T,EAAQ,MAoErB4B,EAAOC,QAlEU,SAAC20D,EAAMpK,GACtB,IAQA/6C,EAAiEhN,OAAOC,OAAO,CAAC,EAR/D,CACfmyD,OAAQ,CAAC,EAAG,EAAG,EAAG,GAClBC,OAAQ,CAAC,EAAG,EAAG,EAAG,GAClBC,OAAQ,CAAC,EAAG,EAAG,EAAG,GAClBxrB,KAAM,GACNyrB,UAAW,EACXC,eAAe,GAE4EzK,GAAvFjhB,EAAI95B,EAAJ85B,KAAMsrB,EAAMplD,EAANolD,OAAQC,EAAMrlD,EAANqlD,OAAQC,EAAMtlD,EAANslD,OAAQC,EAASvlD,EAATulD,UAAWC,EAAaxlD,EAAbwlD,cAE3CD,EAAYJ,EAAKxF,OAAO8F,cAAc,KACxCF,EAAYJ,EAAKxF,OAAO8F,cAAc,IAExC,IAAM9kD,EAAS,CACb,EAAG,EAAG,EACNm5B,EAAM,EAAG,GAGL4rB,EAAgB,CACpBC,KAAM,2GAKNC,KAAM,wMAQNC,SAAU,CACRC,MAAO,SAACC,EAASC,GAAK,OAAKA,GAASA,EAAMF,MAAQE,EAAMF,MAAQpjD,EAAKuU,SAAS,GAAG,EACjFjjB,MAAO,SAAC+xD,EAASC,GAAK,OAAKA,EAAMhyD,KAAK,EACtC4R,MAAO,SAACqgD,EAAQD,GAAK,OAAKA,EAAMpgD,KAAK,GAEvCsgD,WAAY,CACVpJ,SAAUn8C,GAEZkH,MAAOlH,EAAOpR,OAAS,EACvB42D,UAAW,YACXZ,UAAAA,EACAa,MAAO,CACLC,QAASb,IAIPc,EAAa5jD,EAAKuU,SAAS,IAC3BsvC,EAAa7jD,EAAKyX,QAAQzX,EAAKjB,SAAUiB,EAAKuU,SAAS,IAAKpY,KAAK0V,GAAK,GACtEiyC,EAAa9jD,EAAKwX,QAAQxX,EAAKjB,SAAUiB,EAAKuU,SAAS,KAAMpY,KAAK0V,GAAK,GACvEkyC,EAAStB,EAAKO,GACpB,OAAO,SAACM,GACN,IAAMx1B,EAAW,CACfs1B,MAAOpjD,EAAKuU,SAAS,KAGvB,OADA+uC,EAAQhzD,OAAOC,OAAO,CAAC,EAAGu9B,EAAUw1B,GAC7BS,EAAO,CACZ,CAAEzyD,MAAOoxD,EAAQU,MAAOpjD,EAAKuE,SAASvE,EAAKjB,SAAUukD,EAAMF,MAAOQ,IAClE,CAAEtyD,MAAOqxD,EAAQS,MAAOpjD,EAAKuE,SAASvE,EAAKjB,SAAUukD,EAAMF,MAAOS,IAClE,CAAEvyD,MAAOsxD,EAAQQ,MAAOpjD,EAAKuE,SAASvE,EAAKjB,SAAUukD,EAAMF,MAAOU,KAEtE,CACF,yBClEA,IAAM9jD,EAAO/T,EAAQ,MA6IrB4B,EAAOC,QA3Ic,SAAC20D,GAAsB,IAAhBpK,EAAMloD,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC9B+pD,EAAY,GACZpsB,EAAW,CACf0yB,QAAS,CACPlvD,MAAO,CAAC,EAAG,EAAG,EAAG,GACjB0yD,SAAS,GAEXC,MAAO,EACP7sB,KAAM,CAAC,GAAI,IACX8sB,UAAU,EACVrB,UAAW,GAEPrC,EAAUlwD,OAAOC,OAAO,CAAC,EAAGu9B,EAAS0yB,QAASnI,EAAOmI,SAAW,CAAC,GAC/DwD,EAAmBxD,EAAnBwD,QAAS1yD,EAAUkvD,EAAVlvD,MACjBgM,EAA6ChN,OAAOC,OAAO,CAAC,EAAGu9B,EAAUuqB,GAAjEjhB,EAAI95B,EAAJ85B,KAAM6sB,EAAK3mD,EAAL2mD,MAAOC,EAAQ5mD,EAAR4mD,SAAUrB,EAASvlD,EAATulD,UAEzBhL,EAAQzgB,EAAK,GACbvqC,EAASuqC,EAAK,GAUpB,GAAI8sB,EAAU,CAcZ,IAbA,IAAMC,EAAoB,GAARtM,EACZuM,EAAsB,GAATv3D,EAGbw3D,GAAcF,EADHA,EAAYF,EAEvBK,GAAYD,EAGZE,GAAeH,EADHA,EAAaH,EAEzBO,GAAaD,EAIV/3D,EAAI63D,EAAYvkD,EAAI,EAAGtT,GAAK83D,EAAU93D,GAAKy3D,EAAOnkD,GAAK,EAC1DA,EAHY,IAGM,IACpBo6C,EAAUztD,KAAK83D,EAAa/3D,EAAG,GAC/B0tD,EAAUztD,KAAK+3D,EAAWh4D,EAAG,GAC7B0tD,EAAUztD,KAAK83D,EAAa/3D,EAAG,IAGnC,IAAK,IAAIA,EAAI+3D,EAAazkD,EAAI,EAAGtT,GAAKg4D,EAAWh4D,GAAKy3D,EAAOnkD,GAAK,EAC5DA,EAVY,IAUM,IACpBo6C,EAAUztD,KAAKD,EAAG63D,EAAY,GAC9BnK,EAAUztD,KAAKD,EAAG83D,EAAU,GAC5BpK,EAAUztD,KAAKD,EAAG63D,EAAY,GAGpC,KAAO,CACL,IAAK,IAAI73D,EAAa,IAARqrD,EAAarrD,GAAa,GAARqrD,EAAarrD,GAAKy3D,EAChD/J,EAAUztD,KAAe,IAATI,EAAcL,EAAG,GACjC0tD,EAAUztD,KAAc,GAATI,EAAcL,EAAG,GAChC0tD,EAAUztD,KAAe,IAATI,EAAcL,EAAG,GAGnC,IAAK,IAAIA,EAAc,IAATK,EAAcL,GAAc,GAATK,EAAcL,GAAKy3D,EAClD/J,EAAUztD,KAAKD,EAAY,IAARqrD,EAAa,GAChCqC,EAAUztD,KAAKD,EAAW,GAARqrD,EAAa,GAC/BqC,EAAUztD,KAAKD,EAAY,IAARqrD,EAAa,EAEpC,CACA,OAAO4K,EAAK,CACVS,KAAM,oaAeND,KAAM,wcAmBNO,WAAY,CACVpJ,SAAUqI,EAAKx0D,OAAOisD,IAExB/0C,MAAO+0C,EAAUrtD,OAAS,EAC1Bs2D,SAAU,CACRC,MAAO,SAACC,EAASC,GAAK,OAAKA,GAASA,EAAMF,MAAQE,EAAMF,MAAQpjD,EAAKuU,SAAS,GAAG,EACjFjjB,MAAO,SAAC+xD,EAASC,GAAK,OAAKA,GAASA,EAAMhyD,MAAQgyD,EAAMhyD,MAAQA,CAAK,EACrEmzD,SAAU,SAACpB,EAASC,GAAK,OAAKA,GAASA,EAAMhyD,MACzC,CAACgyD,EAAMhyD,MAAM,GAAIgyD,EAAMhyD,MAAM,GAAIgyD,EAAMhyD,MAAM,GAAI,GACjD,CAACA,EAAM,GAAIA,EAAM,GAAIA,EAAM,GAAI,EAAI,EACvC0yD,QAAS,SAACX,EAASC,GAAK,OAAKA,QAA2B9iD,IAAlB8iD,EAAMU,QAAwBV,EAAMU,QAAUA,CAAO,GAE7FnB,UAAW,SAACQ,EAASC,GAAK,OAAKnnD,KAAKe,IAAKomD,GAASA,EAAMT,UAAYS,EAAMT,UAAYA,EAAYJ,EAAKxF,OAAO8F,cAAc,GAAG,EAC/HU,UAAW,QACXiB,KAAM,CACJf,QAAQ,EACRjoB,KAAM,SAERipB,cAAe,CACbhB,QAAQ,EACR54C,OAAQ,CACNykC,OAAQ,EACRoV,MAAuB,GAAhBzoD,KAAK0oD,WAGhBC,MAAO,CACLnB,QAAQ,EACRoB,KAAM,CACJC,IAAK,YACLC,IAAK,yBAKb,yBC5HAp3D,EAAOC,QAfmB,SAAC20D,EAAMpK,GAC/B,IAIA/6C,EAAwBhN,OAAOC,OAAO,CAAC,EAJtB,CACf6mC,KAAM,CAAC,GAAI,IACX6sB,MAAO,CAAC,GAAI,IAEsC5L,GAA5CjhB,EAAI95B,EAAJ85B,KAAM6sB,EAAK3mD,EAAL2mD,MACRiB,EAAej5D,EAAQ,MAARA,CAAmBw2D,EAAM,CAAErrB,KAAAA,EAAM6sB,MAAOA,EAAM,KAC7DkB,EAAcl5D,EAAQ,MAARA,CAAmBw2D,EAAM,CAAErrB,KAAAA,EAAM6sB,MAAOA,EAAM,KAKlE,OAJiB,SAACX,GAChB4B,EAAa5B,GACb6B,EAAY,CAAE7zD,MAAOgyD,EAAM8B,SAAUpB,QAASV,EAAMU,SACtD,CAEF,qBCLAn2D,EAAOC,QAAU,CAAEm1D,KARA,4HCAnB,IAAMjjD,EAAO/T,EAAQ,MAEbg0D,EAAch0D,EAAQ,MAAtBg0D,UAwDRpyD,EAAOC,QAtDW,SAAC20D,GAAsB,IAAhBpK,EAAMloD,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC3B29B,EAAW,CACfx8B,MAAO2uD,EACP//C,cAAUM,GAEZlD,EAAuChN,OAAOC,OAAO,CAAC,EAAGu9B,EAAUuqB,GAA7Dn4C,EAAQ5C,EAAR4C,SAAU5O,EAAKgM,EAALhM,MAAOqvD,EAAWrjD,EAAXqjD,YAEnB,UAAWzgD,IAAU5O,EAAQ4O,EAAS5O,OAE1C,IAAM+zD,KAAgBnlD,EAAS66B,SAAW76B,EAAS66B,QAAQluC,OAAS,GAC9Dy4D,KAAgBplD,EAASohD,SAAWphD,EAASohD,QAAQz0D,OAAS,GAC9D04D,KAAqBrlD,EAAS0O,QAAU1O,EAAS0O,OAAO/hB,OAAS,GAKjEm2D,EAAgB,CACpBS,UAAW,QACXP,KALWqC,EAAkBt5D,EAAAA,OAAAA,KAAkCA,EAAAA,OAAAA,KAM/Dg3D,KALWsC,EAAkBt5D,EAAAA,OAAAA,KAAkCA,EAAAA,OAAAA,KAO/Dk3D,SAAU,CACRC,MAAO,SAACC,EAASC,GAAK,OAAKA,EAAMF,OAASljD,EAASE,YAAcJ,EAAKjB,QAAQ,EAC9EymD,OAAQ,SAACnC,EAASC,GAAK,OAAMA,GAASA,EAAMhyD,MAASgyD,EAAMhyD,MAAQA,CAAK,GAE1EkyD,WAAY,CACVpJ,SAAUqI,EAAKx0D,OAAO,CAAEw3D,MAAO,SAAUv/B,KAAM,QAASzlB,KAAMP,EAASg6C,cAyB3E,OAnBIyG,IACFqC,EAAc8B,MAAQ,CACpBnB,QAAQ,EACRoB,KAAM,CAAEC,IAAK,YAAaC,IAAK,yBAI/BM,IACFvC,EAAcQ,WAAWlyD,MAAQmxD,EAAKx0D,OAAO,CAAEw3D,MAAO,SAAUv/B,KAAM,QAASzlB,KAAMP,EAAS0O,UAG5Fy2C,IACFrC,EAAc0C,SAAWjD,EAAKiD,SAAS,CAAED,MAAO,SAAUv/B,KAAM,SAAUzlB,KAAMP,EAAS66B,WAGvFuqB,IACFtC,EAAcQ,WAAW32C,OAAS41C,EAAKx0D,OAAO,CAAEw3D,MAAO,SAAUv/B,KAAM,QAASzlB,KAAMP,EAASohD,WAG1FmB,EAAKO,EACd,qBCCAn1D,EAAOC,QAAU,CAAEo1D,KAzDF,6fAyDkBD,KA/BlB,i5BCQjBp1D,EAAOC,QAAU,CAAEm1D,KARA,oGAQkBC,KAlClB,8kBCAnB,IAAMljD,EAAO/T,EAAQ,MAEbg0D,EAAch0D,EAAQ,MAAtBg0D,UAwFRpyD,EAAOC,QAtFU,SAAC20D,GAAkC,IAA5BpK,EAAMloD,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,CAAEw1D,OAAQ,CAAC,GACpC73B,EAAW,CACf+yB,iBAAiB,EACjB+E,gBAAgB,EAChB1lD,cAAUM,EACVlP,MAAO2uD,EACPO,QAAS,CAAC,GAEZljD,EAAsEhN,OAAOC,OAAO,CAAC,EAAGu9B,EAAUuqB,GAA1Fn4C,EAAQ5C,EAAR4C,SAAU0lD,EAActoD,EAAdsoD,eAAgB/E,EAAevjD,EAAfujD,gBAAiBvvD,EAAKgM,EAALhM,MAAOkvD,EAAOljD,EAAPkjD,QAEpDqF,EAAmBpD,EAAKx0D,OAAO,IAG/Bo3D,KAAgBnlD,EAAS66B,SAAW76B,EAAS66B,QAAQluC,OAAS,GAC9Dy4D,KAAgBplD,EAASohD,SAAWphD,EAASohD,QAAQz0D,OAAS,GAC9D8zD,EAAc,gBAAiBH,GAAUA,EAAQG,YACjD4E,KAAqB1E,GAAmB3gD,EAAS0O,QAAU1O,EAAS0O,OAAO/hB,OAAS,GACpFuT,EAAaF,EAASE,YAAcJ,EAAKjB,SACzCsM,EAAOrL,EAAK8lD,YAAY1lD,GAAc,EACtC2lD,EAAWH,GACZv6C,EAAO,QACR,OAEE63C,EAAOqC,EAAkBt5D,EAAAA,OAAAA,KAAkCA,EAAAA,OAAAA,KAC3Dg3D,EAAOsC,EAAkBt5D,EAAAA,OAAAA,KAAkCA,EAAAA,OAAAA,KAC3D+5D,EAAiBhmD,EAAK+E,OAAO/E,EAAKjB,SAAUqB,GAE9C4iD,EAAgB,CAClBS,UAAW,YACXP,KAAAA,EACAD,KAAAA,EAEAE,SAAU,CACRC,MAAO,SAACC,EAASC,GAAK,OAAKljD,CAAU,EACrColD,OAAQ,SAACnC,EAASC,GAAK,OAAMA,GAASA,EAAMhyD,MAASgyD,EAAMhyD,MAAQA,CAAK,EAExE20D,cAAe,SAAC5C,EAASC,GAAK,OAAMA,GAASA,EAAMzC,kBAA6C,IAA1ByC,EAAMzC,gBAA4B,EAAM,CAAG,EAEjHqF,QAAS,SAAC7C,EAASC,GACjB,IAAM6C,EAAkBnmD,EAAK+E,OAAO/E,EAAKjB,SAAUukD,EAAM3I,OAAOE,MAGhE,OAFA76C,EAAKuE,SAAS4hD,EAAiBH,EAAgBG,GAC/CnmD,EAAKomD,UAAUD,EAAiBA,GACzBA,CACT,GAEF3C,WAAY,CACVpJ,SAAUqI,EAAKx0D,OAAO,CAAEw3D,MAAO,SAAUv/B,KAAM,QAASzlB,KAAMP,EAASg6C,YACvEmM,GAAIR,GAENnB,KAAM,CACJf,QAAQ,EACRjoB,KAAMqqB,IAgCV,OA1BIpF,IACFqC,EAAc8B,MAAQ,CACpBnB,QAAQ,EACRoB,KAAM,CAAEC,IAAK,YAAaC,IAAK,yBAI/B/kD,EAASomD,MACXtD,EAAc0C,SAAWxlD,EAASomD,MACzBjB,EACTrC,EAAc0C,SAAWjD,EAAKiD,SAAS,CAAED,MAAO,SAAUv/B,KAAM,SAAUzlB,KAAMP,EAAS66B,UAChF76B,EAAS4wB,UAClBkyB,EAAc0C,SAAWxlD,EAAS4wB,UAElCkyB,EAAc79C,MAAQjF,EAASg6C,UAAUrtD,OAAS,EAGhDy4D,IACFtC,EAAcQ,WAAW32C,OAAS41C,EAAKx0D,OAAO,CAAEw3D,MAAO,SAAUv/B,KAAM,QAASzlB,KAAMP,EAASohD,WAE7FiE,IACFvC,EAAcQ,WAAWlyD,MAAQmxD,EAAKx0D,OAAO,CAAEw3D,MAAO,SAAUv/B,KAAM,QAASzlB,KAAMP,EAAS0O,UAKzF6zC,EADPO,EAAgB1yD,OAAOC,OAAO,CAAC,EAAGyyD,EAAe3K,EAAOsN,QAE1D,qBCnCA93D,EAAOC,QAAU,CAAEo1D,KAtBF,qfAsBkBD,KArDlB,i5BC2EjBp1D,EAAOC,QAAU,CAAEm1D,KA3CA,+zCA2CkBC,KA3ElB,+9BCAbqD,EAAgBt6D,EAAQ,MACxBu6D,EAAiBv6D,EAAQ,MA8E/B4B,EAAOC,QA5Ee,SAACuqD,GACrB,IAGMjsD,EAAUkE,OAAOC,OACrB,CAAC,EAJc,CACjB,EAKE8nD,EAAOoO,UACP,CAGEC,OAAQ,SAAC5iD,EAAKuxB,GACZ,GAAIvxB,EACF,MAAMA,CAEV,IAIE2+C,EAAOx2D,EAAQ,MAARA,CAAgBG,GAGvBu6D,EAAa,IAAI7kD,IA8CvB,OAAO,SAAiBrB,GA3CR,IAAC6iD,EA6Cfb,EAAKmE,QA7CUtD,EA8CP7iD,GA7CFomD,UAAYv2D,OAAOC,OAAO,CAAC,EAAGi2D,EAAgBlD,EAAMuD,WAG1DN,EAAc9D,EAAd8D,CAAoBjD,GAAO,SAACD,GAC1BZ,EAAKr+C,MAAM,CACT9S,MAAOgyD,EAAMuD,UAAUC,WACvBpD,MAAO,IAGLJ,EAAM3D,UAGR2D,EAAM3D,SACHl9B,MAAK,SAACrjB,EAAGxD,GACR,IAAMmrD,EAAe,gBAAiB3nD,EAAEohD,SAAUphD,EAAEohD,QAAQG,YAE5D,OAAQoG,KADa,gBAAiBnrD,EAAE4kD,SAAU5kD,EAAE4kD,QAAQG,aACnB,EAAIoG,EAAe,GAAK,CACnE,IACCz6D,SAAQ,SAACszD,GACR,IAGMa,EAHED,EAAYZ,EAAZY,WACM,SAAUA,IAAWA,EAAQE,OAC/BF,EAAQC,SAAW6C,EAAMtB,aAAaxB,EAAQC,WAEpDD,EAAQwG,QACVvG,EAAUkG,EAAWvkD,IAAIo+C,EAAQwG,UAEjCxG,EAAQwG,QAAUL,EAAWvvB,KAC7BqpB,EAAU6C,EAAMtB,aAAaxB,EAAQC,SAASgC,EAAM7C,GACpD+G,EAAWj3D,IAAI8wD,EAAQwG,QAASvG,IAOlCA,EALgBwG,EAAAA,EAAAA,EAAA,GACXrH,GACAY,GAAO,IACV7F,OAAQ2I,EAAM3I,UAIpB,GAEN,GAQF,CACF,wBC7EA,IAAM36C,EAAO/T,EAAQ,MA+CrB4B,EAAOC,QAxCe,SAAC20D,GAAsB,IAAhBpK,EAAMloD,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,CAAC,EAC7B+2D,EAAQ7O,EAAR6O,IAEFlE,EAAgB,CACpB0B,KAAM,CACJf,QAAQ,GAEVN,QAAS,CACP8D,eAAgB,CAAC,GAAK,GAAK,IAE7BhE,SAAU,CACRtI,KAAM,SAACwI,EAASC,GAAK,OAAKA,EAAM3I,OAAOE,IAAI,EAC3CwB,IAAK,SAACgH,EAASC,GAAK,OAAKA,EAAM3I,OAAOP,QAAQ,EAE9C0B,WAAY,SAACuH,EAASC,GAAK,OAAKA,EAAM3I,OAAOmB,UAAU,EACvDsL,QAAS,SAAC/D,EAASC,GAAK,OAAKA,EAAM3I,OAAOc,IAAI,EAC9C4L,OAAQ,SAAChE,EAASC,GAAK,OAAKA,EAAM3I,OAAOe,GAAG,EAE5C4L,aAAc,SAACjE,EAASC,GAAK,OAAKtjD,EAAK+E,OAAO,GAAIu+C,EAAM3I,OAAOE,KAAK,EAEpE0M,cAAe,SAAClE,EAASC,GAAK,OAAKA,GAASA,EAAMuD,WAAavD,EAAMuD,UAAUU,cAAgBjE,EAAMuD,UAAUU,cAAgB,CAAC,IAAK,IAAK,IAAI,EAC9IJ,eAAgB,SAAC9D,EAASC,GAAK,OAAKA,GAASA,EAAMuD,WAAavD,EAAMuD,UAAUM,eAAiB7D,EAAMuD,UAAUM,eAAiB9D,EAAQ8D,gBAAkB,CAAC,EAAG,EAAG,EAAE,EACrKK,UAAW,SAACnE,GAAO,OAAKrjD,EAAK86C,OAAO,GAAIuI,EAAQ8D,eAAgB,CAAC,EAAK,EAAK,GAAM,CAAC,EAAK,EAAK,GAAK,EACjGM,gBAAiBznD,EAAKy8C,MAAM,IAAK,IAAK,IAAK,GAAI,IAAK,GAAI,IACxDiL,WAAY,SAACrE,EAASC,GAAK,OAAKA,GAASA,EAAMuD,WAAavD,EAAMuD,UAAUa,WAAapE,EAAMuD,UAAUa,WAAa,CAAC,EAAG,GAAK,EAAE,EACjIC,mBAAoB,SAACtE,EAASC,GAAK,OAAKA,GAASA,EAAMuD,WAAavD,EAAMuD,UAAUc,mBAAqBrE,EAAMuD,UAAUc,mBAAqB,EAAG,EACjJC,mBAAoB,SAACvE,EAASC,GAAK,OAAKA,GAASA,EAAMuD,WAAavD,EAAMuD,UAAUe,mBAAqBtE,GAASA,EAAMuD,WAAavD,EAAMuD,UAAUe,mBAAqB,GAAI,EAC9KC,oBAAqB,SAACxE,EAASC,GAAK,OAAKA,GAASA,EAAMuD,WAAavD,EAAMuD,UAAUgB,oBAAsBvE,EAAMuD,UAAUgB,oBAAsB,GAAI,EACrJC,mBAAoB,SAACzE,EAASC,GAAK,OAAKA,GAASA,EAAMuD,WAAavD,EAAMuD,UAAUkB,kBAAoBzE,EAAMuD,UAAUkB,kBAAoB,CAAG,EAC/IC,gBAAiB,CAAC,GAAK,GAAK,IAC5BC,gBAAiB,CAAC,GAAK,GAAK,IAC5BC,iBAAkB,CAAC,GAAK,GAAK,KAE/BC,YAAajB,GAIf,OAAOzE,EAAKnyD,OAAOC,OAAO,CAAC,EAAGyyD,EAAe3K,EAAOsN,QACtD,oBC7CA93D,EAAOC,QAAU,CACfg5D,WAAY,CAAC,EAAG,EAAG,EAAG,GACtB7G,UAAW,CAAC,EAAG,GAAK,EAAG,GACvByH,WAAY,CAAC,EAAG,EAAG,EAAG,GACtBP,eAAgB,CAAC,GAAK,GAAK,GAC3BI,cAAe,CAAC,IAAK,IAAK,KAC1BI,mBAAoB,GACpBC,mBAAoB,IACpBC,oBAAqB,IACrBE,kBAAmB,sBCErBl6D,EAAOC,QAFS,SAAVgC,EAAWqpD,GAAG,OAAKA,EAAIj0C,QAAO,SAAC+G,EAAK3N,GAAG,OAAKlO,MAAMmB,QAAQ+M,GAAO2N,EAAI5e,OAAOyC,EAAQwO,IAAQ2N,EAAI5e,OAAOiR,EAAI,GAAE,GAAG,qBCGtHzQ,EAAOC,QAFc,SAACsR,EAAGxD,GAAC,OAAKwD,EAAIxD,CAAC,oBCKpC/N,EAAOC,QAPM,SAACw0B,GACZ,GAAKlyB,MAAMmB,QAAQ+wB,IAA2B,IAAjBA,EAAMz1B,OAGnC,OAAOy1B,EAAM,EACf,yBCNAz0B,EAAOC,QAAU,CACfgC,QAAS7D,EAAQ,OACjB09B,aAAc19B,EAAQ,OACtB2wC,KAAM3wC,EAAQ,MACd+7C,aAAc/7C,EAAQ,OACtBm8D,IAAKn8D,EAAQ,OACbo8D,YAAap8D,EAAQ,OACrB8D,QAAS9D,EAAQ,0BCanB4B,EAAOC,QAjBc,SAACw0B,EAAOwlB,EAASwgB,GAGpC,IAFA,IAAI9O,EAAY,EACZC,EAAan3B,EAAMz1B,OAChB4sD,EAAaD,GAAW,CAC7B,IAAME,EAAYv9C,KAAKC,OAAOo9C,EAAYC,GAAc,GAElC6O,EAAgBxgB,EADlBxlB,EAAMo3B,IAEN,EAClBF,EAAYE,EAAY,EAExBD,EAAaC,CAEjB,CAEA,OADAp3B,EAAMnf,OAAOq2C,EAAW,EAAG1R,GACpBxlB,CACT,qBCRAz0B,EAAOC,QAPK,SAACw0B,EAAO9yB,GAClB,GAAKY,MAAMmB,QAAQ+wB,MAAUA,EAAMz1B,OAAS2C,GAG5C,OAAO8yB,EAAM9yB,EACf,qBCKA3B,EAAOC,QARa,SAAC6rD,EAASC,EAASC,GAErC,IADAF,EAAUA,EAAQh5C,QACXg5C,EAAQ9sD,OAASgtD,GACtBF,EAAQltD,KAAKmtD,GAEf,OAAOD,CACT,oBCJA9rD,EAAOC,QANS,SAACw0B,GACf,OAAIlyB,MAAMmB,QAAQ+wB,GAAeA,OACnB9hB,IAAV8hB,GAAiC,OAAVA,EAAuB,GAC3C,CAACA,EACV,yBCZA,IAAI/hB,EAAYtU,EAAQ,OAExB4B,EAAOC,QAkBP,SAAoB6Q,EAAKyN,EAAKwvC,EAAU2M,GACtC,IAAIC,EAAQ5M,EAAS,GACnB6M,EAAQ7M,EAAS,GACjB8M,EAAY9M,EAAS,GACrB+M,EAAa/M,EAAS,GAEpB10C,EAAIkF,EAAI,GACVjF,EAAIiF,EAAI,GACRiC,EAAIjC,EAAI,GASV,OAPAlF,GAAQshD,EACRrhD,EAAIwhD,EAAaxhD,EAAI,EACrBA,GAAQshD,EAER9pD,EAAI,GAAM,EAAIuI,EAAKwhD,EAAY,EAC/B/pD,EAAI,GAAM,EAAIwI,EAAKwhD,EAAa,EAChChqD,EAAI,GAAK,EAAI0P,EAAI,EACV9N,EAAU5B,EAAKA,EAAK4pD,EAC7B,qBCtCA16D,EAAOC,QAcP,SAAkB6Q,EAAKyN,EAAKijB,GAC1B,IAAInoB,EAAIkF,EAAI,GACVjF,EAAIiF,EAAI,GACRiC,EAAIjC,EAAI,GACRuL,EAAM0X,EAAE,GAAIzX,EAAMyX,EAAE,GAAIxX,EAAMwX,EAAE,GAAIvX,EAAMuX,EAAE,GAC5CtX,EAAMsX,EAAE,GAAIrX,EAAMqX,EAAE,GAAIpX,EAAMoX,EAAE,GAAInX,EAAMmX,EAAE,GAC5ClX,EAAMkX,EAAE,GAAIjX,EAAMiX,EAAE,GAAIhX,EAAMgX,EAAE,IAAK/W,EAAM+W,EAAE,IAC7C9W,EAAM8W,EAAE,IAAK7W,EAAM6W,EAAE,IAAK5W,EAAM4W,EAAE,IAAK3W,EAAM2W,EAAE,IAE7Cu5B,EAAK,GAAK1hD,EAAI4Q,EAAM3Q,EAAI+Q,EAAM7J,EAAIiK,EAAMI,GAK5C,OAHA/Z,EAAI,IAAMuI,EAAIyQ,EAAMxQ,EAAI4Q,EAAM1J,EAAI8J,EAAMI,GAAOqwC,EAC/CjqD,EAAI,IAAMuI,EAAI0Q,EAAMzQ,EAAI6Q,EAAM3J,EAAI+J,EAAMI,GAAOowC,EAC/CjqD,EAAI,IAAMuI,EAAI2Q,EAAM1Q,EAAI8Q,EAAM5J,EAAIgK,EAAMI,GAAOmwC,EACxCjqD,CACT,kGCXA,SAAS/C,EAAKwD,EAAMxD,GAAM,MACJ,oBAATA,EAAsBA,EAAO,CAAEitD,SAAS,GAC1B,iBAATjtD,IACdhL,QAAQC,KAAK,sDACb+K,EAAO,CAAEitD,SAAUjtD,IAKjBA,EAAKitD,SAAW,6EAA6EC,KAAK1pD,EAAK8mB,MAClG,IAAI6iC,KAAK,CAAC,SAA6B3pD,GAAO,CAAE8mB,KAAM9mB,EAAK8mB,OAE7D9mB,CACR,CAED,SAASZ,EAAUY,EAAKxD,EAAM4C,GAC5B,IAAIrB,EAAM,IAAI6rD,eACd7rD,EAAI8rD,KAAK,MAAO7pD,GAChBjC,EAAI+rD,aAAe,OACnB/rD,EAAIgsD,OAAS,WACXxtD,EAAOwB,EAAIisD,SAAUxtD,EAAM4C,EAC5B,EACDrB,EAAIksD,QAAU,WACZz4D,QAAQ04D,MAAM,0BACf,EACDnsD,EAAIosD,MACL,CAED,SAASpsD,EAAaiC,GACpB,IAAIxD,EAAM,IAAIotD,eAEdptD,EAAIqtD,KAAK,OAAQ7pD,GAAjB,GACA,IACExD,EAAI2tD,MACL,CAAC,MAAOnqD,GAAK,CACd,OAAqB,KAAdxD,EAAI4tD,QAA+B,KAAd5tD,EAAI4tD,MACjC,CAGD,SAASzlD,EAAO3E,GACd,IACEA,EAAKqqD,cAAc,IAAIC,WAAW,SACnC,CAAC,MAAOlrD,GACP,IAAI5C,EAAM+tD,SAASC,YAAY,eAC/BhuD,EAAIiuD,eAAe,SAAnB,KAAwCC,OAAQ,EAAG,EAAG,EAAG,GACnC,IADtB,WACsD,EAAG,MACzD1qD,EAAKqqD,cAAc7tD,EACpB,CACF,KAtDGS,EAA4B,iBAAXytD,QAAuBA,OAAOA,SAAWA,OAC1DA,OAAyB,iBAATC,MAAqBA,KAAKA,OAASA,KACnDA,KAAyB,iBAAXC,EAAAA,GAAuBA,EAAAA,EAAOA,SAAWA,EAAAA,EACvDA,EAAAA,OADO,EAyDP5qD,EAAiB/C,EAAQ4tD,WAAa,YAAYnB,KAAKmB,UAAUC,YAAc,cAAcpB,KAAKmB,UAAUC,aAAe,SAASpB,KAAKmB,UAAUC,WAEnJvuD,EAASU,EAAQ8tD,SAEA,iBAAXL,QAAuBA,SAAWztD,EACtC,WAAiC,EAGlC,aAAc+tD,kBAAkB/5C,YAAcjR,EAC/C,SAAiBxD,EAAMD,EAAMI,GAAM,IAC/BvP,EAAM6P,EAAQguD,KAAOhuD,EAAQiuD,UAC7BxqD,EAAI6pD,SAASY,cAAc,KAC/B5uD,EAAOA,GAAQC,EAAK4uD,MAAQ,WAE5B1qD,EAAE2qD,SAAW9uD,EACbmE,EAAE4qD,IAAM,WAKY,iBAAT9uD,GAETkE,EAAE6qD,KAAO/uD,EACLkE,EAAEqR,SAAWy5C,SAASz5C,OAKxBpN,EAAMjE,GAJN3C,EAAY2C,EAAE6qD,MACVnsD,EAAS5C,EAAMD,EAAMI,GACrBgI,EAAMjE,EAAGA,EAAE0W,OAAS,YAM1B1W,EAAE6qD,KAAOn+D,EAAIq+D,gBAAgBjvD,GAC7BkvD,YAAW,WAAct+D,EAAIu+D,gBAAgBjrD,EAAE6qD,KAAO,GAAE,KACxDG,YAAW,WAAc/mD,EAAMjE,EAAI,GAAE,GAExC,EAGC,qBAAsBmqD,UACtB,SAAiB5tD,EAAMV,EAAMI,GAG7B,GAFAJ,EAAOA,GAAQU,EAAKmuD,MAAQ,WAER,iBAATnuD,EAUT4tD,UAAUe,iBAAiBpvD,EAAIS,EAAMN,GAAOJ,QAT5C,GAAIwB,EAAYd,GACdmC,EAASnC,EAAMV,EAAMI,OAChB,CACL,IAAIvP,EAAIm9D,SAASY,cAAc,KAC/B/9D,EAAEm+D,KAAOtuD,EACT7P,EAAEgqB,OAAS,SACXs0C,YAAW,WAAc/mD,EAAMvX,EAAI,GACpC,CAIJ,EAGC,SAAiBoP,EAAMuB,EAAM4G,EAAMpI,GASnC,IANAA,EAAQA,GAASstD,KAAK,GAAI,aAExBttD,EAAMguD,SAASsB,MACftvD,EAAMguD,SAASuB,KAAKC,UAAY,kBAGd,iBAATvvD,EAAmB,OAAO4C,EAAS5C,EAAMuB,EAAM4G,GAThB,IAWtChI,EAAsB,6BAAdH,EAAKsqB,KACb15B,EAAW,eAAes8D,KAAKzsD,EAAQ+uD,cAAgB/uD,EAAQgvD,OAC/DvrD,EAAc,eAAegpD,KAAKmB,UAAUC,WAEhD,IAAKpqD,GAAgB/D,GAASvP,GAAa4S,IAAyC,oBAAfksD,WAA4B,CAE/F,IAAIjiD,EAAS,IAAIiiD,WACjBjiD,EAAOkiD,UAAY,WACjB,IAAInsD,EAAMiK,EAAOhd,OACjB+S,EAAMU,EAAcV,EAAMA,EAAI7D,QAAQ,eAAgB,yBAClDI,EAAOA,EAAMivD,SAASD,KAAOvrD,EAC5BwrD,SAAWxrD,EAChBzD,EAAQ,IACT,EACD0N,EAAOmiD,cAAc5vD,EACtB,KAAM,KACDI,EAAMK,EAAQguD,KAAOhuD,EAAQiuD,UAC7Bj7B,EAAMrzB,EAAI6uD,gBAAgBjvD,GAC1BD,EAAOA,EAAMivD,SAAWv7B,EACvBu7B,SAASD,KAAOt7B,EACrB1zB,EAAQ,KACRmvD,YAAW,WAAc9uD,EAAI+uD,gBAAgB17B,EAAM,GAAE,IACtD,CACF,GAGHhzB,EAAQ8tD,OAASxuD,EAAOwuD,OAASxuD,EAG/B9N,EAAOC,QAAU6N,mHCpKnB,IAAIguD,EAAWG,OAAOH,SAElBxtD,EAAO2tD,OAAO3tD,KAEdivD,EAActB,OAAOsB,YAErBpC,EAAiBc,OAAOd,eAExB18D,EAAU,SAAUm/D,EAAK1G,GAC3B,IAAK,IAAIv4D,EAAI,EAAGooB,EAAM62C,EAAI5+D,OAAQL,EAAIooB,EAAKpoB,IACzCu4D,EAAK0G,EAAIj/D,GAEb,EAEIk/D,EAA0B,SAAU/B,GACtC,OAAO,SAAUgC,EAAKrI,EAAOr+B,GAC3B,IAAI2mC,EAAKjC,EAASY,cAAcoB,GAChC,GAAa,MAATrI,EACF,IAAK,IAAIuI,KAAQvI,EAAO,CACtB,IAAIhlD,EAAMglD,EAAMuI,GACL,MAAPvtD,IACc,MAAZstD,EAAGC,GACLD,EAAGC,GAAQvtD,EAEXstD,EAAGE,aAAaD,EAAMvtD,GAG5B,CAOF,OALgB,MAAZ2mB,GACF34B,EAAQ24B,GAAU,SAAU8mC,GAC1BH,EAAGI,YAA6B,kBAAVD,EAAqBpC,EAASsC,eAAeF,GAASA,EAC9E,IAEKH,CACT,CACF,EAEIrB,EAAgBmB,EAAwB/B,GAYxCuC,EAAiB,SAAUT,EAAKI,GAClC,MAAO,CAAC,EAAEK,eAAeC,KAAKV,EAAKI,EACrC,EAEI16D,EAAc,SAAUs6D,GAC1B,OAAQ,GAAKA,GAAKt6D,aACpB,EAOIi7D,EAAS,aAETC,EAAa,eAAiBD,EAE9BE,EAAStD,GAAkB,cAAeA,GAAkB,oBAAqBA,EAAe34C,UAEhGk8C,EAAeD,GAAUlB,GAAe,iBAAkBA,EAAY/6C,aAAe,cAAe+6C,EAAY/6C,UAAUm8C,cAE1HC,EAAU,SAAUj2C,EAAQk2C,EAAW3H,GAErCvuC,EAAOm2C,iBACTn2C,EAAOm2C,iBAAiBD,EAAW3H,GAAM,GAEzCvuC,EAAOo2C,YAAY,KAAOF,EAAW3H,EAEzC,EAEI8H,EAAW,SAAUr2C,EAAQk2C,EAAW3H,GAEtCvuC,EAAOs2C,oBACTt2C,EAAOs2C,oBAAoBJ,EAAW3H,GAAM,GAE5CvuC,EAAOu2C,YAAY,KAAOL,EAAW3H,EAEzC,EA8FIiI,EAAqB,CACvBC,MAnDU,yuDAoDVC,oBAlDsB,0oBAmDtBC,KAjDS,grDAkDTC,YAhDe,grDAiDfC,mBA/CqB,8hBAkDnBC,EAA2B,SAAUC,EAAmBC,GAC1D,MAAO,+BAAiCD,EAAoB,KAAOP,EAAmBd,EAAec,EAAoBQ,GAAqBA,EAAoBD,GAAqB,GACzL,EAEIE,EAAiB,SAAUC,GAC7B,GAAoB,MAAhBA,EACF,OAAOV,EAAmBC,MAG5B,GAAIf,EAAec,EAAoBU,GACrC,OAAOV,EAAmBU,GAG5B,IAAIC,EAzCM,SAAUC,EAAKC,EAAKC,EAAIC,GACvB,MAAPF,IACFA,EAAM,KAEE,MAANC,IACFA,EAAK,KAEmB,MAAtBC,IACFA,EAAqBjE,OAAOiE,oBAE9B,IAAItC,EAAM,CAAC,EAOX,OANAn/D,EAAQshE,EAAIjoD,MAAMkoD,IAAM,SAAU7jC,GAChC,GAAc,KAAVA,EAAc,CAChB,IAAIgkC,EAAMhkC,EAAMrkB,MAAMmoD,GACtBrC,EAAIsC,EAAmBC,EAAI,KAAkB,MAAVA,EAAI,GAAaD,EAAmBC,EAAIrtD,MAAM,GAAG7T,KAAKghE,SAAOttD,CAClG,CACF,IACOirD,CACT,CAuBqBwC,CAAMP,EAAc,IAAK,KAAK,SAAUE,GACzD,OAAOA,EAAIryD,QAAQ,+BAAgC,GACrD,IAEA,OAAOyxD,EAAmBd,EAAec,EAAoBW,EAAa,kBAAoBA,EAAa,iBAAmB,SAC5HL,EAAyB,QAASK,EAAaV,OAC/CK,EAAyB,OAAQK,EAAaR,KAClD,EAEI1sD,EAAO,CACT,qBAAsB,CACpBytD,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,snBAIZ+/C,SAAU,CACRyD,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,oWAIZ2xC,IAAK,CACH6R,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,gqBAIZyjD,MAAO,CACLD,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,ymBAIZ,eAAgB,CACdwjD,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,oKAIZ,cAAe,CACbwjD,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,mlBAIZ,QAAW,CACTwjD,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,ybAIZ0jD,KAAM,CACJF,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,oNAIZ,cAAe,CACbwjD,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,0XAIZ,gBAAiB,CACfwjD,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,ohCAIZkoC,KAAM,CACJsb,QAAS,CACP,GAAM,CACJrW,MAAO,GACPntC,KAAM,+eAMV2jD,EAAU,SAAUC,EAAMp4B,GAC5Bo4B,EAAOn9D,EAAYm9D,GAAM/yD,QAAQ,YAAa,IACzC2wD,EAAezrD,EAAM6tD,KACxBA,EAAO,eAGT,IAAIC,EAAgBr4B,GAAU,IAAiC,MAAMz1B,EAAK6tD,GAAMJ,QAAqC,GAAK,GAEtHM,EAAM/tD,EAAK6tD,GAAMJ,QAAQK,GAE7B,MAAO,qBAAuBC,EAAI3W,MAAQ,IAAM0W,EAAgB,YAAer4B,EAASs4B,EAAI3W,MAAQ0W,EAAiB,aAAer4B,EAAS,4BAA8Bo4B,EAAO,wBAA0BE,EAAI9jD,KAAO,QACzN,EAEI+jD,EAAS,CAAC,EAEVC,EAAQ,SAAUC,EAAK5J,GACzB,IAAIlhC,EAAQ4qC,EAAOE,KAASF,EAAOE,GAAO,IAC1C,KAAI9qC,EAAMp3B,KAAKs4D,GAAQ,GAAvB,CAIA,IAAI1vB,EA3Ra,SAAU0vB,GAC3B,IAAI6J,EACJ,OAAO,WACAA,IACHA,EAAY,EACZ7J,EAAKj4C,MAAM4C,KAAMvf,WAErB,CACF,CAmRiB0+D,EAAa,WAE1B,WADOJ,EAAOE,GACN5J,EAAOlhC,EAAMjgB,SACnBmhD,EAAKj4C,MAAM,KAAM3c,UAErB,IAEA,GAAIm8D,EAAQ,CACV,IAAIwC,EAAM,IAAI9F,EACdyD,EAAQqC,EAAK,QAASz5B,GACtBo3B,EAAQqC,EAAK,QAASz5B,GACtBo3B,EAAQqC,EAAK,QAAQ,WACnB,IAAIruD,EACJ,IACEA,EAAOsuD,KAAKd,MAAMv+C,KAAKs/C,aACzB,CAAE,MAAO1F,GAEP,YADAj0B,EAASi0B,EAEX,CACAj0B,EAAyB,MAAhB3lB,KAAK85C,OAAgB/oD,EAChC,IACAquD,EAAI7F,KAAK,MAAO0F,GAChBG,EAAIvF,MACN,KAAO,CACL,IAAI0F,EAAgBv/C,MAAQo6C,OAC5BmF,EAAcC,EAAI,SAAUC,GAC1BF,EAAcC,EAAI,KAClB75B,EAA8B,MAArB85B,EAAKC,KAAK5F,OAAgB2F,EAAK1uD,KAC1C,EACA,IAAI4uD,EAAS3D,EAAwBuD,EAActF,SAAtC+B,CAAgD,SAAU,CACrE4D,OAAO,EACPtK,IAAK2J,IAA6B,IAAtBA,EAAIppC,QAAQ,KAAc,IAAM,KAAO,eAEjDgmC,EAAgD,WAC9C0D,EAAcC,GAChBD,EAAcC,EAAE,CACdE,KAAM,CAAC,GAGb,EACA3C,EAAQ4C,EAAQ,OAAQ9D,GACxBkB,EAAQ4C,EAAQ,QAAS9D,GA3QkC,SAAU/0C,EAAQ+4C,EAAOxK,GACtF,GAAyB,MAArBvuC,EAAOg5C,WAAoB,CAC7B,IAAI9C,EAAY,mBAOhBD,EAAQj2C,EAAQk2C,GAND,SAAXr3B,IACF,GAAIk6B,EAAMzG,KAAKtyC,EAAOg5C,YAEpB,OADA3C,EAASr2C,EAAQk2C,EAAWr3B,GACrB0vB,EAAKj4C,MAAM4C,KAAMvf,UAE5B,GAEF,CACF,CAiQIs/D,CAAqBJ,EAAQ,OAAQ9D,GACrC0D,EAActF,SAAS+F,qBAAqB,QAAQ,GAAG1D,YAAYqD,EACrE,CA9CA,CA+CF,EAEIM,EAAW,SAAUC,EAAMxjE,EAAS24D,GACtC,IAAIwF,EAAgBmB,EAAwBkE,EAAKC,eAE7CC,EAAQF,EAAK5D,YAAYzB,EAAc,QAAS,CAClDrkC,KAAM,cAGJ6pC,EAxPe,25BAwPYtC,EAAerhE,EAAQ,sBAGlD0jE,EAAME,WACRF,EAAME,WAAWD,QAAUA,EAE3BD,EAAM9D,YAAY4D,EAAKC,cAAc5D,eAAe8D,IAGtD,IAAIE,EAAgD,UAAtC9+D,EAAY/E,EAAQ,cAE9B8jE,EAAM3F,EAAc,IAAK,CAC3B4F,UAAW,MACXxF,KAAMv+D,EAAQu+D,KACdD,IAAK,WACLl0C,OAAQ,SACRy0C,MAAO7+D,EAAQ6+D,YAASzqD,EACxB,aAAcpU,EAAQ,oBAAiBoU,EACvC4vD,UAAW/B,EAAQjiE,EAAQ,aAAc6jE,EAAU,GAAK,IAAM,UAC7D,CACD1F,EAAc,OAAQ,CAAC,EAAG,CAACn+D,EAAQ,cAAgB,OAGjDikE,EAAST,EAAK5D,YAAYzB,EAAc,MAAO,CACjD4F,UAAW,UAAYF,EAAU,aAAe,KAC/C,CACDC,KAGEI,EAAWJ,EAAII,SAAS/0D,QAAQ,MAAO,IAC3C,IAAK,IAAM+0D,GAAU50D,UAAU40D,EAASzjE,OAASu/D,MAAoB,IAAMA,EAGzE,OAFA8D,EAAIK,gBAAgB,aACpBxL,EAAKsL,GAIP,IAAI3lD,GAAQ,KAAOwlD,EAAIM,UAAU7qD,MAAM,OAOvC,KANM2qD,IAAalE,GAAUkE,IAAa,QAAUlE,IAAuB,YAAZ1hD,EAAK,IACjE4lD,IAAalE,GAAsB,aAAZ1hD,EAAK,KAAkC,aAAZA,EAAK,IAAkC,WAAZA,EAAK,IAA+B,aAAZA,EAAK,KAC1G4lD,IAAa,YAAclE,KAC5B8D,EAAI15C,OAAS,QAGiC,SAA5CrlB,EAAY/E,EAAQ,qBACtBkkE,IAAalE,GACD,gBAAZ1hD,EAAK,IACO,aAAZA,EAAK,IACO,SAAZA,EAAK,IACO,UAAZA,EAAK,IACO,MAAZA,EAAK,GANP,CAWA,IAAIigD,EAAM8F,EACV,IAAK/lD,EAAK,IAAMA,EAAK,GACnB+lD,EAAW,YACX9F,EAAO,sBACF,IAAKjgD,EAAK,IAAMA,EAAK,GAC1B+lD,EAAW,mBACX9F,EAAO,mBACF,GAAKjgD,EAAK,IAAkB,iBAAZA,EAAK,GAGrB,GAAKA,EAAK,IAAkB,SAAZA,EAAK,GAGrB,IAAgB,WAAZA,EAAK,GAKd,YADAq6C,EAAKsL,GAHLI,EAAW,oBACX9F,EAAO,SAIT,MARE8F,EAAW,cACX9F,EAAO,cAJP8F,EAAW,oBACX9F,EAAO,YAYT,IAAI+F,EAAMhmD,EAAK,GAAK,UAAYA,EAAK,GAAK,IAAMA,EAAK,GAAK,UAAYA,EAAK,GAC3EgkD,EAAMvC,KAAKz8C,KAAM28C,EAAaqE,GAAK,SAAUpH,EAAO6F,GAClD,IAAK7F,EAAO,CACV,IAAI7oD,EAAO0uD,EAAKsB,GAChBJ,EAAOrE,YAAYzB,EAAc,IAAK,CACpC4F,UAAW,eACXxF,KAAMwE,EAAKwB,SAAWhG,EACtBD,IAAK,WACLl0C,OAAQ,SACR,aAAc/V,EAAO,IAAMgwD,EAASl1D,QAAQ,UAAW,IAAIA,QAAQ,IAAK,KAAKoF,MAAM,EAAGF,EAAO,GAAK,OAAID,GAAa,cAClH,EACA,GAAKC,GAAMlF,QAAQ,wBAAyB,OAEjD,CACAwpD,EAAKsL,EACP,GAtCA,MAFEtL,EAAKsL,EAyCT,EAEIO,EAAmB9G,OAAO8G,kBAA+C,EAEzEC,EAAY,SAAUp9B,GACxB,OAAQm9B,EAAmB,EAAIz0D,EAAK8L,KAAK9L,EAAKqK,MAAMitB,EAAKm9B,GAAoBA,EAAmB,GAAK,EAAIz0D,EAAK8L,KAAKwrB,KAAQ,CAC7H,EAaI/jC,EAAM,SAAUk8D,EAAIx0B,GACtBw0B,EAAGkE,MAAMjY,MAAQzgB,EAAK,GAAK,KAC3Bw0B,EAAGkE,MAAM55B,OAASkB,EAAK,GAAK,IAC9B,EAEI05B,EAAS,SAAU1kE,EAAS24D,GAC9B,GAAe,MAAX34D,GAA2B,MAAR24D,EAMvB,GAHI34D,EAAQ2kE,eACV3kE,EAnYe,SAAU4kE,GAC3B,IAAI5kE,EAAU,CACZu+D,KAAMqG,EAAOrG,KACbM,MAAO+F,EAAO/F,MACd,aAAc+F,EAAOD,aAAa,eAYpC,OATAzkE,EAAQ,CAAC,OAAQ,eAAgB,OAAQ,OAAQ,eAAe,SAAU2kE,GACxE,IAAIC,EAAY,QAAUD,EAC1B7kE,EAAQ8kE,GAAaF,EAAOD,aAAaG,EAC3C,IAE4B,MAAxB9kE,EAAQ,eACVA,EAAQ,aAAe4kE,EAAOG,aAAeH,EAAO7F,WAG/C/+D,CACT,CAkXcglE,CAAahlE,IAErBmgE,EAAc,CAChB,IAAI8E,EAAO9G,EAAc,QACzBoF,EAAS0B,EAAK7E,aAAa,CAAE7e,KAAM,WAAavhD,GAAS,WACvD24D,EAAKsM,EACP,GACF,KAAO,CACL,IAAIC,EAAS/G,EAAc,SAAU,CACnCvF,IAAK,eACLiG,MAAO7+D,EAAQ6+D,YAASzqD,EACxB+wD,mBAAmB,EACnBC,UAAW,KACXC,YAAa,IAEf/hE,EAAI4hE,EAAQ,CAAC,EAAG,IAChBA,EAAOxB,MAAM4B,OAAS,OAqBtBjF,EAAQ6E,EAAQ,QApBD,SAAXj8B,IACF,IACI61B,EADA+D,EAAgBqC,EAAOrC,cAE3B,IACE/D,EAAO+D,EAActF,SAASuB,IAChC,CAAE,MAAOgE,GAEP,YADAvF,EAASuB,KAAKc,YAAYsF,EAAOK,WAAWC,YAAYN,GAE1D,CACAzE,EAASyE,EAAQ,OAAQj8B,GACzBs6B,EAASxD,KAAK8C,EAAe/D,EAAM9+D,GAAS,SAAUikE,GACpD,IAAIj5B,EAjDF,SAAUw0B,GAClB,IAAI/T,EAAQ+T,EAAGiG,YACX37B,EAAS01B,EAAGkG,aAChB,GAAIlG,EAAGmG,sBAAuB,CAC5B,IAAIC,EAAqBpG,EAAGmG,wBAC5Bla,EAAQ17C,EAAKc,IAAI46C,EAAOgZ,EAAUmB,EAAmBna,QACrD3hB,EAAS/5B,EAAKc,IAAIi5B,EAAQ26B,EAAUmB,EAAmB97B,QACzD,CACA,MAAO,CAAC2hB,EAAO3hB,EACjB,CAwCmB9zB,CAAIiuD,GACfiB,EAAOK,WAAWC,YAAYN,GArbtB,SAAU96C,EAAQk2C,EAAW3H,GAK3C0H,EAAQj2C,EAAQk2C,GAJD,SAAXr3B,IAEF,OADAw3B,EAASr2C,EAAQk2C,EAAWr3B,GACrB0vB,EAAKj4C,MAAM4C,KAAMvf,UAC1B,GAEF,CAgbQ8hE,CAAUX,EAAQ,QAAQ,WACxB5hE,EAAI4hE,EAAQl6B,EACd,IACAk6B,EAAOtM,IAAMkN,8DAAmBZ,EAAO9G,KArY/B,SAAUiB,EAAKoC,EAAKC,EAAIqE,GAC3B,MAAPtE,IACFA,EAAM,KAEE,MAANC,IACFA,EAAK,KAEmB,MAAtBqE,IACFA,EAAqBrI,OAAOqI,oBAE9B,IAAI9Z,EAAS,GACb,IAAK,IAAImS,KAAQiB,EAAK,CACpB,IAAI9nD,EAAQ8nD,EAAIjB,GACH,MAAT7mD,GACF00C,EAAO5rD,KAAK0lE,EAAmB3H,GAAQsD,EAAKqE,EAAmBxuD,GAEnE,CACA,OAAO00C,EAAOvrD,KAAK+gE,EACrB,CAmXsDuE,CAAUhmE,IACxD24D,EAAKuM,EACP,GACF,IAEA3H,EAASuB,KAAKc,YAAYsF,EAC5B,CACF,qBC9hBAzjE,EAAOC,QASP,SAAiB6Q,EAAKS,GAClB,IAAIuY,EAAMvY,EAAE,GAAIwY,EAAMxY,EAAE,GAAIyY,EAAMzY,EAAE,GAAI0Y,EAAM1Y,EAAE,GAC5C2Y,EAAM3Y,EAAE,GAAI4Y,EAAM5Y,EAAE,GAAI6Y,EAAM7Y,EAAE,GAAI8Y,EAAM9Y,EAAE,GAC5C+Y,EAAM/Y,EAAE,GAAIgZ,EAAMhZ,EAAE,GAAIiZ,EAAMjZ,EAAE,IAAKkZ,EAAMlZ,EAAE,IAC7CmZ,EAAMnZ,EAAE,IAAKoZ,EAAMpZ,EAAE,IAAKqZ,EAAMrZ,EAAE,IAAKsZ,EAAMtZ,EAAE,IAkBnD,OAhBAT,EAAI,GAAQqZ,GAAOK,EAAMK,EAAMJ,EAAMG,GAAOL,GAAOH,EAAMS,EAAMR,EAAMO,GAAOD,GAAOP,EAAMK,EAAMJ,EAAMG,GACrG1Z,EAAI,KAAQiZ,GAAOS,EAAMK,EAAMJ,EAAMG,GAAOL,GAAOP,EAAMa,EAAMZ,EAAMW,GAAOD,GAAOX,EAAMS,EAAMR,EAAMO,IACrG1Z,EAAI,GAAQiZ,GAAOK,EAAMS,EAAMR,EAAMO,GAAOT,GAAOH,EAAMa,EAAMZ,EAAMW,GAAOD,GAAOX,EAAMK,EAAMJ,EAAMG,GACrGtZ,EAAI,KAAQiZ,GAAOK,EAAMK,EAAMJ,EAAMG,GAAOL,GAAOH,EAAMS,EAAMR,EAAMO,GAAOD,GAAOP,EAAMK,EAAMJ,EAAMG,IACrGtZ,EAAI,KAAQoZ,GAAOM,EAAMK,EAAMJ,EAAMG,GAAON,GAAOF,EAAMS,EAAMR,EAAMO,GAAOF,GAAON,EAAMK,EAAMJ,EAAMG,IACrG1Z,EAAI,GAAQgZ,GAAOU,EAAMK,EAAMJ,EAAMG,GAAON,GAAON,EAAMa,EAAMZ,EAAMW,GAAOF,GAAOV,EAAMS,EAAMR,EAAMO,GACrG1Z,EAAI,KAAQgZ,GAAOM,EAAMS,EAAMR,EAAMO,GAAOV,GAAOF,EAAMa,EAAMZ,EAAMW,GAAOF,GAAOV,EAAMK,EAAMJ,EAAMG,IACrGtZ,EAAI,GAAQgZ,GAAOM,EAAMK,EAAMJ,EAAMG,GAAON,GAAOF,EAAMS,EAAMR,EAAMO,GAAOF,GAAON,EAAMK,EAAMJ,EAAMG,GACrGtZ,EAAI,GAAQoZ,GAAOK,EAAMM,EAAMJ,EAAME,GAAOL,GAAOH,EAAMU,EAAMR,EAAMM,GAAOD,GAAOP,EAAMM,EAAMJ,EAAME,GACrGzZ,EAAI,KAAQgZ,GAAOS,EAAMM,EAAMJ,EAAME,GAAOL,GAAOP,EAAMc,EAAMZ,EAAMU,GAAOD,GAAOX,EAAMU,EAAMR,EAAMM,IACrGzZ,EAAI,IAAQgZ,GAAOK,EAAMU,EAAMR,EAAMM,GAAOT,GAAOH,EAAMc,EAAMZ,EAAMU,GAAOD,GAAOX,EAAMM,EAAMJ,EAAME,GACrGrZ,EAAI,MAAQgZ,GAAOK,EAAMM,EAAMJ,EAAME,GAAOL,GAAOH,EAAMU,EAAMR,EAAMM,GAAOD,GAAOP,EAAMM,EAAMJ,EAAME,IACrGrZ,EAAI,MAAQoZ,GAAOK,EAAMK,EAAMJ,EAAMG,GAAOL,GAAOH,EAAMS,EAAMR,EAAMO,GAAOD,GAAOP,EAAMK,EAAMJ,EAAMG,IACrGzZ,EAAI,IAAQgZ,GAAOS,EAAMK,EAAMJ,EAAMG,GAAOL,GAAOP,EAAMa,EAAMZ,EAAMW,GAAOD,GAAOX,EAAMS,EAAMR,EAAMO,GACrGzZ,EAAI,MAAQgZ,GAAOK,EAAMS,EAAMR,EAAMO,GAAOT,GAAOH,EAAMa,EAAMZ,EAAMW,GAAOD,GAAOX,EAAMK,EAAMJ,EAAMG,IACrGrZ,EAAI,IAAQgZ,GAAOK,EAAMK,EAAMJ,EAAMG,GAAOL,GAAOH,EAAMS,EAAMR,EAAMO,GAAOD,GAAOP,EAAMK,EAAMJ,EAAMG,GAC9FrZ,CACX,qBChCA9Q,EAAOC,QAQP,SAAesR,GACX,IAAIT,EAAM,IAAIvP,aAAa,IAiB3B,OAhBAuP,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACLT,CACX,qBC3BA9Q,EAAOC,QASP,SAAc6Q,EAAKS,GAiBf,OAhBAT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACLT,CACX,qBC3BA9Q,EAAOC,QAOP,WACI,IAAI6Q,EAAM,IAAIvP,aAAa,IAiB3B,OAhBAuP,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACX,qBC1BA9Q,EAAOC,QAQP,SAAqBsR,GACjB,IAAIuY,EAAMvY,EAAE,GAAIwY,EAAMxY,EAAE,GAAIyY,EAAMzY,EAAE,GAAI0Y,EAAM1Y,EAAE,GAC5C2Y,EAAM3Y,EAAE,GAAI4Y,EAAM5Y,EAAE,GAAI6Y,EAAM7Y,EAAE,GAAI8Y,EAAM9Y,EAAE,GAC5C+Y,EAAM/Y,EAAE,GAAIgZ,EAAMhZ,EAAE,GAAIiZ,EAAMjZ,EAAE,IAAKkZ,EAAMlZ,EAAE,IAC7CmZ,EAAMnZ,EAAE,IAAKoZ,EAAMpZ,EAAE,IAAKqZ,EAAMrZ,EAAE,IAAKsZ,EAAMtZ,EAAE,IAgBnD,OAdUuY,EAAMK,EAAMJ,EAAMG,IAWlBM,EAAMK,EAAMJ,EAAMG,IAVlBd,EAAMM,EAAMJ,EAAME,IASlBK,EAAMM,EAAMJ,EAAME,IARlBb,EAAMO,EAAMJ,EAAMC,IAOlBK,EAAMK,EAAMJ,EAAMG,IANlBZ,EAAMK,EAAMJ,EAAMG,IAKlBG,EAAMO,EAAMJ,EAAMC,IAJlBX,EAAMM,EAAMJ,EAAME,IAGlBG,EAAMM,EAAMJ,EAAME,IAFlBV,EAAMK,EAAMJ,EAAMG,IAClBE,EAAMK,EAAMJ,EAAMG,EAShC,qBC7BA1qB,EAAOC,QASP,SAAkB6Q,EAAK1C,GACnB,IAAIiL,EAAIjL,EAAE,GAAIkL,EAAIlL,EAAE,GAAIoS,EAAIpS,EAAE,GAAI8d,EAAI9d,EAAE,GACpC6uC,EAAK5jC,EAAIA,EACTmrD,EAAKlrD,EAAIA,EACTmrD,EAAKjkD,EAAIA,EAETkkD,EAAKrrD,EAAI4jC,EACT0nB,EAAKrrD,EAAI2jC,EACT2nB,EAAKtrD,EAAIkrD,EACTK,EAAKrkD,EAAIy8B,EACT6nB,EAAKtkD,EAAIgkD,EACTO,EAAKvkD,EAAIikD,EACTO,EAAK94C,EAAI+wB,EACTgoB,EAAK/4C,EAAIs4C,EACTU,EAAKh5C,EAAIu4C,EAsBb,OApBA3zD,EAAI,GAAK,EAAI8zD,EAAKG,EAClBj0D,EAAI,GAAK6zD,EAAKO,EACdp0D,EAAI,GAAK+zD,EAAKI,EACdn0D,EAAI,GAAK,EAETA,EAAI,GAAK6zD,EAAKO,EACdp0D,EAAI,GAAK,EAAI4zD,EAAKK,EAClBj0D,EAAI,GAAKg0D,EAAKE,EACdl0D,EAAI,GAAK,EAETA,EAAI,GAAK+zD,EAAKI,EACdn0D,EAAI,GAAKg0D,EAAKE,EACdl0D,EAAI,IAAM,EAAI4zD,EAAKE,EACnB9zD,EAAI,IAAM,EAEVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EAEHA,CACX,qBC9CA9Q,EAAOC,QAcP,SAAsB6Q,EAAK6V,EAAKC,GAC9B,IAAIvjB,EAAGsN,EAAGlC,EACN4K,EAAIuN,EAAK,GACTtN,EAAIsN,EAAK,GACTpG,EAAIoG,EAAK,GACTG,EAAMzY,KAAKoD,KAAK2H,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,GAExC,GAAIlS,KAAKkD,IAAIuV,GAAO,KAClB,OAAO,KA6BT,OAzBA1N,GADA0N,EAAM,EAAIA,EAEVzN,GAAKyN,EACLvG,GAAKuG,EAEL1jB,EAAIiL,KAAK4K,IAAIyN,GACbhW,EAAIrC,KAAK0K,IAAI2N,GACblY,EAAI,EAAIkC,EAGRG,EAAI,GAAKuI,EAAIA,EAAI5K,EAAIkC,EACrBG,EAAI,GAAKwI,EAAID,EAAI5K,EAAI+R,EAAInd,EACzByN,EAAI,GAAK0P,EAAInH,EAAI5K,EAAI6K,EAAIjW,EACzByN,EAAI,GAAK,EACTA,EAAI,GAAKuI,EAAIC,EAAI7K,EAAI+R,EAAInd,EACzByN,EAAI,GAAKwI,EAAIA,EAAI7K,EAAIkC,EACrBG,EAAI,GAAK0P,EAAIlH,EAAI7K,EAAI4K,EAAIhW,EACzByN,EAAI,GAAK,EACTA,EAAI,GAAKuI,EAAImH,EAAI/R,EAAI6K,EAAIjW,EACzByN,EAAI,GAAKwI,EAAIkH,EAAI/R,EAAI4K,EAAIhW,EACzByN,EAAI,IAAM0P,EAAIA,EAAI/R,EAAIkC,EACtBG,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,oBCpDA9Q,EAAOC,QAiBP,SAAiC6Q,EAAK1C,EAAG7O,GAErC,IAAI8Z,EAAIjL,EAAE,GAAIkL,EAAIlL,EAAE,GAAIoS,EAAIpS,EAAE,GAAI8d,EAAI9d,EAAE,GACpC6uC,EAAK5jC,EAAIA,EACTmrD,EAAKlrD,EAAIA,EACTmrD,EAAKjkD,EAAIA,EAETkkD,EAAKrrD,EAAI4jC,EACTkoB,EAAK9rD,EAAImrD,EACTY,EAAK/rD,EAAIorD,EACTG,EAAKtrD,EAAIkrD,EACTa,EAAK/rD,EAAImrD,EACTM,EAAKvkD,EAAIikD,EACTO,EAAK94C,EAAI+wB,EACTgoB,EAAK/4C,EAAIs4C,EACTU,EAAKh5C,EAAIu4C,EAmBb,OAjBA3zD,EAAI,GAAK,GAAK8zD,EAAKG,GACnBj0D,EAAI,GAAKq0D,EAAKD,EACdp0D,EAAI,GAAKs0D,EAAKH,EACdn0D,EAAI,GAAK,EACTA,EAAI,GAAKq0D,EAAKD,EACdp0D,EAAI,GAAK,GAAK4zD,EAAKK,GACnBj0D,EAAI,GAAKu0D,EAAKL,EACdl0D,EAAI,GAAK,EACTA,EAAI,GAAKs0D,EAAKH,EACdn0D,EAAI,GAAKu0D,EAAKL,EACdl0D,EAAI,IAAM,GAAK4zD,EAAKE,GACpB9zD,EAAI,IAAM,EACVA,EAAI,IAAMvR,EAAE,GACZuR,EAAI,IAAMvR,EAAE,GACZuR,EAAI,IAAMvR,EAAE,GACZuR,EAAI,IAAM,EAEHA,CACX,qBCpDA9Q,EAAOC,QAaP,SAAqB6Q,EAAKvR,GAiBxB,OAhBAuR,EAAI,GAAKvR,EAAE,GACXuR,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKvR,EAAE,GACXuR,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAMvR,EAAE,GACZuR,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACT,qBC/BA9Q,EAAOC,QAaP,SAAyB6Q,EAAKvR,GAiB5B,OAhBAuR,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAMvR,EAAE,GACZuR,EAAI,IAAMvR,EAAE,GACZuR,EAAI,IAAMvR,EAAE,GACZuR,EAAI,IAAM,EACHA,CACT,qBC/BA9Q,EAAOC,QAaP,SAAuB6Q,EAAK6V,GACxB,IAAItjB,EAAIiL,KAAK4K,IAAIyN,GACbhW,EAAIrC,KAAK0K,IAAI2N,GAmBjB,OAhBA7V,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKH,EACTG,EAAI,GAAKzN,EACTyN,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAMzN,EACVyN,EAAI,IAAMH,EACVG,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACX,oBCnCA9Q,EAAOC,QAaP,SAAuB6Q,EAAK6V,GACxB,IAAItjB,EAAIiL,KAAK4K,IAAIyN,GACbhW,EAAIrC,KAAK0K,IAAI2N,GAmBjB,OAhBA7V,EAAI,GAAKH,EACTG,EAAI,GAAK,EACTA,EAAI,IAAMzN,EACVyN,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKzN,EACTyN,EAAI,GAAK,EACTA,EAAI,IAAMH,EACVG,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACX,qBCnCA9Q,EAAOC,QAaP,SAAuB6Q,EAAK6V,GACxB,IAAItjB,EAAIiL,KAAK4K,IAAIyN,GACbhW,EAAIrC,KAAK0K,IAAI2N,GAmBjB,OAhBA7V,EAAI,GAAKH,EACTG,EAAI,GAAKzN,EACTyN,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAMzN,EACVyN,EAAI,GAAKH,EACTG,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACX,qBCnCA9Q,EAAOC,QAcP,SAAiB6Q,EAAK08C,EAAMC,EAAOF,EAAQD,EAAKM,EAAMC,GAClD,IAAIyX,EAAK,GAAK7X,EAAQD,GAClB+X,EAAK,GAAKjY,EAAMC,GAChBiY,EAAK,GAAK5X,EAAOC,GAiBrB,OAhBA/8C,EAAI,GAAa,EAAP88C,EAAY0X,EACtBx0D,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAa,EAAP88C,EAAY2X,EACtBz0D,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM28C,EAAQD,GAAQ8X,EAC1Bx0D,EAAI,IAAMw8C,EAAMC,GAAUgY,EAC1Bz0D,EAAI,KAAO+8C,EAAMD,GAAQ4X,EACzB10D,EAAI,KAAO,EACXA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAO+8C,EAAMD,EAAO,EAAK4X,EAC7B10D,EAAI,IAAM,EACHA,CACX,oBCnCA9Q,EAAOC,QAQP,SAAkB6Q,GAiBd,OAhBAA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAM,EACHA,CACX,wBC1BA9Q,EAAOC,QAAU,CACfiR,OAAQ9S,EAAQ,OACd0F,MAAO1F,EAAQ,OACfymB,KAAMzmB,EAAQ,OACdsoB,SAAUtoB,EAAQ,MAClBm6D,UAAWn6D,EAAQ,OACnB8Y,OAAQ9Y,EAAQ,OAChBqnE,QAASrnE,EAAQ,OACjB65D,YAAa75D,EAAQ,OACrBsY,SAAUtY,EAAQ,OAClByrB,UAAWzrB,EAAQ,OACnBgb,MAAOhb,EAAQ,OACfqrB,OAAQrrB,EAAQ,OAChBsrB,QAAStrB,EAAQ,OACjBurB,QAASvrB,EAAQ,OACjBwrB,QAASxrB,EAAQ,OACjBqqB,aAAcrqB,EAAQ,OACtBsnE,wBAAyBtnE,EAAQ,MACjC4qB,YAAa5qB,EAAQ,OACrB8qB,gBAAiB9qB,EAAQ,OACzBgrB,cAAehrB,EAAQ,OACvBirB,cAAejrB,EAAQ,MACvBkrB,cAAelrB,EAAQ,OACvBunE,SAAUvnE,EAAQ,OAClBwnE,QAASxnE,EAAQ,OACjBywD,YAAazwD,EAAQ,OACrBynE,2BAA4BznE,EAAQ,OACpCwwD,MAAOxwD,EAAQ,MACf6uD,OAAQ7uD,EAAQ,OAChB2hE,IAAK3hE,EAAQ,2BC7BjB4B,EAAOC,QASP,SAAgB6Q,EAAKS,GACjB,IAAIuY,EAAMvY,EAAE,GAAIwY,EAAMxY,EAAE,GAAIyY,EAAMzY,EAAE,GAAI0Y,EAAM1Y,EAAE,GAC5C2Y,EAAM3Y,EAAE,GAAI4Y,EAAM5Y,EAAE,GAAI6Y,EAAM7Y,EAAE,GAAI8Y,EAAM9Y,EAAE,GAC5C+Y,EAAM/Y,EAAE,GAAIgZ,EAAMhZ,EAAE,GAAIiZ,EAAMjZ,EAAE,IAAKkZ,EAAMlZ,EAAE,IAC7CmZ,EAAMnZ,EAAE,IAAKoZ,EAAMpZ,EAAE,IAAKqZ,EAAMrZ,EAAE,IAAKsZ,EAAMtZ,EAAE,IAE/CuZ,EAAMhB,EAAMK,EAAMJ,EAAMG,EACxBa,EAAMjB,EAAMM,EAAMJ,EAAME,EACxBc,EAAMlB,EAAMO,EAAMJ,EAAMC,EACxBe,EAAMlB,EAAMK,EAAMJ,EAAMG,EACxBe,EAAMnB,EAAMM,EAAMJ,EAAME,EACxBgB,EAAMnB,EAAMK,EAAMJ,EAAMG,EACxBgB,EAAMd,EAAMK,EAAMJ,EAAMG,EACxBW,EAAMf,EAAMM,EAAMJ,EAAME,EACxBY,EAAMhB,EAAMO,EAAMJ,EAAMC,EACxBa,EAAMhB,EAAMK,EAAMJ,EAAMG,EACxBa,EAAMjB,EAAMM,EAAMJ,EAAME,EACxBc,EAAMjB,EAAMK,EAAMJ,EAAMG,EAGxBc,EAAMZ,EAAMW,EAAMV,EAAMS,EAAMR,EAAMO,EAAMN,EAAMK,EAAMJ,EAAMG,EAAMF,EAAMC,EAE5E,IAAKM,EACD,OAAO,KAqBX,OAnBAA,EAAM,EAAMA,EAEZ5a,EAAI,IAAMqZ,EAAMsB,EAAMrB,EAAMoB,EAAMnB,EAAMkB,GAAOG,EAC/C5a,EAAI,IAAMkZ,EAAMwB,EAAMzB,EAAM0B,EAAMxB,EAAMsB,GAAOG,EAC/C5a,EAAI,IAAM6Z,EAAMQ,EAAMP,EAAMM,EAAML,EAAMI,GAAOS,EAC/C5a,EAAI,IAAM0Z,EAAMU,EAAMX,EAAMY,EAAMV,EAAMQ,GAAOS,EAC/C5a,EAAI,IAAMsZ,EAAMkB,EAAMpB,EAAMuB,EAAMpB,EAAMgB,GAAOK,EAC/C5a,EAAI,IAAMgZ,EAAM2B,EAAMzB,EAAMsB,EAAMrB,EAAMoB,GAAOK,EAC/C5a,EAAI,IAAM8Z,EAAMI,EAAMN,EAAMS,EAAMN,EAAME,GAAOW,EAC/C5a,EAAI,IAAMwZ,EAAMa,EAAMX,EAAMQ,EAAMP,EAAMM,GAAOW,EAC/C5a,EAAI,IAAMoZ,EAAMsB,EAAMrB,EAAMmB,EAAMjB,EAAMe,GAAOM,EAC/C5a,EAAI,IAAMiZ,EAAMuB,EAAMxB,EAAM0B,EAAMvB,EAAMmB,GAAOM,EAC/C5a,EAAI,KAAO4Z,EAAMQ,EAAMP,EAAMK,EAAMH,EAAMC,GAAOY,EAChD5a,EAAI,KAAOyZ,EAAMS,EAAMV,EAAMY,EAAMT,EAAMK,GAAOY,EAChD5a,EAAI,KAAOqZ,EAAMkB,EAAMnB,EAAMqB,EAAMnB,EAAMgB,GAAOM,EAChD5a,EAAI,KAAOgZ,EAAMyB,EAAMxB,EAAMsB,EAAMrB,EAAMoB,GAAOM,EAChD5a,EAAI,KAAO6Z,EAAMI,EAAML,EAAMO,EAAML,EAAME,GAAOY,EAChD5a,EAAI,KAAOwZ,EAAMW,EAAMV,EAAMQ,EAAMP,EAAMM,GAAOY,EAEzC5a,CACX,yBCtDA,IAAI4V,EAAWtoB,EAAQ,MAEvB4B,EAAOC,QAWP,SAAgB6Q,EAAK09C,EAAK50C,EAAQszC,GAC9B,IAAI4Y,EAAI9oB,EAAIC,EAAI8oB,EAAIC,EAAIxB,EAAIxxC,EAAIC,EAAIwxC,EAAI19C,EACpCk/C,EAAOzX,EAAI,GACX0X,EAAO1X,EAAI,GACX2X,EAAO3X,EAAI,GACX4X,EAAMlZ,EAAG,GACTmZ,EAAMnZ,EAAG,GACToZ,EAAMpZ,EAAG,GACTqZ,EAAU3sD,EAAO,GACjB4sD,EAAU5sD,EAAO,GACjB6sD,EAAU7sD,EAAO,GAErB,GAAItL,KAAKkD,IAAIy0D,EAAOM,GAAW,MAC3Bj4D,KAAKkD,IAAI00D,EAAOM,GAAW,MAC3Bl4D,KAAKkD,IAAI20D,EAAOM,GAAW,KAC3B,OAAO//C,EAAS5V,GAGpBkiB,EAAKizC,EAAOM,EACZtzC,EAAKizC,EAAOM,EACZ/B,EAAK0B,EAAOM,EAEZ1/C,EAAM,EAAIzY,KAAKoD,KAAKshB,EAAKA,EAAKC,EAAKA,EAAKwxC,EAAKA,GAK7CqB,EAAKO,GAFL5B,GAAM19C,GAEUu/C,GAHhBrzC,GAAMlM,GAINi2B,EAAKspB,GALLtzC,GAAMjM,GAKUq/C,EAAM3B,EACtBxnB,EAAKmpB,EAAMnzC,EAAKozC,EAAMrzC,GACtBjM,EAAMzY,KAAKoD,KAAKo0D,EAAKA,EAAK9oB,EAAKA,EAAKC,EAAKA,KAOrC6oB,GADA/+C,EAAM,EAAIA,EAEVi2B,GAAMj2B,EACNk2B,GAAMl2B,IAPN++C,EAAK,EACL9oB,EAAK,EACLC,EAAK,GAQT8oB,EAAK9yC,EAAKgqB,EAAKwnB,EAAKznB,EACpBgpB,EAAKvB,EAAKqB,EAAK9yC,EAAKiqB,EACpBunB,EAAKxxC,EAAKgqB,EAAK/pB,EAAK6yC,GAEpB/+C,EAAMzY,KAAKoD,KAAKq0D,EAAKA,EAAKC,EAAKA,EAAKxB,EAAKA,KAOrCuB,GADAh/C,EAAM,EAAIA,EAEVi/C,GAAMj/C,EACNy9C,GAAMz9C,IAPNg/C,EAAK,EACLC,EAAK,EACLxB,EAAK,GAyBT,OAjBA1zD,EAAI,GAAKg1D,EACTh1D,EAAI,GAAKi1D,EACTj1D,EAAI,GAAKkiB,EACTliB,EAAI,GAAK,EACTA,EAAI,GAAKksC,EACTlsC,EAAI,GAAKk1D,EACTl1D,EAAI,GAAKmiB,EACTniB,EAAI,GAAK,EACTA,EAAI,GAAKmsC,EACTnsC,EAAI,GAAK0zD,EACT1zD,EAAI,IAAM2zD,EACV3zD,EAAI,IAAM,EACVA,EAAI,MAAQg1D,EAAKG,EAAOjpB,EAAKkpB,EAAOjpB,EAAKkpB,GACzCr1D,EAAI,MAAQi1D,EAAKE,EAAOD,EAAKE,EAAO1B,EAAK2B,GACzCr1D,EAAI,MAAQkiB,EAAKizC,EAAOhzC,EAAKizC,EAAOzB,EAAK0B,GACzCr1D,EAAI,IAAM,EAEHA,CACX,qBCzFA9Q,EAAOC,QAUP,SAAkB6Q,EAAKS,EAAGxD,GACtB,IAAI+b,EAAMvY,EAAE,GAAIwY,EAAMxY,EAAE,GAAIyY,EAAMzY,EAAE,GAAI0Y,EAAM1Y,EAAE,GAC5C2Y,EAAM3Y,EAAE,GAAI4Y,EAAM5Y,EAAE,GAAI6Y,EAAM7Y,EAAE,GAAI8Y,EAAM9Y,EAAE,GAC5C+Y,EAAM/Y,EAAE,GAAIgZ,EAAMhZ,EAAE,GAAIiZ,EAAMjZ,EAAE,IAAKkZ,EAAMlZ,EAAE,IAC7CmZ,EAAMnZ,EAAE,IAAKoZ,EAAMpZ,EAAE,IAAKqZ,EAAMrZ,EAAE,IAAKsZ,EAAMtZ,EAAE,IAG/C4a,EAAMpe,EAAE,GAAIqe,EAAKre,EAAE,GAAIse,EAAKte,EAAE,GAAIue,EAAKve,EAAE,GAuB7C,OAtBA+C,EAAI,GAAKqb,EAAGrC,EAAMsC,EAAGlC,EAAMmC,EAAG/B,EAAMgC,EAAG5B,EACvC5Z,EAAI,GAAKqb,EAAGpC,EAAMqC,EAAGjC,EAAMkC,EAAG9B,EAAM+B,EAAG3B,EACvC7Z,EAAI,GAAKqb,EAAGnC,EAAMoC,EAAGhC,EAAMiC,EAAG7B,EAAM8B,EAAG1B,EACvC9Z,EAAI,GAAKqb,EAAGlC,EAAMmC,EAAG/B,EAAMgC,EAAG5B,EAAM6B,EAAGzB,EAEvCsB,EAAKpe,EAAE,GAAIqe,EAAKre,EAAE,GAAIse,EAAKte,EAAE,GAAIue,EAAKve,EAAE,GACxC+C,EAAI,GAAKqb,EAAGrC,EAAMsC,EAAGlC,EAAMmC,EAAG/B,EAAMgC,EAAG5B,EACvC5Z,EAAI,GAAKqb,EAAGpC,EAAMqC,EAAGjC,EAAMkC,EAAG9B,EAAM+B,EAAG3B,EACvC7Z,EAAI,GAAKqb,EAAGnC,EAAMoC,EAAGhC,EAAMiC,EAAG7B,EAAM8B,EAAG1B,EACvC9Z,EAAI,GAAKqb,EAAGlC,EAAMmC,EAAG/B,EAAMgC,EAAG5B,EAAM6B,EAAGzB,EAEvCsB,EAAKpe,EAAE,GAAIqe,EAAKre,EAAE,GAAIse,EAAKte,EAAE,IAAKue,EAAKve,EAAE,IACzC+C,EAAI,GAAKqb,EAAGrC,EAAMsC,EAAGlC,EAAMmC,EAAG/B,EAAMgC,EAAG5B,EACvC5Z,EAAI,GAAKqb,EAAGpC,EAAMqC,EAAGjC,EAAMkC,EAAG9B,EAAM+B,EAAG3B,EACvC7Z,EAAI,IAAMqb,EAAGnC,EAAMoC,EAAGhC,EAAMiC,EAAG7B,EAAM8B,EAAG1B,EACxC9Z,EAAI,IAAMqb,EAAGlC,EAAMmC,EAAG/B,EAAMgC,EAAG5B,EAAM6B,EAAGzB,EAExCsB,EAAKpe,EAAE,IAAKqe,EAAKre,EAAE,IAAKse,EAAKte,EAAE,IAAKue,EAAKve,EAAE,IAC3C+C,EAAI,IAAMqb,EAAGrC,EAAMsC,EAAGlC,EAAMmC,EAAG/B,EAAMgC,EAAG5B,EACxC5Z,EAAI,IAAMqb,EAAGpC,EAAMqC,EAAGjC,EAAMkC,EAAG9B,EAAM+B,EAAG3B,EACxC7Z,EAAI,IAAMqb,EAAGnC,EAAMoC,EAAGhC,EAAMiC,EAAG7B,EAAM8B,EAAG1B,EACxC9Z,EAAI,IAAMqb,EAAGlC,EAAMmC,EAAG/B,EAAMgC,EAAG5B,EAAM6B,EAAGzB,EACjC/Z,CACX,oBCzCA9Q,EAAOC,QAcP,SAAe6Q,EAAK08C,EAAMC,EAAOF,EAAQD,EAAKM,EAAMC,GAChD,IAAI6Y,EAAK,GAAKlZ,EAAOC,GACjBkZ,EAAK,GAAKpZ,EAASD,GACnBkY,EAAK,GAAK5X,EAAOC,GAiBrB,OAhBA/8C,EAAI,IAAM,EAAI41D,EACd51D,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EAAI61D,EACd71D,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,IAAM,EAAI00D,EACd10D,EAAI,IAAM,EACVA,EAAI,KAAO08C,EAAOC,GAASiZ,EAC3B51D,EAAI,KAAOw8C,EAAMC,GAAUoZ,EAC3B71D,EAAI,KAAO+8C,EAAMD,GAAQ4X,EACzB10D,EAAI,IAAM,EACHA,CACX,qBCnCA9Q,EAAOC,QAYP,SAAqB6Q,EAAK81D,EAAMvY,EAAQT,EAAMC,GAC1C,IAAIr/C,EAAI,EAAMF,KAAKrB,IAAI25D,EAAO,GAC1BpB,EAAK,GAAK5X,EAAOC,GAiBrB,OAhBA/8C,EAAI,GAAKtC,EAAI6/C,EACbv9C,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKtC,EACTsC,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,KAAO+8C,EAAMD,GAAQ4X,EACzB10D,EAAI,KAAO,EACXA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAO,EAAI+8C,EAAMD,EAAQ4X,EAC7B10D,EAAI,IAAM,EACHA,CACX,qBChCA9Q,EAAOC,QAaP,SAAoC6Q,EAAKg9C,EAAKF,EAAMC,GAChD,IAAIgZ,EAAQv4D,KAAKrB,IAAI6gD,EAAIgZ,UAAYx4D,KAAK0V,GAAG,KACzC+iD,EAAUz4D,KAAKrB,IAAI6gD,EAAIkZ,YAAc14D,KAAK0V,GAAG,KAC7CijD,EAAU34D,KAAKrB,IAAI6gD,EAAIoZ,YAAc54D,KAAK0V,GAAG,KAC7CmjD,EAAW74D,KAAKrB,IAAI6gD,EAAIsZ,aAAe94D,KAAK0V,GAAG,KAC/CqjD,EAAS,GAAOJ,EAAUE,GAC1BG,EAAS,GAAOT,EAAQE,GAkB5B,OAhBAj2D,EAAI,GAAKu2D,EACTv2D,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAKw2D,EACTx2D,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,KAAQm2D,EAAUE,GAAYE,EAAS,GAC3Cv2D,EAAI,IAAO+1D,EAAQE,GAAWO,EAAS,GACvCx2D,EAAI,IAAM+8C,GAAOD,EAAOC,GACxB/8C,EAAI,KAAO,EACXA,EAAI,IAAM,EACVA,EAAI,IAAM,EACVA,EAAI,IAAO+8C,EAAMD,GAASA,EAAOC,GACjC/8C,EAAI,IAAM,EACHA,CACX,qBCtCA9Q,EAAOC,QAWP,SAAgB6Q,EAAKS,EAAGoV,EAAKC,GACzB,IAEIvjB,EAAGsN,EAAGlC,EACNqb,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfK,EAAKC,EAAKC,EACVQ,EAAKC,EAAKc,EACVC,EAAKC,EAAKC,EARVrT,EAAIuN,EAAK,GAAItN,EAAIsN,EAAK,GAAIpG,EAAIoG,EAAK,GACnCG,EAAMzY,KAAKoD,KAAK2H,EAAIA,EAAIC,EAAIA,EAAIkH,EAAIA,GASxC,GAAIlS,KAAKkD,IAAIuV,GAAO,KAAY,OAAO,KAGvC1N,GADA0N,EAAM,EAAIA,EAEVzN,GAAKyN,EACLvG,GAAKuG,EAEL1jB,EAAIiL,KAAK4K,IAAIyN,GACbhW,EAAIrC,KAAK0K,IAAI2N,GACblY,EAAI,EAAIkC,EAERmZ,EAAMvY,EAAE,GAAIwY,EAAMxY,EAAE,GAAIyY,EAAMzY,EAAE,GAAI0Y,EAAM1Y,EAAE,GAC5C2Y,EAAM3Y,EAAE,GAAI4Y,EAAM5Y,EAAE,GAAI6Y,EAAM7Y,EAAE,GAAI8Y,EAAM9Y,EAAE,GAC5C+Y,EAAM/Y,EAAE,GAAIgZ,EAAMhZ,EAAE,GAAIiZ,EAAMjZ,EAAE,IAAKkZ,EAAMlZ,EAAE,IAG7CuZ,EAAMzR,EAAIA,EAAI5K,EAAIkC,EAAGoa,EAAMzR,EAAID,EAAI5K,EAAI+R,EAAInd,EAAG2nB,EAAMxK,EAAInH,EAAI5K,EAAI6K,EAAIjW,EACpEmoB,EAAMnS,EAAIC,EAAI7K,EAAI+R,EAAInd,EAAGooB,EAAMnS,EAAIA,EAAI7K,EAAIkC,EAAG4b,EAAM/L,EAAIlH,EAAI7K,EAAI4K,EAAIhW,EACpEmpB,EAAMnT,EAAImH,EAAI/R,EAAI6K,EAAIjW,EAAGopB,EAAMnT,EAAIkH,EAAI/R,EAAI4K,EAAIhW,EAAGqpB,EAAMlM,EAAIA,EAAI/R,EAAIkC,EAGpEG,EAAI,GAAKgZ,EAAMgB,EAAMZ,EAAMa,EAAMT,EAAMU,EACvCla,EAAI,GAAKiZ,EAAMe,EAAMX,EAAMY,EAAMR,EAAMS,EACvCla,EAAI,GAAKkZ,EAAMc,EAAMV,EAAMW,EAAMP,EAAMQ,EACvCla,EAAI,GAAKmZ,EAAMa,EAAMT,EAAMU,EAAMN,EAAMO,EACvCla,EAAI,GAAKgZ,EAAM0B,EAAMtB,EAAMuB,EAAMnB,EAAMiC,EACvCzb,EAAI,GAAKiZ,EAAMyB,EAAMrB,EAAMsB,EAAMlB,EAAMgC,EACvCzb,EAAI,GAAKkZ,EAAMwB,EAAMpB,EAAMqB,EAAMjB,EAAM+B,EACvCzb,EAAI,GAAKmZ,EAAMuB,EAAMnB,EAAMoB,EAAMhB,EAAM8B,EACvCzb,EAAI,GAAKgZ,EAAM0C,EAAMtC,EAAMuC,EAAMnC,EAAMoC,EACvC5b,EAAI,GAAKiZ,EAAMyC,EAAMrC,EAAMsC,EAAMlC,EAAMmC,EACvC5b,EAAI,IAAMkZ,EAAMwC,EAAMpC,EAAMqC,EAAMjC,EAAMkC,EACxC5b,EAAI,IAAMmZ,EAAMuC,EAAMnC,EAAMoC,EAAMhC,EAAMiC,EAEpCnb,IAAMT,IACNA,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,KAEhB,OAAOT,CACX,qBC/DA9Q,EAAOC,QAUP,SAAiB6Q,EAAKS,EAAGoV,GACrB,IAAItjB,EAAIiL,KAAK4K,IAAIyN,GACbhW,EAAIrC,KAAK0K,IAAI2N,GACbuD,EAAM3Y,EAAE,GACR4Y,EAAM5Y,EAAE,GACR6Y,EAAM7Y,EAAE,GACR8Y,EAAM9Y,EAAE,GACR+Y,EAAM/Y,EAAE,GACRgZ,EAAMhZ,EAAE,GACRiZ,EAAMjZ,EAAE,IACRkZ,EAAMlZ,EAAE,IAERA,IAAMT,IACNA,EAAI,GAAMS,EAAE,GACZT,EAAI,GAAMS,EAAE,GACZT,EAAI,GAAMS,EAAE,GACZT,EAAI,GAAMS,EAAE,GACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,KAYhB,OARAT,EAAI,GAAKoZ,EAAMvZ,EAAI2Z,EAAMjnB,EACzByN,EAAI,GAAKqZ,EAAMxZ,EAAI4Z,EAAMlnB,EACzByN,EAAI,GAAKsZ,EAAMzZ,EAAI6Z,EAAMnnB,EACzByN,EAAI,GAAKuZ,EAAM1Z,EAAI8Z,EAAMpnB,EACzByN,EAAI,GAAKwZ,EAAM3Z,EAAIuZ,EAAM7mB,EACzByN,EAAI,GAAKyZ,EAAM5Z,EAAIwZ,EAAM9mB,EACzByN,EAAI,IAAM0Z,EAAM7Z,EAAIyZ,EAAM/mB,EAC1ByN,EAAI,IAAM2Z,EAAM9Z,EAAI0Z,EAAMhnB,EACnByN,CACX,qBC3CA9Q,EAAOC,QAUP,SAAiB6Q,EAAKS,EAAGoV,GACrB,IAAItjB,EAAIiL,KAAK4K,IAAIyN,GACbhW,EAAIrC,KAAK0K,IAAI2N,GACbmD,EAAMvY,EAAE,GACRwY,EAAMxY,EAAE,GACRyY,EAAMzY,EAAE,GACR0Y,EAAM1Y,EAAE,GACR+Y,EAAM/Y,EAAE,GACRgZ,EAAMhZ,EAAE,GACRiZ,EAAMjZ,EAAE,IACRkZ,EAAMlZ,EAAE,IAERA,IAAMT,IACNA,EAAI,GAAMS,EAAE,GACZT,EAAI,GAAMS,EAAE,GACZT,EAAI,GAAMS,EAAE,GACZT,EAAI,GAAMS,EAAE,GACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,KAYhB,OARAT,EAAI,GAAKgZ,EAAMnZ,EAAI2Z,EAAMjnB,EACzByN,EAAI,GAAKiZ,EAAMpZ,EAAI4Z,EAAMlnB,EACzByN,EAAI,GAAKkZ,EAAMrZ,EAAI6Z,EAAMnnB,EACzByN,EAAI,GAAKmZ,EAAMtZ,EAAI8Z,EAAMpnB,EACzByN,EAAI,GAAKgZ,EAAMzmB,EAAIinB,EAAM3Z,EACzBG,EAAI,GAAKiZ,EAAM1mB,EAAIknB,EAAM5Z,EACzBG,EAAI,IAAMkZ,EAAM3mB,EAAImnB,EAAM7Z,EAC1BG,EAAI,IAAMmZ,EAAM5mB,EAAIonB,EAAM9Z,EACnBG,CACX,qBC3CA9Q,EAAOC,QAUP,SAAiB6Q,EAAKS,EAAGoV,GACrB,IAAItjB,EAAIiL,KAAK4K,IAAIyN,GACbhW,EAAIrC,KAAK0K,IAAI2N,GACbmD,EAAMvY,EAAE,GACRwY,EAAMxY,EAAE,GACRyY,EAAMzY,EAAE,GACR0Y,EAAM1Y,EAAE,GACR2Y,EAAM3Y,EAAE,GACR4Y,EAAM5Y,EAAE,GACR6Y,EAAM7Y,EAAE,GACR8Y,EAAM9Y,EAAE,GAERA,IAAMT,IACNA,EAAI,GAAMS,EAAE,GACZT,EAAI,GAAMS,EAAE,GACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,KAYhB,OARAT,EAAI,GAAKgZ,EAAMnZ,EAAIuZ,EAAM7mB,EACzByN,EAAI,GAAKiZ,EAAMpZ,EAAIwZ,EAAM9mB,EACzByN,EAAI,GAAKkZ,EAAMrZ,EAAIyZ,EAAM/mB,EACzByN,EAAI,GAAKmZ,EAAMtZ,EAAI0Z,EAAMhnB,EACzByN,EAAI,GAAKoZ,EAAMvZ,EAAImZ,EAAMzmB,EACzByN,EAAI,GAAKqZ,EAAMxZ,EAAIoZ,EAAM1mB,EACzByN,EAAI,GAAKsZ,EAAMzZ,EAAIqZ,EAAM3mB,EACzByN,EAAI,GAAKuZ,EAAM1Z,EAAIsZ,EAAM5mB,EAClByN,CACX,qBC3CA9Q,EAAOC,QAUP,SAAe6Q,EAAKS,EAAGhS,GACnB,IAAI8Z,EAAI9Z,EAAE,GAAI+Z,EAAI/Z,EAAE,GAAIihB,EAAIjhB,EAAE,GAkB9B,OAhBAuR,EAAI,GAAKS,EAAE,GAAK8H,EAChBvI,EAAI,GAAKS,EAAE,GAAK8H,EAChBvI,EAAI,GAAKS,EAAE,GAAK8H,EAChBvI,EAAI,GAAKS,EAAE,GAAK8H,EAChBvI,EAAI,GAAKS,EAAE,GAAK+H,EAChBxI,EAAI,GAAKS,EAAE,GAAK+H,EAChBxI,EAAI,GAAKS,EAAE,GAAK+H,EAChBxI,EAAI,GAAKS,EAAE,GAAK+H,EAChBxI,EAAI,GAAKS,EAAE,GAAKiP,EAChB1P,EAAI,GAAKS,EAAE,GAAKiP,EAChB1P,EAAI,IAAMS,EAAE,IAAMiP,EAClB1P,EAAI,IAAMS,EAAE,IAAMiP,EAClB1P,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACLT,CACX,qBC9BA9Q,EAAOC,QAQP,SAAasR,GACT,MAAO,QAAUA,EAAE,GAAK,KAAOA,EAAE,GAAK,KAAOA,EAAE,GAAK,KAAOA,EAAE,GAAK,KAClDA,EAAE,GAAK,KAAOA,EAAE,GAAK,KAAOA,EAAE,GAAK,KAAOA,EAAE,GAAK,KACjDA,EAAE,GAAK,KAAOA,EAAE,GAAK,KAAOA,EAAE,IAAM,KAAOA,EAAE,IAAM,KACnDA,EAAE,IAAM,KAAOA,EAAE,IAAM,KAAOA,EAAE,IAAM,KAAOA,EAAE,IAAM,GACzE,qBCbAvR,EAAOC,QAUP,SAAmB6Q,EAAKS,EAAGhS,GACvB,IACIuqB,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EACfC,EAAKC,EAAKC,EAAKC,EAHfpR,EAAI9Z,EAAE,GAAI+Z,EAAI/Z,EAAE,GAAIihB,EAAIjhB,EAAE,GAK1BgS,IAAMT,GACNA,EAAI,IAAMS,EAAE,GAAK8H,EAAI9H,EAAE,GAAK+H,EAAI/H,EAAE,GAAKiP,EAAIjP,EAAE,IAC7CT,EAAI,IAAMS,EAAE,GAAK8H,EAAI9H,EAAE,GAAK+H,EAAI/H,EAAE,GAAKiP,EAAIjP,EAAE,IAC7CT,EAAI,IAAMS,EAAE,GAAK8H,EAAI9H,EAAE,GAAK+H,EAAI/H,EAAE,IAAMiP,EAAIjP,EAAE,IAC9CT,EAAI,IAAMS,EAAE,GAAK8H,EAAI9H,EAAE,GAAK+H,EAAI/H,EAAE,IAAMiP,EAAIjP,EAAE,MAE9CuY,EAAMvY,EAAE,GAAIwY,EAAMxY,EAAE,GAAIyY,EAAMzY,EAAE,GAAI0Y,EAAM1Y,EAAE,GAC5C2Y,EAAM3Y,EAAE,GAAI4Y,EAAM5Y,EAAE,GAAI6Y,EAAM7Y,EAAE,GAAI8Y,EAAM9Y,EAAE,GAC5C+Y,EAAM/Y,EAAE,GAAIgZ,EAAMhZ,EAAE,GAAIiZ,EAAMjZ,EAAE,IAAKkZ,EAAMlZ,EAAE,IAE7CT,EAAI,GAAKgZ,EAAKhZ,EAAI,GAAKiZ,EAAKjZ,EAAI,GAAKkZ,EAAKlZ,EAAI,GAAKmZ,EACnDnZ,EAAI,GAAKoZ,EAAKpZ,EAAI,GAAKqZ,EAAKrZ,EAAI,GAAKsZ,EAAKtZ,EAAI,GAAKuZ,EACnDvZ,EAAI,GAAKwZ,EAAKxZ,EAAI,GAAKyZ,EAAKzZ,EAAI,IAAM0Z,EAAK1Z,EAAI,IAAM2Z,EAErD3Z,EAAI,IAAMgZ,EAAMzQ,EAAI6Q,EAAM5Q,EAAIgR,EAAM9J,EAAIjP,EAAE,IAC1CT,EAAI,IAAMiZ,EAAM1Q,EAAI8Q,EAAM7Q,EAAIiR,EAAM/J,EAAIjP,EAAE,IAC1CT,EAAI,IAAMkZ,EAAM3Q,EAAI+Q,EAAM9Q,EAAIkR,EAAMhK,EAAIjP,EAAE,IAC1CT,EAAI,IAAMmZ,EAAM5Q,EAAIgR,EAAM/Q,EAAImR,EAAMjK,EAAIjP,EAAE,KAG9C,OAAOT,CACX,qBCrCA9Q,EAAOC,QASP,SAAmB6Q,EAAKS,GAEpB,GAAIT,IAAQS,EAAG,CACX,IAAIwY,EAAMxY,EAAE,GAAIyY,EAAMzY,EAAE,GAAI0Y,EAAM1Y,EAAE,GAChC6Y,EAAM7Y,EAAE,GAAI8Y,EAAM9Y,EAAE,GACpBkZ,EAAMlZ,EAAE,IAEZT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,IACXT,EAAI,GAAKiZ,EACTjZ,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,IACXT,EAAI,GAAKkZ,EACTlZ,EAAI,GAAKsZ,EACTtZ,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMmZ,EACVnZ,EAAI,IAAMuZ,EACVvZ,EAAI,IAAM2Z,CACd,MACI3Z,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,IACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,IACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,GACZT,EAAI,IAAMS,EAAE,GACZT,EAAI,IAAMS,EAAE,IACZT,EAAI,IAAMS,EAAE,IAGhB,OAAOT,CACX,qBChDA9Q,EAAOC,QAUP,SAAa6Q,EAAKS,EAAGxD,GAIjB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACX,yBCfA9Q,EAAOC,QAYP,SAAesR,EAAGxD,GACd,IAAIw5D,EAAQv0D,EAAWzB,EAAE,GAAIA,EAAE,GAAIA,EAAE,IACjCi2D,EAAQx0D,EAAWjF,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAErCiO,EAAUurD,EAAOA,GACjBvrD,EAAUwrD,EAAOA,GAEjB,IAAIp4C,EAAS3P,EAAI8nD,EAAOC,GAExB,OAAGp4C,EAAS,EACD,EAEA9gB,KAAK+gB,KAAKD,EAEzB,EAxBA,IAAIpc,EAAa5U,EAAQ,OACrB4d,EAAY5d,EAAQ,OACpBqhB,EAAMrhB,EAAQ,0BCJlB4B,EAAOC,QASP,SAAc6Q,EAAKS,GAIjB,OAHAT,EAAI,GAAKxC,KAAK8L,KAAK7I,EAAE,IACrBT,EAAI,GAAKxC,KAAK8L,KAAK7I,EAAE,IACrBT,EAAI,GAAKxC,KAAK8L,KAAK7I,EAAE,IACdT,CACT,qBCdA9Q,EAAOC,QAQP,SAAesR,GACX,IAAIT,EAAM,IAAIvP,aAAa,GAI3B,OAHAuP,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACJT,CACX,qBCdA9Q,EAAOC,QASP,SAAc6Q,EAAKS,GAIf,OAHAT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKS,EAAE,GACJT,CACX,oBCdA9Q,EAAOC,QAOP,WACI,IAAI6Q,EAAM,IAAIvP,aAAa,GAI3B,OAHAuP,EAAI,GAAK,EACTA,EAAI,GAAK,EACTA,EAAI,GAAK,EACFA,CACX,qBCbA9Q,EAAOC,QAUP,SAAe6Q,EAAKS,EAAGxD,GACnB,IAAI2R,EAAKnO,EAAE,GAAIoO,EAAKpO,EAAE,GAAIqO,EAAKrO,EAAE,GAC7Byd,EAAKjhB,EAAE,GAAIkhB,EAAKlhB,EAAE,GAAImhB,EAAKnhB,EAAE,GAKjC,OAHA+C,EAAI,GAAK6O,EAAKuP,EAAKtP,EAAKqP,EACxBne,EAAI,GAAK8O,EAAKoP,EAAKtP,EAAKwP,EACxBpe,EAAI,GAAK4O,EAAKuP,EAAKtP,EAAKqP,EACjBle,CACX,yBClBA9Q,EAAOC,QAAU,EAAjBD,0BCAAA,EAAOC,QASP,SAAkBsR,EAAGxD,GACjB,IAAIsL,EAAItL,EAAE,GAAKwD,EAAE,GACb+H,EAAIvL,EAAE,GAAKwD,EAAE,GACbiP,EAAIzS,EAAE,GAAKwD,EAAE,GACjB,OAAOjD,KAAKoD,KAAK2H,EAAEA,EAAIC,EAAEA,EAAIkH,EAAEA,EACnC,yBCdAxgB,EAAOC,QAAU,EAAjBD,0BCAAA,EAAOC,QAUP,SAAgB6Q,EAAKS,EAAGxD,GAIpB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACX,qBCfA9Q,EAAOC,QASP,SAAasR,EAAGxD,GACZ,OAAOwD,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,GAAKwD,EAAE,GAAKxD,EAAE,EAChD,qBCXA/N,EAAOC,QAAU,4BCAjBD,EAAOC,QAWP,SAAgBsR,EAAGxD,GACjB,IAAI05D,EAAKl2D,EAAE,GACPm2D,EAAKn2D,EAAE,GACPw0B,EAAKx0B,EAAE,GACP4a,EAAKpe,EAAE,GACPqe,EAAKre,EAAE,GACPse,EAAKte,EAAE,GACX,OAAQO,KAAKkD,IAAIi2D,EAAKt7C,IAAON,EAAUvd,KAAKc,IAAI,EAAKd,KAAKkD,IAAIi2D,GAAKn5D,KAAKkD,IAAI2a,KACpE7d,KAAKkD,IAAIk2D,EAAKt7C,IAAOP,EAAUvd,KAAKc,IAAI,EAAKd,KAAKkD,IAAIk2D,GAAKp5D,KAAKkD,IAAI4a,KACpE9d,KAAKkD,IAAIu0B,EAAK1Z,IAAOR,EAAUvd,KAAKc,IAAI,EAAKd,KAAKkD,IAAIu0B,GAAKz3B,KAAKkD,IAAI6a,GAC9E,EAnBA,IAAIR,EAAUztB,EAAQ,0BCFtB4B,EAAOC,QASP,SAAqBsR,EAAGxD,GACtB,OAAOwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,IAAMwD,EAAE,KAAOxD,EAAE,EACtD,qBCXA/N,EAAOC,QASP,SAAe6Q,EAAKS,GAIlB,OAHAT,EAAI,GAAKxC,KAAKC,MAAMgD,EAAE,IACtBT,EAAI,GAAKxC,KAAKC,MAAMgD,EAAE,IACtBT,EAAI,GAAKxC,KAAKC,MAAMgD,EAAE,IACfT,CACT,yBCdA9Q,EAAOC,QAgBP,SAAiBsR,EAAGo2D,EAAQzqD,EAAQ5F,EAAOmtB,EAAImjC,GACvC,IAAIjpE,EAAGwP,EACHw5D,IACAA,EAAS,GAGTzqD,IACAA,EAAS,GAIT/O,EADDmJ,EACKhJ,KAAKe,IAAKiI,EAAQqwD,EAAUzqD,EAAQ3L,EAAEvS,QAEtCuS,EAAEvS,OAGV,IAAIL,EAAIue,EAAQve,EAAIwP,EAAGxP,GAAKgpE,EACxBppD,EAAI,GAAKhN,EAAE5S,GACX4f,EAAI,GAAKhN,EAAE5S,EAAE,GACb4f,EAAI,GAAKhN,EAAE5S,EAAE,GACb8lC,EAAGlmB,EAAKA,EAAKqpD,GACbr2D,EAAE5S,GAAK4f,EAAI,GACXhN,EAAE5S,EAAE,GAAK4f,EAAI,GACbhN,EAAE5S,EAAE,GAAK4f,EAAI,GAGjB,OAAOhN,CACf,EAzCA,IAAIgN,EAAMngB,EAAQ,KAARA,sBCFV4B,EAAOC,QAUP,SAAoBoZ,EAAGC,EAAGkH,GACtB,IAAI1P,EAAM,IAAIvP,aAAa,GAI3B,OAHAuP,EAAI,GAAKuI,EACTvI,EAAI,GAAKwI,EACTxI,EAAI,GAAK0P,EACF1P,CACX,yBChBA9Q,EAAOC,QAAU,CACf4rB,QAASztB,EAAQ,OACf8S,OAAQ9S,EAAQ,MAChB0F,MAAO1F,EAAQ,OACfiX,MAAOjX,EAAQ,OACf4U,WAAY5U,EAAQ,OACpBymB,KAAMzmB,EAAQ,OACdyD,IAAKzD,EAAQ,OACb8U,OAAQ9U,EAAQ,OAChBypE,YAAazpE,EAAQ,OACrByb,IAAKzb,EAAQ,OACb+W,SAAU/W,EAAQ,OAClB0pE,IAAK1pE,EAAQ,OACbsY,SAAUtY,EAAQ,OAClB2pE,IAAK3pE,EAAQ,OACbqwB,OAAQrwB,EAAQ,OAChB4pE,IAAK5pE,EAAQ,OACbiR,IAAKjR,EAAQ,OACbgR,IAAKhR,EAAQ,OACbmQ,MAAOnQ,EAAQ,OACfgc,KAAMhc,EAAQ,OACdua,MAAOva,EAAQ,OACfgb,MAAOhb,EAAQ,OACf6pE,YAAa7pE,EAAQ,OACrBsR,SAAUtR,EAAQ,OAClB0iB,KAAM1iB,EAAQ,OACdwwB,gBAAiBxwB,EAAQ,OACzB8pE,QAAS9pE,EAAQ,OACjBY,OAAQZ,EAAQ,OAChB2oB,IAAK3oB,EAAQ,OACbywB,cAAezwB,EAAQ,OACvB+pE,OAAQ/pE,EAAQ,OAChBqmB,OAAQrmB,EAAQ,OAChBgqE,QAAShqE,EAAQ,MACjB4d,UAAW5d,EAAQ,OACnBqhB,IAAKrhB,EAAQ,OACb+d,MAAO/d,EAAQ,OACfuwB,KAAMvwB,EAAQ,OACd44D,OAAQ54D,EAAQ,OAChBuuD,cAAevuD,EAAQ,MACvBiqE,cAAejqE,EAAQ,MACvBkqE,cAAelqE,EAAQ,OACvBsrB,QAAStrB,EAAQ,OACjBurB,QAASvrB,EAAQ,OACjBwrB,QAASxrB,EAAQ,OACjBK,QAASL,EAAQ,0BC7CrB4B,EAAOC,QASP,SAAiB6Q,EAAKS,GAIpB,OAHAT,EAAI,GAAK,EAAMS,EAAE,GACjBT,EAAI,GAAK,EAAMS,EAAE,GACjBT,EAAI,GAAK,EAAMS,EAAE,GACVT,CACT,yBCdA9Q,EAAOC,QAAU,EAAjBD,0BCAAA,EAAOC,QAQP,SAAgBsR,GACZ,IAAI8H,EAAI9H,EAAE,GACN+H,EAAI/H,EAAE,GACNiP,EAAIjP,EAAE,GACV,OAAOjD,KAAKoD,KAAK2H,EAAEA,EAAIC,EAAEA,EAAIkH,EAAEA,EACnC,qBCbAxgB,EAAOC,QAWP,SAAc6Q,EAAKS,EAAGxD,EAAGU,GACrB,IAAIiR,EAAKnO,EAAE,GACPoO,EAAKpO,EAAE,GACPqO,EAAKrO,EAAE,GAIX,OAHAT,EAAI,GAAK4O,EAAKjR,GAAKV,EAAE,GAAK2R,GAC1B5O,EAAI,GAAK6O,EAAKlR,GAAKV,EAAE,GAAK4R,GAC1B7O,EAAI,GAAK8O,EAAKnR,GAAKV,EAAE,GAAK6R,GACnB9O,CACX,qBCnBA9Q,EAAOC,QAUP,SAAa6Q,EAAKS,EAAGxD,GAIjB,OAHA+C,EAAI,GAAKxC,KAAKc,IAAImC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKc,IAAImC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKc,IAAImC,EAAE,GAAIxD,EAAE,IACnB+C,CACX,qBCfA9Q,EAAOC,QAUP,SAAa6Q,EAAKS,EAAGxD,GAIjB,OAHA+C,EAAI,GAAKxC,KAAKe,IAAIkC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKe,IAAIkC,EAAE,GAAIxD,EAAE,IAC1B+C,EAAI,GAAKxC,KAAKe,IAAIkC,EAAE,GAAIxD,EAAE,IACnB+C,CACX,yBCfA9Q,EAAOC,QAAU,EAAjBD,0BCAAA,EAAOC,QAUP,SAAkB6Q,EAAKS,EAAGxD,GAItB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACX,qBCfA9Q,EAAOC,QASP,SAAgB6Q,EAAKS,GAIjB,OAHAT,EAAI,IAAMS,EAAE,GACZT,EAAI,IAAMS,EAAE,GACZT,EAAI,IAAMS,EAAE,GACLT,CACX,qBCdA9Q,EAAOC,QASP,SAAmB6Q,EAAKS,GACpB,IAAI8H,EAAI9H,EAAE,GACN+H,EAAI/H,EAAE,GACNiP,EAAIjP,EAAE,GACNwV,EAAM1N,EAAEA,EAAIC,EAAEA,EAAIkH,EAAEA,EACpBuG,EAAM,IAENA,EAAM,EAAIzY,KAAKoD,KAAKqV,GACpBjW,EAAI,GAAKS,EAAE,GAAKwV,EAChBjW,EAAI,GAAKS,EAAE,GAAKwV,EAChBjW,EAAI,GAAKS,EAAE,GAAKwV,GAEpB,OAAOjW,CACX,qBCtBA9Q,EAAOC,QASP,SAAgB6Q,EAAKsI,GACjBA,EAAQA,GAAS,EAEjB,IAAIzL,EAAoB,EAAhBW,KAAK0oD,SAAiB1oD,KAAK0V,GAC/BxD,EAAqB,EAAhBlS,KAAK0oD,SAAkB,EAC5BuR,EAASj6D,KAAKoD,KAAK,EAAI8O,EAAEA,GAAKpH,EAKlC,OAHAtI,EAAI,GAAKxC,KAAK0K,IAAIrL,GAAK46D,EACvBz3D,EAAI,GAAKxC,KAAK4K,IAAIvL,GAAK46D,EACvBz3D,EAAI,GAAK0P,EAAIpH,EACNtI,CACX,qBCpBA9Q,EAAOC,QAUP,SAAiB6Q,EAAKS,EAAGxD,EAAG4C,GACxB,IAAIse,EAAKlhB,EAAE,GACPmhB,EAAKnhB,EAAE,GAGP83B,EAAKt0B,EAAE,GAAK0d,EACZu5C,EAAKj3D,EAAE,GAAK2d,EAEZu5C,EAAKn6D,KAAK4K,IAAIvI,GACd+3D,EAAKp6D,KAAK0K,IAAIrI,GAOlB,OAJAG,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKme,EAAK4W,EAAK6iC,EAAKF,EAAKC,EAC7B33D,EAAI,GAAKoe,EAAK2W,EAAK4iC,EAAKD,EAAKE,EAEtB53D,CACX,qBC3BA9Q,EAAOC,QAUP,SAAiB6Q,EAAKS,EAAGxD,EAAG4C,GACxB,IAAIqe,EAAKjhB,EAAE,GACPmhB,EAAKnhB,EAAE,GAGP63B,EAAKr0B,EAAE,GAAKyd,EACZw5C,EAAKj3D,EAAE,GAAK2d,EAEZu5C,EAAKn6D,KAAK4K,IAAIvI,GACd+3D,EAAKp6D,KAAK0K,IAAIrI,GAOlB,OAJAG,EAAI,GAAKke,EAAKw5C,EAAKC,EAAK7iC,EAAK8iC,EAC7B53D,EAAI,GAAKS,EAAE,GACXT,EAAI,GAAKoe,EAAKs5C,EAAKE,EAAK9iC,EAAK6iC,EAEtB33D,CACX,qBC3BA9Q,EAAOC,QAUP,SAAiB6Q,EAAKS,EAAGxD,EAAG4C,GACxB,IAAIqe,EAAKjhB,EAAE,GACPkhB,EAAKlhB,EAAE,GAGP63B,EAAKr0B,EAAE,GAAKyd,EACZ6W,EAAKt0B,EAAE,GAAK0d,EAEZw5C,EAAKn6D,KAAK4K,IAAIvI,GACd+3D,EAAKp6D,KAAK0K,IAAIrI,GAOlB,OAJAG,EAAI,GAAKke,EAAK4W,EAAK8iC,EAAK7iC,EAAK4iC,EAC7B33D,EAAI,GAAKme,EAAK2W,EAAK6iC,EAAK5iC,EAAK6iC,EAC7B53D,EAAI,GAAKS,EAAE,GAEJT,CACX,qBC3BA9Q,EAAOC,QASP,SAAe6Q,EAAKS,GAIlB,OAHAT,EAAI,GAAKxC,KAAKqK,MAAMpH,EAAE,IACtBT,EAAI,GAAKxC,KAAKqK,MAAMpH,EAAE,IACtBT,EAAI,GAAKxC,KAAKqK,MAAMpH,EAAE,IACfT,CACT,qBCdA9Q,EAAOC,QAUP,SAAe6Q,EAAKS,EAAGxD,GAInB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAChB+C,EAAI,GAAKS,EAAE,GAAKxD,EAChB+C,EAAI,GAAKS,EAAE,GAAKxD,EACT+C,CACX,qBCfA9Q,EAAOC,QAWP,SAAqB6Q,EAAKS,EAAGxD,EAAGqL,GAI5B,OAHAtI,EAAI,GAAKS,EAAE,GAAMxD,EAAE,GAAKqL,EACxBtI,EAAI,GAAKS,EAAE,GAAMxD,EAAE,GAAKqL,EACxBtI,EAAI,GAAKS,EAAE,GAAMxD,EAAE,GAAKqL,EACjBtI,CACX,qBChBA9Q,EAAOC,QAWP,SAAa6Q,EAAKuI,EAAGC,EAAGkH,GAIpB,OAHA1P,EAAI,GAAKuI,EACTvI,EAAI,GAAKwI,EACTxI,EAAI,GAAK0P,EACF1P,CACX,yBChBA9Q,EAAOC,QAAU,EAAjBD,8BCAAA,EAAOC,QAAU,EAAjBD,0BCAAA,EAAOC,QASP,SAAyBsR,EAAGxD,GACxB,IAAIsL,EAAItL,EAAE,GAAKwD,EAAE,GACb+H,EAAIvL,EAAE,GAAKwD,EAAE,GACbiP,EAAIzS,EAAE,GAAKwD,EAAE,GACjB,OAAO8H,EAAEA,EAAIC,EAAEA,EAAIkH,EAAEA,CACzB,qBCdAxgB,EAAOC,QAQP,SAAuBsR,GACnB,IAAI8H,EAAI9H,EAAE,GACN+H,EAAI/H,EAAE,GACNiP,EAAIjP,EAAE,GACV,OAAO8H,EAAEA,EAAIC,EAAEA,EAAIkH,EAAEA,CACzB,yBCbAxgB,EAAOC,QAAU,EAAjBD,0BCAAA,EAAOC,QAUP,SAAkB6Q,EAAKS,EAAGxD,GAItB,OAHA+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GAClB+C,EAAI,GAAKS,EAAE,GAAKxD,EAAE,GACX+C,CACX,oBCfA9Q,EAAOC,QAUP,SAAuB6Q,EAAKS,EAAGiwB,GAC3B,IAAInoB,EAAI9H,EAAE,GAAI+H,EAAI/H,EAAE,GAAIiP,EAAIjP,EAAE,GAI9B,OAHAT,EAAI,GAAKuI,EAAImoB,EAAE,GAAKloB,EAAIkoB,EAAE,GAAKhhB,EAAIghB,EAAE,GACrC1wB,EAAI,GAAKuI,EAAImoB,EAAE,GAAKloB,EAAIkoB,EAAE,GAAKhhB,EAAIghB,EAAE,GACrC1wB,EAAI,GAAKuI,EAAImoB,EAAE,GAAKloB,EAAIkoB,EAAE,GAAKhhB,EAAIghB,EAAE,GAC9B1wB,CACX,oBChBA9Q,EAAOC,QAWP,SAAuB6Q,EAAKS,EAAGiwB,GAC3B,IAAInoB,EAAI9H,EAAE,GAAI+H,EAAI/H,EAAE,GAAIiP,EAAIjP,EAAE,GAC1B2a,EAAIsV,EAAE,GAAKnoB,EAAImoB,EAAE,GAAKloB,EAAIkoB,EAAE,IAAMhhB,EAAIghB,EAAE,IAK5C,OAJAtV,EAAIA,GAAK,EACTpb,EAAI,IAAM0wB,EAAE,GAAKnoB,EAAImoB,EAAE,GAAKloB,EAAIkoB,EAAE,GAAKhhB,EAAIghB,EAAE,KAAOtV,EACpDpb,EAAI,IAAM0wB,EAAE,GAAKnoB,EAAImoB,EAAE,GAAKloB,EAAIkoB,EAAE,GAAKhhB,EAAIghB,EAAE,KAAOtV,EACpDpb,EAAI,IAAM0wB,EAAE,GAAKnoB,EAAImoB,EAAE,GAAKloB,EAAIkoB,EAAE,IAAMhhB,EAAIghB,EAAE,KAAOtV,EAC9Cpb,CACX,qBCnBA9Q,EAAOC,QAUP,SAAuB6Q,EAAKS,EAAGnD,GAG3B,IAAIiL,EAAI9H,EAAE,GAAI+H,EAAI/H,EAAE,GAAIiP,EAAIjP,EAAE,GAC1BowB,EAAKvzB,EAAE,GAAIu6D,EAAKv6D,EAAE,GAAIw6D,EAAKx6D,EAAE,GAAIy6D,EAAKz6D,EAAE,GAGxC06D,EAAKD,EAAKxvD,EAAIsvD,EAAKnoD,EAAIooD,EAAKtvD,EAC5ByvD,EAAKF,EAAKvvD,EAAIsvD,EAAKvvD,EAAIsoB,EAAKnhB,EAC5BwoD,EAAKH,EAAKroD,EAAImhB,EAAKroB,EAAIqvD,EAAKtvD,EAC5B4vD,GAAMtnC,EAAKtoB,EAAIsvD,EAAKrvD,EAAIsvD,EAAKpoD,EAMjC,OAHA1P,EAAI,GAAKg4D,EAAKD,EAAKI,GAAMtnC,EAAKonC,GAAMH,EAAKI,GAAML,EAC/C73D,EAAI,GAAKi4D,EAAKF,EAAKI,GAAMN,EAAKK,GAAMrnC,EAAKmnC,GAAMF,EAC/C93D,EAAI,GAAKk4D,EAAKH,EAAKI,GAAML,EAAKE,GAAMH,EAAKI,GAAMpnC,EACxC7wB,CACX,sCCfa,IAAIo4D,EAAG9qE,EAAQ,OAAS0uB,EAAG1uB,EAAQ,OAAa,SAASiQ,EAAEkD,GAAG,IAAI,IAAIxD,EAAE,yDAAyDwD,EAAEZ,EAAE,EAAEA,EAAErO,UAAUtD,OAAO2R,IAAI5C,GAAG,WAAWu2D,mBAAmBhiE,UAAUqO,IAAI,MAAM,yBAAyBY,EAAE,WAAWxD,EAAE,gHAAgH,CAAC,IAAIo7D,EAAG,IAAIn0B,IAAIo0B,EAAG,CAAC,EAAE,SAASC,EAAG93D,EAAExD,GAAGu7D,EAAG/3D,EAAExD,GAAGu7D,EAAG/3D,EAAE,UAAUxD,EAAE,CACxb,SAASu7D,EAAG/3D,EAAExD,GAAW,IAARq7D,EAAG73D,GAAGxD,EAAMwD,EAAE,EAAEA,EAAExD,EAAE/O,OAAOuS,IAAI43D,EAAGtvD,IAAI9L,EAAEwD,GAAG,CAC5D,IAAIg4D,IAAK,qBAAqBtN,QAAQ,qBAAqBA,OAAOH,UAAU,qBAAqBG,OAAOH,SAASY,eAAe8M,EAAG/mE,OAAO+f,UAAU67C,eAAeoL,EAAG,8VAA8VC,EACpgB,CAAC,EAAEC,EAAG,CAAC,EACiN,SAASpqE,EAAEgS,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,EAAEV,GAAG+T,KAAK+nD,gBAAgB,IAAI77D,GAAG,IAAIA,GAAG,IAAIA,EAAE8T,KAAKgoD,cAAcv6D,EAAEuS,KAAKioD,mBAAmB5zD,EAAE2L,KAAKkoD,gBAAgBp5D,EAAEkR,KAAKmoD,aAAaz4D,EAAEsQ,KAAKwW,KAAKtqB,EAAE8T,KAAKooD,YAAYz7D,EAAEqT,KAAKqoD,kBAAkBp8D,CAAC,CAAC,IAAI0S,EAAE,CAAC,EACpb,uIAAuI1I,MAAM,KAAKrZ,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,CAAC,CAAC,gBAAgB,kBAAkB,CAAC,YAAY,SAAS,CAAC,UAAU,OAAO,CAAC,YAAY,eAAe9S,SAAQ,SAAS8S,GAAG,IAAIxD,EAAEwD,EAAE,GAAGiP,EAAEzS,GAAG,IAAIxO,EAAEwO,EAAE,GAAE,EAAGwD,EAAE,GAAG,MAAK,GAAG,EAAG,IAAG,CAAC,kBAAkB,YAAY,aAAa,SAAS9S,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAEjO,cAAc,MAAK,GAAG,EAAG,IAC1e,CAAC,cAAc,4BAA4B,YAAY,iBAAiB7E,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,8OAA8OuG,MAAM,KAAKrZ,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAEjO,cAAc,MAAK,GAAG,EAAG,IACxb,CAAC,UAAU,WAAW,QAAQ,YAAY7E,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,CAAC,UAAU,YAAY9S,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,CAAC,OAAO,OAAO,OAAO,QAAQ9S,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAE,MAAK,GAAG,EAAG,IAAG,CAAC,UAAU,SAAS9S,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAEjO,cAAc,MAAK,GAAG,EAAG,IAAG,IAAI6mE,EAAG,gBAAgB,SAASC,EAAG74D,GAAG,OAAOA,EAAE,GAAGo3C,aAAa,CAIxZ,SAAS0hB,EAAG94D,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAEsK,EAAE69C,eAAetwD,GAAGyS,EAAEzS,GAAG,MAAQ,OAAOmI,EAAE,IAAIA,EAAEmiB,KAAK/oB,KAAK,EAAEvB,EAAE/O,SAAS,MAAM+O,EAAE,IAAI,MAAMA,EAAE,IAAI,MAAMA,EAAE,IAAI,MAAMA,EAAE,MAP9I,SAAYwD,EAAExD,EAAE4C,EAAErB,GAAG,GAAG,OAAOvB,GAAG,qBAAqBA,GADqE,SAAYwD,EAAExD,EAAE4C,EAAErB,GAAG,GAAG,OAAOqB,GAAG,IAAIA,EAAE0nB,KAAK,OAAM,EAAG,cAActqB,GAAG,IAAK,WAAW,IAAK,SAAS,OAAM,EAAG,IAAK,UAAU,OAAGuB,IAAc,OAAOqB,GAASA,EAAEi5D,gBAAmD,WAAnCr4D,EAAEA,EAAEjO,cAAcwP,MAAM,EAAE,KAAsB,UAAUvB,GAAE,QAAQ,OAAM,EAAG,CAC/T+4D,CAAG/4D,EAAExD,EAAE4C,EAAErB,GAAG,OAAM,EAAG,GAAGA,EAAE,OAAM,EAAG,GAAG,OAAOqB,EAAE,OAAOA,EAAE0nB,MAAM,KAAK,EAAE,OAAOtqB,EAAE,KAAK,EAAE,OAAM,IAAKA,EAAE,KAAK,EAAE,OAAOqX,MAAMrX,GAAG,KAAK,EAAE,OAAOqX,MAAMrX,IAAI,EAAEA,EAAE,OAAM,CAAE,CAOtEw8D,CAAGx8D,EAAE4C,EAAEuF,EAAE5G,KAAKqB,EAAE,MAAMrB,GAAG,OAAO4G,EARxK,SAAY3E,GAAG,QAAGi4D,EAAGlL,KAAKqL,EAAGp4D,KAAei4D,EAAGlL,KAAKoL,EAAGn4D,KAAek4D,EAAGxO,KAAK1pD,GAAUo4D,EAAGp4D,IAAG,GAAGm4D,EAAGn4D,IAAG,GAAS,GAAE,CAQwDi5D,CAAGz8D,KAAK,OAAO4C,EAAEY,EAAEmxD,gBAAgB30D,GAAGwD,EAAE0sD,aAAalwD,EAAE,GAAG4C,IAAIuF,EAAE6zD,gBAAgBx4D,EAAE2E,EAAE8zD,cAAc,OAAOr5D,EAAE,IAAIuF,EAAEmiB,MAAQ,GAAG1nB,GAAG5C,EAAEmI,EAAE2zD,cAAcv6D,EAAE4G,EAAE4zD,mBAAmB,OAAOn5D,EAAEY,EAAEmxD,gBAAgB30D,IAAa4C,EAAE,KAAXuF,EAAEA,EAAEmiB,OAAc,IAAIniB,IAAG,IAAKvF,EAAE,GAAG,GAAGA,EAAErB,EAAEiC,EAAEk5D,eAAen7D,EAAEvB,EAAE4C,GAAGY,EAAE0sD,aAAalwD,EAAE4C,KAAI,CAHjd,0jCAA0jCmH,MAAM,KAAKrZ,SAAQ,SAAS8S,GAAG,IAAIxD,EAAEwD,EAAE7D,QAAQy8D,EACzmCC,GAAI5pD,EAAEzS,GAAG,IAAIxO,EAAEwO,EAAE,GAAE,EAAGwD,EAAE,MAAK,GAAG,EAAG,IAAG,2EAA2EuG,MAAM,KAAKrZ,SAAQ,SAAS8S,GAAG,IAAIxD,EAAEwD,EAAE7D,QAAQy8D,EAAGC,GAAI5pD,EAAEzS,GAAG,IAAIxO,EAAEwO,EAAE,GAAE,EAAGwD,EAAE,gCAA+B,GAAG,EAAG,IAAG,CAAC,WAAW,WAAW,aAAa9S,SAAQ,SAAS8S,GAAG,IAAIxD,EAAEwD,EAAE7D,QAAQy8D,EAAGC,GAAI5pD,EAAEzS,GAAG,IAAIxO,EAAEwO,EAAE,GAAE,EAAGwD,EAAE,wCAAuC,GAAG,EAAG,IAAG,CAAC,WAAW,eAAe9S,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAEjO,cAAc,MAAK,GAAG,EAAG,IACldkd,EAAEkqD,UAAU,IAAInrE,EAAE,YAAY,GAAE,EAAG,aAAa,gCAA+B,GAAG,GAAI,CAAC,MAAM,OAAO,SAAS,cAAcd,SAAQ,SAAS8S,GAAGiP,EAAEjP,GAAG,IAAIhS,EAAEgS,EAAE,GAAE,EAAGA,EAAEjO,cAAc,MAAK,GAAG,EAAG,IAE5L,IAAI2qB,EAAGi7C,EAAGyB,mDAAmDC,EAAGC,OAAOC,IAAI,iBAAiBC,EAAGF,OAAOC,IAAI,gBAAgBE,EAAGH,OAAOC,IAAI,kBAAkBG,EAAGJ,OAAOC,IAAI,qBAAqBI,EAAGL,OAAOC,IAAI,kBAAkBK,EAAGN,OAAOC,IAAI,kBAAkBM,EAAGP,OAAOC,IAAI,iBAAiBO,EAAGR,OAAOC,IAAI,qBAAqBQ,EAAGT,OAAOC,IAAI,kBAAkBS,EAAGV,OAAOC,IAAI,uBAAuBU,EAAGX,OAAOC,IAAI,cAAcW,EAAGZ,OAAOC,IAAI,cAAcD,OAAOC,IAAI,eAAeD,OAAOC,IAAI,0BACje,IAAIY,EAAGb,OAAOC,IAAI,mBAAmBD,OAAOC,IAAI,uBAAuBD,OAAOC,IAAI,eAAeD,OAAOC,IAAI,wBAAwB,IAAIa,EAAGd,OAAOe,SAAS,SAASC,EAAGt6D,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAwC,oBAAnCA,EAAEo6D,GAAIp6D,EAAEo6D,IAAKp6D,EAAE,eAA0CA,EAAE,IAAI,CAAC,IAAoBu6D,EAAhBpjB,EAAEjmD,OAAOC,OAAU,SAASqpE,EAAGx6D,GAAG,QAAG,IAASu6D,EAAG,IAAI,MAAMprE,OAAQ,CAAC,MAAMiQ,GAAG,IAAI5C,EAAE4C,EAAEulB,MAAM81C,OAAOC,MAAM,gBAAgBH,EAAG/9D,GAAGA,EAAE,IAAI,EAAE,CAAC,MAAM,KAAK+9D,EAAGv6D,CAAC,CAAC,IAAI26D,GAAG,EACzb,SAASC,EAAG56D,EAAExD,GAAG,IAAIwD,GAAG26D,EAAG,MAAM,GAAGA,GAAG,EAAG,IAAIv7D,EAAEjQ,MAAM0rE,kBAAkB1rE,MAAM0rE,uBAAkB,EAAO,IAAI,GAAGr+D,EAAE,GAAGA,EAAE,WAAW,MAAMrN,OAAQ,EAAE+B,OAAO4pE,eAAet+D,EAAEyU,UAAU,QAAQ,CAAC3gB,IAAI,WAAW,MAAMnB,OAAQ,IAAI,kBAAkB4rE,SAASA,QAAQC,UAAU,CAAC,IAAID,QAAQC,UAAUx+D,EAAE,GAAG,CAAC,MAAMI,GAAG,IAAImB,EAAEnB,CAAC,CAACm+D,QAAQC,UAAUh7D,EAAE,GAAGxD,EAAE,KAAK,CAAC,IAAIA,EAAEuwD,MAAM,CAAC,MAAMnwD,GAAGmB,EAAEnB,CAAC,CAACoD,EAAE+sD,KAAKvwD,EAAEyU,UAAU,KAAK,CAAC,IAAI,MAAM9hB,OAAQ,CAAC,MAAMyN,GAAGmB,EAAEnB,CAAC,CAACoD,GAAG,CAAC,CAAC,MAAMpD,GAAG,GAAGA,GAAGmB,GAAG,kBAAkBnB,EAAE+nB,MAAM,CAAC,IAAI,IAAIhgB,EAAE/H,EAAE+nB,MAAMpe,MAAM,MACnftJ,EAAEc,EAAE4mB,MAAMpe,MAAM,MAAMhK,EAAEoI,EAAElX,OAAO,EAAEkP,EAAEM,EAAExP,OAAO,EAAE,GAAG8O,GAAG,GAAGI,GAAGgI,EAAEpI,KAAKU,EAAEN,IAAIA,IAAI,KAAK,GAAGJ,GAAG,GAAGI,EAAEJ,IAAII,IAAI,GAAGgI,EAAEpI,KAAKU,EAAEN,GAAG,CAAC,GAAG,IAAIJ,GAAG,IAAII,EAAG,MAAMJ,IAAQ,IAAJI,GAASgI,EAAEpI,KAAKU,EAAEN,GAAG,CAAC,IAAIsN,EAAE,KAAKtF,EAAEpI,GAAGJ,QAAQ,WAAW,QAA6F,OAArF6D,EAAEi7D,aAAahxD,EAAEukC,SAAS,iBAAiBvkC,EAAEA,EAAE9N,QAAQ,cAAc6D,EAAEi7D,cAAqBhxD,CAAC,QAAO,GAAG1N,GAAG,GAAGI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQg+D,GAAG,EAAGxrE,MAAM0rE,kBAAkBz7D,CAAC,CAAC,OAAOY,EAAEA,EAAEA,EAAEi7D,aAAaj7D,EAAEorD,KAAK,IAAIoP,EAAGx6D,GAAG,EAAE,CAC9Z,SAASk7D,EAAGl7D,GAAG,OAAOA,EAAEusD,KAAK,KAAK,EAAE,OAAOiO,EAAGx6D,EAAE8mB,MAAM,KAAK,GAAG,OAAO0zC,EAAG,QAAQ,KAAK,GAAG,OAAOA,EAAG,YAAY,KAAK,GAAG,OAAOA,EAAG,gBAAgB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,OAAOx6D,EAAE46D,EAAG56D,EAAE8mB,MAAK,GAAM,KAAK,GAAG,OAAO9mB,EAAE46D,EAAG56D,EAAE8mB,KAAK4qC,QAAO,GAAM,KAAK,EAAE,OAAO1xD,EAAE46D,EAAG56D,EAAE8mB,MAAK,GAAM,QAAQ,MAAM,GAAG,CACxR,SAASq0C,EAAGn7D,GAAG,GAAG,MAAMA,EAAE,OAAO,KAAK,GAAG,oBAAoBA,EAAE,OAAOA,EAAEi7D,aAAaj7D,EAAEorD,MAAM,KAAK,GAAG,kBAAkBprD,EAAE,OAAOA,EAAE,OAAOA,GAAG,KAAKy5D,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,SAAS,KAAKG,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,aAAa,KAAKK,EAAG,MAAM,WAAW,KAAKC,EAAG,MAAM,eAAe,GAAG,kBAAkBh6D,EAAE,OAAOA,EAAEo7D,UAAU,KAAKvB,EAAG,OAAO75D,EAAEi7D,aAAa,WAAW,YAAY,KAAKrB,EAAG,OAAO55D,EAAEq7D,SAASJ,aAAa,WAAW,YAAY,KAAKnB,EAAG,IAAIt9D,EAAEwD,EAAE0xD,OAC7Z,OADoa1xD,EAAEA,EAAEi7D,eACndj7D,EAAE,MADieA,EAAExD,EAAEy+D,aAClfz+D,EAAE4uD,MAAM,IAAY,cAAcprD,EAAE,IAAI,cAAqBA,EAAE,KAAKi6D,EAAG,OAA6B,QAAtBz9D,EAAEwD,EAAEi7D,aAAa,MAAcz+D,EAAE2+D,EAAGn7D,EAAE8mB,OAAO,OAAO,KAAKozC,EAAG19D,EAAEwD,EAAEs7D,SAASt7D,EAAEA,EAAEu7D,MAAM,IAAI,OAAOJ,EAAGn7D,EAAExD,GAAG,CAAC,MAAM4C,GAAG,EAAE,OAAO,IAAI,CAC3M,SAASo8D,EAAGx7D,GAAG,IAAIxD,EAAEwD,EAAE8mB,KAAK,OAAO9mB,EAAEusD,KAAK,KAAK,GAAG,MAAM,QAAQ,KAAK,EAAE,OAAO/vD,EAAEy+D,aAAa,WAAW,YAAY,KAAK,GAAG,OAAOz+D,EAAE6+D,SAASJ,aAAa,WAAW,YAAY,KAAK,GAAG,MAAM,qBAAqB,KAAK,GAAG,OAAkBj7D,GAAXA,EAAExD,EAAEk1D,QAAWuJ,aAAaj7D,EAAEorD,MAAM,GAAG5uD,EAAEy+D,cAAc,KAAKj7D,EAAE,cAAcA,EAAE,IAAI,cAAc,KAAK,EAAE,MAAM,WAAW,KAAK,EAAE,OAAOxD,EAAE,KAAK,EAAE,MAAM,SAAS,KAAK,EAAE,MAAM,OAAO,KAAK,EAAE,MAAM,OAAO,KAAK,GAAG,OAAO2+D,EAAG3+D,GAAG,KAAK,EAAE,OAAOA,IAAIk9D,EAAG,aAAa,OAAO,KAAK,GAAG,MAAM,YACtf,KAAK,GAAG,MAAM,WAAW,KAAK,GAAG,MAAM,QAAQ,KAAK,GAAG,MAAM,WAAW,KAAK,GAAG,MAAM,eAAe,KAAK,GAAG,MAAM,gBAAgB,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,GAAG,oBAAoBl9D,EAAE,OAAOA,EAAEy+D,aAAaz+D,EAAE4uD,MAAM,KAAK,GAAG,kBAAkB5uD,EAAE,OAAOA,EAAE,OAAO,IAAI,CAAC,SAASi/D,EAAGz7D,GAAG,cAAcA,GAAG,IAAK,UAAU,IAAK,SAAS,IAAK,SAAS,IAAK,YAAqB,IAAK,SAAS,OAAOA,EAAE,QAAQ,MAAM,GAAG,CACra,SAAS07D,EAAG17D,GAAG,IAAIxD,EAAEwD,EAAE8mB,KAAK,OAAO9mB,EAAEA,EAAE27D,WAAW,UAAU37D,EAAEjO,gBAAgB,aAAayK,GAAG,UAAUA,EAAE,CAEtF,SAASo/D,EAAG57D,GAAGA,EAAE67D,gBAAgB77D,EAAE67D,cADvD,SAAY77D,GAAG,IAAIxD,EAAEk/D,EAAG17D,GAAG,UAAU,QAAQZ,EAAElO,OAAO4qE,yBAAyB97D,EAAE+7D,YAAY9qD,UAAUzU,GAAGuB,EAAE,GAAGiC,EAAExD,GAAG,IAAIwD,EAAE8sD,eAAetwD,IAAI,qBAAqB4C,GAAG,oBAAoBA,EAAE4D,KAAK,oBAAoB5D,EAAE9O,IAAI,CAAC,IAAIqU,EAAEvF,EAAE4D,IAAI/F,EAAEmC,EAAE9O,IAAiL,OAA7KY,OAAO4pE,eAAe96D,EAAExD,EAAE,CAACw/D,cAAa,EAAGh5D,IAAI,WAAW,OAAO2B,EAAEooD,KAAKz8C,KAAK,EAAEhgB,IAAI,SAAS0P,GAAGjC,EAAE,GAAGiC,EAAE/C,EAAE8vD,KAAKz8C,KAAKtQ,EAAE,IAAI9O,OAAO4pE,eAAe96D,EAAExD,EAAE,CAACy/D,WAAW78D,EAAE68D,aAAmB,CAACC,SAAS,WAAW,OAAOn+D,CAAC,EAAEo+D,SAAS,SAASn8D,GAAGjC,EAAE,GAAGiC,CAAC,EAAEo8D,aAAa,WAAWp8D,EAAE67D,cACxf,YAAY77D,EAAExD,EAAE,EAAE,CAAC,CAAkD6/D,CAAGr8D,GAAG,CAAC,SAASs8D,EAAGt8D,GAAG,IAAIA,EAAE,OAAM,EAAG,IAAIxD,EAAEwD,EAAE67D,cAAc,IAAIr/D,EAAE,OAAM,EAAG,IAAI4C,EAAE5C,EAAE0/D,WAAen+D,EAAE,GAAqD,OAAlDiC,IAAIjC,EAAE29D,EAAG17D,GAAGA,EAAEu8D,QAAQ,OAAO,QAAQv8D,EAAEuE,QAAOvE,EAAEjC,KAAaqB,IAAG5C,EAAE2/D,SAASn8D,IAAG,EAAM,CAAC,SAASw8D,EAAGx8D,GAAwD,GAAG,qBAAxDA,EAAEA,IAAI,qBAAqBuqD,SAASA,cAAS,IAAkC,OAAO,KAAK,IAAI,OAAOvqD,EAAEy8D,eAAez8D,EAAE8rD,IAAI,CAAC,MAAMtvD,GAAG,OAAOwD,EAAE8rD,IAAI,CAAC,CACpa,SAAS4Q,EAAG18D,EAAExD,GAAG,IAAI4C,EAAE5C,EAAE+/D,QAAQ,OAAOplB,EAAE,CAAC,EAAE36C,EAAE,CAACmgE,oBAAe,EAAOC,kBAAa,EAAOr4D,WAAM,EAAOg4D,QAAQ,MAAMn9D,EAAEA,EAAEY,EAAE68D,cAAcC,gBAAgB,CAAC,SAASC,EAAG/8D,EAAExD,GAAG,IAAI4C,EAAE,MAAM5C,EAAEogE,aAAa,GAAGpgE,EAAEogE,aAAa7+D,EAAE,MAAMvB,EAAE+/D,QAAQ//D,EAAE+/D,QAAQ//D,EAAEmgE,eAAev9D,EAAEq8D,EAAG,MAAMj/D,EAAE+H,MAAM/H,EAAE+H,MAAMnF,GAAGY,EAAE68D,cAAc,CAACC,eAAe/+D,EAAEi/D,aAAa59D,EAAE69D,WAAW,aAAazgE,EAAEsqB,MAAM,UAAUtqB,EAAEsqB,KAAK,MAAMtqB,EAAE+/D,QAAQ,MAAM//D,EAAE+H,MAAM,CAAC,SAAS8+B,EAAGrjC,EAAExD,GAAe,OAAZA,EAAEA,EAAE+/D,UAAiBzD,EAAG94D,EAAE,UAAUxD,GAAE,EAAG,CAC9d,SAAS0gE,EAAGl9D,EAAExD,GAAG6mC,EAAGrjC,EAAExD,GAAG,IAAI4C,EAAEq8D,EAAGj/D,EAAE+H,OAAOxG,EAAEvB,EAAEsqB,KAAK,GAAG,MAAM1nB,EAAK,WAAWrB,GAAM,IAAIqB,GAAG,KAAKY,EAAEuE,OAAOvE,EAAEuE,OAAOnF,KAAEY,EAAEuE,MAAM,GAAGnF,GAAOY,EAAEuE,QAAQ,GAAGnF,IAAIY,EAAEuE,MAAM,GAAGnF,QAAQ,GAAG,WAAWrB,GAAG,UAAUA,EAA8B,YAA3BiC,EAAEmxD,gBAAgB,SAAgB30D,EAAEswD,eAAe,SAASqQ,GAAGn9D,EAAExD,EAAEsqB,KAAK1nB,GAAG5C,EAAEswD,eAAe,iBAAiBqQ,GAAGn9D,EAAExD,EAAEsqB,KAAK20C,EAAGj/D,EAAEogE,eAAe,MAAMpgE,EAAE+/D,SAAS,MAAM//D,EAAEmgE,iBAAiB38D,EAAE28D,iBAAiBngE,EAAEmgE,eAAe,CACla,SAASS,EAAGp9D,EAAExD,EAAE4C,GAAG,GAAG5C,EAAEswD,eAAe,UAAUtwD,EAAEswD,eAAe,gBAAgB,CAAC,IAAI/uD,EAAEvB,EAAEsqB,KAAK,KAAK,WAAW/oB,GAAG,UAAUA,QAAG,IAASvB,EAAE+H,OAAO,OAAO/H,EAAE+H,OAAO,OAAO/H,EAAE,GAAGwD,EAAE68D,cAAcG,aAAa59D,GAAG5C,IAAIwD,EAAEuE,QAAQvE,EAAEuE,MAAM/H,GAAGwD,EAAE48D,aAAapgE,CAAC,CAAU,MAAT4C,EAAEY,EAAEorD,QAAcprD,EAAEorD,KAAK,IAAIprD,EAAE28D,iBAAiB38D,EAAE68D,cAAcC,eAAe,KAAK19D,IAAIY,EAAEorD,KAAKhsD,EAAE,CACzV,SAAS+9D,GAAGn9D,EAAExD,EAAE4C,GAAM,WAAW5C,GAAGggE,EAAGx8D,EAAEywD,iBAAiBzwD,IAAE,MAAMZ,EAAEY,EAAE48D,aAAa,GAAG58D,EAAE68D,cAAcG,aAAah9D,EAAE48D,eAAe,GAAGx9D,IAAIY,EAAE48D,aAAa,GAAGx9D,GAAE,CAAC,IAAIi+D,GAAGrsE,MAAMmB,QAC7K,SAASmrE,GAAGt9D,EAAExD,EAAE4C,EAAErB,GAAe,GAAZiC,EAAEA,EAAEhT,QAAWwP,EAAE,CAACA,EAAE,CAAC,EAAE,IAAI,IAAImI,EAAE,EAAEA,EAAEvF,EAAE3R,OAAOkX,IAAInI,EAAE,IAAI4C,EAAEuF,KAAI,EAAG,IAAIvF,EAAE,EAAEA,EAAEY,EAAEvS,OAAO2R,IAAIuF,EAAEnI,EAAEswD,eAAe,IAAI9sD,EAAEZ,GAAGmF,OAAOvE,EAAEZ,GAAGm+D,WAAW54D,IAAI3E,EAAEZ,GAAGm+D,SAAS54D,GAAGA,GAAG5G,IAAIiC,EAAEZ,GAAGo+D,iBAAgB,EAAG,KAAK,CAAmB,IAAlBp+D,EAAE,GAAGq8D,EAAGr8D,GAAG5C,EAAE,KAASmI,EAAE,EAAEA,EAAE3E,EAAEvS,OAAOkX,IAAI,CAAC,GAAG3E,EAAE2E,GAAGJ,QAAQnF,EAAiD,OAA9CY,EAAE2E,GAAG44D,UAAS,OAAGx/D,IAAIiC,EAAE2E,GAAG64D,iBAAgB,IAAW,OAAOhhE,GAAGwD,EAAE2E,GAAG84D,WAAWjhE,EAAEwD,EAAE2E,GAAG,CAAC,OAAOnI,IAAIA,EAAE+gE,UAAS,EAAG,CAAC,CACxY,SAASG,GAAG19D,EAAExD,GAAG,GAAG,MAAMA,EAAEmhE,wBAAwB,MAAMxuE,MAAM2N,EAAE,KAAK,OAAOq6C,EAAE,CAAC,EAAE36C,EAAE,CAAC+H,WAAM,EAAOq4D,kBAAa,EAAO/2C,SAAS,GAAG7lB,EAAE68D,cAAcG,cAAc,CAAC,SAASY,GAAG59D,EAAExD,GAAG,IAAI4C,EAAE5C,EAAE+H,MAAM,GAAG,MAAMnF,EAAE,CAA+B,GAA9BA,EAAE5C,EAAEqpB,SAASrpB,EAAEA,EAAEogE,aAAgB,MAAMx9D,EAAE,CAAC,GAAG,MAAM5C,EAAE,MAAMrN,MAAM2N,EAAE,KAAK,GAAGugE,GAAGj+D,GAAG,CAAC,GAAG,EAAEA,EAAE3R,OAAO,MAAM0B,MAAM2N,EAAE,KAAKsC,EAAEA,EAAE,EAAE,CAAC5C,EAAE4C,CAAC,CAAC,MAAM5C,IAAIA,EAAE,IAAI4C,EAAE5C,CAAC,CAACwD,EAAE68D,cAAc,CAACG,aAAavB,EAAGr8D,GAAG,CACnY,SAASy+D,GAAG79D,EAAExD,GAAG,IAAI4C,EAAEq8D,EAAGj/D,EAAE+H,OAAOxG,EAAE09D,EAAGj/D,EAAEogE,cAAc,MAAMx9D,KAAIA,EAAE,GAAGA,KAAMY,EAAEuE,QAAQvE,EAAEuE,MAAMnF,GAAG,MAAM5C,EAAEogE,cAAc58D,EAAE48D,eAAex9D,IAAIY,EAAE48D,aAAax9D,IAAI,MAAMrB,IAAIiC,EAAE48D,aAAa,GAAG7+D,EAAE,CAAC,SAAS+/D,GAAG99D,GAAG,IAAIxD,EAAEwD,EAAE+xD,YAAYv1D,IAAIwD,EAAE68D,cAAcG,cAAc,KAAKxgE,GAAG,OAAOA,IAAIwD,EAAEuE,MAAM/H,EAAE,CAAC,SAASuhE,GAAG/9D,GAAG,OAAOA,GAAG,IAAK,MAAM,MAAM,6BAA6B,IAAK,OAAO,MAAM,qCAAqC,QAAQ,MAAM,+BAA+B,CAC7c,SAASg+D,GAAGh+D,EAAExD,GAAG,OAAO,MAAMwD,GAAG,iCAAiCA,EAAE+9D,GAAGvhE,GAAG,+BAA+BwD,GAAG,kBAAkBxD,EAAE,+BAA+BwD,CAAC,CAChK,IAAIi+D,GAAej+D,GAAZk+D,IAAYl+D,GAAsJ,SAASA,EAAExD,GAAG,GAAG,+BAA+BwD,EAAEm+D,cAAc,cAAcn+D,EAAEA,EAAEgxD,UAAUx0D,MAAM,CAA2F,KAA1FyhE,GAAGA,IAAI1T,SAASY,cAAc,QAAU6F,UAAU,QAAQx0D,EAAE4hE,UAAUxgE,WAAW,SAAapB,EAAEyhE,GAAGI,WAAWr+D,EAAEq+D,YAAYr+D,EAAEwyD,YAAYxyD,EAAEq+D,YAAY,KAAK7hE,EAAE6hE,YAAYr+D,EAAE4sD,YAAYpwD,EAAE6hE,WAAW,CAAC,EAAvb,qBAAqBC,OAAOA,MAAMC,wBAAwB,SAAS/hE,EAAE4C,EAAErB,EAAE4G,GAAG25D,MAAMC,yBAAwB,WAAW,OAAOv+D,GAAExD,EAAE4C,EAAM,GAAE,EAAEY,IACtK,SAASw+D,GAAGx+D,EAAExD,GAAG,GAAGA,EAAE,CAAC,IAAI4C,EAAEY,EAAEq+D,WAAW,GAAGj/D,GAAGA,IAAIY,EAAEy+D,WAAW,IAAIr/D,EAAEs/D,SAAwB,YAAdt/D,EAAEu/D,UAAUniE,EAAS,CAACwD,EAAE+xD,YAAYv1D,CAAC,CACtH,IAAIoiE,GAAG,CAACC,yBAAwB,EAAGC,aAAY,EAAGC,mBAAkB,EAAGC,kBAAiB,EAAGC,kBAAiB,EAAGC,SAAQ,EAAGC,cAAa,EAAGC,iBAAgB,EAAGC,aAAY,EAAGC,SAAQ,EAAGC,MAAK,EAAGC,UAAS,EAAGC,cAAa,EAAGC,YAAW,EAAGC,cAAa,EAAGC,WAAU,EAAGC,UAAS,EAAGC,SAAQ,EAAGC,YAAW,EAAGC,aAAY,EAAGC,cAAa,EAAGC,YAAW,EAAGC,eAAc,EAAGC,gBAAe,EAAGC,iBAAgB,EAAGC,YAAW,EAAGC,WAAU,EAAGC,YAAW,EAAGC,SAAQ,EAAGC,OAAM,EAAGC,SAAQ,EAAGC,SAAQ,EAAGC,QAAO,EAAGC,QAAO,EAClfrkB,MAAK,EAAGskB,aAAY,EAAGC,cAAa,EAAGC,aAAY,EAAGC,iBAAgB,EAAGC,kBAAiB,EAAGC,kBAAiB,EAAGC,eAAc,EAAGC,aAAY,GAAIC,GAAG,CAAC,SAAS,KAAK,MAAM,KAA6H,SAASC,GAAGxhE,EAAExD,EAAE4C,GAAG,OAAO,MAAM5C,GAAG,mBAAmBA,GAAG,KAAKA,EAAE,GAAG4C,GAAG,kBAAkB5C,GAAG,IAAIA,GAAGoiE,GAAG9R,eAAe9sD,IAAI4+D,GAAG5+D,IAAI,GAAGxD,GAAGi+D,OAAOj+D,EAAE,IAAI,CACzb,SAASilE,GAAGzhE,EAAExD,GAAa,IAAI,IAAI4C,KAAlBY,EAAEA,EAAE0wD,MAAmBl0D,EAAE,GAAGA,EAAEswD,eAAe1tD,GAAG,CAAC,IAAIrB,EAAE,IAAIqB,EAAE+mB,QAAQ,MAAMxhB,EAAE68D,GAAGpiE,EAAE5C,EAAE4C,GAAGrB,GAAG,UAAUqB,IAAIA,EAAE,YAAYrB,EAAEiC,EAAE0hE,YAAYtiE,EAAEuF,GAAG3E,EAAEZ,GAAGuF,CAAC,CAAC,CADYzT,OAAO20C,KAAK+4B,IAAI1xE,SAAQ,SAAS8S,GAAGuhE,GAAGr0E,SAAQ,SAASsP,GAAGA,EAAEA,EAAEwD,EAAE2hE,OAAO,GAAGvqB,cAAcp3C,EAAE1D,UAAU,GAAGsiE,GAAGpiE,GAAGoiE,GAAG5+D,EAAE,GAAE,IAChI,IAAIg0D,GAAG7c,EAAE,CAACyqB,UAAS,GAAI,CAAC70D,MAAK,EAAG2oB,MAAK,EAAGmsC,IAAG,EAAGC,KAAI,EAAGC,OAAM,EAAGC,IAAG,EAAGC,KAAI,EAAGhqB,OAAM,EAAGiqB,QAAO,EAAGC,MAAK,EAAGnS,MAAK,EAAGoS,OAAM,EAAGjrD,QAAO,EAAGkrD,OAAM,EAAGC,KAAI,IAClT,SAAS3lD,GAAG3c,EAAExD,GAAG,GAAGA,EAAE,CAAC,GAAGw3D,GAAGh0D,KAAK,MAAMxD,EAAEqpB,UAAU,MAAMrpB,EAAEmhE,yBAAyB,MAAMxuE,MAAM2N,EAAE,IAAIkD,IAAI,GAAG,MAAMxD,EAAEmhE,wBAAwB,CAAC,GAAG,MAAMnhE,EAAEqpB,SAAS,MAAM12B,MAAM2N,EAAE,KAAK,GAAG,kBAAkBN,EAAEmhE,2BAA2B,WAAWnhE,EAAEmhE,yBAAyB,MAAMxuE,MAAM2N,EAAE,IAAK,CAAC,GAAG,MAAMN,EAAEk0D,OAAO,kBAAkBl0D,EAAEk0D,MAAM,MAAMvhE,MAAM2N,EAAE,IAAK,CAAC,CAClW,SAASylE,GAAGviE,EAAExD,GAAG,IAAI,IAAIwD,EAAEmmB,QAAQ,KAAK,MAAM,kBAAkB3pB,EAAEgmE,GAAG,OAAOxiE,GAAG,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,YAAY,IAAK,gBAAgB,IAAK,gBAAgB,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,gBAAgB,OAAM,EAAG,QAAQ,OAAM,EAAG,CAAC,IAAIyiE,GAAG,KAAK,SAASC,GAAG1iE,GAA6F,OAA1FA,EAAEA,EAAEoX,QAAQpX,EAAE2iE,YAAYjY,QAASkY,0BAA0B5iE,EAAEA,EAAE4iE,yBAAgC,IAAI5iE,EAAE0+D,SAAS1+D,EAAEuyD,WAAWvyD,CAAC,CAAC,IAAI6iE,GAAG,KAAKC,GAAG,KAAKC,GAAG,KACpc,SAASC,GAAGhjE,GAAG,GAAGA,EAAEijE,GAAGjjE,GAAG,CAAC,GAAG,oBAAoB6iE,GAAG,MAAM1zE,MAAM2N,EAAE,MAAM,IAAIN,EAAEwD,EAAEkjE,UAAU1mE,IAAIA,EAAE2mE,GAAG3mE,GAAGqmE,GAAG7iE,EAAEkjE,UAAUljE,EAAE8mB,KAAKtqB,GAAG,CAAC,CAAC,SAAS4mE,GAAGpjE,GAAG8iE,GAAGC,GAAGA,GAAG11E,KAAK2S,GAAG+iE,GAAG,CAAC/iE,GAAG8iE,GAAG9iE,CAAC,CAAC,SAASqjE,KAAK,GAAGP,GAAG,CAAC,IAAI9iE,EAAE8iE,GAAGtmE,EAAEumE,GAAoB,GAAjBA,GAAGD,GAAG,KAAKE,GAAGhjE,GAAMxD,EAAE,IAAIwD,EAAE,EAAEA,EAAExD,EAAE/O,OAAOuS,IAAIgjE,GAAGxmE,EAAEwD,GAAG,CAAC,CAAC,SAASsjE,GAAGtjE,EAAExD,GAAG,OAAOwD,EAAExD,EAAE,CAAC,SAAS+mE,KAAK,CAAC,IAAIC,IAAG,EAAG,SAASC,GAAGzjE,EAAExD,EAAE4C,GAAG,GAAGokE,GAAG,OAAOxjE,EAAExD,EAAE4C,GAAGokE,IAAG,EAAG,IAAI,OAAOF,GAAGtjE,EAAExD,EAAE4C,EAAE,CAAC,QAAWokE,IAAG,GAAG,OAAOV,IAAI,OAAOC,MAAGQ,KAAKF,KAAI,CAAC,CAChb,SAASK,GAAG1jE,EAAExD,GAAG,IAAI4C,EAAEY,EAAEkjE,UAAU,GAAG,OAAO9jE,EAAE,OAAO,KAAK,IAAIrB,EAAEolE,GAAG/jE,GAAG,GAAG,OAAOrB,EAAE,OAAO,KAAKqB,EAAErB,EAAEvB,GAAGwD,EAAE,OAAOxD,GAAG,IAAK,UAAU,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,uBAAuB,IAAK,cAAc,IAAK,qBAAqB,IAAK,cAAc,IAAK,qBAAqB,IAAK,YAAY,IAAK,mBAAmB,IAAK,gBAAgBuB,GAAGA,EAAE0/D,YAAqB1/D,IAAI,YAAbiC,EAAEA,EAAE8mB,OAAuB,UAAU9mB,GAAG,WAAWA,GAAG,aAAaA,IAAIA,GAAGjC,EAAE,MAAMiC,EAAE,QAAQA,GAAE,EAAG,GAAGA,EAAE,OAAO,KAAK,GAAGZ,GAAG,oBACleA,EAAE,MAAMjQ,MAAM2N,EAAE,IAAIN,SAAS4C,IAAI,OAAOA,CAAC,CAAC,IAAIukE,IAAG,EAAG,GAAG3L,EAAG,IAAI,IAAI4L,GAAG,CAAC,EAAE1yE,OAAO4pE,eAAe8I,GAAG,UAAU,CAAC5gE,IAAI,WAAW2gE,IAAG,CAAE,IAAIjZ,OAAO6C,iBAAiB,OAAOqW,GAAGA,IAAIlZ,OAAOgD,oBAAoB,OAAOkW,GAAGA,GAAG,CAAC,MAAM5jE,IAAG2jE,IAAG,CAAE,CAAC,SAASE,GAAG7jE,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,EAAEV,EAAEI,EAAEsN,GAAG,IAAIrN,EAAE5L,MAAMigB,UAAU1P,MAAMwrD,KAAKh8D,UAAU,GAAG,IAAIyL,EAAEkR,MAAMtO,EAAExC,EAAE,CAAC,MAAMqzB,GAAG3f,KAAKwzD,QAAQ7zC,EAAE,CAAC,CAAC,IAAI8zC,IAAG,EAAGC,GAAG,KAAKC,IAAG,EAAGC,GAAG,KAAKC,GAAG,CAACL,QAAQ,SAAS9jE,GAAG+jE,IAAG,EAAGC,GAAGhkE,CAAC,GAAG,SAASokE,GAAGpkE,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,EAAEV,EAAEI,EAAEsN,GAAG85D,IAAG,EAAGC,GAAG,KAAKH,GAAGn2D,MAAMy2D,GAAGpzE,UAAU,CACjW,SAASszE,GAAGrkE,GAAG,IAAIxD,EAAEwD,EAAEZ,EAAEY,EAAE,GAAGA,EAAEskE,UAAU,KAAK9nE,EAAE+nE,QAAQ/nE,EAAEA,EAAE+nE,WAAW,CAACvkE,EAAExD,EAAE,GAAO,KAAa,MAAjBA,EAAEwD,GAASwkE,SAAcplE,EAAE5C,EAAE+nE,QAAQvkE,EAAExD,EAAE+nE,aAAavkE,EAAE,CAAC,OAAO,IAAIxD,EAAE+vD,IAAIntD,EAAE,IAAI,CAAC,SAASqlE,GAAGzkE,GAAG,GAAG,KAAKA,EAAEusD,IAAI,CAAC,IAAI/vD,EAAEwD,EAAE0kE,cAAsE,GAAxD,OAAOloE,IAAkB,QAAdwD,EAAEA,EAAEskE,aAAqB9nE,EAAEwD,EAAE0kE,gBAAmB,OAAOloE,EAAE,OAAOA,EAAEmoE,UAAU,CAAC,OAAO,IAAI,CAAC,SAASC,GAAG5kE,GAAG,GAAGqkE,GAAGrkE,KAAKA,EAAE,MAAM7Q,MAAM2N,EAAE,KAAM,CAE1S,SAAS+nE,GAAG7kE,GAAW,OAAO,QAAfA,EADtN,SAAYA,GAAG,IAAIxD,EAAEwD,EAAEskE,UAAU,IAAI9nE,EAAE,CAAS,GAAG,QAAXA,EAAE6nE,GAAGrkE,IAAe,MAAM7Q,MAAM2N,EAAE,MAAM,OAAON,IAAIwD,EAAE,KAAKA,CAAC,CAAC,IAAI,IAAIZ,EAAEY,EAAEjC,EAAEvB,IAAI,CAAC,IAAImI,EAAEvF,EAAEmlE,OAAO,GAAG,OAAO5/D,EAAE,MAAM,IAAI1H,EAAE0H,EAAE2/D,UAAU,GAAG,OAAOrnE,EAAE,CAAY,GAAG,QAAdc,EAAE4G,EAAE4/D,QAAmB,CAACnlE,EAAErB,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG4G,EAAEgoD,QAAQ1vD,EAAE0vD,MAAM,CAAC,IAAI1vD,EAAE0H,EAAEgoD,MAAM1vD,GAAG,CAAC,GAAGA,IAAImC,EAAE,OAAOwlE,GAAGjgE,GAAG3E,EAAE,GAAG/C,IAAIc,EAAE,OAAO6mE,GAAGjgE,GAAGnI,EAAES,EAAEA,EAAE6nE,OAAO,CAAC,MAAM31E,MAAM2N,EAAE,KAAM,CAAC,GAAGsC,EAAEmlE,SAASxmE,EAAEwmE,OAAOnlE,EAAEuF,EAAE5G,EAAEd,MAAM,CAAC,IAAI,IAAIV,GAAE,EAAGI,EAAEgI,EAAEgoD,MAAMhwD,GAAG,CAAC,GAAGA,IAAIyC,EAAE,CAAC7C,GAAE,EAAG6C,EAAEuF,EAAE5G,EAAEd,EAAE,KAAK,CAAC,GAAGN,IAAIoB,EAAE,CAACxB,GAAE,EAAGwB,EAAE4G,EAAEvF,EAAEnC,EAAE,KAAK,CAACN,EAAEA,EAAEmoE,OAAO,CAAC,IAAIvoE,EAAE,CAAC,IAAII,EAAEM,EAAE0vD,MAAMhwD,GAAG,CAAC,GAAGA,IAC5fyC,EAAE,CAAC7C,GAAE,EAAG6C,EAAEnC,EAAEc,EAAE4G,EAAE,KAAK,CAAC,GAAGhI,IAAIoB,EAAE,CAACxB,GAAE,EAAGwB,EAAEd,EAAEmC,EAAEuF,EAAE,KAAK,CAAChI,EAAEA,EAAEmoE,OAAO,CAAC,IAAIvoE,EAAE,MAAMpN,MAAM2N,EAAE,KAAM,CAAC,CAAC,GAAGsC,EAAEklE,YAAYvmE,EAAE,MAAM5O,MAAM2N,EAAE,KAAM,CAAC,GAAG,IAAIsC,EAAEmtD,IAAI,MAAMp9D,MAAM2N,EAAE,MAAM,OAAOsC,EAAE8jE,UAAU7iE,UAAUjB,EAAEY,EAAExD,CAAC,CAAkBuoE,CAAG/kE,IAAmBglE,GAAGhlE,GAAG,IAAI,CAAC,SAASglE,GAAGhlE,GAAG,GAAG,IAAIA,EAAEusD,KAAK,IAAIvsD,EAAEusD,IAAI,OAAOvsD,EAAE,IAAIA,EAAEA,EAAE2sD,MAAM,OAAO3sD,GAAG,CAAC,IAAIxD,EAAEwoE,GAAGhlE,GAAG,GAAG,OAAOxD,EAAE,OAAOA,EAAEwD,EAAEA,EAAE8kE,OAAO,CAAC,OAAO,IAAI,CAC1X,IAAIG,GAAG1pD,EAAG2pD,0BAA0BC,GAAG5pD,EAAG6pD,wBAAwBjO,GAAG57C,EAAG8pD,qBAAqBC,GAAG/pD,EAAGgqD,sBAAsBvuB,GAAEz7B,EAAGiqD,aAAaC,GAAGlqD,EAAGmqD,iCAAiCC,GAAGpqD,EAAGqqD,2BAA2BC,GAAGtqD,EAAGuqD,8BAA8BC,GAAGxqD,EAAGyqD,wBAAwBC,GAAG1qD,EAAG2qD,qBAAqBC,GAAG5qD,EAAG6qD,sBAAsBC,GAAG,KAAKC,GAAG,KACvV,IAAIC,GAAGxpE,KAAKypE,MAAMzpE,KAAKypE,MAAiC,SAAYxmE,GAAU,OAAPA,KAAK,EAAS,IAAIA,EAAE,GAAG,IAAIymE,GAAGzmE,GAAG0mE,GAAG,GAAG,CAAC,EAA/ED,GAAG1pE,KAAKq4B,IAAIsxC,GAAG3pE,KAAK4pE,IAA4D,IAAIC,GAAG,GAAG1P,GAAG,QAC7H,SAAS2P,GAAG7mE,GAAG,OAAOA,GAAGA,GAAG,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAS,QAAFA,EAAU,KAAK,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,OAAS,UAAFA,EAAY,KAAK,UAAU,OAAO,UAAU,KAAK,UAAU,OAAO,UAAU,KAAK,UAAU,OAAO,UAAU,KAAK,WAAW,OAAO,WACzgB,QAAQ,OAAOA,EAAE,CAAC,SAAS8mE,GAAG9mE,EAAExD,GAAG,IAAI4C,EAAEY,EAAE+mE,aAAa,GAAG,IAAI3nE,EAAE,OAAO,EAAE,IAAIrB,EAAE,EAAE4G,EAAE3E,EAAEgnE,eAAe/pE,EAAE+C,EAAEinE,YAAY1qE,EAAI,UAAF6C,EAAY,GAAG,IAAI7C,EAAE,CAAC,IAAII,EAAEJ,GAAGoI,EAAE,IAAIhI,EAAEoB,EAAE8oE,GAAGlqE,GAAS,KAALM,GAAGV,KAAUwB,EAAE8oE,GAAG5pE,GAAI,MAAa,KAAPV,EAAE6C,GAAGuF,GAAQ5G,EAAE8oE,GAAGtqE,GAAG,IAAIU,IAAIc,EAAE8oE,GAAG5pE,IAAI,GAAG,IAAIc,EAAE,OAAO,EAAE,GAAG,IAAIvB,GAAGA,IAAIuB,GAAG,KAAKvB,EAAEmI,MAAKA,EAAE5G,GAAGA,KAAEd,EAAET,GAAGA,IAAQ,KAAKmI,GAAG,KAAO,QAAF1H,IAAY,OAAOT,EAA0C,GAAxC,KAAO,EAAFuB,KAAOA,GAAK,GAAFqB,GAA4B,KAAtB5C,EAAEwD,EAAEknE,gBAAwB,IAAIlnE,EAAEA,EAAEmnE,cAAc3qE,GAAGuB,EAAE,EAAEvB,GAAcmI,EAAE,IAAbvF,EAAE,GAAGmnE,GAAG/pE,IAAUuB,GAAGiC,EAAEZ,GAAG5C,IAAImI,EAAE,OAAO5G,CAAC,CACvc,SAASqpE,GAAGpnE,EAAExD,GAAG,OAAOwD,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,OAAOxD,EAAE,IAAI,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAOA,EAAE,IAAuJ,QAAQ,OAAO,EAAE,CACrN,SAAS6qE,GAAGrnE,GAAgC,OAAO,KAApCA,GAAkB,WAAhBA,EAAE+mE,cAAsC/mE,EAAI,WAAFA,EAAa,WAAW,CAAC,CAAC,SAASsnE,KAAK,IAAItnE,EAAE4mE,GAAoC,OAA1B,KAAQ,SAAfA,KAAK,MAAqBA,GAAG,IAAW5mE,CAAC,CAAC,SAASunE,GAAGvnE,GAAG,IAAI,IAAIxD,EAAE,GAAG4C,EAAE,EAAE,GAAGA,EAAEA,IAAI5C,EAAEnP,KAAK2S,GAAG,OAAOxD,CAAC,CAC3a,SAASgrE,GAAGxnE,EAAExD,EAAE4C,GAAGY,EAAE+mE,cAAcvqE,EAAE,YAAYA,IAAIwD,EAAEgnE,eAAe,EAAEhnE,EAAEinE,YAAY,IAAGjnE,EAAEA,EAAEynE,YAAWjrE,EAAE,GAAG+pE,GAAG/pE,IAAQ4C,CAAC,CACzH,SAASsoE,GAAG1nE,EAAExD,GAAG,IAAI4C,EAAEY,EAAEknE,gBAAgB1qE,EAAE,IAAIwD,EAAEA,EAAEmnE,cAAc/nE,GAAG,CAAC,IAAIrB,EAAE,GAAGwoE,GAAGnnE,GAAGuF,EAAE,GAAG5G,EAAE4G,EAAEnI,EAAEwD,EAAEjC,GAAGvB,IAAIwD,EAAEjC,IAAIvB,GAAG4C,IAAIuF,CAAC,CAAC,CAAC,IAAIsyC,GAAE,EAAE,SAAS0wB,GAAG3nE,GAAS,OAAO,GAAbA,IAAIA,GAAa,EAAEA,EAAE,KAAO,UAAFA,GAAa,GAAG,UAAU,EAAE,CAAC,CAAC,IAAI4nE,GAAGC,GAAGC,GAAGC,GAAGC,GAAGC,IAAG,EAAGC,GAAG,GAAGC,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAI5lE,IAAI6lE,GAAG,IAAI7lE,IAAI8lE,GAAG,GAAGC,GAAG,6PAA6PliE,MAAM,KAChiB,SAASmiE,GAAG1oE,EAAExD,GAAG,OAAOwD,GAAG,IAAK,UAAU,IAAK,WAAWmoE,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,YAAYC,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,WAAWC,GAAG,KAAK,MAAM,IAAK,cAAc,IAAK,aAAaC,GAAG7jE,OAAOjI,EAAEmsE,WAAW,MAAM,IAAK,oBAAoB,IAAK,qBAAqBJ,GAAG9jE,OAAOjI,EAAEmsE,WAAW,CACnT,SAASC,GAAG5oE,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,GAAG,OAAG,OAAO+C,GAAGA,EAAE6oE,cAAc5rE,GAAS+C,EAAE,CAAC8oE,UAAUtsE,EAAEusE,aAAa3pE,EAAE4pE,iBAAiBjrE,EAAE8qE,YAAY5rE,EAAEgsE,iBAAiB,CAACtkE,IAAI,OAAOnI,IAAY,QAARA,EAAEymE,GAAGzmE,KAAaqrE,GAAGrrE,IAAIwD,IAAEA,EAAEgpE,kBAAkBjrE,EAAEvB,EAAEwD,EAAEipE,iBAAiB,OAAOtkE,IAAI,IAAInI,EAAE2pB,QAAQxhB,IAAInI,EAAEnP,KAAKsX,GAAU3E,EAAC,CAEpR,SAASkpE,GAAGlpE,GAAG,IAAIxD,EAAE2sE,GAAGnpE,EAAEoX,QAAQ,GAAG,OAAO5a,EAAE,CAAC,IAAI4C,EAAEilE,GAAG7nE,GAAG,GAAG,OAAO4C,EAAE,GAAW,MAAR5C,EAAE4C,EAAEmtD,MAAY,GAAW,QAAR/vD,EAAEioE,GAAGrlE,IAA4D,OAA/CY,EAAE8oE,UAAUtsE,OAAEwrE,GAAGhoE,EAAEopE,UAAS,WAAWtB,GAAG1oE,EAAE,SAAgB,GAAG,IAAI5C,GAAG4C,EAAE8jE,UAAU7iE,QAAQqkE,cAAc2E,aAAmE,YAArDrpE,EAAE8oE,UAAU,IAAI1pE,EAAEmtD,IAAIntD,EAAE8jE,UAAUoG,cAAc,KAAY,CAACtpE,EAAE8oE,UAAU,IAAI,CAClT,SAASS,GAAGvpE,GAAG,GAAG,OAAOA,EAAE8oE,UAAU,OAAM,EAAG,IAAI,IAAItsE,EAAEwD,EAAEipE,iBAAiB,EAAEzsE,EAAE/O,QAAQ,CAAC,IAAI2R,EAAEoqE,GAAGxpE,EAAE+oE,aAAa/oE,EAAEgpE,iBAAiBxsE,EAAE,GAAGwD,EAAE6oE,aAAa,GAAG,OAAOzpE,EAAiG,OAAe,QAAR5C,EAAEymE,GAAG7jE,KAAayoE,GAAGrrE,GAAGwD,EAAE8oE,UAAU1pE,GAAE,EAA3H,IAAIrB,EAAE,IAAtBqB,EAAEY,EAAE6oE,aAAwB9M,YAAY38D,EAAE0nB,KAAK1nB,GAAGqjE,GAAG1kE,EAAEqB,EAAEgY,OAAOizC,cAActsD,GAAG0kE,GAAG,KAA0DjmE,EAAEgI,OAAO,CAAC,OAAM,CAAE,CAAC,SAASilE,GAAGzpE,EAAExD,EAAE4C,GAAGmqE,GAAGvpE,IAAIZ,EAAEqF,OAAOjI,EAAE,CAAC,SAASktE,KAAKzB,IAAG,EAAG,OAAOE,IAAIoB,GAAGpB,MAAMA,GAAG,MAAM,OAAOC,IAAImB,GAAGnB,MAAMA,GAAG,MAAM,OAAOC,IAAIkB,GAAGlB,MAAMA,GAAG,MAAMC,GAAGp7E,QAAQu8E,IAAIlB,GAAGr7E,QAAQu8E,GAAG,CACnf,SAASE,GAAG3pE,EAAExD,GAAGwD,EAAE8oE,YAAYtsE,IAAIwD,EAAE8oE,UAAU,KAAKb,KAAKA,IAAG,EAAG1sD,EAAG2pD,0BAA0B3pD,EAAGyqD,wBAAwB0D,KAAK,CAC5H,SAASE,GAAG5pE,GAAG,SAASxD,EAAEA,GAAG,OAAOmtE,GAAGntE,EAAEwD,EAAE,CAAC,GAAG,EAAEkoE,GAAGz6E,OAAO,CAACk8E,GAAGzB,GAAG,GAAGloE,GAAG,IAAI,IAAIZ,EAAE,EAAEA,EAAE8oE,GAAGz6E,OAAO2R,IAAI,CAAC,IAAIrB,EAAEmqE,GAAG9oE,GAAGrB,EAAE+qE,YAAY9oE,IAAIjC,EAAE+qE,UAAU,KAAK,CAAC,CAAyF,IAAxF,OAAOX,IAAIwB,GAAGxB,GAAGnoE,GAAG,OAAOooE,IAAIuB,GAAGvB,GAAGpoE,GAAG,OAAOqoE,IAAIsB,GAAGtB,GAAGroE,GAAGsoE,GAAGp7E,QAAQsP,GAAG+rE,GAAGr7E,QAAQsP,GAAO4C,EAAE,EAAEA,EAAEopE,GAAG/6E,OAAO2R,KAAIrB,EAAEyqE,GAAGppE,IAAK0pE,YAAY9oE,IAAIjC,EAAE+qE,UAAU,MAAM,KAAK,EAAEN,GAAG/6E,QAAiB,QAAR2R,EAAEopE,GAAG,IAAYM,WAAYI,GAAG9pE,GAAG,OAAOA,EAAE0pE,WAAWN,GAAGhkE,OAAO,CAAC,IAAIqlE,GAAGntD,EAAGotD,wBAAwBC,IAAG,EAC5a,SAASC,GAAGhqE,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAEsyC,GAAEh6C,EAAE4sE,GAAGI,WAAWJ,GAAGI,WAAW,KAAK,IAAIhzB,GAAE,EAAEizB,GAAGlqE,EAAExD,EAAE4C,EAAErB,EAAE,CAAC,QAAQk5C,GAAEtyC,EAAEklE,GAAGI,WAAWhtE,CAAC,CAAC,CAAC,SAASktE,GAAGnqE,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAEsyC,GAAEh6C,EAAE4sE,GAAGI,WAAWJ,GAAGI,WAAW,KAAK,IAAIhzB,GAAE,EAAEizB,GAAGlqE,EAAExD,EAAE4C,EAAErB,EAAE,CAAC,QAAQk5C,GAAEtyC,EAAEklE,GAAGI,WAAWhtE,CAAC,CAAC,CACjO,SAASitE,GAAGlqE,EAAExD,EAAE4C,EAAErB,GAAG,GAAGgsE,GAAG,CAAC,IAAIplE,EAAE6kE,GAAGxpE,EAAExD,EAAE4C,EAAErB,GAAG,GAAG,OAAO4G,EAAEylE,GAAGpqE,EAAExD,EAAEuB,EAAEssE,GAAGjrE,GAAGspE,GAAG1oE,EAAEjC,QAAQ,GANtF,SAAYiC,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,OAAOnI,GAAG,IAAK,UAAU,OAAO2rE,GAAGS,GAAGT,GAAGnoE,EAAExD,EAAE4C,EAAErB,EAAE4G,IAAG,EAAG,IAAK,YAAY,OAAOyjE,GAAGQ,GAAGR,GAAGpoE,EAAExD,EAAE4C,EAAErB,EAAE4G,IAAG,EAAG,IAAK,YAAY,OAAO0jE,GAAGO,GAAGP,GAAGroE,EAAExD,EAAE4C,EAAErB,EAAE4G,IAAG,EAAG,IAAK,cAAc,IAAI1H,EAAE0H,EAAEgkE,UAAkD,OAAxCL,GAAGh4E,IAAI2M,EAAE2rE,GAAGN,GAAGtlE,IAAI/F,IAAI,KAAK+C,EAAExD,EAAE4C,EAAErB,EAAE4G,KAAU,EAAG,IAAK,oBAAoB,OAAO1H,EAAE0H,EAAEgkE,UAAUJ,GAAGj4E,IAAI2M,EAAE2rE,GAAGL,GAAGvlE,IAAI/F,IAAI,KAAK+C,EAAExD,EAAE4C,EAAErB,EAAE4G,KAAI,EAAG,OAAM,CAAE,CAM1Q2lE,CAAG3lE,EAAE3E,EAAExD,EAAE4C,EAAErB,GAAGA,EAAEwsE,uBAAuB,GAAG7B,GAAG1oE,EAAEjC,GAAK,EAAFvB,IAAM,EAAEisE,GAAGtiD,QAAQnmB,GAAG,CAAC,KAAK,OAAO2E,GAAG,CAAC,IAAI1H,EAAEgmE,GAAGt+D,GAA0D,GAAvD,OAAO1H,GAAG2qE,GAAG3qE,GAAiB,QAAdA,EAAEusE,GAAGxpE,EAAExD,EAAE4C,EAAErB,KAAaqsE,GAAGpqE,EAAExD,EAAEuB,EAAEssE,GAAGjrE,GAAMnC,IAAI0H,EAAE,MAAMA,EAAE1H,CAAC,CAAC,OAAO0H,GAAG5G,EAAEwsE,iBAAiB,MAAMH,GAAGpqE,EAAExD,EAAEuB,EAAE,KAAKqB,EAAE,CAAC,CAAC,IAAIirE,GAAG,KACpU,SAASb,GAAGxpE,EAAExD,EAAE4C,EAAErB,GAA2B,GAAxBssE,GAAG,KAAwB,QAAXrqE,EAAEmpE,GAAVnpE,EAAE0iE,GAAG3kE,KAAuB,GAAW,QAARvB,EAAE6nE,GAAGrkE,IAAYA,EAAE,UAAU,GAAW,MAARZ,EAAE5C,EAAE+vD,KAAW,CAAS,GAAG,QAAXvsD,EAAEykE,GAAGjoE,IAAe,OAAOwD,EAAEA,EAAE,IAAI,MAAM,GAAG,IAAIZ,EAAE,CAAC,GAAG5C,EAAE0mE,UAAU7iE,QAAQqkE,cAAc2E,aAAa,OAAO,IAAI7sE,EAAE+vD,IAAI/vD,EAAE0mE,UAAUoG,cAAc,KAAKtpE,EAAE,IAAI,MAAMxD,IAAIwD,IAAIA,EAAE,MAAW,OAALqqE,GAAGrqE,EAAS,IAAI,CAC7S,SAASwqE,GAAGxqE,GAAG,OAAOA,GAAG,IAAK,SAAS,IAAK,QAAQ,IAAK,QAAQ,IAAK,cAAc,IAAK,OAAO,IAAK,MAAM,IAAK,WAAW,IAAK,WAAW,IAAK,UAAU,IAAK,YAAY,IAAK,OAAO,IAAK,UAAU,IAAK,WAAW,IAAK,QAAQ,IAAK,UAAU,IAAK,UAAU,IAAK,WAAW,IAAK,QAAQ,IAAK,YAAY,IAAK,UAAU,IAAK,QAAQ,IAAK,QAAQ,IAAK,OAAO,IAAK,gBAAgB,IAAK,cAAc,IAAK,YAAY,IAAK,aAAa,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,SAAS,IAAK,cAAc,IAAK,WAAW,IAAK,aAAa,IAAK,eAAe,IAAK,SAAS,IAAK,kBAAkB,IAAK,YAAY,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,oBAAoB,IAAK,aAAa,IAAK,YAAY,IAAK,cAAc,IAAK,OAAO,IAAK,mBAAmB,IAAK,QAAQ,IAAK,aAAa,IAAK,WAAW,IAAK,SAAS,IAAK,cAAc,OAAO,EAAE,IAAK,OAAO,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,SAAS,IAAK,SAAS,IAAK,YAAY,IAAK,QAAQ,IAAK,aAAa,IAAK,aAAa,IAAK,eAAe,IAAK,eAAe,OAAO,EACpqC,IAAK,UAAU,OAAOylE,MAAM,KAAKE,GAAG,OAAO,EAAE,KAAKE,GAAG,OAAO,EAAE,KAAKE,GAAG,KAAKE,GAAG,OAAO,GAAG,KAAKE,GAAG,OAAO,UAAU,QAAQ,OAAO,GAAG,QAAQ,OAAO,GAAG,CAAC,IAAIsE,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,KAAK,GAAGD,GAAG,OAAOA,GAAG,IAAI3qE,EAAkBjC,EAAhBvB,EAAEkuE,GAAGtrE,EAAE5C,EAAE/O,OAASkX,EAAE,UAAU8lE,GAAGA,GAAGlmE,MAAMkmE,GAAG1Y,YAAY90D,EAAE0H,EAAElX,OAAO,IAAIuS,EAAE,EAAEA,EAAEZ,GAAG5C,EAAEwD,KAAK2E,EAAE3E,GAAGA,KAAK,IAAIzD,EAAE6C,EAAEY,EAAE,IAAIjC,EAAE,EAAEA,GAAGxB,GAAGC,EAAE4C,EAAErB,KAAK4G,EAAE1H,EAAEc,GAAGA,KAAK,OAAO4sE,GAAGhmE,EAAEpD,MAAMvB,EAAE,EAAEjC,EAAE,EAAEA,OAAE,EAAO,CACxY,SAAS8sE,GAAG7qE,GAAG,IAAIxD,EAAEwD,EAAE8qE,QAA+E,MAAvE,aAAa9qE,EAAgB,KAAbA,EAAEA,EAAE+qE,WAAgB,KAAKvuE,IAAIwD,EAAE,IAAKA,EAAExD,EAAE,KAAKwD,IAAIA,EAAE,IAAW,IAAIA,GAAG,KAAKA,EAAEA,EAAE,CAAC,CAAC,SAASgrE,KAAK,OAAM,CAAE,CAAC,SAASC,KAAK,OAAM,CAAE,CAC5K,SAASC,GAAGlrE,GAAG,SAASxD,EAAEA,EAAEuB,EAAE4G,EAAE1H,EAAEV,GAA6G,IAAI,IAAI6C,KAAlHkR,KAAK66D,WAAW3uE,EAAE8T,KAAK86D,YAAYzmE,EAAE2L,KAAKwW,KAAK/oB,EAAEuS,KAAKu4D,YAAY5rE,EAAEqT,KAAK8G,OAAO7a,EAAE+T,KAAK+6D,cAAc,KAAkBrrE,EAAEA,EAAE8sD,eAAe1tD,KAAK5C,EAAEwD,EAAEZ,GAAGkR,KAAKlR,GAAG5C,EAAEA,EAAES,GAAGA,EAAEmC,IAAgI,OAA5HkR,KAAKg7D,oBAAoB,MAAMruE,EAAEsuE,iBAAiBtuE,EAAEsuE,kBAAiB,IAAKtuE,EAAEuuE,aAAaR,GAAGC,GAAG36D,KAAKm7D,qBAAqBR,GAAU36D,IAAI,CAC9E,OAD+E6mC,EAAE36C,EAAEyU,UAAU,CAACy6D,eAAe,WAAWp7D,KAAKi7D,kBAAiB,EAAG,IAAIvrE,EAAEsQ,KAAKu4D,YAAY7oE,IAAIA,EAAE0rE,eAAe1rE,EAAE0rE,iBAAiB,mBAAmB1rE,EAAEwrE,cAC7exrE,EAAEwrE,aAAY,GAAIl7D,KAAKg7D,mBAAmBN,GAAG,EAAET,gBAAgB,WAAW,IAAIvqE,EAAEsQ,KAAKu4D,YAAY7oE,IAAIA,EAAEuqE,gBAAgBvqE,EAAEuqE,kBAAkB,mBAAmBvqE,EAAE2rE,eAAe3rE,EAAE2rE,cAAa,GAAIr7D,KAAKm7D,qBAAqBT,GAAG,EAAEY,QAAQ,WAAW,EAAEC,aAAab,KAAYxuE,CAAC,CACjR,IAAoLsvE,GAAGC,GAAGC,GAAtLC,GAAG,CAACC,WAAW,EAAEC,QAAQ,EAAEC,WAAW,EAAEC,UAAU,SAASrsE,GAAG,OAAOA,EAAEqsE,WAAWC,KAAKC,KAAK,EAAEhB,iBAAiB,EAAEiB,UAAU,GAAGC,GAAGvB,GAAGe,IAAIS,GAAGv1B,EAAE,CAAC,EAAE80B,GAAG,CAACxwB,KAAK,EAAEkxB,OAAO,IAAIC,GAAG1B,GAAGwB,IAAaG,GAAG11B,EAAE,CAAC,EAAEu1B,GAAG,CAACI,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,iBAAiBC,GAAGC,OAAO,EAAEC,QAAQ,EAAEC,cAAc,SAAS5tE,GAAG,YAAO,IAASA,EAAE4tE,cAAc5tE,EAAE6tE,cAAc7tE,EAAE2iE,WAAW3iE,EAAE8tE,UAAU9tE,EAAE6tE,YAAY7tE,EAAE4tE,aAAa,EAAEG,UAAU,SAAS/tE,GAAG,MAAG,cAC3eA,EAASA,EAAE+tE,WAAU/tE,IAAIgsE,KAAKA,IAAI,cAAchsE,EAAE8mB,MAAMglD,GAAG9rE,EAAE8sE,QAAQd,GAAGc,QAAQf,GAAG/rE,EAAE+sE,QAAQf,GAAGe,SAAShB,GAAGD,GAAG,EAAEE,GAAGhsE,GAAU8rE,GAAE,EAAEkC,UAAU,SAAShuE,GAAG,MAAM,cAAcA,EAAEA,EAAEguE,UAAUjC,EAAE,IAAIkC,GAAG/C,GAAG2B,IAAiCqB,GAAGhD,GAA7B/zB,EAAE,CAAC,EAAE01B,GAAG,CAACsB,aAAa,KAA4CC,GAAGlD,GAA9B/zB,EAAE,CAAC,EAAEu1B,GAAG,CAACkB,cAAc,KAA0ES,GAAGnD,GAA5D/zB,EAAE,CAAC,EAAE80B,GAAG,CAACqC,cAAc,EAAEC,YAAY,EAAEC,cAAc,KAAcC,GAAGt3B,EAAE,CAAC,EAAE80B,GAAG,CAACyC,cAAc,SAAS1uE,GAAG,MAAM,kBAAkBA,EAAEA,EAAE0uE,cAAchkB,OAAOgkB,aAAa,IAAIC,GAAGzD,GAAGuD,IAAyBG,GAAG1D,GAArB/zB,EAAE,CAAC,EAAE80B,GAAG,CAAC5qE,KAAK,KAAcwtE,GAAG,CAACC,IAAI,SACxfC,SAAS,IAAIC,KAAK,YAAYC,GAAG,UAAUC,MAAM,aAAaC,KAAK,YAAYC,IAAI,SAASC,IAAI,KAAKC,KAAK,cAAcC,KAAK,cAAcC,OAAO,aAAaC,gBAAgB,gBAAgBC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KACtf,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,UAAU,IAAI,aAAa,IAAI,QAAQC,GAAG,CAACC,IAAI,SAASC,QAAQ,UAAUC,KAAK,UAAUC,MAAM,YAAY,SAASC,GAAGhwE,GAAG,IAAIxD,EAAE8T,KAAKu4D,YAAY,OAAOrsE,EAAEgxE,iBAAiBhxE,EAAEgxE,iBAAiBxtE,MAAIA,EAAE2vE,GAAG3vE,OAAMxD,EAAEwD,EAAK,CAAC,SAASytE,KAAK,OAAOuC,EAAE,CAChS,IAAIC,GAAG94B,EAAE,CAAC,EAAEu1B,GAAG,CAAC5pE,IAAI,SAAS9C,GAAG,GAAGA,EAAE8C,IAAI,CAAC,IAAItG,EAAEqyE,GAAG7uE,EAAE8C,MAAM9C,EAAE8C,IAAI,GAAG,iBAAiBtG,EAAE,OAAOA,CAAC,CAAC,MAAM,aAAawD,EAAE8mB,KAAc,MAAR9mB,EAAE6qE,GAAG7qE,IAAU,QAAQkwE,OAAOC,aAAanwE,GAAI,YAAYA,EAAE8mB,MAAM,UAAU9mB,EAAE8mB,KAAK4oD,GAAG1vE,EAAE8qE,UAAU,eAAe,EAAE,EAAE1yB,KAAK,EAAEoT,SAAS,EAAE4hB,QAAQ,EAAEC,SAAS,EAAEC,OAAO,EAAEC,QAAQ,EAAEpmD,OAAO,EAAEipD,OAAO,EAAE5C,iBAAiBC,GAAG1C,SAAS,SAAS/qE,GAAG,MAAM,aAAaA,EAAE8mB,KAAK+jD,GAAG7qE,GAAG,CAAC,EAAE8qE,QAAQ,SAAS9qE,GAAG,MAAM,YAAYA,EAAE8mB,MAAM,UAAU9mB,EAAE8mB,KAAK9mB,EAAE8qE,QAAQ,CAAC,EAAEuF,MAAM,SAASrwE,GAAG,MAAM,aAC7eA,EAAE8mB,KAAK+jD,GAAG7qE,GAAG,YAAYA,EAAE8mB,MAAM,UAAU9mB,EAAE8mB,KAAK9mB,EAAE8qE,QAAQ,CAAC,IAAIwF,GAAGpF,GAAG+E,IAAiIM,GAAGrF,GAA7H/zB,EAAE,CAAC,EAAE01B,GAAG,CAAClE,UAAU,EAAElwB,MAAM,EAAE3hB,OAAO,EAAE05C,SAAS,EAAEC,mBAAmB,EAAEC,MAAM,EAAEC,MAAM,EAAEC,MAAM,EAAEC,YAAY,EAAEC,UAAU,KAAmIC,GAAG7F,GAArH/zB,EAAE,CAAC,EAAEu1B,GAAG,CAACsE,QAAQ,EAAEC,cAAc,EAAEC,eAAe,EAAE5D,OAAO,EAAEC,QAAQ,EAAEH,QAAQ,EAAEC,SAAS,EAAEG,iBAAiBC,MAA0E0D,GAAGjG,GAA3D/zB,EAAE,CAAC,EAAE80B,GAAG,CAACxT,aAAa,EAAE8V,YAAY,EAAEC,cAAc,KAAc4C,GAAGj6B,EAAE,CAAC,EAAE01B,GAAG,CAACwE,OAAO,SAASrxE,GAAG,MAAM,WAAWA,EAAEA,EAAEqxE,OAAO,gBAAgBrxE,GAAGA,EAAEsxE,YAAY,CAAC,EACnfC,OAAO,SAASvxE,GAAG,MAAM,WAAWA,EAAEA,EAAEuxE,OAAO,gBAAgBvxE,GAAGA,EAAEwxE,YAAY,eAAexxE,GAAGA,EAAEyxE,WAAW,CAAC,EAAEC,OAAO,EAAEC,UAAU,IAAIC,GAAG1G,GAAGkG,IAAIS,GAAG,CAAC,EAAE,GAAG,GAAG,IAAIC,GAAG9Z,GAAI,qBAAqBtN,OAAOqnB,GAAG,KAAK/Z,GAAI,iBAAiBzN,WAAWwnB,GAAGxnB,SAASynB,cAAc,IAAIC,GAAGja,GAAI,cAActN,SAASqnB,GAAGG,GAAGla,KAAM8Z,IAAIC,IAAI,EAAEA,IAAI,IAAIA,IAAII,GAAGjC,OAAOC,aAAa,IAAIiC,IAAG,EAC1W,SAASC,GAAGryE,EAAExD,GAAG,OAAOwD,GAAG,IAAK,QAAQ,OAAO,IAAI6xE,GAAG1rD,QAAQ3pB,EAAEsuE,SAAS,IAAK,UAAU,OAAO,MAAMtuE,EAAEsuE,QAAQ,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,OAAM,EAAG,QAAQ,OAAM,EAAG,CAAC,SAASwH,GAAGtyE,GAAc,MAAM,kBAAjBA,EAAEA,EAAE2sE,SAAkC,SAAS3sE,EAAEA,EAAEqB,KAAK,IAAI,CAAC,IAAIkxE,IAAG,EAE9Q,IAAIC,GAAG,CAACtgF,OAAM,EAAGugF,MAAK,EAAGC,UAAS,EAAG,kBAAiB,EAAGC,OAAM,EAAGC,OAAM,EAAGC,QAAO,EAAGC,UAAS,EAAGC,OAAM,EAAGC,QAAO,EAAGC,KAAI,EAAGpjE,MAAK,EAAGqjE,MAAK,EAAG3jB,KAAI,EAAG4jB,MAAK,GAAI,SAASC,GAAGpzE,GAAG,IAAIxD,EAAEwD,GAAGA,EAAE27D,UAAU37D,EAAE27D,SAAS5pE,cAAc,MAAM,UAAUyK,IAAIg2E,GAAGxyE,EAAE8mB,MAAM,aAAatqB,CAAO,CAAC,SAAS62E,GAAGrzE,EAAExD,EAAE4C,EAAErB,GAAGqlE,GAAGrlE,GAAsB,GAAnBvB,EAAE82E,GAAG92E,EAAE,aAAgB/O,SAAS2R,EAAE,IAAIqtE,GAAG,WAAW,SAAS,KAAKrtE,EAAErB,GAAGiC,EAAE3S,KAAK,CAACkmF,MAAMn0E,EAAEo0E,UAAUh3E,IAAI,CAAC,IAAIi3E,GAAG,KAAKC,GAAG,KAAK,SAASC,GAAG3zE,GAAG4zE,GAAG5zE,EAAE,EAAE,CAAC,SAAS6zE,GAAG7zE,GAAe,GAAGs8D,EAATwX,GAAG9zE,IAAY,OAAOA,CAAC,CACpe,SAAS+zE,GAAG/zE,EAAExD,GAAG,GAAG,WAAWwD,EAAE,OAAOxD,CAAC,CAAC,IAAIw3E,IAAG,EAAG,GAAGhc,EAAG,CAAC,IAAIic,GAAG,GAAGjc,EAAG,CAAC,IAAIkc,GAAG,YAAY3pB,SAAS,IAAI2pB,GAAG,CAAC,IAAIC,GAAG5pB,SAASY,cAAc,OAAOgpB,GAAGznB,aAAa,UAAU,WAAWwnB,GAAG,oBAAoBC,GAAGC,OAAO,CAACH,GAAGC,EAAE,MAAMD,IAAG,EAAGD,GAAGC,MAAM1pB,SAASynB,cAAc,EAAEznB,SAASynB,aAAa,CAAC,SAASqC,KAAKZ,KAAKA,GAAG9lB,YAAY,mBAAmB2mB,IAAIZ,GAAGD,GAAG,KAAK,CAAC,SAASa,GAAGt0E,GAAG,GAAG,UAAUA,EAAEy4D,cAAcob,GAAGH,IAAI,CAAC,IAAIl3E,EAAE,GAAG62E,GAAG72E,EAAEk3E,GAAG1zE,EAAE0iE,GAAG1iE,IAAIyjE,GAAGkQ,GAAGn3E,EAAE,CAAC,CAC/b,SAAS+3E,GAAGv0E,EAAExD,EAAE4C,GAAG,YAAYY,GAAGq0E,KAAUX,GAAGt0E,GAARq0E,GAAGj3E,GAAUgxD,YAAY,mBAAmB8mB,KAAK,aAAat0E,GAAGq0E,IAAI,CAAC,SAASG,GAAGx0E,GAAG,GAAG,oBAAoBA,GAAG,UAAUA,GAAG,YAAYA,EAAE,OAAO6zE,GAAGH,GAAG,CAAC,SAASe,GAAGz0E,EAAExD,GAAG,GAAG,UAAUwD,EAAE,OAAO6zE,GAAGr3E,EAAE,CAAC,SAASk4E,GAAG10E,EAAExD,GAAG,GAAG,UAAUwD,GAAG,WAAWA,EAAE,OAAO6zE,GAAGr3E,EAAE,CAAiE,IAAIm4E,GAAG,oBAAoBzjF,OAAOsxE,GAAGtxE,OAAOsxE,GAA5G,SAAYxiE,EAAExD,GAAG,OAAOwD,IAAIxD,IAAI,IAAIwD,GAAG,EAAEA,IAAI,EAAExD,IAAIwD,IAAIA,GAAGxD,IAAIA,CAAC,EACtW,SAASo4E,GAAG50E,EAAExD,GAAG,GAAGm4E,GAAG30E,EAAExD,GAAG,OAAM,EAAG,GAAG,kBAAkBwD,GAAG,OAAOA,GAAG,kBAAkBxD,GAAG,OAAOA,EAAE,OAAM,EAAG,IAAI4C,EAAElO,OAAO20C,KAAK7lC,GAAGjC,EAAE7M,OAAO20C,KAAKrpC,GAAG,GAAG4C,EAAE3R,SAASsQ,EAAEtQ,OAAO,OAAM,EAAG,IAAIsQ,EAAE,EAAEA,EAAEqB,EAAE3R,OAAOsQ,IAAI,CAAC,IAAI4G,EAAEvF,EAAErB,GAAG,IAAIk6D,EAAGlL,KAAKvwD,EAAEmI,KAAKgwE,GAAG30E,EAAE2E,GAAGnI,EAAEmI,IAAI,OAAM,CAAE,CAAC,OAAM,CAAE,CAAC,SAASkwE,GAAG70E,GAAG,KAAKA,GAAGA,EAAEq+D,YAAYr+D,EAAEA,EAAEq+D,WAAW,OAAOr+D,CAAC,CACtU,SAAS80E,GAAG90E,EAAExD,GAAG,IAAwBuB,EAApBqB,EAAEy1E,GAAG70E,GAAO,IAAJA,EAAE,EAAYZ,GAAG,CAAC,GAAG,IAAIA,EAAEs/D,SAAS,CAA0B,GAAzB3gE,EAAEiC,EAAEZ,EAAE2yD,YAAYtkE,OAAUuS,GAAGxD,GAAGuB,GAAGvB,EAAE,MAAM,CAACgoB,KAAKplB,EAAEuM,OAAOnP,EAAEwD,GAAGA,EAAEjC,CAAC,CAACiC,EAAE,CAAC,KAAKZ,GAAG,CAAC,GAAGA,EAAE21E,YAAY,CAAC31E,EAAEA,EAAE21E,YAAY,MAAM/0E,CAAC,CAACZ,EAAEA,EAAEmzD,UAAU,CAACnzD,OAAE,CAAM,CAACA,EAAEy1E,GAAGz1E,EAAE,CAAC,CAAC,SAAS41E,GAAGh1E,EAAExD,GAAG,SAAOwD,IAAGxD,KAAEwD,IAAIxD,KAAKwD,GAAG,IAAIA,EAAE0+D,YAAYliE,GAAG,IAAIA,EAAEkiE,SAASsW,GAAGh1E,EAAExD,EAAE+1D,YAAY,aAAavyD,EAAEA,EAAEi1E,SAASz4E,KAAGwD,EAAEk1E,4BAAwD,GAA7Bl1E,EAAEk1E,wBAAwB14E,KAAY,CAC9Z,SAAS24E,KAAK,IAAI,IAAIn1E,EAAE0qD,OAAOluD,EAAEggE,IAAKhgE,aAAawD,EAAEo1E,mBAAmB,CAAC,IAAI,IAAIh2E,EAAE,kBAAkB5C,EAAEqzD,cAAcrE,SAASD,IAAI,CAAC,MAAMxtD,GAAGqB,GAAE,CAAE,CAAC,IAAGA,EAAyB,MAAM5C,EAAEggE,GAA/Bx8D,EAAExD,EAAEqzD,eAAgCtF,SAAS,CAAC,OAAO/tD,CAAC,CAAC,SAAS64E,GAAGr1E,GAAG,IAAIxD,EAAEwD,GAAGA,EAAE27D,UAAU37D,EAAE27D,SAAS5pE,cAAc,OAAOyK,IAAI,UAAUA,IAAI,SAASwD,EAAE8mB,MAAM,WAAW9mB,EAAE8mB,MAAM,QAAQ9mB,EAAE8mB,MAAM,QAAQ9mB,EAAE8mB,MAAM,aAAa9mB,EAAE8mB,OAAO,aAAatqB,GAAG,SAASwD,EAAEs1E,gBAAgB,CACxa,SAASC,GAAGv1E,GAAG,IAAIxD,EAAE24E,KAAK/1E,EAAEY,EAAEw1E,YAAYz3E,EAAEiC,EAAEy1E,eAAe,GAAGj5E,IAAI4C,GAAGA,GAAGA,EAAEqxD,eAAeukB,GAAG51E,EAAEqxD,cAAcilB,gBAAgBt2E,GAAG,CAAC,GAAG,OAAOrB,GAAGs3E,GAAGj2E,GAAG,GAAG5C,EAAEuB,EAAEuwB,WAAc,KAARtuB,EAAEjC,EAAEizB,OAAiBhxB,EAAExD,GAAG,mBAAmB4C,EAAEA,EAAEu2E,eAAen5E,EAAE4C,EAAEw2E,aAAa74E,KAAKe,IAAIkC,EAAEZ,EAAEmF,MAAM9W,aAAa,IAAGuS,GAAGxD,EAAE4C,EAAEqxD,eAAelG,WAAW/tD,EAAEq5E,aAAanrB,QAASorB,aAAa,CAAC91E,EAAEA,EAAE81E,eAAe,IAAInxE,EAAEvF,EAAE2yD,YAAYtkE,OAAOwP,EAAEF,KAAKe,IAAIC,EAAEuwB,MAAM3pB,GAAG5G,OAAE,IAASA,EAAEizB,IAAI/zB,EAAEF,KAAKe,IAAIC,EAAEizB,IAAIrsB,IAAI3E,EAAE+1E,QAAQ94E,EAAEc,IAAI4G,EAAE5G,EAAEA,EAAEd,EAAEA,EAAE0H,GAAGA,EAAEmwE,GAAG11E,EAAEnC,GAAG,IAAIV,EAAEu4E,GAAG11E,EACvfrB,GAAG4G,GAAGpI,IAAI,IAAIyD,EAAEg2E,YAAYh2E,EAAEi2E,aAAatxE,EAAE6f,MAAMxkB,EAAEk2E,eAAevxE,EAAEgH,QAAQ3L,EAAEm2E,YAAY55E,EAAEioB,MAAMxkB,EAAEo2E,cAAc75E,EAAEoP,WAAUnP,EAAEA,EAAE65E,eAAgBC,SAAS3xE,EAAE6f,KAAK7f,EAAEgH,QAAQ3L,EAAEu2E,kBAAkBt5E,EAAEc,GAAGiC,EAAEw2E,SAASh6E,GAAGwD,EAAE+1E,OAAOx5E,EAAEioB,KAAKjoB,EAAEoP,UAAUnP,EAAEi6E,OAAOl6E,EAAEioB,KAAKjoB,EAAEoP,QAAQ3L,EAAEw2E,SAASh6E,IAAI,CAAM,IAALA,EAAE,GAAOwD,EAAEZ,EAAEY,EAAEA,EAAEuyD,YAAY,IAAIvyD,EAAE0+D,UAAUliE,EAAEnP,KAAK,CAACq7C,QAAQ1oC,EAAEi8C,KAAKj8C,EAAE02E,WAAW36B,IAAI/7C,EAAE22E,YAAmD,IAAvC,oBAAoBv3E,EAAEw3E,OAAOx3E,EAAEw3E,QAAYx3E,EAAE,EAAEA,EAAE5C,EAAE/O,OAAO2R,KAAIY,EAAExD,EAAE4C,IAAKspC,QAAQguC,WAAW12E,EAAEi8C,KAAKj8C,EAAE0oC,QAAQiuC,UAAU32E,EAAE+7C,GAAG,CAAC,CACzf,IAAI86B,GAAG7e,GAAI,iBAAiBzN,UAAU,IAAIA,SAASynB,aAAa8E,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,IAAG,EAC3F,SAASC,GAAGl3E,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEqB,EAAEsrD,SAAStrD,EAAEA,EAAEmrD,SAAS,IAAInrD,EAAEs/D,SAASt/D,EAAEA,EAAEqxD,cAAcwmB,IAAI,MAAMH,IAAIA,KAAKta,EAAGz+D,KAAU,mBAALA,EAAE+4E,KAAyBzB,GAAGt3E,GAAGA,EAAE,CAACuwB,MAAMvwB,EAAE43E,eAAe3kD,IAAIjzB,EAAE63E,cAAuF73E,EAAE,CAACk4E,YAA3El4E,GAAGA,EAAE0yD,eAAe1yD,EAAE0yD,cAAcolB,aAAanrB,QAAQorB,gBAA+BG,WAAWC,aAAan4E,EAAEm4E,aAAaC,UAAUp4E,EAAEo4E,UAAUC,YAAYr4E,EAAEq4E,aAAcY,IAAIpC,GAAGoC,GAAGj5E,KAAKi5E,GAAGj5E,EAAsB,GAApBA,EAAEu1E,GAAGyD,GAAG,aAAgBtpF,SAAS+O,EAAE,IAAIiwE,GAAG,WAAW,SAAS,KAAKjwE,EAAE4C,GAAGY,EAAE3S,KAAK,CAACkmF,MAAM/2E,EAAEg3E,UAAUz1E,IAAIvB,EAAE4a,OAAO0/D,KAAK,CACtf,SAASK,GAAGn3E,EAAExD,GAAG,IAAI4C,EAAE,CAAC,EAAiF,OAA/EA,EAAEY,EAAEjO,eAAeyK,EAAEzK,cAAcqN,EAAE,SAASY,GAAG,SAASxD,EAAE4C,EAAE,MAAMY,GAAG,MAAMxD,EAAS4C,CAAC,CAAC,IAAIg4E,GAAG,CAACC,aAAaF,GAAG,YAAY,gBAAgBG,mBAAmBH,GAAG,YAAY,sBAAsBI,eAAeJ,GAAG,YAAY,kBAAkBK,cAAcL,GAAG,aAAa,kBAAkBM,GAAG,CAAC,EAAEC,GAAG,CAAC,EACpF,SAASC,GAAG33E,GAAG,GAAGy3E,GAAGz3E,GAAG,OAAOy3E,GAAGz3E,GAAG,IAAIo3E,GAAGp3E,GAAG,OAAOA,EAAE,IAAYZ,EAAR5C,EAAE46E,GAAGp3E,GAAK,IAAIZ,KAAK5C,EAAE,GAAGA,EAAEswD,eAAe1tD,IAAIA,KAAKs4E,GAAG,OAAOD,GAAGz3E,GAAGxD,EAAE4C,GAAG,OAAOY,CAAC,CAA/Xg4D,IAAK0f,GAAGntB,SAASY,cAAc,OAAOuF,MAAM,mBAAmBhG,gBAAgB0sB,GAAGC,aAAaO,iBAAiBR,GAAGE,mBAAmBM,iBAAiBR,GAAGG,eAAeK,WAAW,oBAAoBltB,eAAe0sB,GAAGI,cAAcvN,YAAwJ,IAAI4N,GAAGF,GAAG,gBAAgBG,GAAGH,GAAG,sBAAsBI,GAAGJ,GAAG,kBAAkBK,GAAGL,GAAG,iBAAiBM,GAAG,IAAIv1E,IAAIw1E,GAAG,smBAAsmB3xE,MAAM,KAC/lC,SAAS4xE,GAAGn4E,EAAExD,GAAGy7E,GAAG3nF,IAAI0P,EAAExD,GAAGs7D,EAAGt7D,EAAE,CAACwD,GAAG,CAAC,IAAI,IAAIo4E,GAAG,EAAEA,GAAGF,GAAGzqF,OAAO2qF,KAAK,CAAC,IAAIC,GAAGH,GAAGE,IAA2DD,GAApDE,GAAGtmF,cAAuD,MAAtCsmF,GAAG,GAAGjhC,cAAcihC,GAAG92E,MAAM,IAAiB,CAAC42E,GAAGN,GAAG,kBAAkBM,GAAGL,GAAG,wBAAwBK,GAAGJ,GAAG,oBAAoBI,GAAG,WAAW,iBAAiBA,GAAG,UAAU,WAAWA,GAAG,WAAW,UAAUA,GAAGH,GAAG,mBAAmBjgB,EAAG,eAAe,CAAC,WAAW,cAAcA,EAAG,eAAe,CAAC,WAAW,cAAcA,EAAG,iBAAiB,CAAC,aAAa,gBAC7cA,EAAG,iBAAiB,CAAC,aAAa,gBAAgBD,EAAG,WAAW,oEAAoEvxD,MAAM,MAAMuxD,EAAG,WAAW,uFAAuFvxD,MAAM,MAAMuxD,EAAG,gBAAgB,CAAC,iBAAiB,WAAW,YAAY,UAAUA,EAAG,mBAAmB,2DAA2DvxD,MAAM,MAAMuxD,EAAG,qBAAqB,6DAA6DvxD,MAAM,MAC/fuxD,EAAG,sBAAsB,8DAA8DvxD,MAAM,MAAM,IAAI+xE,GAAG,6NAA6N/xE,MAAM,KAAKgyE,GAAG,IAAI90C,IAAI,0CAA0Cl9B,MAAM,KAAKtY,OAAOqqF,KACzZ,SAASrkB,GAAGj0D,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEiC,EAAE8mB,MAAM,gBAAgB9mB,EAAEqrE,cAAcjsE,EAlDjE,SAAYY,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,EAAEV,EAAEI,EAAEsN,GAA4B,GAAzBm6D,GAAG12D,MAAM4C,KAAKvf,WAAcgzE,GAAG,CAAC,IAAGA,GAAgC,MAAM50E,MAAM2N,EAAE,MAA1C,IAAIF,EAAEonE,GAAGD,IAAG,EAAGC,GAAG,KAA8BC,KAAKA,IAAG,EAAGC,GAAGtnE,EAAE,CAAC,CAkDpE47E,CAAGz6E,EAAEvB,OAAE,EAAOwD,GAAGA,EAAEqrE,cAAc,IAAI,CACxG,SAASuI,GAAG5zE,EAAExD,GAAGA,EAAE,KAAO,EAAFA,GAAK,IAAI,IAAI4C,EAAE,EAAEA,EAAEY,EAAEvS,OAAO2R,IAAI,CAAC,IAAIrB,EAAEiC,EAAEZ,GAAGuF,EAAE5G,EAAEw1E,MAAMx1E,EAAEA,EAAEy1E,UAAUxzE,EAAE,CAAC,IAAI/C,OAAE,EAAO,GAAGT,EAAE,IAAI,IAAID,EAAEwB,EAAEtQ,OAAO,EAAE,GAAG8O,EAAEA,IAAI,CAAC,IAAII,EAAEoB,EAAExB,GAAG0N,EAAEtN,EAAEumC,SAAStmC,EAAED,EAAE0uE,cAA2B,GAAb1uE,EAAEA,EAAE87E,SAAYxuE,IAAIhN,GAAG0H,EAAE8mE,uBAAuB,MAAMzrE,EAAEi0D,GAAGtvD,EAAEhI,EAAEC,GAAGK,EAAEgN,CAAC,MAAM,IAAI1N,EAAE,EAAEA,EAAEwB,EAAEtQ,OAAO8O,IAAI,CAAoD,GAA5C0N,GAAPtN,EAAEoB,EAAExB,IAAO2mC,SAAStmC,EAAED,EAAE0uE,cAAc1uE,EAAEA,EAAE87E,SAAYxuE,IAAIhN,GAAG0H,EAAE8mE,uBAAuB,MAAMzrE,EAAEi0D,GAAGtvD,EAAEhI,EAAEC,GAAGK,EAAEgN,CAAC,CAAC,CAAC,CAAC,GAAGg6D,GAAG,MAAMjkE,EAAEkkE,GAAGD,IAAG,EAAGC,GAAG,KAAKlkE,CAAE,CAC5a,SAAS04E,GAAE14E,EAAExD,GAAG,IAAI4C,EAAE5C,EAAEmxB,SAAI,IAASvuB,IAAIA,EAAE5C,EAAEmxB,IAAI,IAAI8V,KAAK,IAAI1lC,EAAEiC,EAAE,WAAWZ,EAAE2D,IAAIhF,KAAK46E,GAAGn8E,EAAEwD,EAAE,GAAE,GAAIZ,EAAEkJ,IAAIvK,GAAG,CAAC,SAAS66E,GAAG54E,EAAExD,EAAE4C,GAAG,IAAIrB,EAAE,EAAEvB,IAAIuB,GAAG,GAAG46E,GAAGv5E,EAAEY,EAAEjC,EAAEvB,EAAE,CAAC,IAAIq8E,GAAG,kBAAkB97E,KAAK0oD,SAAS7nD,SAAS,IAAI2D,MAAM,GAAG,SAASu3E,GAAG94E,GAAG,IAAIA,EAAE64E,IAAI,CAAC74E,EAAE64E,KAAI,EAAGjhB,EAAG1qE,SAAQ,SAASsP,GAAG,oBAAoBA,IAAI+7E,GAAGx1E,IAAIvG,IAAIo8E,GAAGp8E,GAAE,EAAGwD,GAAG44E,GAAGp8E,GAAE,EAAGwD,GAAG,IAAG,IAAIxD,EAAE,IAAIwD,EAAE0+D,SAAS1+D,EAAEA,EAAEywD,cAAc,OAAOj0D,GAAGA,EAAEq8E,MAAMr8E,EAAEq8E,KAAI,EAAGD,GAAG,mBAAkB,EAAGp8E,GAAG,CAAC,CACjb,SAASm8E,GAAG34E,EAAExD,EAAE4C,EAAErB,GAAG,OAAOysE,GAAGhuE,IAAI,KAAK,EAAE,IAAImI,EAAEqlE,GAAG,MAAM,KAAK,EAAErlE,EAAEwlE,GAAG,MAAM,QAAQxlE,EAAEulE,GAAG9qE,EAAEuF,EAAEo0E,KAAK,KAAKv8E,EAAE4C,EAAEY,GAAG2E,OAAE,GAAQg/D,IAAI,eAAennE,GAAG,cAAcA,GAAG,UAAUA,IAAImI,GAAE,GAAI5G,OAAE,IAAS4G,EAAE3E,EAAEutD,iBAAiB/wD,EAAE4C,EAAE,CAAC45E,SAAQ,EAAGC,QAAQt0E,IAAI3E,EAAEutD,iBAAiB/wD,EAAE4C,GAAE,QAAI,IAASuF,EAAE3E,EAAEutD,iBAAiB/wD,EAAE4C,EAAE,CAAC65E,QAAQt0E,IAAI3E,EAAEutD,iBAAiB/wD,EAAE4C,GAAE,EAAG,CAClV,SAASgrE,GAAGpqE,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,IAAI1H,EAAEc,EAAE,GAAG,KAAO,EAAFvB,IAAM,KAAO,EAAFA,IAAM,OAAOuB,EAAEiC,EAAE,OAAO,CAAC,GAAG,OAAOjC,EAAE,OAAO,IAAIxB,EAAEwB,EAAEwuD,IAAI,GAAG,IAAIhwD,GAAG,IAAIA,EAAE,CAAC,IAAII,EAAEoB,EAAEmlE,UAAUoG,cAAc,GAAG3sE,IAAIgI,GAAG,IAAIhI,EAAE+hE,UAAU/hE,EAAE41D,aAAa5tD,EAAE,MAAM,GAAG,IAAIpI,EAAE,IAAIA,EAAEwB,EAAEwmE,OAAO,OAAOhoE,GAAG,CAAC,IAAI0N,EAAE1N,EAAEgwD,IAAI,IAAG,IAAItiD,GAAG,IAAIA,MAAKA,EAAE1N,EAAE2mE,UAAUoG,iBAAkB3kE,GAAG,IAAIsF,EAAEy0D,UAAUz0D,EAAEsoD,aAAa5tD,GAAE,OAAOpI,EAAEA,EAAEgoE,MAAM,CAAC,KAAK,OAAO5nE,GAAG,CAAS,GAAG,QAAXJ,EAAE4sE,GAAGxsE,IAAe,OAAe,GAAG,KAAXsN,EAAE1N,EAAEgwD,MAAc,IAAItiD,EAAE,CAAClM,EAAEd,EAAEV,EAAE,SAASyD,CAAC,CAACrD,EAAEA,EAAE41D,UAAU,CAAC,CAACx0D,EAAEA,EAAEwmE,MAAM,CAACd,IAAG,WAAW,IAAI1lE,EAAEd,EAAE0H,EAAE+9D,GAAGtjE,GAAG7C,EAAE,GACpfyD,EAAE,CAAC,IAAIrD,EAAEs7E,GAAGj1E,IAAIhD,GAAG,QAAG,IAASrD,EAAE,CAAC,IAAIsN,EAAEwiE,GAAGlsE,EAAEP,EAAE,OAAOA,GAAG,IAAK,WAAW,GAAG,IAAI6qE,GAAGzrE,GAAG,MAAMY,EAAE,IAAK,UAAU,IAAK,QAAQiK,EAAEqmE,GAAG,MAAM,IAAK,UAAU/vE,EAAE,QAAQ0J,EAAEmkE,GAAG,MAAM,IAAK,WAAW7tE,EAAE,OAAO0J,EAAEmkE,GAAG,MAAM,IAAK,aAAa,IAAK,YAAYnkE,EAAEmkE,GAAG,MAAM,IAAK,QAAQ,GAAG,IAAIhvE,EAAEsuE,OAAO,MAAM1tE,EAAE,IAAK,WAAW,IAAK,WAAW,IAAK,YAAY,IAAK,YAAY,IAAK,UAAU,IAAK,WAAW,IAAK,YAAY,IAAK,cAAciK,EAAEgkE,GAAG,MAAM,IAAK,OAAO,IAAK,UAAU,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,OAAOhkE,EAC1iBikE,GAAG,MAAM,IAAK,cAAc,IAAK,WAAW,IAAK,YAAY,IAAK,aAAajkE,EAAE8mE,GAAG,MAAM,KAAK8G,GAAG,KAAKC,GAAG,KAAKC,GAAG9tE,EAAEokE,GAAG,MAAM,KAAK2J,GAAG/tE,EAAEknE,GAAG,MAAM,IAAK,SAASlnE,EAAE2iE,GAAG,MAAM,IAAK,QAAQ3iE,EAAE2nE,GAAG,MAAM,IAAK,OAAO,IAAK,MAAM,IAAK,QAAQ3nE,EAAE0kE,GAAG,MAAM,IAAK,oBAAoB,IAAK,qBAAqB,IAAK,gBAAgB,IAAK,cAAc,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,YAAY1kE,EAAEsmE,GAAG,IAAIrzE,EAAE,KAAO,EAAFV,GAAK08E,GAAGh8E,GAAG,WAAW8C,EAAE8H,EAAE5K,EAAE,OAAOP,EAAEA,EAAE,UAAU,KAAKA,EAAEO,EAAE,GAAG,IAAI,IAAQqT,EAAJoK,EAAE5c,EAAI,OAC/e4c,GAAG,CAAK,IAAIw+D,GAAR5oE,EAAEoK,GAAUuoD,UAAsF,GAA5E,IAAI3yD,EAAEg8C,KAAK,OAAO4sB,IAAI5oE,EAAE4oE,EAAE,OAAOrxE,IAAc,OAAVqxE,EAAEzV,GAAG/oD,EAAE7S,KAAY5K,EAAE7P,KAAK+rF,GAAGz+D,EAAEw+D,EAAE5oE,MAAS2oE,EAAE,MAAMv+D,EAAEA,EAAE4pD,MAAM,CAAC,EAAErnE,EAAEzP,SAASkP,EAAE,IAAIsN,EAAEtN,EAAE4D,EAAE,KAAKnB,EAAEuF,GAAGpI,EAAElP,KAAK,CAACkmF,MAAM52E,EAAE62E,UAAUt2E,IAAI,CAAC,CAAC,GAAG,KAAO,EAAFV,GAAK,CAA4E,GAAnCyN,EAAE,aAAajK,GAAG,eAAeA,KAAtErD,EAAE,cAAcqD,GAAG,gBAAgBA,IAA2CZ,IAAIqjE,MAAKliE,EAAEnB,EAAEwuE,eAAexuE,EAAEyuE,eAAe1E,GAAG5oE,KAAIA,EAAE84E,OAAgBpvE,GAAGtN,KAAGA,EAAEgI,EAAE+lD,SAAS/lD,EAAEA,GAAGhI,EAAEgI,EAAE8rD,eAAe9zD,EAAEk5E,aAAal5E,EAAE28E,aAAa5uB,OAAUzgD,GAAqCA,EAAElM,EAAiB,QAAfwC,GAAnCA,EAAEnB,EAAEwuE,eAAexuE,EAAE0uE,WAAkB3E,GAAG5oE,GAAG,QAC9dA,KAAR24E,EAAE7U,GAAG9jE,KAAU,IAAIA,EAAEgsD,KAAK,IAAIhsD,EAAEgsD,OAAKhsD,EAAE,QAAU0J,EAAE,KAAK1J,EAAExC,GAAKkM,IAAI1J,GAAE,CAAgU,GAA/TrD,EAAE+wE,GAAGkL,EAAE,eAAerxE,EAAE,eAAe6S,EAAE,QAAW,eAAe3a,GAAG,gBAAgBA,IAAE9C,EAAEqzE,GAAG4I,EAAE,iBAAiBrxE,EAAE,iBAAiB6S,EAAE,WAAUu+D,EAAE,MAAMjvE,EAAEtN,EAAEm3E,GAAG7pE,GAAGsG,EAAE,MAAMhQ,EAAE5D,EAAEm3E,GAAGvzE,IAAG5D,EAAE,IAAIO,EAAEi8E,EAAEx+D,EAAE,QAAQ1Q,EAAE7K,EAAEuF,IAAKyS,OAAO8hE,EAAEv8E,EAAEixE,cAAcr9D,EAAE4oE,EAAE,KAAKhQ,GAAGxkE,KAAK5G,KAAIb,EAAE,IAAIA,EAAE4K,EAAE6S,EAAE,QAAQpa,EAAEnB,EAAEuF,IAAKyS,OAAO7G,EAAErT,EAAE0wE,cAAcsL,EAAEC,EAAEj8E,GAAGg8E,EAAEC,EAAKlvE,GAAG1J,EAAE/D,EAAE,CAAa,IAARsL,EAAEvH,EAAEoa,EAAE,EAAMpK,EAAhBrT,EAAE+M,EAAkBsG,EAAEA,EAAEgpE,GAAGhpE,GAAGoK,IAAQ,IAAJpK,EAAE,EAAM4oE,EAAErxE,EAAEqxE,EAAEA,EAAEI,GAAGJ,GAAG5oE,IAAI,KAAK,EAAEoK,EAAEpK,GAAGrT,EAAEq8E,GAAGr8E,GAAGyd,IAAI,KAAK,EAAEpK,EAAEoK,GAAG7S,EACpfyxE,GAAGzxE,GAAGyI,IAAI,KAAKoK,KAAK,CAAC,GAAGzd,IAAI4K,GAAG,OAAOA,GAAG5K,IAAI4K,EAAEw8D,UAAU,MAAM9nE,EAAEU,EAAEq8E,GAAGr8E,GAAG4K,EAAEyxE,GAAGzxE,EAAE,CAAC5K,EAAE,IAAI,MAAMA,EAAE,KAAK,OAAO+M,GAAGuvE,GAAGj9E,EAAEI,EAAEsN,EAAE/M,GAAE,GAAI,OAAOqD,GAAG,OAAO24E,GAAGM,GAAGj9E,EAAE28E,EAAE34E,EAAErD,GAAE,EAAG,CAA8D,GAAG,YAA1C+M,GAAjBtN,EAAEoB,EAAE+1E,GAAG/1E,GAAG2sD,QAAWiR,UAAUh/D,EAAEg/D,SAAS5pE,gBAA+B,UAAUkY,GAAG,SAAStN,EAAEmqB,KAAK,IAAI2yD,EAAG1F,QAAQ,GAAGX,GAAGz2E,GAAG,GAAGq3E,GAAGyF,EAAG/E,OAAO,CAAC+E,EAAGjF,GAAG,IAAIkF,EAAGnF,EAAE,MAAMtqE,EAAEtN,EAAEg/D,WAAW,UAAU1xD,EAAElY,gBAAgB,aAAa4K,EAAEmqB,MAAM,UAAUnqB,EAAEmqB,QAAQ2yD,EAAGhF,IACrV,OAD4VgF,IAAKA,EAAGA,EAAGz5E,EAAEjC,IAAKs1E,GAAG92E,EAAEk9E,EAAGr6E,EAAEuF,IAAW+0E,GAAIA,EAAG15E,EAAErD,EAAEoB,GAAG,aAAaiC,IAAI05E,EAAG/8E,EAAEkgE,gBAClf6c,EAAGzc,YAAY,WAAWtgE,EAAEmqB,MAAMq2C,GAAGxgE,EAAE,SAASA,EAAE4H,QAAOm1E,EAAG37E,EAAE+1E,GAAG/1E,GAAG2sD,OAAc1qD,GAAG,IAAK,WAAaozE,GAAGsG,IAAK,SAASA,EAAGpE,mBAAgBwB,GAAG4C,EAAG3C,GAAGh5E,EAAEi5E,GAAG,MAAK,MAAM,IAAK,WAAWA,GAAGD,GAAGD,GAAG,KAAK,MAAM,IAAK,YAAYG,IAAG,EAAG,MAAM,IAAK,cAAc,IAAK,UAAU,IAAK,UAAUA,IAAG,EAAGC,GAAG36E,EAAE6C,EAAEuF,GAAG,MAAM,IAAK,kBAAkB,GAAGkyE,GAAG,MAAM,IAAK,UAAU,IAAK,QAAQK,GAAG36E,EAAE6C,EAAEuF,GAAG,IAAIg1E,EAAG,GAAG7H,GAAGt1E,EAAE,CAAC,OAAOwD,GAAG,IAAK,mBAAmB,IAAIsb,EAAG,qBAAqB,MAAM9e,EAAE,IAAK,iBAAiB8e,EAAG,mBACpe,MAAM9e,EAAE,IAAK,oBAAoB8e,EAAG,sBAAsB,MAAM9e,EAAE8e,OAAG,CAAM,MAAMi3D,GAAGF,GAAGryE,EAAEZ,KAAKkc,EAAG,oBAAoB,YAAYtb,GAAG,MAAMZ,EAAE0rE,UAAUxvD,EAAG,sBAAsBA,IAAK42D,IAAI,OAAO9yE,EAAEgxE,SAASmC,IAAI,uBAAuBj3D,EAAG,qBAAqBA,GAAIi3D,KAAKoH,EAAG/O,OAAYF,GAAG,UAARD,GAAG9lE,GAAkB8lE,GAAGlmE,MAAMkmE,GAAG1Y,YAAYwgB,IAAG,IAAiB,GAAZmH,EAAGpG,GAAGv1E,EAAEud,IAAS7tB,SAAS6tB,EAAG,IAAIszD,GAAGtzD,EAAGtb,EAAE,KAAKZ,EAAEuF,GAAGpI,EAAElP,KAAK,CAACkmF,MAAMj4D,EAAGk4D,UAAUkG,IAAKC,EAAGr+D,EAAGja,KAAKs4E,EAAa,QAATA,EAAGrH,GAAGlzE,MAAekc,EAAGja,KAAKs4E,MAAUA,EAAG1H,GA5BhM,SAAYjyE,EAAExD,GAAG,OAAOwD,GAAG,IAAK,iBAAiB,OAAOsyE,GAAG91E,GAAG,IAAK,WAAW,OAAG,KAAKA,EAAE6zE,MAAa,MAAK+B,IAAG,EAAUD,IAAG,IAAK,YAAY,OAAOnyE,EAAExD,EAAE6E,QAAS8wE,IAAIC,GAAG,KAAKpyE,EAAE,QAAQ,OAAO,KAAK,CA4BE45E,CAAG55E,EAAEZ,GA3Bzd,SAAYY,EAAExD,GAAG,GAAG+1E,GAAG,MAAM,mBAAmBvyE,IAAI8xE,IAAIO,GAAGryE,EAAExD,IAAIwD,EAAE4qE,KAAKD,GAAGD,GAAGD,GAAG,KAAK8H,IAAG,EAAGvyE,GAAG,KAAK,OAAOA,GAAG,IAAK,QAAgQ,QAAQ,OAAO,KAA3P,IAAK,WAAW,KAAKxD,EAAE4wE,SAAS5wE,EAAE8wE,QAAQ9wE,EAAE+wE,UAAU/wE,EAAE4wE,SAAS5wE,EAAE8wE,OAAO,CAAC,GAAG9wE,EAAEs7C,MAAM,EAAEt7C,EAAEs7C,KAAKrqD,OAAO,OAAO+O,EAAEs7C,KAAK,GAAGt7C,EAAE6zE,MAAM,OAAOH,OAAOC,aAAa3zE,EAAE6zE,MAAM,CAAC,OAAO,KAAK,IAAK,iBAAiB,OAAO6B,IAAI,OAAO11E,EAAE4zE,OAAO,KAAK5zE,EAAE6E,KAAyB,CA2BqFw4E,CAAG75E,EAAEZ,MACje,GADoerB,EAAEu1E,GAAGv1E,EAAE,kBACvetQ,SAASkX,EAAE,IAAIiqE,GAAG,gBAAgB,cAAc,KAAKxvE,EAAEuF,GAAGpI,EAAElP,KAAK,CAACkmF,MAAM5uE,EAAE6uE,UAAUz1E,IAAI4G,EAAEtD,KAAKs4E,GAAG,CAAC/F,GAAGr3E,EAAEC,EAAE,GAAE,CAAC,SAAS48E,GAAGp5E,EAAExD,EAAE4C,GAAG,MAAM,CAAC8jC,SAASljC,EAAEy4E,SAASj8E,EAAE6uE,cAAcjsE,EAAE,CAAC,SAASk0E,GAAGtzE,EAAExD,GAAG,IAAI,IAAI4C,EAAE5C,EAAE,UAAUuB,EAAE,GAAG,OAAOiC,GAAG,CAAC,IAAI2E,EAAE3E,EAAE/C,EAAE0H,EAAEu+D,UAAU,IAAIv+D,EAAE4nD,KAAK,OAAOtvD,IAAI0H,EAAE1H,EAAY,OAAVA,EAAEymE,GAAG1jE,EAAEZ,KAAYrB,EAAEuL,QAAQ8vE,GAAGp5E,EAAE/C,EAAE0H,IAAc,OAAV1H,EAAEymE,GAAG1jE,EAAExD,KAAYuB,EAAE1Q,KAAK+rF,GAAGp5E,EAAE/C,EAAE0H,KAAK3E,EAAEA,EAAEukE,MAAM,CAAC,OAAOxmE,CAAC,CAAC,SAASw7E,GAAGv5E,GAAG,GAAG,OAAOA,EAAE,OAAO,KAAK,GAAGA,EAAEA,EAAEukE,aAAavkE,GAAG,IAAIA,EAAEusD,KAAK,OAAOvsD,GAAI,IAAI,CACnd,SAASw5E,GAAGx5E,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,IAAI,IAAI1H,EAAET,EAAE2uE,WAAW5uE,EAAE,GAAG,OAAO6C,GAAGA,IAAIrB,GAAG,CAAC,IAAIpB,EAAEyC,EAAE6K,EAAEtN,EAAE2nE,UAAU1nE,EAAED,EAAEumE,UAAU,GAAG,OAAOj5D,GAAGA,IAAIlM,EAAE,MAAM,IAAIpB,EAAE4vD,KAAK,OAAO3vD,IAAID,EAAEC,EAAE+H,EAAa,OAAVsF,EAAEy5D,GAAGtkE,EAAEnC,KAAYV,EAAE+M,QAAQ8vE,GAAGh6E,EAAE6K,EAAEtN,IAAKgI,GAAc,OAAVsF,EAAEy5D,GAAGtkE,EAAEnC,KAAYV,EAAElP,KAAK+rF,GAAGh6E,EAAE6K,EAAEtN,KAAMyC,EAAEA,EAAEmlE,MAAM,CAAC,IAAIhoE,EAAE9O,QAAQuS,EAAE3S,KAAK,CAACkmF,MAAM/2E,EAAEg3E,UAAUj3E,GAAG,CAAC,IAAIu9E,GAAG,SAASC,GAAG,iBAAiB,SAASC,GAAGh6E,GAAG,OAAO,kBAAkBA,EAAEA,EAAE,GAAGA,GAAG7D,QAAQ29E,GAAG,MAAM39E,QAAQ49E,GAAG,GAAG,CAAC,SAASE,GAAGj6E,EAAExD,EAAE4C,GAAW,GAAR5C,EAAEw9E,GAAGx9E,GAAMw9E,GAAGh6E,KAAKxD,GAAG4C,EAAE,MAAMjQ,MAAM2N,EAAE,KAAM,CAAC,SAASo9E,KAAK,CAC9e,IAAIC,GAAG,KAAKC,GAAG,KAAK,SAASC,GAAGr6E,EAAExD,GAAG,MAAM,aAAawD,GAAG,aAAaA,GAAG,kBAAkBxD,EAAEqpB,UAAU,kBAAkBrpB,EAAEqpB,UAAU,kBAAkBrpB,EAAEmhE,yBAAyB,OAAOnhE,EAAEmhE,yBAAyB,MAAMnhE,EAAEmhE,wBAAwB2c,MAAM,CAC5P,IAAIC,GAAG,oBAAoB7uB,WAAWA,gBAAW,EAAO8uB,GAAG,oBAAoBC,aAAaA,kBAAa,EAAOC,GAAG,oBAAoBC,QAAQA,aAAQ,EAAOC,GAAG,oBAAoBC,eAAeA,eAAe,qBAAqBH,GAAG,SAAS16E,GAAG,OAAO06E,GAAGI,QAAQ,MAAMC,KAAK/6E,GAAGg7E,MAAMC,GAAG,EAAEV,GAAG,SAASU,GAAGj7E,GAAG0rD,YAAW,WAAW,MAAM1rD,CAAE,GAAE,CACpV,SAASk7E,GAAGl7E,EAAExD,GAAG,IAAI4C,EAAE5C,EAAEuB,EAAE,EAAE,EAAE,CAAC,IAAI4G,EAAEvF,EAAE21E,YAA6B,GAAjB/0E,EAAEwyD,YAAYpzD,GAAMuF,GAAG,IAAIA,EAAE+5D,SAAS,GAAY,QAATt/D,EAAEuF,EAAEtD,MAAc,CAAC,GAAG,IAAItD,EAA0B,OAAvBiC,EAAEwyD,YAAY7tD,QAAGilE,GAAGptE,GAAUuB,GAAG,KAAK,MAAMqB,GAAG,OAAOA,GAAG,OAAOA,GAAGrB,IAAIqB,EAAEuF,CAAC,OAAOvF,GAAGwqE,GAAGptE,EAAE,CAAC,SAAS2+E,GAAGn7E,GAAG,KAAK,MAAMA,EAAEA,EAAEA,EAAE+0E,YAAY,CAAC,IAAIv4E,EAAEwD,EAAE0+D,SAAS,GAAG,IAAIliE,GAAG,IAAIA,EAAE,MAAM,GAAG,IAAIA,EAAE,CAAU,GAAG,OAAZA,EAAEwD,EAAEqB,OAAiB,OAAO7E,GAAG,OAAOA,EAAE,MAAM,GAAG,OAAOA,EAAE,OAAO,IAAI,CAAC,CAAC,OAAOwD,CAAC,CACjY,SAASo7E,GAAGp7E,GAAGA,EAAEA,EAAEq7E,gBAAgB,IAAI,IAAI7+E,EAAE,EAAEwD,GAAG,CAAC,GAAG,IAAIA,EAAE0+D,SAAS,CAAC,IAAIt/D,EAAEY,EAAEqB,KAAK,GAAG,MAAMjC,GAAG,OAAOA,GAAG,OAAOA,EAAE,CAAC,GAAG,IAAI5C,EAAE,OAAOwD,EAAExD,GAAG,KAAK,OAAO4C,GAAG5C,GAAG,CAACwD,EAAEA,EAAEq7E,eAAe,CAAC,OAAO,IAAI,CAAC,IAAIC,GAAGv+E,KAAK0oD,SAAS7nD,SAAS,IAAI2D,MAAM,GAAGg6E,GAAG,gBAAgBD,GAAGE,GAAG,gBAAgBF,GAAGjC,GAAG,oBAAoBiC,GAAG3tD,GAAG,iBAAiB2tD,GAAGG,GAAG,oBAAoBH,GAAGI,GAAG,kBAAkBJ,GAClX,SAASnS,GAAGnpE,GAAG,IAAIxD,EAAEwD,EAAEu7E,IAAI,GAAG/+E,EAAE,OAAOA,EAAE,IAAI,IAAI4C,EAAEY,EAAEuyD,WAAWnzD,GAAG,CAAC,GAAG5C,EAAE4C,EAAEi6E,KAAKj6E,EAAEm8E,IAAI,CAAe,GAAdn8E,EAAE5C,EAAE8nE,UAAa,OAAO9nE,EAAEmwD,OAAO,OAAOvtD,GAAG,OAAOA,EAAEutD,MAAM,IAAI3sD,EAAEo7E,GAAGp7E,GAAG,OAAOA,GAAG,CAAC,GAAGZ,EAAEY,EAAEu7E,IAAI,OAAOn8E,EAAEY,EAAEo7E,GAAGp7E,EAAE,CAAC,OAAOxD,CAAC,CAAK4C,GAAJY,EAAEZ,GAAMmzD,UAAU,CAAC,OAAO,IAAI,CAAC,SAAS0Q,GAAGjjE,GAAkB,QAAfA,EAAEA,EAAEu7E,KAAKv7E,EAAEq5E,MAAc,IAAIr5E,EAAEusD,KAAK,IAAIvsD,EAAEusD,KAAK,KAAKvsD,EAAEusD,KAAK,IAAIvsD,EAAEusD,IAAI,KAAKvsD,CAAC,CAAC,SAAS8zE,GAAG9zE,GAAG,GAAG,IAAIA,EAAEusD,KAAK,IAAIvsD,EAAEusD,IAAI,OAAOvsD,EAAEkjE,UAAU,MAAM/zE,MAAM2N,EAAE,IAAK,CAAC,SAASqmE,GAAGnjE,GAAG,OAAOA,EAAEw7E,KAAK,IAAI,CAAC,IAAIG,GAAG,GAAGC,IAAI,EAAE,SAASC,GAAG77E,GAAG,MAAM,CAACK,QAAQL,EAAE,CACve,SAAS87E,GAAE97E,GAAG,EAAE47E,KAAK57E,EAAEK,QAAQs7E,GAAGC,IAAID,GAAGC,IAAI,KAAKA,KAAK,CAAC,SAASG,GAAE/7E,EAAExD,GAAGo/E,KAAKD,GAAGC,IAAI57E,EAAEK,QAAQL,EAAEK,QAAQ7D,CAAC,CAAC,IAAIw/E,GAAG,CAAC,EAAEC,GAAEJ,GAAGG,IAAIE,GAAGL,IAAG,GAAIM,GAAGH,GAAG,SAASI,GAAGp8E,EAAExD,GAAG,IAAI4C,EAAEY,EAAE8mB,KAAKu1D,aAAa,IAAIj9E,EAAE,OAAO48E,GAAG,IAAIj+E,EAAEiC,EAAEkjE,UAAU,GAAGnlE,GAAGA,EAAEu+E,8CAA8C9/E,EAAE,OAAOuB,EAAEw+E,0CAA0C,IAASt/E,EAAL0H,EAAE,CAAC,EAAI,IAAI1H,KAAKmC,EAAEuF,EAAE1H,GAAGT,EAAES,GAAoH,OAAjHc,KAAIiC,EAAEA,EAAEkjE,WAAYoZ,4CAA4C9/E,EAAEwD,EAAEu8E,0CAA0C53E,GAAUA,CAAC,CAC9d,SAAS63E,GAAGx8E,GAAyB,OAAO,QAA7BA,EAAEA,EAAEy8E,yBAAmC,IAASz8E,CAAC,CAAC,SAAS08E,KAAKZ,GAAEI,IAAIJ,GAAEG,GAAE,CAAC,SAASU,GAAG38E,EAAExD,EAAE4C,GAAG,GAAG68E,GAAE57E,UAAU27E,GAAG,MAAM7sF,MAAM2N,EAAE,MAAMi/E,GAAEE,GAAEz/E,GAAGu/E,GAAEG,GAAG98E,EAAE,CAAC,SAASw9E,GAAG58E,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEiC,EAAEkjE,UAAgC,GAAtB1mE,EAAEA,EAAEigF,kBAAqB,oBAAoB1+E,EAAE8+E,gBAAgB,OAAOz9E,EAAwB,IAAI,IAAIuF,KAA9B5G,EAAEA,EAAE8+E,kBAAiC,KAAKl4E,KAAKnI,GAAG,MAAMrN,MAAM2N,EAAE,IAAI0+D,EAAGx7D,IAAI,UAAU2E,IAAI,OAAOwyC,EAAE,CAAC,EAAE/3C,EAAErB,EAAE,CACxX,SAAS++E,GAAG98E,GAA2G,OAAxGA,GAAGA,EAAEA,EAAEkjE,YAAYljE,EAAE+8E,2CAA2Cf,GAAGG,GAAGF,GAAE57E,QAAQ07E,GAAEE,GAAEj8E,GAAG+7E,GAAEG,GAAGA,GAAG77E,UAAe,CAAE,CAAC,SAAS28E,GAAGh9E,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEiC,EAAEkjE,UAAU,IAAInlE,EAAE,MAAM5O,MAAM2N,EAAE,MAAMsC,GAAGY,EAAE48E,GAAG58E,EAAExD,EAAE2/E,IAAIp+E,EAAEg/E,0CAA0C/8E,EAAE87E,GAAEI,IAAIJ,GAAEG,IAAGF,GAAEE,GAAEj8E,IAAI87E,GAAEI,IAAIH,GAAEG,GAAG98E,EAAE,CAAC,IAAI69E,GAAG,KAAKC,IAAG,EAAGC,IAAG,EAAG,SAASC,GAAGp9E,GAAG,OAAOi9E,GAAGA,GAAG,CAACj9E,GAAGi9E,GAAG5vF,KAAK2S,EAAE,CAChW,SAASq9E,KAAK,IAAIF,IAAI,OAAOF,GAAG,CAACE,IAAG,EAAG,IAAIn9E,EAAE,EAAExD,EAAEy6C,GAAE,IAAI,IAAI73C,EAAE69E,GAAG,IAAIhmC,GAAE,EAAEj3C,EAAEZ,EAAE3R,OAAOuS,IAAI,CAAC,IAAIjC,EAAEqB,EAAEY,GAAG,GAAGjC,EAAEA,GAAE,SAAU,OAAOA,EAAE,CAACk/E,GAAG,KAAKC,IAAG,CAAE,CAAC,MAAMv4E,GAAG,MAAM,OAAOs4E,KAAKA,GAAGA,GAAG17E,MAAMvB,EAAE,IAAIilE,GAAGU,GAAG0X,IAAI14E,CAAE,CAAC,QAAQsyC,GAAEz6C,EAAE2gF,IAAG,CAAE,CAAC,CAAC,OAAO,IAAI,CAAC,IAAIG,GAAG,GAAGC,GAAG,EAAEC,GAAG,KAAKC,GAAG,EAAEC,GAAG,GAAGC,GAAG,EAAEC,GAAG,KAAKC,GAAG,EAAEC,GAAG,GAAG,SAASC,GAAG/9E,EAAExD,GAAG8gF,GAAGC,MAAME,GAAGH,GAAGC,MAAMC,GAAGA,GAAGx9E,EAAEy9E,GAAGjhF,CAAC,CACjV,SAASwhF,GAAGh+E,EAAExD,EAAE4C,GAAGs+E,GAAGC,MAAME,GAAGH,GAAGC,MAAMG,GAAGJ,GAAGC,MAAMC,GAAGA,GAAG59E,EAAE,IAAIjC,EAAE8/E,GAAG79E,EAAE89E,GAAG,IAAIn5E,EAAE,GAAG4hE,GAAGxoE,GAAG,EAAEA,KAAK,GAAG4G,GAAGvF,GAAG,EAAE,IAAInC,EAAE,GAAGspE,GAAG/pE,GAAGmI,EAAE,GAAG,GAAG1H,EAAE,CAAC,IAAIV,EAAEoI,EAAEA,EAAE,EAAE1H,GAAGc,GAAG,GAAGxB,GAAG,GAAGqB,SAAS,IAAIG,IAAIxB,EAAEoI,GAAGpI,EAAEshF,GAAG,GAAG,GAAGtX,GAAG/pE,GAAGmI,EAAEvF,GAAGuF,EAAE5G,EAAE+/E,GAAG7gF,EAAE+C,CAAC,MAAM69E,GAAG,GAAG5gF,EAAEmC,GAAGuF,EAAE5G,EAAE+/E,GAAG99E,CAAC,CAAC,SAASi+E,GAAGj+E,GAAG,OAAOA,EAAEukE,SAASwZ,GAAG/9E,EAAE,GAAGg+E,GAAGh+E,EAAE,EAAE,GAAG,CAAC,SAASk+E,GAAGl+E,GAAG,KAAKA,IAAIw9E,IAAIA,GAAGF,KAAKC,IAAID,GAAGC,IAAI,KAAKE,GAAGH,KAAKC,IAAID,GAAGC,IAAI,KAAK,KAAKv9E,IAAI49E,IAAIA,GAAGF,KAAKC,IAAID,GAAGC,IAAI,KAAKG,GAAGJ,KAAKC,IAAID,GAAGC,IAAI,KAAKE,GAAGH,KAAKC,IAAID,GAAGC,IAAI,IAAI,CAAC,IAAIQ,GAAG,KAAKC,GAAG,KAAKC,IAAE,EAAGC,GAAG,KACje,SAASC,GAAGv+E,EAAExD,GAAG,IAAI4C,EAAEo/E,GAAG,EAAE,KAAK,KAAK,GAAGp/E,EAAEq/E,YAAY,UAAUr/E,EAAE8jE,UAAU1mE,EAAE4C,EAAEmlE,OAAOvkE,EAAgB,QAAdxD,EAAEwD,EAAE0+E,YAAoB1+E,EAAE0+E,UAAU,CAACt/E,GAAGY,EAAEwkE,OAAO,IAAIhoE,EAAEnP,KAAK+R,EAAE,CACxJ,SAASu/E,GAAG3+E,EAAExD,GAAG,OAAOwD,EAAEusD,KAAK,KAAK,EAAE,IAAIntD,EAAEY,EAAE8mB,KAAyE,OAAO,QAA3EtqB,EAAE,IAAIA,EAAEkiE,UAAUt/D,EAAErN,gBAAgByK,EAAEm/D,SAAS5pE,cAAc,KAAKyK,KAAmBwD,EAAEkjE,UAAU1mE,EAAE2hF,GAAGn+E,EAAEo+E,GAAGjD,GAAG3+E,EAAE6hE,aAAY,GAAO,KAAK,EAAE,OAAoD,QAA7C7hE,EAAE,KAAKwD,EAAE4+E,cAAc,IAAIpiF,EAAEkiE,SAAS,KAAKliE,KAAYwD,EAAEkjE,UAAU1mE,EAAE2hF,GAAGn+E,EAAEo+E,GAAG,MAAK,GAAO,KAAK,GAAG,OAA+B,QAAxB5hF,EAAE,IAAIA,EAAEkiE,SAAS,KAAKliE,KAAY4C,EAAE,OAAOw+E,GAAG,CAACvT,GAAGwT,GAAG1lD,SAAS2lD,IAAI,KAAK99E,EAAE0kE,cAAc,CAACC,WAAWnoE,EAAEqiF,YAAYz/E,EAAE0/E,UAAU,aAAY1/E,EAAEo/E,GAAG,GAAG,KAAK,KAAK,IAAKtb,UAAU1mE,EAAE4C,EAAEmlE,OAAOvkE,EAAEA,EAAE2sD,MAAMvtD,EAAE++E,GAAGn+E,EAAEo+E,GAClf,MAAK,GAAO,QAAQ,OAAM,EAAG,CAAC,SAASW,GAAG/+E,GAAG,OAAO,KAAY,EAAPA,EAAEuuC,OAAS,KAAa,IAARvuC,EAAEwkE,MAAU,CAAC,SAASwa,GAAGh/E,GAAG,GAAGq+E,GAAE,CAAC,IAAI7hF,EAAE4hF,GAAG,GAAG5hF,EAAE,CAAC,IAAI4C,EAAE5C,EAAE,IAAImiF,GAAG3+E,EAAExD,GAAG,CAAC,GAAGuiF,GAAG/+E,GAAG,MAAM7Q,MAAM2N,EAAE,MAAMN,EAAE2+E,GAAG/7E,EAAE21E,aAAa,IAAIh3E,EAAEogF,GAAG3hF,GAAGmiF,GAAG3+E,EAAExD,GAAG+hF,GAAGxgF,EAAEqB,IAAIY,EAAEwkE,OAAe,KAATxkE,EAAEwkE,MAAY,EAAE6Z,IAAE,EAAGF,GAAGn+E,EAAE,CAAC,KAAK,CAAC,GAAG++E,GAAG/+E,GAAG,MAAM7Q,MAAM2N,EAAE,MAAMkD,EAAEwkE,OAAe,KAATxkE,EAAEwkE,MAAY,EAAE6Z,IAAE,EAAGF,GAAGn+E,CAAC,CAAC,CAAC,CAAC,SAASi/E,GAAGj/E,GAAG,IAAIA,EAAEA,EAAEukE,OAAO,OAAOvkE,GAAG,IAAIA,EAAEusD,KAAK,IAAIvsD,EAAEusD,KAAK,KAAKvsD,EAAEusD,KAAKvsD,EAAEA,EAAEukE,OAAO4Z,GAAGn+E,CAAC,CACha,SAASk/E,GAAGl/E,GAAG,GAAGA,IAAIm+E,GAAG,OAAM,EAAG,IAAIE,GAAE,OAAOY,GAAGj/E,GAAGq+E,IAAE,GAAG,EAAG,IAAI7hF,EAAkG,IAA/FA,EAAE,IAAIwD,EAAEusD,QAAQ/vD,EAAE,IAAIwD,EAAEusD,OAAgB/vD,EAAE,UAAXA,EAAEwD,EAAE8mB,OAAmB,SAAStqB,IAAI69E,GAAGr6E,EAAE8mB,KAAK9mB,EAAEm/E,gBAAmB3iF,IAAIA,EAAE4hF,IAAI,CAAC,GAAGW,GAAG/+E,GAAG,MAAMo/E,KAAKjwF,MAAM2N,EAAE,MAAM,KAAKN,GAAG+hF,GAAGv+E,EAAExD,GAAGA,EAAE2+E,GAAG3+E,EAAEu4E,YAAY,CAAO,GAANkK,GAAGj/E,GAAM,KAAKA,EAAEusD,IAAI,CAAgD,KAA7BvsD,EAAE,QAApBA,EAAEA,EAAE0kE,eAAyB1kE,EAAE2kE,WAAW,MAAW,MAAMx1E,MAAM2N,EAAE,MAAMkD,EAAE,CAAiB,IAAhBA,EAAEA,EAAE+0E,YAAgBv4E,EAAE,EAAEwD,GAAG,CAAC,GAAG,IAAIA,EAAE0+D,SAAS,CAAC,IAAIt/D,EAAEY,EAAEqB,KAAK,GAAG,OAAOjC,EAAE,CAAC,GAAG,IAAI5C,EAAE,CAAC4hF,GAAGjD,GAAGn7E,EAAE+0E,aAAa,MAAM/0E,CAAC,CAACxD,GAAG,KAAK,MAAM4C,GAAG,OAAOA,GAAG,OAAOA,GAAG5C,GAAG,CAACwD,EAAEA,EAAE+0E,WAAW,CAACqJ,GACjgB,IAAI,CAAC,MAAMA,GAAGD,GAAGhD,GAAGn7E,EAAEkjE,UAAU6R,aAAa,KAAK,OAAM,CAAE,CAAC,SAASqK,KAAK,IAAI,IAAIp/E,EAAEo+E,GAAGp+E,GAAGA,EAAEm7E,GAAGn7E,EAAE+0E,YAAY,CAAC,SAASsK,KAAKjB,GAAGD,GAAG,KAAKE,IAAE,CAAE,CAAC,SAASiB,GAAGt/E,GAAG,OAAOs+E,GAAGA,GAAG,CAACt+E,GAAGs+E,GAAGjxF,KAAK2S,EAAE,CAAC,IAAIu/E,GAAG7iE,EAAGotD,wBAAwB,SAAS0V,GAAGx/E,EAAExD,GAAG,GAAGwD,GAAGA,EAAEy/E,aAAa,CAA4B,IAAI,IAAIrgF,KAAnC5C,EAAE26C,EAAE,CAAC,EAAE36C,GAAGwD,EAAEA,EAAEy/E,kBAA4B,IAASjjF,EAAE4C,KAAK5C,EAAE4C,GAAGY,EAAEZ,IAAI,OAAO5C,CAAC,CAAC,OAAOA,CAAC,CAAC,IAAIkjF,GAAG7D,GAAG,MAAM8D,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,KAAKD,GAAGD,GAAGD,GAAG,IAAI,CAAC,SAASI,GAAG//E,GAAG,IAAIxD,EAAEkjF,GAAGr/E,QAAQy7E,GAAE4D,IAAI1/E,EAAEggF,cAAcxjF,CAAC,CACjd,SAASyjF,GAAGjgF,EAAExD,EAAE4C,GAAG,KAAK,OAAOY,GAAG,CAAC,IAAIjC,EAAEiC,EAAEskE,UAA+H,IAApHtkE,EAAEkgF,WAAW1jF,KAAKA,GAAGwD,EAAEkgF,YAAY1jF,EAAE,OAAOuB,IAAIA,EAAEmiF,YAAY1jF,IAAI,OAAOuB,IAAIA,EAAEmiF,WAAW1jF,KAAKA,IAAIuB,EAAEmiF,YAAY1jF,GAAMwD,IAAIZ,EAAE,MAAMY,EAAEA,EAAEukE,MAAM,CAAC,CAAC,SAAS4b,GAAGngF,EAAExD,GAAGmjF,GAAG3/E,EAAE6/E,GAAGD,GAAG,KAAsB,QAAjB5/E,EAAEA,EAAEogF,eAAuB,OAAOpgF,EAAEqgF,eAAe,KAAKrgF,EAAEsgF,MAAM9jF,KAAK+jF,IAAG,GAAIvgF,EAAEqgF,aAAa,KAAK,CACtU,SAASG,GAAGxgF,GAAG,IAAIxD,EAAEwD,EAAEggF,cAAc,GAAGH,KAAK7/E,EAAE,GAAGA,EAAE,CAACikD,QAAQjkD,EAAEygF,cAAcjkF,EAAEwzB,KAAK,MAAM,OAAO4vD,GAAG,CAAC,GAAG,OAAOD,GAAG,MAAMxwF,MAAM2N,EAAE,MAAM8iF,GAAG5/E,EAAE2/E,GAAGS,aAAa,CAACE,MAAM,EAAED,aAAargF,EAAE,MAAM4/E,GAAGA,GAAG5vD,KAAKhwB,EAAE,OAAOxD,CAAC,CAAC,IAAIkkF,GAAG,KAAK,SAASC,GAAG3gF,GAAG,OAAO0gF,GAAGA,GAAG,CAAC1gF,GAAG0gF,GAAGrzF,KAAK2S,EAAE,CAAC,SAAS4gF,GAAG5gF,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAEnI,EAAEqkF,YAA+E,OAAnE,OAAOl8E,GAAGvF,EAAE4wB,KAAK5wB,EAAEuhF,GAAGnkF,KAAK4C,EAAE4wB,KAAKrrB,EAAEqrB,KAAKrrB,EAAEqrB,KAAK5wB,GAAG5C,EAAEqkF,YAAYzhF,EAAS0hF,GAAG9gF,EAAEjC,EAAE,CAChY,SAAS+iF,GAAG9gF,EAAExD,GAAGwD,EAAEsgF,OAAO9jF,EAAE,IAAI4C,EAAEY,EAAEskE,UAAqC,IAA3B,OAAOllE,IAAIA,EAAEkhF,OAAO9jF,GAAG4C,EAAEY,EAAMA,EAAEA,EAAEukE,OAAO,OAAOvkE,GAAGA,EAAEkgF,YAAY1jF,EAAgB,QAAd4C,EAAEY,EAAEskE,aAAqBllE,EAAE8gF,YAAY1jF,GAAG4C,EAAEY,EAAEA,EAAEA,EAAEukE,OAAO,OAAO,IAAInlE,EAAEmtD,IAAIntD,EAAE8jE,UAAU,IAAI,CAAC,IAAI6d,IAAG,EAAG,SAASC,GAAGhhF,GAAGA,EAAEihF,YAAY,CAACC,UAAUlhF,EAAE0kE,cAAcyc,gBAAgB,KAAKC,eAAe,KAAKC,OAAO,CAACC,QAAQ,KAAKT,YAAY,KAAKP,MAAM,GAAGiB,QAAQ,KAAK,CACpX,SAASC,GAAGxhF,EAAExD,GAAGwD,EAAEA,EAAEihF,YAAYzkF,EAAEykF,cAAcjhF,IAAIxD,EAAEykF,YAAY,CAACC,UAAUlhF,EAAEkhF,UAAUC,gBAAgBnhF,EAAEmhF,gBAAgBC,eAAephF,EAAEohF,eAAeC,OAAOrhF,EAAEqhF,OAAOE,QAAQvhF,EAAEuhF,SAAS,CAAC,SAASE,GAAGzhF,EAAExD,GAAG,MAAM,CAACklF,UAAU1hF,EAAE2hF,KAAKnlF,EAAE+vD,IAAI,EAAEq1B,QAAQ,KAAK3rD,SAAS,KAAKjG,KAAK,KAAK,CACtR,SAAS6xD,GAAG7hF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEiC,EAAEihF,YAAY,GAAG,OAAOljF,EAAE,OAAO,KAAgB,GAAXA,EAAEA,EAAEsjF,OAAU,KAAO,EAAFS,IAAK,CAAC,IAAIn9E,EAAE5G,EAAEujF,QAA+D,OAAvD,OAAO38E,EAAEnI,EAAEwzB,KAAKxzB,GAAGA,EAAEwzB,KAAKrrB,EAAEqrB,KAAKrrB,EAAEqrB,KAAKxzB,GAAGuB,EAAEujF,QAAQ9kF,EAASskF,GAAG9gF,EAAEZ,EAAE,CAAoF,OAAnE,QAAhBuF,EAAE5G,EAAE8iF,cAAsBrkF,EAAEwzB,KAAKxzB,EAAEmkF,GAAG5iF,KAAKvB,EAAEwzB,KAAKrrB,EAAEqrB,KAAKrrB,EAAEqrB,KAAKxzB,GAAGuB,EAAE8iF,YAAYrkF,EAASskF,GAAG9gF,EAAEZ,EAAE,CAAC,SAAS2iF,GAAG/hF,EAAExD,EAAE4C,GAAmB,GAAG,QAAnB5C,EAAEA,EAAEykF,eAA0BzkF,EAAEA,EAAE6kF,OAAO,KAAO,QAAFjiF,IAAY,CAAC,IAAIrB,EAAEvB,EAAE8jF,MAAwBlhF,GAAlBrB,GAAGiC,EAAE+mE,aAAkBvqE,EAAE8jF,MAAMlhF,EAAEsoE,GAAG1nE,EAAEZ,EAAE,CAAC,CACrZ,SAAS4iF,GAAGhiF,EAAExD,GAAG,IAAI4C,EAAEY,EAAEihF,YAAYljF,EAAEiC,EAAEskE,UAAU,GAAG,OAAOvmE,GAAoBqB,KAAhBrB,EAAEA,EAAEkjF,aAAmB,CAAC,IAAIt8E,EAAE,KAAK1H,EAAE,KAAyB,GAAG,QAAvBmC,EAAEA,EAAE+hF,iBAA4B,CAAC,EAAE,CAAC,IAAI5kF,EAAE,CAACmlF,UAAUtiF,EAAEsiF,UAAUC,KAAKviF,EAAEuiF,KAAKp1B,IAAIntD,EAAEmtD,IAAIq1B,QAAQxiF,EAAEwiF,QAAQ3rD,SAAS72B,EAAE62B,SAASjG,KAAK,MAAM,OAAO/yB,EAAE0H,EAAE1H,EAAEV,EAAEU,EAAEA,EAAE+yB,KAAKzzB,EAAE6C,EAAEA,EAAE4wB,IAAI,OAAO,OAAO5wB,GAAG,OAAOnC,EAAE0H,EAAE1H,EAAET,EAAES,EAAEA,EAAE+yB,KAAKxzB,CAAC,MAAMmI,EAAE1H,EAAET,EAAiH,OAA/G4C,EAAE,CAAC8hF,UAAUnjF,EAAEmjF,UAAUC,gBAAgBx8E,EAAEy8E,eAAenkF,EAAEokF,OAAOtjF,EAAEsjF,OAAOE,QAAQxjF,EAAEwjF,cAASvhF,EAAEihF,YAAY7hF,EAAQ,CAAoB,QAAnBY,EAAEZ,EAAEgiF,gBAAwBhiF,EAAE+hF,gBAAgB3kF,EAAEwD,EAAEgwB,KACnfxzB,EAAE4C,EAAEgiF,eAAe5kF,CAAC,CACpB,SAASylF,GAAGjiF,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAE3E,EAAEihF,YAAYF,IAAG,EAAG,IAAI9jF,EAAE0H,EAAEw8E,gBAAgB5kF,EAAEoI,EAAEy8E,eAAezkF,EAAEgI,EAAE08E,OAAOC,QAAQ,GAAG,OAAO3kF,EAAE,CAACgI,EAAE08E,OAAOC,QAAQ,KAAK,IAAIr3E,EAAEtN,EAAEC,EAAEqN,EAAE+lB,KAAK/lB,EAAE+lB,KAAK,KAAK,OAAOzzB,EAAEU,EAAEL,EAAEL,EAAEyzB,KAAKpzB,EAAEL,EAAE0N,EAAE,IAAIgmB,EAAEjwB,EAAEskE,UAAU,OAAOr0C,KAAoBtzB,GAAhBszB,EAAEA,EAAEgxD,aAAgBG,kBAAmB7kF,IAAI,OAAOI,EAAEszB,EAAEkxD,gBAAgBvkF,EAAED,EAAEqzB,KAAKpzB,EAAEqzB,EAAEmxD,eAAen3E,GAAG,CAAC,GAAG,OAAOhN,EAAE,CAAC,IAAIJ,EAAE8H,EAAEu8E,UAA6B,IAAnB3kF,EAAE,EAAE0zB,EAAErzB,EAAEqN,EAAE,KAAKtN,EAAEM,IAAI,CAAC,IAAIb,EAAEO,EAAEglF,KAAK55E,EAAEpL,EAAE+kF,UAAU,IAAI3jF,EAAE3B,KAAKA,EAAE,CAAC,OAAO6zB,IAAIA,EAAEA,EAAED,KAAK,CAAC0xD,UAAU35E,EAAE45E,KAAK,EAAEp1B,IAAI5vD,EAAE4vD,IAAIq1B,QAAQjlF,EAAEilF,QAAQ3rD,SAASt5B,EAAEs5B,SACvfjG,KAAK,OAAOhwB,EAAE,CAAC,IAAIO,EAAEP,EAAE9C,EAAEP,EAAU,OAARP,EAAEI,EAAEuL,EAAE3I,EAASlC,EAAEqvD,KAAK,KAAK,EAAc,GAAG,oBAAfhsD,EAAErD,EAAE0kF,SAAiC,CAAC/kF,EAAE0D,EAAEwsD,KAAKhlD,EAAElL,EAAET,GAAG,MAAM4D,CAAC,CAACnD,EAAE0D,EAAE,MAAMP,EAAE,KAAK,EAAEO,EAAEikE,OAAe,MAATjkE,EAAEikE,MAAa,IAAI,KAAK,EAAsD,GAAG,QAA3CpoE,EAAE,oBAAdmE,EAAErD,EAAE0kF,SAAgCrhF,EAAEwsD,KAAKhlD,EAAElL,EAAET,GAAGmE,SAAe,IAASnE,EAAE,MAAM4D,EAAEnD,EAAEs6C,EAAE,CAAC,EAAEt6C,EAAET,GAAG,MAAM4D,EAAE,KAAK,EAAE+gF,IAAG,EAAG,CAAC,OAAOpkF,EAAEs5B,UAAU,IAAIt5B,EAAEglF,OAAO3hF,EAAEwkE,OAAO,GAAe,QAAZpoE,EAAEuI,EAAE48E,SAAiB58E,EAAE48E,QAAQ,CAAC5kF,GAAGP,EAAE/O,KAAKsP,GAAG,MAAMoL,EAAE,CAAC25E,UAAU35E,EAAE45E,KAAKvlF,EAAEmwD,IAAI5vD,EAAE4vD,IAAIq1B,QAAQjlF,EAAEilF,QAAQ3rD,SAASt5B,EAAEs5B,SAASjG,KAAK,MAAM,OAAOC,GAAGrzB,EAAEqzB,EAAEloB,EAAEkC,EAAEpN,GAAGozB,EAAEA,EAAED,KAAKjoB,EAAExL,GAAGH,EAC3e,GAAG,QAAZO,EAAEA,EAAEqzB,MAAiB,IAAsB,QAAnBrzB,EAAEgI,EAAE08E,OAAOC,SAAiB,MAAe3kF,GAAJP,EAAEO,GAAMqzB,KAAK5zB,EAAE4zB,KAAK,KAAKrrB,EAAEy8E,eAAehlF,EAAEuI,EAAE08E,OAAOC,QAAQ,IAAI,EAAsG,GAA5F,OAAOrxD,IAAIhmB,EAAEpN,GAAG8H,EAAEu8E,UAAUj3E,EAAEtF,EAAEw8E,gBAAgBvkF,EAAE+H,EAAEy8E,eAAenxD,EAA4B,QAA1BzzB,EAAEmI,EAAE08E,OAAOR,aAAwB,CAACl8E,EAAEnI,EAAE,GAAGD,GAAGoI,EAAEg9E,KAAKh9E,EAAEA,EAAEqrB,WAAWrrB,IAAInI,EAAE,MAAM,OAAOS,IAAI0H,EAAE08E,OAAOf,MAAM,GAAG4B,IAAI3lF,EAAEyD,EAAEsgF,MAAM/jF,EAAEyD,EAAE0kE,cAAc7nE,CAAC,CAAC,CAC9V,SAASslF,GAAGniF,EAAExD,EAAE4C,GAA8B,GAA3BY,EAAExD,EAAE+kF,QAAQ/kF,EAAE+kF,QAAQ,KAAQ,OAAOvhF,EAAE,IAAIxD,EAAE,EAAEA,EAAEwD,EAAEvS,OAAO+O,IAAI,CAAC,IAAIuB,EAAEiC,EAAExD,GAAGmI,EAAE5G,EAAEk4B,SAAS,GAAG,OAAOtxB,EAAE,CAAqB,GAApB5G,EAAEk4B,SAAS,KAAKl4B,EAAEqB,EAAK,oBAAoBuF,EAAE,MAAMxV,MAAM2N,EAAE,IAAI6H,IAAIA,EAAEooD,KAAKhvD,EAAE,CAAC,CAAC,CAAC,IAAIqkF,IAAI,IAAIzqB,EAAG0qB,WAAWC,KAAK,SAASC,GAAGviF,EAAExD,EAAE4C,EAAErB,GAA8BqB,EAAE,QAAXA,EAAEA,EAAErB,EAAtBvB,EAAEwD,EAAE0kE,sBAAmC,IAAStlE,EAAE5C,EAAE26C,EAAE,CAAC,EAAE36C,EAAE4C,GAAGY,EAAE0kE,cAActlE,EAAE,IAAIY,EAAEsgF,QAAQtgF,EAAEihF,YAAYC,UAAU9hF,EAAE,CAClX,IAAIojF,GAAG,CAACC,UAAU,SAASziF,GAAG,SAAOA,EAAEA,EAAE0iF,kBAAiBre,GAAGrkE,KAAKA,CAAI,EAAE2iF,gBAAgB,SAAS3iF,EAAExD,EAAE4C,GAAGY,EAAEA,EAAE0iF,gBAAgB,IAAI3kF,EAAE6kF,KAAIj+E,EAAEk+E,GAAG7iF,GAAG/C,EAAEwkF,GAAG1jF,EAAE4G,GAAG1H,EAAE2kF,QAAQplF,OAAE,IAAS4C,GAAG,OAAOA,IAAInC,EAAEg5B,SAAS72B,GAAe,QAAZ5C,EAAEqlF,GAAG7hF,EAAE/C,EAAE0H,MAAcm+E,GAAGtmF,EAAEwD,EAAE2E,EAAE5G,GAAGgkF,GAAGvlF,EAAEwD,EAAE2E,GAAG,EAAEo+E,oBAAoB,SAAS/iF,EAAExD,EAAE4C,GAAGY,EAAEA,EAAE0iF,gBAAgB,IAAI3kF,EAAE6kF,KAAIj+E,EAAEk+E,GAAG7iF,GAAG/C,EAAEwkF,GAAG1jF,EAAE4G,GAAG1H,EAAEsvD,IAAI,EAAEtvD,EAAE2kF,QAAQplF,OAAE,IAAS4C,GAAG,OAAOA,IAAInC,EAAEg5B,SAAS72B,GAAe,QAAZ5C,EAAEqlF,GAAG7hF,EAAE/C,EAAE0H,MAAcm+E,GAAGtmF,EAAEwD,EAAE2E,EAAE5G,GAAGgkF,GAAGvlF,EAAEwD,EAAE2E,GAAG,EAAEq+E,mBAAmB,SAAShjF,EAAExD,GAAGwD,EAAEA,EAAE0iF,gBAAgB,IAAItjF,EAAEwjF,KAAI7kF,EACnf8kF,GAAG7iF,GAAG2E,EAAE88E,GAAGriF,EAAErB,GAAG4G,EAAE4nD,IAAI,OAAE,IAAS/vD,GAAG,OAAOA,IAAImI,EAAEsxB,SAASz5B,GAAe,QAAZA,EAAEqlF,GAAG7hF,EAAE2E,EAAE5G,MAAc+kF,GAAGtmF,EAAEwD,EAAEjC,EAAEqB,GAAG2iF,GAAGvlF,EAAEwD,EAAEjC,GAAG,GAAG,SAASklF,GAAGjjF,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,EAAEV,GAAiB,MAAM,oBAApByD,EAAEA,EAAEkjE,WAAsCggB,sBAAsBljF,EAAEkjF,sBAAsBnlF,EAAEd,EAAEV,IAAGC,EAAEyU,YAAWzU,EAAEyU,UAAUkyE,wBAAsBvO,GAAGx1E,EAAErB,KAAK62E,GAAGjwE,EAAE1H,GAAK,CAC1S,SAASmmF,GAAGpjF,EAAExD,EAAE4C,GAAG,IAAIrB,GAAE,EAAG4G,EAAEq3E,GAAO/+E,EAAET,EAAE6mF,YAA2W,MAA/V,kBAAkBpmF,GAAG,OAAOA,EAAEA,EAAEujF,GAAGvjF,IAAI0H,EAAE63E,GAAGhgF,GAAG2/E,GAAGF,GAAE57E,QAAyBpD,GAAGc,EAAE,QAAtBA,EAAEvB,EAAE6/E,oBAA4B,IAASt+E,GAAGq+E,GAAGp8E,EAAE2E,GAAGq3E,IAAIx/E,EAAE,IAAIA,EAAE4C,EAAEnC,GAAG+C,EAAE0kE,cAAc,OAAOloE,EAAE8mF,YAAO,IAAS9mF,EAAE8mF,MAAM9mF,EAAE8mF,MAAM,KAAK9mF,EAAE+mF,QAAQf,GAAGxiF,EAAEkjE,UAAU1mE,EAAEA,EAAEkmF,gBAAgB1iF,EAAEjC,KAAIiC,EAAEA,EAAEkjE,WAAYoZ,4CAA4C33E,EAAE3E,EAAEu8E,0CAA0Ct/E,GAAUT,CAAC,CAC5Z,SAASgnF,GAAGxjF,EAAExD,EAAE4C,EAAErB,GAAGiC,EAAExD,EAAE8mF,MAAM,oBAAoB9mF,EAAEinF,2BAA2BjnF,EAAEinF,0BAA0BrkF,EAAErB,GAAG,oBAAoBvB,EAAEknF,kCAAkClnF,EAAEknF,iCAAiCtkF,EAAErB,GAAGvB,EAAE8mF,QAAQtjF,GAAGwiF,GAAGO,oBAAoBvmF,EAAEA,EAAE8mF,MAAM,KAAK,CACpQ,SAASK,GAAG3jF,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAE3E,EAAEkjE,UAAUv+D,EAAEu/C,MAAM9kD,EAAEuF,EAAE2+E,MAAMtjF,EAAE0kE,cAAc//D,EAAE29E,KAAKF,GAAGpB,GAAGhhF,GAAG,IAAI/C,EAAET,EAAE6mF,YAAY,kBAAkBpmF,GAAG,OAAOA,EAAE0H,EAAEs/C,QAAQu8B,GAAGvjF,IAAIA,EAAEu/E,GAAGhgF,GAAG2/E,GAAGF,GAAE57E,QAAQsE,EAAEs/C,QAAQm4B,GAAGp8E,EAAE/C,IAAI0H,EAAE2+E,MAAMtjF,EAAE0kE,cAA2C,oBAA7BznE,EAAET,EAAEonF,4BAAiDrB,GAAGviF,EAAExD,EAAES,EAAEmC,GAAGuF,EAAE2+E,MAAMtjF,EAAE0kE,eAAe,oBAAoBloE,EAAEonF,0BAA0B,oBAAoBj/E,EAAEk/E,yBAAyB,oBAAoBl/E,EAAEm/E,2BAA2B,oBAAoBn/E,EAAEo/E,qBAAqBvnF,EAAEmI,EAAE2+E,MACrf,oBAAoB3+E,EAAEo/E,oBAAoBp/E,EAAEo/E,qBAAqB,oBAAoBp/E,EAAEm/E,2BAA2Bn/E,EAAEm/E,4BAA4BtnF,IAAImI,EAAE2+E,OAAOd,GAAGO,oBAAoBp+E,EAAEA,EAAE2+E,MAAM,MAAMrB,GAAGjiF,EAAEZ,EAAEuF,EAAE5G,GAAG4G,EAAE2+E,MAAMtjF,EAAE0kE,eAAe,oBAAoB//D,EAAEq/E,oBAAoBhkF,EAAEwkE,OAAO,QAAQ,CACpS,SAASyf,GAAGjkF,EAAExD,EAAE4C,GAAW,GAAG,QAAXY,EAAEZ,EAAEwvD,MAAiB,oBAAoB5uD,GAAG,kBAAkBA,EAAE,CAAC,GAAGZ,EAAE8kF,OAAO,CAAY,GAAX9kF,EAAEA,EAAE8kF,OAAY,CAAC,GAAG,IAAI9kF,EAAEmtD,IAAI,MAAMp9D,MAAM2N,EAAE,MAAM,IAAIiB,EAAEqB,EAAE8jE,SAAS,CAAC,IAAInlE,EAAE,MAAM5O,MAAM2N,EAAE,IAAIkD,IAAI,IAAI2E,EAAE5G,EAAEd,EAAE,GAAG+C,EAAE,OAAG,OAAOxD,GAAG,OAAOA,EAAEoyD,KAAK,oBAAoBpyD,EAAEoyD,KAAKpyD,EAAEoyD,IAAIu1B,aAAalnF,EAAST,EAAEoyD,KAAIpyD,EAAE,SAASwD,GAAG,IAAIxD,EAAEmI,EAAE29E,KAAK9lF,IAAI4lF,KAAK5lF,EAAEmI,EAAE29E,KAAK,CAAC,GAAG,OAAOtiF,SAASxD,EAAES,GAAGT,EAAES,GAAG+C,CAAC,EAAExD,EAAE2nF,WAAWlnF,EAAST,EAAC,CAAC,GAAG,kBAAkBwD,EAAE,MAAM7Q,MAAM2N,EAAE,MAAM,IAAIsC,EAAE8kF,OAAO,MAAM/0F,MAAM2N,EAAE,IAAIkD,GAAI,CAAC,OAAOA,CAAC,CACre,SAASokF,GAAGpkF,EAAExD,GAAuC,MAApCwD,EAAE9O,OAAO+f,UAAUrT,SAASmvD,KAAKvwD,GAASrN,MAAM2N,EAAE,GAAG,oBAAoBkD,EAAE,qBAAqB9O,OAAO20C,KAAKrpC,GAAG9O,KAAK,MAAM,IAAIsS,GAAI,CAAC,SAASqkF,GAAGrkF,GAAiB,OAAOxD,EAAfwD,EAAEu7D,OAAev7D,EAAEs7D,SAAS,CACrM,SAASgpB,GAAGtkF,GAAG,SAASxD,EAAEA,EAAE4C,GAAG,GAAGY,EAAE,CAAC,IAAIjC,EAAEvB,EAAEkiF,UAAU,OAAO3gF,GAAGvB,EAAEkiF,UAAU,CAACt/E,GAAG5C,EAAEgoE,OAAO,IAAIzmE,EAAE1Q,KAAK+R,EAAE,CAAC,CAAC,SAASA,EAAEA,EAAErB,GAAG,IAAIiC,EAAE,OAAO,KAAK,KAAK,OAAOjC,GAAGvB,EAAE4C,EAAErB,GAAGA,EAAEA,EAAE+mE,QAAQ,OAAO,IAAI,CAAC,SAAS/mE,EAAEiC,EAAExD,GAAG,IAAIwD,EAAE,IAAI0C,IAAI,OAAOlG,GAAG,OAAOA,EAAEsG,IAAI9C,EAAE1P,IAAIkM,EAAEsG,IAAItG,GAAGwD,EAAE1P,IAAIkM,EAAEpM,MAAMoM,GAAGA,EAAEA,EAAEsoE,QAAQ,OAAO9kE,CAAC,CAAC,SAAS2E,EAAE3E,EAAExD,GAAsC,OAAnCwD,EAAEukF,GAAGvkF,EAAExD,IAAKpM,MAAM,EAAE4P,EAAE8kE,QAAQ,KAAY9kE,CAAC,CAAC,SAAS/C,EAAET,EAAE4C,EAAErB,GAAa,OAAVvB,EAAEpM,MAAM2N,EAAMiC,EAA6C,QAAjBjC,EAAEvB,EAAE8nE,YAA6BvmE,EAAEA,EAAE3N,OAAQgP,GAAG5C,EAAEgoE,OAAO,EAAEplE,GAAGrB,GAAEvB,EAAEgoE,OAAO,EAASplE,IAArG5C,EAAEgoE,OAAO,QAAQplE,EAAqF,CAAC,SAAS7C,EAAEC,GACzd,OAD4dwD,GAC7f,OAAOxD,EAAE8nE,YAAY9nE,EAAEgoE,OAAO,GAAUhoE,CAAC,CAAC,SAASG,EAAEqD,EAAExD,EAAE4C,EAAErB,GAAG,OAAG,OAAOvB,GAAG,IAAIA,EAAE+vD,MAAW/vD,EAAEgoF,GAAGplF,EAAEY,EAAEuuC,KAAKxwC,IAAKwmE,OAAOvkE,EAAExD,KAAEA,EAAEmI,EAAEnI,EAAE4C,IAAKmlE,OAAOvkE,EAASxD,EAAC,CAAC,SAASyN,EAAEjK,EAAExD,EAAE4C,EAAErB,GAAG,IAAId,EAAEmC,EAAE0nB,KAAK,OAAG7pB,IAAIw8D,EAAUxpC,EAAEjwB,EAAExD,EAAE4C,EAAE8kD,MAAMr+B,SAAS9nB,EAAEqB,EAAE0D,KAAQ,OAAOtG,IAAIA,EAAEiiF,cAAcxhF,GAAG,kBAAkBA,GAAG,OAAOA,GAAGA,EAAEm+D,WAAWlB,GAAImqB,GAAGpnF,KAAKT,EAAEsqB,QAAa/oB,EAAE4G,EAAEnI,EAAE4C,EAAE8kD,QAAS0K,IAAIq1B,GAAGjkF,EAAExD,EAAE4C,GAAGrB,EAAEwmE,OAAOvkE,EAAEjC,KAAEA,EAAE0mF,GAAGrlF,EAAE0nB,KAAK1nB,EAAE0D,IAAI1D,EAAE8kD,MAAM,KAAKlkD,EAAEuuC,KAAKxwC,IAAK6wD,IAAIq1B,GAAGjkF,EAAExD,EAAE4C,GAAGrB,EAAEwmE,OAAOvkE,EAASjC,EAAC,CAAC,SAASnB,EAAEoD,EAAExD,EAAE4C,EAAErB,GAAG,OAAG,OAAOvB,GAAG,IAAIA,EAAE+vD,KACjf/vD,EAAE0mE,UAAUoG,gBAAgBlqE,EAAEkqE,eAAe9sE,EAAE0mE,UAAUwhB,iBAAiBtlF,EAAEslF,iBAAsBloF,EAAEmoF,GAAGvlF,EAAEY,EAAEuuC,KAAKxwC,IAAKwmE,OAAOvkE,EAAExD,KAAEA,EAAEmI,EAAEnI,EAAE4C,EAAEymB,UAAU,KAAM0+C,OAAOvkE,EAASxD,EAAC,CAAC,SAASyzB,EAAEjwB,EAAExD,EAAE4C,EAAErB,EAAEd,GAAG,OAAG,OAAOT,GAAG,IAAIA,EAAE+vD,MAAW/vD,EAAEooF,GAAGxlF,EAAEY,EAAEuuC,KAAKxwC,EAAEd,IAAKsnE,OAAOvkE,EAAExD,KAAEA,EAAEmI,EAAEnI,EAAE4C,IAAKmlE,OAAOvkE,EAASxD,EAAC,CAAC,SAASK,EAAEmD,EAAExD,EAAE4C,GAAG,GAAG,kBAAkB5C,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAOA,EAAEgoF,GAAG,GAAGhoF,EAAEwD,EAAEuuC,KAAKnvC,IAAKmlE,OAAOvkE,EAAExD,EAAE,GAAG,kBAAkBA,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAE4+D,UAAU,KAAK/B,EAAG,OAAOj6D,EAAEqlF,GAAGjoF,EAAEsqB,KAAKtqB,EAAEsG,IAAItG,EAAE0nD,MAAM,KAAKlkD,EAAEuuC,KAAKnvC,IACjfwvD,IAAIq1B,GAAGjkF,EAAE,KAAKxD,GAAG4C,EAAEmlE,OAAOvkE,EAAEZ,EAAE,KAAKo6D,EAAG,OAAOh9D,EAAEmoF,GAAGnoF,EAAEwD,EAAEuuC,KAAKnvC,IAAKmlE,OAAOvkE,EAAExD,EAAE,KAAK09D,EAAiB,OAAOr9D,EAAEmD,GAAEjC,EAAnBvB,EAAE++D,OAAmB/+D,EAAE8+D,UAAUl8D,GAAG,GAAGi+D,GAAG7gE,IAAI89D,EAAG99D,GAAG,OAAOA,EAAEooF,GAAGpoF,EAAEwD,EAAEuuC,KAAKnvC,EAAE,OAAQmlE,OAAOvkE,EAAExD,EAAE4nF,GAAGpkF,EAAExD,EAAE,CAAC,OAAO,IAAI,CAAC,SAASJ,EAAE4D,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAE,OAAOnI,EAAEA,EAAEsG,IAAI,KAAK,GAAG,kBAAkB1D,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAO,OAAOuF,EAAE,KAAKhI,EAAEqD,EAAExD,EAAE,GAAG4C,EAAErB,GAAG,GAAG,kBAAkBqB,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEg8D,UAAU,KAAK/B,EAAG,OAAOj6D,EAAE0D,MAAM6B,EAAEsF,EAAEjK,EAAExD,EAAE4C,EAAErB,GAAG,KAAK,KAAKy7D,EAAG,OAAOp6D,EAAE0D,MAAM6B,EAAE/H,EAAEoD,EAAExD,EAAE4C,EAAErB,GAAG,KAAK,KAAKm8D,EAAG,OAAiB99D,EAAE4D,EACpfxD,GADwemI,EAAEvF,EAAEm8D,OACxen8D,EAAEk8D,UAAUv9D,GAAG,GAAGs/D,GAAGj+D,IAAIk7D,EAAGl7D,GAAG,OAAO,OAAOuF,EAAE,KAAKsrB,EAAEjwB,EAAExD,EAAE4C,EAAErB,EAAE,MAAMqmF,GAAGpkF,EAAEZ,EAAE,CAAC,OAAO,IAAI,CAAC,SAAS2I,EAAE/H,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,GAAG,kBAAkB5G,GAAG,KAAKA,GAAG,kBAAkBA,EAAE,OAAwBpB,EAAEH,EAAnBwD,EAAEA,EAAEgD,IAAI5D,IAAI,KAAW,GAAGrB,EAAE4G,GAAG,GAAG,kBAAkB5G,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEq9D,UAAU,KAAK/B,EAAG,OAA2CpvD,EAAEzN,EAAtCwD,EAAEA,EAAEgD,IAAI,OAAOjF,EAAE+E,IAAI1D,EAAErB,EAAE+E,MAAM,KAAW/E,EAAE4G,GAAG,KAAK60D,EAAG,OAA2C58D,EAAEJ,EAAtCwD,EAAEA,EAAEgD,IAAI,OAAOjF,EAAE+E,IAAI1D,EAAErB,EAAE+E,MAAM,KAAW/E,EAAE4G,GAAG,KAAKu1D,EAAiB,OAAOnyD,EAAE/H,EAAExD,EAAE4C,GAAEnC,EAAvBc,EAAEw9D,OAAuBx9D,EAAEu9D,UAAU32D,GAAG,GAAG04D,GAAGt/D,IAAIu8D,EAAGv8D,GAAG,OAAwBkyB,EAAEzzB,EAAnBwD,EAAEA,EAAEgD,IAAI5D,IAAI,KAAWrB,EAAE4G,EAAE,MAAMy/E,GAAG5nF,EAAEuB,EAAE,CAAC,OAAO,IAAI,CAC9f,SAASwC,EAAEoE,EAAEpI,EAAEI,EAAEsN,GAAG,IAAI,IAAIrN,EAAE,KAAKqzB,EAAE,KAAK1f,EAAEhU,EAAEoe,EAAEpe,EAAE,EAAEuL,EAAE,KAAK,OAAOyI,GAAGoK,EAAEhe,EAAElP,OAAOktB,IAAI,CAACpK,EAAEngB,MAAMuqB,GAAG7S,EAAEyI,EAAEA,EAAE,MAAMzI,EAAEyI,EAAEu0D,QAAQ,IAAIvkE,EAAEnE,EAAEuI,EAAE4L,EAAE5T,EAAEge,GAAG1Q,GAAG,GAAG,OAAO1J,EAAE,CAAC,OAAOgQ,IAAIA,EAAEzI,GAAG,KAAK,CAAC9H,GAAGuQ,GAAG,OAAOhQ,EAAE+jE,WAAW9nE,EAAEmI,EAAE4L,GAAGhU,EAAEU,EAAEsD,EAAEhE,EAAEoe,GAAG,OAAOsV,EAAErzB,EAAE2D,EAAE0vB,EAAE60C,QAAQvkE,EAAE0vB,EAAE1vB,EAAEgQ,EAAEzI,CAAC,CAAC,GAAG6S,IAAIhe,EAAElP,OAAO,OAAO2R,EAAEuF,EAAE4L,GAAG8tE,IAAGN,GAAGp5E,EAAEgW,GAAG/d,EAAE,GAAG,OAAO2T,EAAE,CAAC,KAAKoK,EAAEhe,EAAElP,OAAOktB,IAAkB,QAAdpK,EAAE1T,EAAE8H,EAAEhI,EAAEge,GAAG1Q,MAAc1N,EAAEU,EAAEsT,EAAEhU,EAAEoe,GAAG,OAAOsV,EAAErzB,EAAE2T,EAAE0f,EAAE60C,QAAQv0D,EAAE0f,EAAE1f,GAAc,OAAX8tE,IAAGN,GAAGp5E,EAAEgW,GAAU/d,CAAC,CAAC,IAAI2T,EAAExS,EAAE4G,EAAE4L,GAAGoK,EAAEhe,EAAElP,OAAOktB,IAAsB,QAAlB7S,EAAEC,EAAEwI,EAAE5L,EAAEgW,EAAEhe,EAAEge,GAAG1Q,MAAcjK,GAAG,OAAO8H,EAAEw8D,WAAW/zD,EAAE9L,OAAO,OACvfqD,EAAEhF,IAAI6X,EAAE7S,EAAEhF,KAAKvG,EAAEU,EAAE6K,EAAEvL,EAAEoe,GAAG,OAAOsV,EAAErzB,EAAEkL,EAAEmoB,EAAE60C,QAAQh9D,EAAEmoB,EAAEnoB,GAAuD,OAApD9H,GAAGuQ,EAAErjB,SAAQ,SAAS8S,GAAG,OAAOxD,EAAEmI,EAAE3E,EAAE,IAAGq+E,IAAGN,GAAGp5E,EAAEgW,GAAU/d,CAAC,CAAC,SAASM,EAAEyH,EAAEpI,EAAEI,EAAEsN,GAAG,IAAIrN,EAAE09D,EAAG39D,GAAG,GAAG,oBAAoBC,EAAE,MAAMzN,MAAM2N,EAAE,MAAkB,GAAG,OAAfH,EAAEC,EAAEmwD,KAAKpwD,IAAc,MAAMxN,MAAM2N,EAAE,MAAM,IAAI,IAAIyT,EAAE3T,EAAE,KAAKqzB,EAAE1zB,EAAEoe,EAAEpe,EAAE,EAAEuL,EAAE,KAAKvH,EAAE5D,EAAEqzB,OAAO,OAAOC,IAAI1vB,EAAE6D,KAAKuW,IAAIpa,EAAE5D,EAAEqzB,OAAO,CAACC,EAAE7/B,MAAMuqB,GAAG7S,EAAEmoB,EAAEA,EAAE,MAAMnoB,EAAEmoB,EAAE60C,QAAQ,IAAI5nE,EAAEd,EAAEuI,EAAEsrB,EAAE1vB,EAAEgE,MAAM0F,GAAG,GAAG,OAAO/M,EAAE,CAAC,OAAO+yB,IAAIA,EAAEnoB,GAAG,KAAK,CAAC9H,GAAGiwB,GAAG,OAAO/yB,EAAEonE,WAAW9nE,EAAEmI,EAAEsrB,GAAG1zB,EAAEU,EAAEC,EAAEX,EAAEoe,GAAG,OAAOpK,EAAE3T,EAAEM,EAAEqT,EAAEu0D,QAAQ5nE,EAAEqT,EAAErT,EAAE+yB,EAAEnoB,CAAC,CAAC,GAAGvH,EAAE6D,KAAK,OAAOhF,EAAEuF,EACzfsrB,GAAGouD,IAAGN,GAAGp5E,EAAEgW,GAAG/d,EAAE,GAAG,OAAOqzB,EAAE,CAAC,MAAM1vB,EAAE6D,KAAKuW,IAAIpa,EAAE5D,EAAEqzB,OAAwB,QAAjBzvB,EAAE1D,EAAE8H,EAAEpE,EAAEgE,MAAM0F,MAAc1N,EAAEU,EAAEsD,EAAEhE,EAAEoe,GAAG,OAAOpK,EAAE3T,EAAE2D,EAAEgQ,EAAEu0D,QAAQvkE,EAAEgQ,EAAEhQ,GAAc,OAAX89E,IAAGN,GAAGp5E,EAAEgW,GAAU/d,CAAC,CAAC,IAAIqzB,EAAElyB,EAAE4G,EAAEsrB,IAAI1vB,EAAE6D,KAAKuW,IAAIpa,EAAE5D,EAAEqzB,OAA4B,QAArBzvB,EAAEwH,EAAEkoB,EAAEtrB,EAAEgW,EAAEpa,EAAEgE,MAAM0F,MAAcjK,GAAG,OAAOO,EAAE+jE,WAAWr0C,EAAExrB,OAAO,OAAOlE,EAAEuC,IAAI6X,EAAEpa,EAAEuC,KAAKvG,EAAEU,EAAEsD,EAAEhE,EAAEoe,GAAG,OAAOpK,EAAE3T,EAAE2D,EAAEgQ,EAAEu0D,QAAQvkE,EAAEgQ,EAAEhQ,GAAuD,OAApDP,GAAGiwB,EAAE/iC,SAAQ,SAAS8S,GAAG,OAAOxD,EAAEmI,EAAE3E,EAAE,IAAGq+E,IAAGN,GAAGp5E,EAAEgW,GAAU/d,CAAC,CAG3T,OAH4T,SAASs8E,EAAEl5E,EAAEjC,EAAEd,EAAEN,GAAkF,GAA/E,kBAAkBM,GAAG,OAAOA,GAAGA,EAAE6pB,OAAO2yC,GAAI,OAAOx8D,EAAE6F,MAAM7F,EAAEA,EAAEinD,MAAMr+B,UAAa,kBAAkB5oB,GAAG,OAAOA,EAAE,CAAC,OAAOA,EAAEm+D,UAAU,KAAK/B,EAAGr5D,EAAE,CAAC,IAAI,IAAIiK,EAC7hBhN,EAAE6F,IAAIlG,EAAEmB,EAAE,OAAOnB,GAAG,CAAC,GAAGA,EAAEkG,MAAMmH,EAAE,CAAU,IAATA,EAAEhN,EAAE6pB,QAAY2yC,GAAI,GAAG,IAAI78D,EAAE2vD,IAAI,CAACntD,EAAEY,EAAEpD,EAAEkoE,UAAS/mE,EAAE4G,EAAE/H,EAAEK,EAAEinD,MAAMr+B,WAAY0+C,OAAOvkE,EAAEA,EAAEjC,EAAE,MAAMiC,CAAC,OAAO,GAAGpD,EAAE6hF,cAAcx0E,GAAG,kBAAkBA,GAAG,OAAOA,GAAGA,EAAEmxD,WAAWlB,GAAImqB,GAAGp6E,KAAKrN,EAAEkqB,KAAK,CAAC1nB,EAAEY,EAAEpD,EAAEkoE,UAAS/mE,EAAE4G,EAAE/H,EAAEK,EAAEinD,QAAS0K,IAAIq1B,GAAGjkF,EAAEpD,EAAEK,GAAGc,EAAEwmE,OAAOvkE,EAAEA,EAAEjC,EAAE,MAAMiC,CAAC,CAACZ,EAAEY,EAAEpD,GAAG,KAAK,CAAMJ,EAAEwD,EAAEpD,GAAGA,EAAEA,EAAEkoE,OAAO,CAAC7nE,EAAE6pB,OAAO2yC,IAAI17D,EAAE6mF,GAAG3nF,EAAEinD,MAAMr+B,SAAS7lB,EAAEuuC,KAAK5xC,EAAEM,EAAE6F,MAAOyhE,OAAOvkE,EAAEA,EAAEjC,KAAIpB,EAAE8nF,GAAGxnF,EAAE6pB,KAAK7pB,EAAE6F,IAAI7F,EAAEinD,MAAM,KAAKlkD,EAAEuuC,KAAK5xC,IAAKiyD,IAAIq1B,GAAGjkF,EAAEjC,EAAEd,GAAGN,EAAE4nE,OAAOvkE,EAAEA,EAAErD,EAAE,CAAC,OAAOJ,EAAEyD,GAAG,KAAKw5D,EAAGx5D,EAAE,CAAC,IAAIpD,EAAEK,EAAE6F,IAAI,OACzf/E,GAAG,CAAC,GAAGA,EAAE+E,MAAMlG,EAAC,CAAC,GAAG,IAAImB,EAAEwuD,KAAKxuD,EAAEmlE,UAAUoG,gBAAgBrsE,EAAEqsE,eAAevrE,EAAEmlE,UAAUwhB,iBAAiBznF,EAAEynF,eAAe,CAACtlF,EAAEY,EAAEjC,EAAE+mE,UAAS/mE,EAAE4G,EAAE5G,EAAEd,EAAE4oB,UAAU,KAAM0+C,OAAOvkE,EAAEA,EAAEjC,EAAE,MAAMiC,CAAC,CAAMZ,EAAEY,EAAEjC,GAAG,KAAM,CAAKvB,EAAEwD,EAAEjC,GAAGA,EAAEA,EAAE+mE,OAAO,EAAC/mE,EAAE4mF,GAAG1nF,EAAE+C,EAAEuuC,KAAK5xC,IAAK4nE,OAAOvkE,EAAEA,EAAEjC,CAAC,CAAC,OAAOxB,EAAEyD,GAAG,KAAKk6D,EAAG,OAAiBgf,EAAEl5E,EAAEjC,GAAdnB,EAAEK,EAAEs+D,OAAct+D,EAAEq+D,UAAU3+D,GAAG,GAAG0gE,GAAGpgE,GAAG,OAAOsD,EAAEP,EAAEjC,EAAEd,EAAEN,GAAG,GAAG29D,EAAGr9D,GAAG,OAAOC,EAAE8C,EAAEjC,EAAEd,EAAEN,GAAGynF,GAAGpkF,EAAE/C,EAAE,CAAC,MAAM,kBAAkBA,GAAG,KAAKA,GAAG,kBAAkBA,GAAGA,EAAE,GAAGA,EAAE,OAAOc,GAAG,IAAIA,EAAEwuD,KAAKntD,EAAEY,EAAEjC,EAAE+mE,UAAS/mE,EAAE4G,EAAE5G,EAAEd,IAAKsnE,OAAOvkE,EAAEA,EAAEjC,IACnfqB,EAAEY,EAAEjC,IAAGA,EAAEymF,GAAGvnF,EAAE+C,EAAEuuC,KAAK5xC,IAAK4nE,OAAOvkE,EAAEA,EAAEjC,GAAGxB,EAAEyD,IAAIZ,EAAEY,EAAEjC,EAAE,CAAS,CAAC,IAAI8mF,GAAGP,IAAG,GAAIQ,GAAGR,IAAG,GAAIS,GAAG,CAAC,EAAEC,GAAGnJ,GAAGkJ,IAAIE,GAAGpJ,GAAGkJ,IAAIG,GAAGrJ,GAAGkJ,IAAI,SAASI,GAAGnlF,GAAG,GAAGA,IAAI+kF,GAAG,MAAM51F,MAAM2N,EAAE,MAAM,OAAOkD,CAAC,CAAC,SAASolF,GAAGplF,EAAExD,GAAyC,OAAtCu/E,GAAEmJ,GAAG1oF,GAAGu/E,GAAEkJ,GAAGjlF,GAAG+7E,GAAEiJ,GAAGD,IAAI/kF,EAAExD,EAAEkiE,UAAmB,KAAK,EAAE,KAAK,GAAGliE,GAAGA,EAAEA,EAAEk5E,iBAAiBl5E,EAAE2hE,aAAaH,GAAG,KAAK,IAAI,MAAM,QAAkExhE,EAAEwhE,GAArCxhE,GAAvBwD,EAAE,IAAIA,EAAExD,EAAE+1D,WAAW/1D,GAAM2hE,cAAc,KAAKn+D,EAAEA,EAAEqlF,SAAkBvJ,GAAEkJ,IAAIjJ,GAAEiJ,GAAGxoF,EAAE,CAAC,SAAS8oF,KAAKxJ,GAAEkJ,IAAIlJ,GAAEmJ,IAAInJ,GAAEoJ,GAAG,CACnb,SAASK,GAAGvlF,GAAGmlF,GAAGD,GAAG7kF,SAAS,IAAI7D,EAAE2oF,GAAGH,GAAG3kF,SAAajB,EAAE4+D,GAAGxhE,EAAEwD,EAAE8mB,MAAMtqB,IAAI4C,IAAI28E,GAAEkJ,GAAGjlF,GAAG+7E,GAAEiJ,GAAG5lF,GAAG,CAAC,SAASomF,GAAGxlF,GAAGilF,GAAG5kF,UAAUL,IAAI87E,GAAEkJ,IAAIlJ,GAAEmJ,IAAI,CAAC,IAAIQ,GAAE5J,GAAG,GACrJ,SAAS6J,GAAG1lF,GAAG,IAAI,IAAIxD,EAAEwD,EAAE,OAAOxD,GAAG,CAAC,GAAG,KAAKA,EAAE+vD,IAAI,CAAC,IAAIntD,EAAE5C,EAAEkoE,cAAc,GAAG,OAAOtlE,IAAmB,QAAfA,EAAEA,EAAEulE,aAAqB,OAAOvlE,EAAEiC,MAAM,OAAOjC,EAAEiC,MAAM,OAAO7E,CAAC,MAAM,GAAG,KAAKA,EAAE+vD,UAAK,IAAS/vD,EAAE2iF,cAAcwG,aAAa,GAAG,KAAa,IAARnpF,EAAEgoE,OAAW,OAAOhoE,OAAO,GAAG,OAAOA,EAAEmwD,MAAM,CAACnwD,EAAEmwD,MAAM4X,OAAO/nE,EAAEA,EAAEA,EAAEmwD,MAAM,QAAQ,CAAC,GAAGnwD,IAAIwD,EAAE,MAAM,KAAK,OAAOxD,EAAEsoE,SAAS,CAAC,GAAG,OAAOtoE,EAAE+nE,QAAQ/nE,EAAE+nE,SAASvkE,EAAE,OAAO,KAAKxD,EAAEA,EAAE+nE,MAAM,CAAC/nE,EAAEsoE,QAAQP,OAAO/nE,EAAE+nE,OAAO/nE,EAAEA,EAAEsoE,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI8gB,GAAG,GACrc,SAASC,KAAK,IAAI,IAAI7lF,EAAE,EAAEA,EAAE4lF,GAAGn4F,OAAOuS,IAAI4lF,GAAG5lF,GAAG8lF,8BAA8B,KAAKF,GAAGn4F,OAAO,CAAC,CAAC,IAAIs4F,GAAGrpE,EAAGspE,uBAAuBC,GAAGvpE,EAAGotD,wBAAwBoc,GAAG,EAAEC,GAAE,KAAKC,GAAE,KAAKC,GAAE,KAAKC,IAAG,EAAGC,IAAG,EAAGC,GAAG,EAAEC,GAAG,EAAE,SAASC,KAAI,MAAMv3F,MAAM2N,EAAE,KAAM,CAAC,SAAS6pF,GAAG3mF,EAAExD,GAAG,GAAG,OAAOA,EAAE,OAAM,EAAG,IAAI,IAAI4C,EAAE,EAAEA,EAAE5C,EAAE/O,QAAQ2R,EAAEY,EAAEvS,OAAO2R,IAAI,IAAIu1E,GAAG30E,EAAEZ,GAAG5C,EAAE4C,IAAI,OAAM,EAAG,OAAM,CAAE,CAChW,SAASwnF,GAAG5mF,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,GAAyH,GAAtHipF,GAAGjpF,EAAEkpF,GAAE3pF,EAAEA,EAAEkoE,cAAc,KAAKloE,EAAEykF,YAAY,KAAKzkF,EAAE8jF,MAAM,EAAEyF,GAAG1lF,QAAQ,OAAOL,GAAG,OAAOA,EAAE0kE,cAAcmiB,GAAGC,GAAG9mF,EAAEZ,EAAErB,EAAE4G,GAAM4hF,GAAG,CAACtpF,EAAE,EAAE,EAAE,CAAY,GAAXspF,IAAG,EAAGC,GAAG,EAAK,IAAIvpF,EAAE,MAAM9N,MAAM2N,EAAE,MAAMG,GAAG,EAAEopF,GAAED,GAAE,KAAK5pF,EAAEykF,YAAY,KAAK8E,GAAG1lF,QAAQ0mF,GAAG/mF,EAAEZ,EAAErB,EAAE4G,EAAE,OAAO4hF,GAAG,CAA+D,GAA9DR,GAAG1lF,QAAQ2mF,GAAGxqF,EAAE,OAAO4pF,IAAG,OAAOA,GAAEp2D,KAAKk2D,GAAG,EAAEG,GAAED,GAAED,GAAE,KAAKG,IAAG,EAAM9pF,EAAE,MAAMrN,MAAM2N,EAAE,MAAM,OAAOkD,CAAC,CAAC,SAASinF,KAAK,IAAIjnF,EAAE,IAAIwmF,GAAQ,OAALA,GAAG,EAASxmF,CAAC,CAC/Y,SAASuC,KAAK,IAAIvC,EAAE,CAAC0kE,cAAc,KAAKwc,UAAU,KAAKgG,UAAU,KAAKziE,MAAM,KAAKuL,KAAK,MAA8C,OAAxC,OAAOq2D,GAAEF,GAAEzhB,cAAc2hB,GAAErmF,EAAEqmF,GAAEA,GAAEr2D,KAAKhwB,EAASqmF,EAAC,CAAC,SAASc,KAAK,GAAG,OAAOf,GAAE,CAAC,IAAIpmF,EAAEmmF,GAAE7hB,UAAUtkE,EAAE,OAAOA,EAAEA,EAAE0kE,cAAc,IAAI,MAAM1kE,EAAEomF,GAAEp2D,KAAK,IAAIxzB,EAAE,OAAO6pF,GAAEF,GAAEzhB,cAAc2hB,GAAEr2D,KAAK,GAAG,OAAOxzB,EAAE6pF,GAAE7pF,EAAE4pF,GAAEpmF,MAAM,CAAC,GAAG,OAAOA,EAAE,MAAM7Q,MAAM2N,EAAE,MAAUkD,EAAE,CAAC0kE,eAAP0hB,GAAEpmF,GAAqB0kE,cAAcwc,UAAUkF,GAAElF,UAAUgG,UAAUd,GAAEc,UAAUziE,MAAM2hE,GAAE3hE,MAAMuL,KAAK,MAAM,OAAOq2D,GAAEF,GAAEzhB,cAAc2hB,GAAErmF,EAAEqmF,GAAEA,GAAEr2D,KAAKhwB,CAAC,CAAC,OAAOqmF,EAAC,CACje,SAASe,GAAGpnF,EAAExD,GAAG,MAAM,oBAAoBA,EAAEA,EAAEwD,GAAGxD,CAAC,CACnD,SAAS6qF,GAAGrnF,GAAG,IAAIxD,EAAE2qF,KAAK/nF,EAAE5C,EAAEioB,MAAM,GAAG,OAAOrlB,EAAE,MAAMjQ,MAAM2N,EAAE,MAAMsC,EAAEkoF,oBAAoBtnF,EAAE,IAAIjC,EAAEqoF,GAAEzhF,EAAE5G,EAAEmpF,UAAUjqF,EAAEmC,EAAEkiF,QAAQ,GAAG,OAAOrkF,EAAE,CAAC,GAAG,OAAO0H,EAAE,CAAC,IAAIpI,EAAEoI,EAAEqrB,KAAKrrB,EAAEqrB,KAAK/yB,EAAE+yB,KAAK/yB,EAAE+yB,KAAKzzB,CAAC,CAACwB,EAAEmpF,UAAUviF,EAAE1H,EAAEmC,EAAEkiF,QAAQ,IAAI,CAAC,GAAG,OAAO38E,EAAE,CAAC1H,EAAE0H,EAAEqrB,KAAKjyB,EAAEA,EAAEmjF,UAAU,IAAIvkF,EAAEJ,EAAE,KAAK0N,EAAE,KAAKrN,EAAEK,EAAE,EAAE,CAAC,IAAIgzB,EAAErzB,EAAE+kF,KAAK,IAAIuE,GAAGj2D,KAAKA,EAAE,OAAOhmB,IAAIA,EAAEA,EAAE+lB,KAAK,CAAC2xD,KAAK,EAAE4F,OAAO3qF,EAAE2qF,OAAOC,cAAc5qF,EAAE4qF,cAAcC,WAAW7qF,EAAE6qF,WAAWz3D,KAAK,OAAOjyB,EAAEnB,EAAE4qF,cAAc5qF,EAAE6qF,WAAWznF,EAAEjC,EAAEnB,EAAE2qF,YAAY,CAAC,IAAI1qF,EAAE,CAAC8kF,KAAK1xD,EAAEs3D,OAAO3qF,EAAE2qF,OAAOC,cAAc5qF,EAAE4qF,cACngBC,WAAW7qF,EAAE6qF,WAAWz3D,KAAK,MAAM,OAAO/lB,GAAGtN,EAAEsN,EAAEpN,EAAEN,EAAEwB,GAAGkM,EAAEA,EAAE+lB,KAAKnzB,EAAEspF,GAAE7F,OAAOrwD,EAAEiyD,IAAIjyD,CAAC,CAACrzB,EAAEA,EAAEozB,IAAI,OAAO,OAAOpzB,GAAGA,IAAIK,GAAG,OAAOgN,EAAE1N,EAAEwB,EAAEkM,EAAE+lB,KAAKrzB,EAAEg4E,GAAG52E,EAAEvB,EAAEkoE,iBAAiB6b,IAAG,GAAI/jF,EAAEkoE,cAAc3mE,EAAEvB,EAAE0kF,UAAU3kF,EAAEC,EAAE0qF,UAAUj9E,EAAE7K,EAAEsoF,kBAAkB3pF,CAAC,CAAiB,GAAG,QAAnBiC,EAAEZ,EAAEyhF,aAAwB,CAACl8E,EAAE3E,EAAE,GAAG/C,EAAE0H,EAAEg9E,KAAKwE,GAAE7F,OAAOrjF,EAAEilF,IAAIjlF,EAAE0H,EAAEA,EAAEqrB,WAAWrrB,IAAI3E,EAAE,MAAM,OAAO2E,IAAIvF,EAAEkhF,MAAM,GAAG,MAAM,CAAC9jF,EAAEkoE,cAActlE,EAAEuoF,SAAS,CAC9X,SAASC,GAAG5nF,GAAG,IAAIxD,EAAE2qF,KAAK/nF,EAAE5C,EAAEioB,MAAM,GAAG,OAAOrlB,EAAE,MAAMjQ,MAAM2N,EAAE,MAAMsC,EAAEkoF,oBAAoBtnF,EAAE,IAAIjC,EAAEqB,EAAEuoF,SAAShjF,EAAEvF,EAAEkiF,QAAQrkF,EAAET,EAAEkoE,cAAc,GAAG,OAAO//D,EAAE,CAACvF,EAAEkiF,QAAQ,KAAK,IAAI/kF,EAAEoI,EAAEA,EAAEqrB,KAAK,GAAG/yB,EAAE+C,EAAE/C,EAAEV,EAAEgrF,QAAQhrF,EAAEA,EAAEyzB,WAAWzzB,IAAIoI,GAAGgwE,GAAG13E,EAAET,EAAEkoE,iBAAiB6b,IAAG,GAAI/jF,EAAEkoE,cAAcznE,EAAE,OAAOT,EAAE0qF,YAAY1qF,EAAE0kF,UAAUjkF,GAAGmC,EAAEsoF,kBAAkBzqF,CAAC,CAAC,MAAM,CAACA,EAAEc,EAAE,CAAC,SAAS8pF,KAAK,CACpW,SAASz7C,GAAGpsC,EAAExD,GAAG,IAAI4C,EAAE+mF,GAAEpoF,EAAEopF,KAAKxiF,EAAEnI,IAAIS,GAAG03E,GAAG52E,EAAE2mE,cAAc//D,GAAsE,GAAnE1H,IAAIc,EAAE2mE,cAAc//D,EAAE47E,IAAG,GAAIxiF,EAAEA,EAAE0mB,MAAMqjE,GAAGC,GAAGhP,KAAK,KAAK35E,EAAErB,EAAEiC,GAAG,CAACA,IAAOjC,EAAEiqF,cAAcxrF,GAAGS,GAAG,OAAOopF,IAAuB,EAApBA,GAAE3hB,cAAcnY,IAAM,CAAuD,GAAtDntD,EAAEolE,OAAO,KAAKyjB,GAAG,EAAEC,GAAGnP,KAAK,KAAK35E,EAAErB,EAAE4G,EAAEnI,QAAG,EAAO,MAAS,OAAO2rF,GAAE,MAAMh5F,MAAM2N,EAAE,MAAM,KAAQ,GAAHopF,KAAQkC,GAAGhpF,EAAE5C,EAAEmI,EAAE,CAAC,OAAOA,CAAC,CAAC,SAASyjF,GAAGpoF,EAAExD,EAAE4C,GAAGY,EAAEwkE,OAAO,MAAMxkE,EAAE,CAACgoF,YAAYxrF,EAAE+H,MAAMnF,GAAmB,QAAhB5C,EAAE2pF,GAAElF,cAAsBzkF,EAAE,CAAC6rF,WAAW,KAAKC,OAAO,MAAMnC,GAAElF,YAAYzkF,EAAEA,EAAE8rF,OAAO,CAACtoF,IAAgB,QAAXZ,EAAE5C,EAAE8rF,QAAgB9rF,EAAE8rF,OAAO,CAACtoF,GAAGZ,EAAE/R,KAAK2S,EAAG,CAClf,SAASkoF,GAAGloF,EAAExD,EAAE4C,EAAErB,GAAGvB,EAAE+H,MAAMnF,EAAE5C,EAAEwrF,YAAYjqF,EAAEwqF,GAAG/rF,IAAIgsF,GAAGxoF,EAAE,CAAC,SAAS+nF,GAAG/nF,EAAExD,EAAE4C,GAAG,OAAOA,GAAE,WAAWmpF,GAAG/rF,IAAIgsF,GAAGxoF,EAAE,GAAE,CAAC,SAASuoF,GAAGvoF,GAAG,IAAIxD,EAAEwD,EAAEgoF,YAAYhoF,EAAEA,EAAEuE,MAAM,IAAI,IAAInF,EAAE5C,IAAI,OAAOm4E,GAAG30E,EAAEZ,EAAE,CAAC,MAAMrB,GAAG,OAAM,CAAE,CAAC,CAAC,SAASyqF,GAAGxoF,GAAG,IAAIxD,EAAEskF,GAAG9gF,EAAE,GAAG,OAAOxD,GAAGsmF,GAAGtmF,EAAEwD,EAAE,GAAG,EAAE,CAClQ,SAASyoF,GAAGzoF,GAAG,IAAIxD,EAAE+F,KAA8M,MAAzM,oBAAoBvC,IAAIA,EAAEA,KAAKxD,EAAEkoE,cAAcloE,EAAE0kF,UAAUlhF,EAAEA,EAAE,CAACshF,QAAQ,KAAKT,YAAY,KAAKP,MAAM,EAAEqH,SAAS,KAAKL,oBAAoBF,GAAGM,kBAAkB1nF,GAAGxD,EAAEioB,MAAMzkB,EAAEA,EAAEA,EAAE2nF,SAASe,GAAG3P,KAAK,KAAKoN,GAAEnmF,GAAS,CAACxD,EAAEkoE,cAAc1kE,EAAE,CAC5P,SAASioF,GAAGjoF,EAAExD,EAAE4C,EAAErB,GAA8O,OAA3OiC,EAAE,CAACusD,IAAIvsD,EAAEL,OAAOnD,EAAEmsF,QAAQvpF,EAAEwpF,KAAK7qF,EAAEiyB,KAAK,MAAsB,QAAhBxzB,EAAE2pF,GAAElF,cAAsBzkF,EAAE,CAAC6rF,WAAW,KAAKC,OAAO,MAAMnC,GAAElF,YAAYzkF,EAAEA,EAAE6rF,WAAWroF,EAAEgwB,KAAKhwB,GAAmB,QAAfZ,EAAE5C,EAAE6rF,YAAoB7rF,EAAE6rF,WAAWroF,EAAEgwB,KAAKhwB,GAAGjC,EAAEqB,EAAE4wB,KAAK5wB,EAAE4wB,KAAKhwB,EAAEA,EAAEgwB,KAAKjyB,EAAEvB,EAAE6rF,WAAWroF,GAAWA,CAAC,CAAC,SAAS6rB,KAAK,OAAOs7D,KAAKziB,aAAa,CAAC,SAASlyB,GAAGxyC,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAEpC,KAAK4jF,GAAE3hB,OAAOxkE,EAAE2E,EAAE+/D,cAAcujB,GAAG,EAAEzrF,EAAE4C,OAAE,OAAO,IAASrB,EAAE,KAAKA,EAAE,CAC9Y,SAAS8qF,GAAG7oF,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAEwiF,KAAKppF,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAId,OAAE,EAAO,GAAG,OAAOmpF,GAAE,CAAC,IAAI7pF,EAAE6pF,GAAE1hB,cAA0B,GAAZznE,EAAEV,EAAEosF,QAAW,OAAO5qF,GAAG4oF,GAAG5oF,EAAExB,EAAEqsF,MAAmC,YAA5BjkF,EAAE+/D,cAAcujB,GAAGzrF,EAAE4C,EAAEnC,EAAEc,GAAU,CAACooF,GAAE3hB,OAAOxkE,EAAE2E,EAAE+/D,cAAcujB,GAAG,EAAEzrF,EAAE4C,EAAEnC,EAAEc,EAAE,CAAC,SAASyH,GAAGxF,EAAExD,GAAG,OAAOg2C,GAAG,QAAQ,EAAExyC,EAAExD,EAAE,CAAC,SAASsrF,GAAG9nF,EAAExD,GAAG,OAAOqsF,GAAG,KAAK,EAAE7oF,EAAExD,EAAE,CAAC,SAASssF,GAAG9oF,EAAExD,GAAG,OAAOqsF,GAAG,EAAE,EAAE7oF,EAAExD,EAAE,CAAC,SAASusF,GAAG/oF,EAAExD,GAAG,OAAOqsF,GAAG,EAAE,EAAE7oF,EAAExD,EAAE,CAChX,SAASwsF,GAAGhpF,EAAExD,GAAG,MAAG,oBAAoBA,GAASwD,EAAEA,IAAIxD,EAAEwD,GAAG,WAAWxD,EAAE,KAAK,GAAK,OAAOA,QAAG,IAASA,GAASwD,EAAEA,IAAIxD,EAAE6D,QAAQL,EAAE,WAAWxD,EAAE6D,QAAQ,IAAI,QAA1E,CAA2E,CAAC,SAAS4oF,GAAGjpF,EAAExD,EAAE4C,GAA6C,OAA1CA,EAAE,OAAOA,QAAG,IAASA,EAAEA,EAAEnR,OAAO,CAAC+R,IAAI,KAAY6oF,GAAG,EAAE,EAAEG,GAAGjQ,KAAK,KAAKv8E,EAAEwD,GAAGZ,EAAE,CAAC,SAAS8pF,KAAK,CAAC,SAASC,GAAGnpF,EAAExD,GAAG,IAAI4C,EAAE+nF,KAAK3qF,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAIuB,EAAEqB,EAAEslE,cAAc,OAAG,OAAO3mE,GAAG,OAAOvB,GAAGmqF,GAAGnqF,EAAEuB,EAAE,IAAWA,EAAE,IAAGqB,EAAEslE,cAAc,CAAC1kE,EAAExD,GAAUwD,EAAC,CAC7Z,SAASopF,GAAGppF,EAAExD,GAAG,IAAI4C,EAAE+nF,KAAK3qF,OAAE,IAASA,EAAE,KAAKA,EAAE,IAAIuB,EAAEqB,EAAEslE,cAAc,OAAG,OAAO3mE,GAAG,OAAOvB,GAAGmqF,GAAGnqF,EAAEuB,EAAE,IAAWA,EAAE,IAAGiC,EAAEA,IAAIZ,EAAEslE,cAAc,CAAC1kE,EAAExD,GAAUwD,EAAC,CAAC,SAASqpF,GAAGrpF,EAAExD,EAAE4C,GAAG,OAAG,KAAQ,GAAH8mF,KAAclmF,EAAEkhF,YAAYlhF,EAAEkhF,WAAU,EAAGX,IAAG,GAAIvgF,EAAE0kE,cAActlE,IAAEu1E,GAAGv1E,EAAE5C,KAAK4C,EAAEkoE,KAAK6e,GAAE7F,OAAOlhF,EAAE8iF,IAAI9iF,EAAEY,EAAEkhF,WAAU,GAAW1kF,EAAC,CAAC,SAAS8sF,GAAGtpF,EAAExD,GAAG,IAAI4C,EAAE63C,GAAEA,GAAE,IAAI73C,GAAG,EAAEA,EAAEA,EAAE,EAAEY,GAAE,GAAI,IAAIjC,EAAEkoF,GAAGhc,WAAWgc,GAAGhc,WAAW,CAAC,EAAE,IAAIjqE,GAAE,GAAIxD,GAAG,CAAC,QAAQy6C,GAAE73C,EAAE6mF,GAAGhc,WAAWlsE,CAAC,CAAC,CAAC,SAASwrF,KAAK,OAAOpC,KAAKziB,aAAa,CAC1d,SAAS8kB,GAAGxpF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAE8kF,GAAG7iF,GAAkE,GAA/DZ,EAAE,CAACuiF,KAAK5jF,EAAEwpF,OAAOnoF,EAAEooF,eAAc,EAAGC,WAAW,KAAKz3D,KAAK,MAASy5D,GAAGzpF,GAAG0pF,GAAGltF,EAAE4C,QAAQ,GAAiB,QAAdA,EAAEwhF,GAAG5gF,EAAExD,EAAE4C,EAAErB,IAAY,CAAW+kF,GAAG1jF,EAAEY,EAAEjC,EAAX6kF,MAAgB+G,GAAGvqF,EAAE5C,EAAEuB,EAAE,CAAC,CAC/K,SAAS2qF,GAAG1oF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAE8kF,GAAG7iF,GAAG2E,EAAE,CAACg9E,KAAK5jF,EAAEwpF,OAAOnoF,EAAEooF,eAAc,EAAGC,WAAW,KAAKz3D,KAAK,MAAM,GAAGy5D,GAAGzpF,GAAG0pF,GAAGltF,EAAEmI,OAAO,CAAC,IAAI1H,EAAE+C,EAAEskE,UAAU,GAAG,IAAItkE,EAAEsgF,QAAQ,OAAOrjF,GAAG,IAAIA,EAAEqjF,QAAiC,QAAxBrjF,EAAET,EAAE8qF,qBAA8B,IAAI,IAAI/qF,EAAEC,EAAEkrF,kBAAkB/qF,EAAEM,EAAEV,EAAE6C,GAAqC,GAAlCuF,EAAE6iF,eAAc,EAAG7iF,EAAE8iF,WAAW9qF,EAAKg4E,GAAGh4E,EAAEJ,GAAG,CAAC,IAAI0N,EAAEzN,EAAEqkF,YAA+E,OAAnE,OAAO52E,GAAGtF,EAAEqrB,KAAKrrB,EAAEg8E,GAAGnkF,KAAKmI,EAAEqrB,KAAK/lB,EAAE+lB,KAAK/lB,EAAE+lB,KAAKrrB,QAAGnI,EAAEqkF,YAAYl8E,EAAQ,CAAC,CAAC,MAAM/H,GAAG,CAAwB,QAAdwC,EAAEwhF,GAAG5gF,EAAExD,EAAEmI,EAAE5G,MAAoB+kF,GAAG1jF,EAAEY,EAAEjC,EAAb4G,EAAEi+E,MAAgB+G,GAAGvqF,EAAE5C,EAAEuB,GAAG,CAAC,CAC/c,SAAS0rF,GAAGzpF,GAAG,IAAIxD,EAAEwD,EAAEskE,UAAU,OAAOtkE,IAAImmF,IAAG,OAAO3pF,GAAGA,IAAI2pF,EAAC,CAAC,SAASuD,GAAG1pF,EAAExD,GAAG+pF,GAAGD,IAAG,EAAG,IAAIlnF,EAAEY,EAAEshF,QAAQ,OAAOliF,EAAE5C,EAAEwzB,KAAKxzB,GAAGA,EAAEwzB,KAAK5wB,EAAE4wB,KAAK5wB,EAAE4wB,KAAKxzB,GAAGwD,EAAEshF,QAAQ9kF,CAAC,CAAC,SAASmtF,GAAG3pF,EAAExD,EAAE4C,GAAG,GAAG,KAAO,QAAFA,GAAW,CAAC,IAAIrB,EAAEvB,EAAE8jF,MAAwBlhF,GAAlBrB,GAAGiC,EAAE+mE,aAAkBvqE,EAAE8jF,MAAMlhF,EAAEsoE,GAAG1nE,EAAEZ,EAAE,CAAC,CAC9P,IAAI4nF,GAAG,CAAC4C,YAAYpJ,GAAGqJ,YAAYnD,GAAEoD,WAAWpD,GAAEqD,UAAUrD,GAAEsD,oBAAoBtD,GAAEuD,mBAAmBvD,GAAEwD,gBAAgBxD,GAAEyD,QAAQzD,GAAE0D,WAAW1D,GAAE2D,OAAO3D,GAAE4D,SAAS5D,GAAE6D,cAAc7D,GAAE8D,iBAAiB9D,GAAE+D,cAAc/D,GAAEgE,iBAAiBhE,GAAEiE,qBAAqBjE,GAAEkE,MAAMlE,GAAEmE,0BAAyB,GAAIhE,GAAG,CAAC+C,YAAYpJ,GAAGqJ,YAAY,SAAS7pF,EAAExD,GAA4C,OAAzC+F,KAAKmiE,cAAc,CAAC1kE,OAAE,IAASxD,EAAE,KAAKA,GAAUwD,CAAC,EAAE8pF,WAAWtJ,GAAGuJ,UAAUvkF,GAAGwkF,oBAAoB,SAAShqF,EAAExD,EAAE4C,GAA6C,OAA1CA,EAAE,OAAOA,QAAG,IAASA,EAAEA,EAAEnR,OAAO,CAAC+R,IAAI,KAAYwyC,GAAG,QAC3f,EAAEw2C,GAAGjQ,KAAK,KAAKv8E,EAAEwD,GAAGZ,EAAE,EAAE8qF,gBAAgB,SAASlqF,EAAExD,GAAG,OAAOg2C,GAAG,QAAQ,EAAExyC,EAAExD,EAAE,EAAEytF,mBAAmB,SAASjqF,EAAExD,GAAG,OAAOg2C,GAAG,EAAE,EAAExyC,EAAExD,EAAE,EAAE2tF,QAAQ,SAASnqF,EAAExD,GAAG,IAAI4C,EAAEmD,KAAqD,OAAhD/F,OAAE,IAASA,EAAE,KAAKA,EAAEwD,EAAEA,IAAIZ,EAAEslE,cAAc,CAAC1kE,EAAExD,GAAUwD,CAAC,EAAEoqF,WAAW,SAASpqF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEwE,KAAkM,OAA7L/F,OAAE,IAAS4C,EAAEA,EAAE5C,GAAGA,EAAEuB,EAAE2mE,cAAc3mE,EAAEmjF,UAAU1kF,EAAEwD,EAAE,CAACshF,QAAQ,KAAKT,YAAY,KAAKP,MAAM,EAAEqH,SAAS,KAAKL,oBAAoBtnF,EAAE0nF,kBAAkBlrF,GAAGuB,EAAE0mB,MAAMzkB,EAAEA,EAAEA,EAAE2nF,SAAS6B,GAAGzQ,KAAK,KAAKoN,GAAEnmF,GAAS,CAACjC,EAAE2mE,cAAc1kE,EAAE,EAAEqqF,OAAO,SAASrqF,GAC3d,OAAdA,EAAE,CAACK,QAAQL,GAAhBuC,KAA4BmiE,cAAc1kE,CAAC,EAAEsqF,SAAS7B,GAAG8B,cAAcrB,GAAGsB,iBAAiB,SAASxqF,GAAG,OAAOuC,KAAKmiE,cAAc1kE,CAAC,EAAEyqF,cAAc,WAAW,IAAIzqF,EAAEyoF,IAAG,GAAIjsF,EAAEwD,EAAE,GAA6C,OAA1CA,EAAEspF,GAAGvQ,KAAK,KAAK/4E,EAAE,IAAIuC,KAAKmiE,cAAc1kE,EAAQ,CAACxD,EAAEwD,EAAE,EAAE0qF,iBAAiB,WAAW,EAAEC,qBAAqB,SAAS3qF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEooF,GAAExhF,EAAEpC,KAAK,GAAG87E,GAAE,CAAC,QAAG,IAASj/E,EAAE,MAAMjQ,MAAM2N,EAAE,MAAMsC,EAAEA,GAAG,KAAK,CAAO,GAANA,EAAE5C,IAAO,OAAO2rF,GAAE,MAAMh5F,MAAM2N,EAAE,MAAM,KAAQ,GAAHopF,KAAQkC,GAAGrqF,EAAEvB,EAAE4C,EAAE,CAACuF,EAAE+/D,cAActlE,EAAE,IAAInC,EAAE,CAACsH,MAAMnF,EAAE4oF,YAAYxrF,GACvZ,OAD0ZmI,EAAE8f,MAAMxnB,EAAEuI,GAAGuiF,GAAGhP,KAAK,KAAKh7E,EACpfd,EAAE+C,GAAG,CAACA,IAAIjC,EAAEymE,OAAO,KAAKyjB,GAAG,EAAEC,GAAGnP,KAAK,KAAKh7E,EAAEd,EAAEmC,EAAE5C,QAAG,EAAO,MAAa4C,CAAC,EAAEwrF,MAAM,WAAW,IAAI5qF,EAAEuC,KAAK/F,EAAE2rF,GAAE2C,iBAAiB,GAAGzM,GAAE,CAAC,IAAIj/E,EAAE0+E,GAAkDthF,EAAE,IAAIA,EAAE,KAA9C4C,GAAHy+E,KAAU,GAAG,GAAGtX,GAAhBsX,IAAsB,IAAIjgF,SAAS,IAAIwB,GAAuB,GAAPA,EAAEonF,QAAWhqF,GAAG,IAAI4C,EAAExB,SAAS,KAAKpB,GAAG,GAAG,MAAaA,EAAE,IAAIA,EAAE,KAAf4C,EAAEqnF,MAAmB7oF,SAAS,IAAI,IAAI,OAAOoC,EAAE0kE,cAAcloE,CAAC,EAAEquF,0BAAyB,GAAI/D,GAAG,CAAC8C,YAAYpJ,GAAGqJ,YAAYV,GAAGW,WAAWtJ,GAAGuJ,UAAUjC,GAAGkC,oBAAoBf,GAAGgB,mBAAmBnB,GAAGoB,gBAAgBnB,GAAGoB,QAAQf,GAAGgB,WAAW/C,GAAGgD,OAAOx+D,GAAGy+D,SAAS,WAAW,OAAOjD,GAAGD,GAAG,EACrhBmD,cAAcrB,GAAGsB,iBAAiB,SAASxqF,GAAc,OAAOqpF,GAAZlC,KAAiBf,GAAE1hB,cAAc1kE,EAAE,EAAEyqF,cAAc,WAAgD,MAAM,CAArCpD,GAAGD,IAAI,GAAKD,KAAKziB,cAAyB,EAAEgmB,iBAAiB7C,GAAG8C,qBAAqBv+C,GAAGw+C,MAAMrB,GAAGsB,0BAAyB,GAAI9D,GAAG,CAAC6C,YAAYpJ,GAAGqJ,YAAYV,GAAGW,WAAWtJ,GAAGuJ,UAAUjC,GAAGkC,oBAAoBf,GAAGgB,mBAAmBnB,GAAGoB,gBAAgBnB,GAAGoB,QAAQf,GAAGgB,WAAWxC,GAAGyC,OAAOx+D,GAAGy+D,SAAS,WAAW,OAAO1C,GAAGR,GAAG,EAAEmD,cAAcrB,GAAGsB,iBAAiB,SAASxqF,GAAG,IAAIxD,EAAE2qF,KAAK,OAAO,OACzff,GAAE5pF,EAAEkoE,cAAc1kE,EAAEqpF,GAAG7sF,EAAE4pF,GAAE1hB,cAAc1kE,EAAE,EAAEyqF,cAAc,WAAgD,MAAM,CAArC7C,GAAGR,IAAI,GAAKD,KAAKziB,cAAyB,EAAEgmB,iBAAiB7C,GAAG8C,qBAAqBv+C,GAAGw+C,MAAMrB,GAAGsB,0BAAyB,GAAI,SAASE,GAAG/qF,EAAExD,GAAG,IAAI,IAAI4C,EAAE,GAAGrB,EAAEvB,EAAE,GAAG4C,GAAG87D,EAAGn9D,GAAGA,EAAEA,EAAEwmE,aAAaxmE,GAAG,IAAI4G,EAAEvF,CAAC,CAAC,MAAMnC,GAAG0H,EAAE,6BAA6B1H,EAAE+tF,QAAQ,KAAK/tF,EAAE0nB,KAAK,CAAC,MAAM,CAACpgB,MAAMvE,EAAEmX,OAAO3a,EAAEmoB,MAAMhgB,EAAEsmF,OAAO,KAAK,CAAC,SAASC,GAAGlrF,EAAExD,EAAE4C,GAAG,MAAM,CAACmF,MAAMvE,EAAEmX,OAAO,KAAKwN,MAAM,MAAMvlB,EAAEA,EAAE,KAAK6rF,OAAO,MAAMzuF,EAAEA,EAAE,KAAK,CACzd,SAAS2uF,GAAGnrF,EAAExD,GAAG,IAAIhL,QAAQ04D,MAAM1tD,EAAE+H,MAAM,CAAC,MAAMnF,GAAGssD,YAAW,WAAW,MAAMtsD,CAAE,GAAE,CAAC,CAAC,IAAIgsF,GAAG,oBAAoB38E,QAAQA,QAAQ/L,IAAI,SAAS2oF,GAAGrrF,EAAExD,EAAE4C,IAAGA,EAAEqiF,IAAI,EAAEriF,IAAKmtD,IAAI,EAAEntD,EAAEwiF,QAAQ,CAACl5C,QAAQ,MAAM,IAAI3qC,EAAEvB,EAAE+H,MAAsD,OAAhDnF,EAAE62B,SAAS,WAAWq1D,KAAKA,IAAG,EAAGC,GAAGxtF,GAAGotF,GAAGnrF,EAAExD,EAAE,EAAS4C,CAAC,CAC3Q,SAASosF,GAAGxrF,EAAExD,EAAE4C,IAAGA,EAAEqiF,IAAI,EAAEriF,IAAKmtD,IAAI,EAAE,IAAIxuD,EAAEiC,EAAE8mB,KAAK2kE,yBAAyB,GAAG,oBAAoB1tF,EAAE,CAAC,IAAI4G,EAAEnI,EAAE+H,MAAMnF,EAAEwiF,QAAQ,WAAW,OAAO7jF,EAAE4G,EAAE,EAAEvF,EAAE62B,SAAS,WAAWk1D,GAAGnrF,EAAExD,EAAE,CAAC,CAAC,IAAIS,EAAE+C,EAAEkjE,UAA8O,OAApO,OAAOjmE,GAAG,oBAAoBA,EAAEyuF,oBAAoBtsF,EAAE62B,SAAS,WAAWk1D,GAAGnrF,EAAExD,GAAG,oBAAoBuB,IAAI,OAAO4tF,GAAGA,GAAG,IAAIloD,IAAI,CAACnzB,OAAOq7E,GAAGrjF,IAAIgI,OAAO,IAAIlR,EAAE5C,EAAEmoB,MAAMrU,KAAKo7E,kBAAkBlvF,EAAE+H,MAAM,CAACqnF,eAAe,OAAOxsF,EAAEA,EAAE,IAAI,GAAUA,CAAC,CACnb,SAASysF,GAAG7rF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEiC,EAAE8rF,UAAU,GAAG,OAAO/tF,EAAE,CAACA,EAAEiC,EAAE8rF,UAAU,IAAIV,GAAG,IAAIzmF,EAAE,IAAI8+B,IAAI1lC,EAAEzN,IAAIkM,EAAEmI,EAAE,WAAiB,KAAXA,EAAE5G,EAAEiF,IAAIxG,MAAgBmI,EAAE,IAAI8+B,IAAI1lC,EAAEzN,IAAIkM,EAAEmI,IAAIA,EAAE5B,IAAI3D,KAAKuF,EAAE2D,IAAIlJ,GAAGY,EAAE+rF,GAAGhT,KAAK,KAAK/4E,EAAExD,EAAE4C,GAAG5C,EAAEu+E,KAAK/6E,EAAEA,GAAG,CAAC,SAASgsF,GAAGhsF,GAAG,EAAE,CAAC,IAAIxD,EAA4E,IAAvEA,EAAE,KAAKwD,EAAEusD,OAAsB/vD,EAAE,QAApBA,EAAEwD,EAAE0kE,gBAAyB,OAAOloE,EAAEmoE,YAAuBnoE,EAAE,OAAOwD,EAAEA,EAAEA,EAAEukE,MAAM,OAAO,OAAOvkE,GAAG,OAAO,IAAI,CAChW,SAASisF,GAAGjsF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,OAAG,KAAY,EAAP3E,EAAEuuC,OAAevuC,IAAIxD,EAAEwD,EAAEwkE,OAAO,OAAOxkE,EAAEwkE,OAAO,IAAIplE,EAAEolE,OAAO,OAAOplE,EAAEolE,QAAQ,MAAM,IAAIplE,EAAEmtD,MAAM,OAAOntD,EAAEklE,UAAUllE,EAAEmtD,IAAI,KAAI/vD,EAAEilF,IAAI,EAAE,IAAKl1B,IAAI,EAAEs1B,GAAGziF,EAAE5C,EAAE,KAAK4C,EAAEkhF,OAAO,GAAGtgF,IAAEA,EAAEwkE,OAAO,MAAMxkE,EAAEsgF,MAAM37E,EAAS3E,EAAC,CAAC,IAAIksF,GAAGxvE,EAAGyvE,kBAAkB5L,IAAG,EAAG,SAAS6L,GAAGpsF,EAAExD,EAAE4C,EAAErB,GAAGvB,EAAEmwD,MAAM,OAAO3sD,EAAE8kF,GAAGtoF,EAAE,KAAK4C,EAAErB,GAAG8mF,GAAGroF,EAAEwD,EAAE2sD,MAAMvtD,EAAErB,EAAE,CACnV,SAASsuF,GAAGrsF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAGvF,EAAEA,EAAEsyD,OAAO,IAAIz0D,EAAET,EAAEoyD,IAAqC,OAAjCuxB,GAAG3jF,EAAEmI,GAAG5G,EAAE6oF,GAAG5mF,EAAExD,EAAE4C,EAAErB,EAAEd,EAAE0H,GAAGvF,EAAE6nF,KAAQ,OAAOjnF,GAAIugF,IAA2ElC,IAAGj/E,GAAG6+E,GAAGzhF,GAAGA,EAAEgoE,OAAO,EAAE4nB,GAAGpsF,EAAExD,EAAEuB,EAAE4G,GAAUnI,EAAEmwD,QAA7GnwD,EAAEykF,YAAYjhF,EAAEihF,YAAYzkF,EAAEgoE,QAAQ,KAAKxkE,EAAEsgF,QAAQ37E,EAAE2nF,GAAGtsF,EAAExD,EAAEmI,GAAoD,CACzN,SAAS4nF,GAAGvsF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,GAAG,OAAO3E,EAAE,CAAC,IAAI/C,EAAEmC,EAAE0nB,KAAK,MAAG,oBAAoB7pB,GAAIuvF,GAAGvvF,SAAI,IAASA,EAAEwiF,cAAc,OAAOrgF,EAAEqtF,cAAS,IAASrtF,EAAEqgF,eAAoDz/E,EAAEykF,GAAGrlF,EAAE0nB,KAAK,KAAK/oB,EAAEvB,EAAEA,EAAE+xC,KAAK5pC,IAAKiqD,IAAIpyD,EAAEoyD,IAAI5uD,EAAEukE,OAAO/nE,EAASA,EAAEmwD,MAAM3sD,IAArGxD,EAAE+vD,IAAI,GAAG/vD,EAAEsqB,KAAK7pB,EAAEyvF,GAAG1sF,EAAExD,EAAES,EAAEc,EAAE4G,GAAyE,CAAW,GAAV1H,EAAE+C,EAAE2sD,MAAS,KAAK3sD,EAAEsgF,MAAM37E,GAAG,CAAC,IAAIpI,EAAEU,EAAEkiF,cAA0C,IAAhB//E,EAAE,QAAdA,EAAEA,EAAEqtF,SAAmBrtF,EAAEw1E,IAAQr4E,EAAEwB,IAAIiC,EAAE4uD,MAAMpyD,EAAEoyD,IAAI,OAAO09B,GAAGtsF,EAAExD,EAAEmI,EAAE,CAA6C,OAA5CnI,EAAEgoE,OAAO,GAAExkE,EAAEukF,GAAGtnF,EAAEc,IAAK6wD,IAAIpyD,EAAEoyD,IAAI5uD,EAAEukE,OAAO/nE,EAASA,EAAEmwD,MAAM3sD,CAAC,CAC1b,SAAS0sF,GAAG1sF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,GAAG,OAAO3E,EAAE,CAAC,IAAI/C,EAAE+C,EAAEm/E,cAAc,GAAGvK,GAAG33E,EAAEc,IAAIiC,EAAE4uD,MAAMpyD,EAAEoyD,IAAI,IAAG2xB,IAAG,EAAG/jF,EAAEoiF,aAAa7gF,EAAEd,EAAE,KAAK+C,EAAEsgF,MAAM37E,GAAsC,OAAOnI,EAAE8jF,MAAMtgF,EAAEsgF,MAAMgM,GAAGtsF,EAAExD,EAAEmI,GAAjE,KAAa,OAAR3E,EAAEwkE,SAAgB+b,IAAG,EAAyC,EAAC,OAAOoM,GAAG3sF,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE,CACxN,SAASioF,GAAG5sF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEvB,EAAEoiF,aAAaj6E,EAAE5G,EAAE8nB,SAAS5oB,EAAE,OAAO+C,EAAEA,EAAE0kE,cAAc,KAAK,GAAG,WAAW3mE,EAAEwwC,KAAK,GAAG,KAAY,EAAP/xC,EAAE+xC,MAAQ/xC,EAAEkoE,cAAc,CAACmoB,UAAU,EAAEC,UAAU,KAAKC,YAAY,MAAMhR,GAAEiR,GAAGC,IAAIA,IAAI7tF,MAAM,CAAC,GAAG,KAAO,WAAFA,GAAc,OAAOY,EAAE,OAAO/C,EAAEA,EAAE4vF,UAAUztF,EAAEA,EAAE5C,EAAE8jF,MAAM9jF,EAAE0jF,WAAW,WAAW1jF,EAAEkoE,cAAc,CAACmoB,UAAU7sF,EAAE8sF,UAAU,KAAKC,YAAY,MAAMvwF,EAAEykF,YAAY,KAAKlF,GAAEiR,GAAGC,IAAIA,IAAIjtF,EAAE,KAAKxD,EAAEkoE,cAAc,CAACmoB,UAAU,EAAEC,UAAU,KAAKC,YAAY,MAAMhvF,EAAE,OAAOd,EAAEA,EAAE4vF,UAAUztF,EAAE28E,GAAEiR,GAAGC,IAAIA,IAAIlvF,CAAC,MAAM,OACtfd,GAAGc,EAAEd,EAAE4vF,UAAUztF,EAAE5C,EAAEkoE,cAAc,MAAM3mE,EAAEqB,EAAE28E,GAAEiR,GAAGC,IAAIA,IAAIlvF,EAAc,OAAZquF,GAAGpsF,EAAExD,EAAEmI,EAAEvF,GAAU5C,EAAEmwD,KAAK,CAAC,SAASugC,GAAGltF,EAAExD,GAAG,IAAI4C,EAAE5C,EAAEoyD,KAAO,OAAO5uD,GAAG,OAAOZ,GAAG,OAAOY,GAAGA,EAAE4uD,MAAMxvD,KAAE5C,EAAEgoE,OAAO,IAAIhoE,EAAEgoE,OAAO,QAAO,CAAC,SAASmoB,GAAG3sF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,IAAI1H,EAAEu/E,GAAGp9E,GAAG+8E,GAAGF,GAAE57E,QAAmD,OAA3CpD,EAAEm/E,GAAG5/E,EAAES,GAAGkjF,GAAG3jF,EAAEmI,GAAGvF,EAAEwnF,GAAG5mF,EAAExD,EAAE4C,EAAErB,EAAEd,EAAE0H,GAAG5G,EAAEkpF,KAAQ,OAAOjnF,GAAIugF,IAA2ElC,IAAGtgF,GAAGkgF,GAAGzhF,GAAGA,EAAEgoE,OAAO,EAAE4nB,GAAGpsF,EAAExD,EAAE4C,EAAEuF,GAAUnI,EAAEmwD,QAA7GnwD,EAAEykF,YAAYjhF,EAAEihF,YAAYzkF,EAAEgoE,QAAQ,KAAKxkE,EAAEsgF,QAAQ37E,EAAE2nF,GAAGtsF,EAAExD,EAAEmI,GAAoD,CACla,SAASwoF,GAAGntF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,GAAG63E,GAAGp9E,GAAG,CAAC,IAAInC,GAAE,EAAG6/E,GAAGtgF,EAAE,MAAMS,GAAE,EAAW,GAARkjF,GAAG3jF,EAAEmI,GAAM,OAAOnI,EAAE0mE,UAAUkqB,GAAGptF,EAAExD,GAAG4mF,GAAG5mF,EAAE4C,EAAErB,GAAG4lF,GAAGnnF,EAAE4C,EAAErB,EAAE4G,GAAG5G,GAAE,OAAQ,GAAG,OAAOiC,EAAE,CAAC,IAAIzD,EAAEC,EAAE0mE,UAAUvmE,EAAEH,EAAE2iF,cAAc5iF,EAAE2nD,MAAMvnD,EAAE,IAAIsN,EAAE1N,EAAE0nD,QAAQrnD,EAAEwC,EAAEikF,YAAY,kBAAkBzmF,GAAG,OAAOA,EAAEA,EAAE4jF,GAAG5jF,GAAyBA,EAAEw/E,GAAG5/E,EAA1BI,EAAE4/E,GAAGp9E,GAAG+8E,GAAGF,GAAE57E,SAAmB,IAAI4vB,EAAE7wB,EAAEwkF,yBAAyB/mF,EAAE,oBAAoBozB,GAAG,oBAAoB1zB,EAAEsnF,wBAAwBhnF,GAAG,oBAAoBN,EAAEmnF,kCAAkC,oBAAoBnnF,EAAEknF,4BAC1d9mF,IAAIoB,GAAGkM,IAAIrN,IAAI4mF,GAAGhnF,EAAED,EAAEwB,EAAEnB,GAAGmkF,IAAG,EAAG,IAAI3kF,EAAEI,EAAEkoE,cAAcnoE,EAAE+mF,MAAMlnF,EAAE6lF,GAAGzlF,EAAEuB,EAAExB,EAAEoI,GAAGsF,EAAEzN,EAAEkoE,cAAc/nE,IAAIoB,GAAG3B,IAAI6N,GAAGiyE,GAAG77E,SAAS0gF,IAAI,oBAAoB9wD,IAAIsyD,GAAG/lF,EAAE4C,EAAE6wB,EAAElyB,GAAGkM,EAAEzN,EAAEkoE,gBAAgB/nE,EAAEokF,IAAIkC,GAAGzmF,EAAE4C,EAAEzC,EAAEoB,EAAE3B,EAAE6N,EAAErN,KAAKC,GAAG,oBAAoBN,EAAEunF,2BAA2B,oBAAoBvnF,EAAEwnF,qBAAqB,oBAAoBxnF,EAAEwnF,oBAAoBxnF,EAAEwnF,qBAAqB,oBAAoBxnF,EAAEunF,2BAA2BvnF,EAAEunF,6BAA6B,oBAAoBvnF,EAAEynF,oBAAoBxnF,EAAEgoE,OAAO,WAClf,oBAAoBjoE,EAAEynF,oBAAoBxnF,EAAEgoE,OAAO,SAAShoE,EAAE2iF,cAAcphF,EAAEvB,EAAEkoE,cAAcz6D,GAAG1N,EAAE2nD,MAAMnmD,EAAExB,EAAE+mF,MAAMr5E,EAAE1N,EAAE0nD,QAAQrnD,EAAEmB,EAAEpB,IAAI,oBAAoBJ,EAAEynF,oBAAoBxnF,EAAEgoE,OAAO,SAASzmE,GAAE,EAAG,KAAK,CAACxB,EAAEC,EAAE0mE,UAAUse,GAAGxhF,EAAExD,GAAGG,EAAEH,EAAE2iF,cAAcviF,EAAEJ,EAAEsqB,OAAOtqB,EAAEiiF,YAAY9hF,EAAE6iF,GAAGhjF,EAAEsqB,KAAKnqB,GAAGJ,EAAE2nD,MAAMtnD,EAAEC,EAAEL,EAAEoiF,aAAaxiF,EAAEG,EAAE0nD,QAAwB,kBAAhBh6C,EAAE7K,EAAEikF,cAAiC,OAAOp5E,EAAEA,EAAEu2E,GAAGv2E,GAAyBA,EAAEmyE,GAAG5/E,EAA1ByN,EAAEuyE,GAAGp9E,GAAG+8E,GAAGF,GAAE57E,SAAmB,IAAI0H,EAAE3I,EAAEwkF,0BAA0B3zD,EAAE,oBAAoBloB,GAAG,oBAAoBxL,EAAEsnF,0BAC9e,oBAAoBtnF,EAAEmnF,kCAAkC,oBAAoBnnF,EAAEknF,4BAA4B9mF,IAAIE,GAAGT,IAAI6N,IAAIu5E,GAAGhnF,EAAED,EAAEwB,EAAEkM,GAAG82E,IAAG,EAAG3kF,EAAEI,EAAEkoE,cAAcnoE,EAAE+mF,MAAMlnF,EAAE6lF,GAAGzlF,EAAEuB,EAAExB,EAAEoI,GAAG,IAAIpE,EAAE/D,EAAEkoE,cAAc/nE,IAAIE,GAAGT,IAAImE,GAAG27E,GAAG77E,SAAS0gF,IAAI,oBAAoBh5E,IAAIw6E,GAAG/lF,EAAE4C,EAAE2I,EAAEhK,GAAGwC,EAAE/D,EAAEkoE,gBAAgB9nE,EAAEmkF,IAAIkC,GAAGzmF,EAAE4C,EAAExC,EAAEmB,EAAE3B,EAAEmE,EAAE0J,KAAI,IAAKgmB,GAAG,oBAAoB1zB,EAAE8wF,4BAA4B,oBAAoB9wF,EAAE+wF,sBAAsB,oBAAoB/wF,EAAE+wF,qBAAqB/wF,EAAE+wF,oBAAoBvvF,EAAEwC,EAAE0J,GAAG,oBAAoB1N,EAAE8wF,4BAC5f9wF,EAAE8wF,2BAA2BtvF,EAAEwC,EAAE0J,IAAI,oBAAoB1N,EAAEgxF,qBAAqB/wF,EAAEgoE,OAAO,GAAG,oBAAoBjoE,EAAEsnF,0BAA0BrnF,EAAEgoE,OAAO,QAAQ,oBAAoBjoE,EAAEgxF,oBAAoB5wF,IAAIqD,EAAEm/E,eAAe/iF,IAAI4D,EAAE0kE,gBAAgBloE,EAAEgoE,OAAO,GAAG,oBAAoBjoE,EAAEsnF,yBAAyBlnF,IAAIqD,EAAEm/E,eAAe/iF,IAAI4D,EAAE0kE,gBAAgBloE,EAAEgoE,OAAO,MAAMhoE,EAAE2iF,cAAcphF,EAAEvB,EAAEkoE,cAAcnkE,GAAGhE,EAAE2nD,MAAMnmD,EAAExB,EAAE+mF,MAAM/iF,EAAEhE,EAAE0nD,QAAQh6C,EAAElM,EAAEnB,IAAI,oBAAoBL,EAAEgxF,oBAAoB5wF,IAAIqD,EAAEm/E,eAAe/iF,IACjf4D,EAAE0kE,gBAAgBloE,EAAEgoE,OAAO,GAAG,oBAAoBjoE,EAAEsnF,yBAAyBlnF,IAAIqD,EAAEm/E,eAAe/iF,IAAI4D,EAAE0kE,gBAAgBloE,EAAEgoE,OAAO,MAAMzmE,GAAE,EAAG,CAAC,OAAOyvF,GAAGxtF,EAAExD,EAAE4C,EAAErB,EAAEd,EAAE0H,EAAE,CACnK,SAAS6oF,GAAGxtF,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,GAAGiwF,GAAGltF,EAAExD,GAAG,IAAID,EAAE,KAAa,IAARC,EAAEgoE,OAAW,IAAIzmE,IAAIxB,EAAE,OAAOoI,GAAGq4E,GAAGxgF,EAAE4C,GAAE,GAAIktF,GAAGtsF,EAAExD,EAAES,GAAGc,EAAEvB,EAAE0mE,UAAUgpB,GAAG7rF,QAAQ7D,EAAE,IAAIG,EAAEJ,GAAG,oBAAoB6C,EAAEqsF,yBAAyB,KAAK1tF,EAAE2zD,SAAwI,OAA/Hl1D,EAAEgoE,OAAO,EAAE,OAAOxkE,GAAGzD,GAAGC,EAAEmwD,MAAMk4B,GAAGroF,EAAEwD,EAAE2sD,MAAM,KAAK1vD,GAAGT,EAAEmwD,MAAMk4B,GAAGroF,EAAE,KAAKG,EAAEM,IAAImvF,GAAGpsF,EAAExD,EAAEG,EAAEM,GAAGT,EAAEkoE,cAAc3mE,EAAEulF,MAAM3+E,GAAGq4E,GAAGxgF,EAAE4C,GAAE,GAAW5C,EAAEmwD,KAAK,CAAC,SAAS8gC,GAAGztF,GAAG,IAAIxD,EAAEwD,EAAEkjE,UAAU1mE,EAAEkxF,eAAe/Q,GAAG38E,EAAExD,EAAEkxF,eAAelxF,EAAEkxF,iBAAiBlxF,EAAEynD,SAASznD,EAAEynD,SAAS04B,GAAG38E,EAAExD,EAAEynD,SAAQ,GAAImhC,GAAGplF,EAAExD,EAAE8sE,cAAc,CAC5e,SAASqkB,GAAG3tF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAuC,OAApC06E,KAAKC,GAAG36E,GAAGnI,EAAEgoE,OAAO,IAAI4nB,GAAGpsF,EAAExD,EAAE4C,EAAErB,GAAUvB,EAAEmwD,KAAK,CAAC,IAaqLihC,GAAGC,GAAGC,GAAGC,GAb1LC,GAAG,CAACrpB,WAAW,KAAKka,YAAY,KAAKC,UAAU,GAAG,SAASmP,GAAGjuF,GAAG,MAAM,CAAC6sF,UAAU7sF,EAAE8sF,UAAU,KAAKC,YAAY,KAAK,CAClM,SAASmB,GAAGluF,EAAExD,EAAE4C,GAAG,IAA0DzC,EAAtDoB,EAAEvB,EAAEoiF,aAAaj6E,EAAE8gF,GAAEplF,QAAQpD,GAAE,EAAGV,EAAE,KAAa,IAARC,EAAEgoE,OAAqJ,IAAvI7nE,EAAEJ,KAAKI,GAAE,OAAOqD,GAAG,OAAOA,EAAE0kE,gBAAiB,KAAO,EAAF//D,IAAShI,GAAEM,GAAE,EAAGT,EAAEgoE,QAAQ,KAAY,OAAOxkE,GAAG,OAAOA,EAAE0kE,gBAAc//D,GAAG,GAAEo3E,GAAE0J,GAAI,EAAF9gF,GAAQ,OAAO3E,EAA2B,OAAxBg/E,GAAGxiF,GAAwB,QAArBwD,EAAExD,EAAEkoE,gBAA2C,QAAf1kE,EAAEA,EAAE2kE,aAA4B,KAAY,EAAPnoE,EAAE+xC,MAAQ/xC,EAAE8jF,MAAM,EAAE,OAAOtgF,EAAEqB,KAAK7E,EAAE8jF,MAAM,EAAE9jF,EAAE8jF,MAAM,WAAW,OAAK/jF,EAAEwB,EAAE8nB,SAAS7lB,EAAEjC,EAAEowF,SAAgBlxF,GAAGc,EAAEvB,EAAE+xC,KAAKtxC,EAAET,EAAEmwD,MAAMpwD,EAAE,CAACgyC,KAAK,SAAS1oB,SAAStpB,GAAG,KAAO,EAAFwB,IAAM,OAAOd,GAAGA,EAAEijF,WAAW,EAAEjjF,EAAE2hF,aAC7eriF,GAAGU,EAAEmxF,GAAG7xF,EAAEwB,EAAE,EAAE,MAAMiC,EAAE4kF,GAAG5kF,EAAEjC,EAAEqB,EAAE,MAAMnC,EAAEsnE,OAAO/nE,EAAEwD,EAAEukE,OAAO/nE,EAAES,EAAE6nE,QAAQ9kE,EAAExD,EAAEmwD,MAAM1vD,EAAET,EAAEmwD,MAAM+X,cAAcupB,GAAG7uF,GAAG5C,EAAEkoE,cAAcspB,GAAGhuF,GAAGquF,GAAG7xF,EAAED,IAAqB,GAAG,QAArBoI,EAAE3E,EAAE0kE,gBAA2C,QAAf/nE,EAAEgI,EAAEggE,YAAqB,OAGpM,SAAY3kE,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,EAAEV,GAAG,GAAG6C,EAAG,OAAW,IAAR5C,EAAEgoE,OAAiBhoE,EAAEgoE,QAAQ,IAAwB8pB,GAAGtuF,EAAExD,EAAED,EAA3BwB,EAAEmtF,GAAG/7F,MAAM2N,EAAE,SAAsB,OAAON,EAAEkoE,eAAqBloE,EAAEmwD,MAAM3sD,EAAE2sD,MAAMnwD,EAAEgoE,OAAO,IAAI,OAAKvnE,EAAEc,EAAEowF,SAASxpF,EAAEnI,EAAE+xC,KAAKxwC,EAAEqwF,GAAG,CAAC7/C,KAAK,UAAU1oB,SAAS9nB,EAAE8nB,UAAUlhB,EAAE,EAAE,OAAM1H,EAAE2nF,GAAG3nF,EAAE0H,EAAEpI,EAAE,OAAQioE,OAAO,EAAEzmE,EAAEwmE,OAAO/nE,EAAES,EAAEsnE,OAAO/nE,EAAEuB,EAAE+mE,QAAQ7nE,EAAET,EAAEmwD,MAAM5uD,EAAE,KAAY,EAAPvB,EAAE+xC,OAASs2C,GAAGroF,EAAEwD,EAAE2sD,MAAM,KAAKpwD,GAAGC,EAAEmwD,MAAM+X,cAAcupB,GAAG1xF,GAAGC,EAAEkoE,cAAcspB,GAAU/wF,GAAE,GAAG,KAAY,EAAPT,EAAE+xC,MAAQ,OAAO+/C,GAAGtuF,EAAExD,EAAED,EAAE,MAAM,GAAG,OAAOoI,EAAEtD,KAAK,CAChd,GADidtD,EAAE4G,EAAEowE,aAAapwE,EAAEowE,YAAYwZ,QAC3e,IAAI5xF,EAAEoB,EAAEywF,KAA0C,OAArCzwF,EAAEpB,EAA0C2xF,GAAGtuF,EAAExD,EAAED,EAA/BwB,EAAEmtF,GAAlBjuF,EAAE9N,MAAM2N,EAAE,MAAaiB,OAAE,GAA0B,CAAwB,GAAvBpB,EAAE,KAAKJ,EAAEyD,EAAEkgF,YAAeK,IAAI5jF,EAAE,CAAK,GAAG,QAAPoB,EAAEoqF,IAAc,CAAC,OAAO5rF,GAAGA,GAAG,KAAK,EAAEoI,EAAE,EAAE,MAAM,KAAK,GAAGA,EAAE,EAAE,MAAM,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,KAAK,SAASA,EAAE,GAAG,MAAM,KAAK,UAAUA,EAAE,UAAU,MAAM,QAAQA,EAAE,EAChd,KADkdA,EAAE,KAAKA,GAAG5G,EAAEipE,eAAezqE,IAAI,EAAEoI,IAC5eA,IAAI1H,EAAE6hF,YAAY7hF,EAAE6hF,UAAUn6E,EAAEm8E,GAAG9gF,EAAE2E,GAAGm+E,GAAG/kF,EAAEiC,EAAE2E,GAAG,GAAG,CAA0B,OAAzB8pF,KAAgCH,GAAGtuF,EAAExD,EAAED,EAAlCwB,EAAEmtF,GAAG/7F,MAAM2N,EAAE,OAAyB,CAAC,MAAG,OAAO6H,EAAEtD,MAAY7E,EAAEgoE,OAAO,IAAIhoE,EAAEmwD,MAAM3sD,EAAE2sD,MAAMnwD,EAAEkyF,GAAG3V,KAAK,KAAK/4E,GAAG2E,EAAEgqF,YAAYnyF,EAAE,OAAKwD,EAAE/C,EAAE4hF,YAAYT,GAAGjD,GAAGx2E,EAAEowE,aAAaoJ,GAAG3hF,EAAE6hF,IAAE,EAAGC,GAAG,KAAK,OAAOt+E,IAAI09E,GAAGC,MAAME,GAAGH,GAAGC,MAAMG,GAAGJ,GAAGC,MAAMC,GAAGC,GAAG79E,EAAEqqE,GAAGyT,GAAG99E,EAAEm4B,SAASylD,GAAGphF,GAAGA,EAAE6xF,GAAG7xF,EAAEuB,EAAE8nB,UAAUrpB,EAAEgoE,OAAO,KAAYhoE,EAAC,CALrKoyF,CAAG5uF,EAAExD,EAAED,EAAEwB,EAAEpB,EAAEgI,EAAEvF,GAAG,GAAGnC,EAAE,CAACA,EAAEc,EAAEowF,SAAS5xF,EAAEC,EAAE+xC,KAAe5xC,GAAVgI,EAAE3E,EAAE2sD,OAAUmY,QAAQ,IAAI76D,EAAE,CAACskC,KAAK,SAAS1oB,SAAS9nB,EAAE8nB,UAChF,OAD0F,KAAO,EAAFtpB,IAAMC,EAAEmwD,QAAQhoD,IAAG5G,EAAEvB,EAAEmwD,OAAQuzB,WAAW,EAAEniF,EAAE6gF,aAAa30E,EAAEzN,EAAEkiF,UAAU,OAAO3gF,EAAEwmF,GAAG5/E,EAAEsF,IAAK4kF,aAA4B,SAAflqF,EAAEkqF,aAAuB,OAAOlyF,EAAEM,EAAEsnF,GAAG5nF,EAAEM,IAAIA,EAAE2nF,GAAG3nF,EAAEV,EAAE6C,EAAE,OAAQolE,OAAO,EAAGvnE,EAAEsnE,OACnf/nE,EAAEuB,EAAEwmE,OAAO/nE,EAAEuB,EAAE+mE,QAAQ7nE,EAAET,EAAEmwD,MAAM5uD,EAAEA,EAAEd,EAAEA,EAAET,EAAEmwD,MAA8BpwD,EAAE,QAA1BA,EAAEyD,EAAE2sD,MAAM+X,eAAyBupB,GAAG7uF,GAAG,CAACytF,UAAUtwF,EAAEswF,UAAUztF,EAAE0tF,UAAU,KAAKC,YAAYxwF,EAAEwwF,aAAa9vF,EAAEynE,cAAcnoE,EAAEU,EAAEijF,WAAWlgF,EAAEkgF,YAAY9gF,EAAE5C,EAAEkoE,cAAcspB,GAAUjwF,CAAC,CAAoO,OAAzNiC,GAAV/C,EAAE+C,EAAE2sD,OAAUmY,QAAQ/mE,EAAEwmF,GAAGtnF,EAAE,CAACsxC,KAAK,UAAU1oB,SAAS9nB,EAAE8nB,WAAW,KAAY,EAAPrpB,EAAE+xC,QAAUxwC,EAAEuiF,MAAMlhF,GAAGrB,EAAEwmE,OAAO/nE,EAAEuB,EAAE+mE,QAAQ,KAAK,OAAO9kE,IAAkB,QAAdZ,EAAE5C,EAAEkiF,YAAoBliF,EAAEkiF,UAAU,CAAC1+E,GAAGxD,EAAEgoE,OAAO,IAAIplE,EAAE/R,KAAK2S,IAAIxD,EAAEmwD,MAAM5uD,EAAEvB,EAAEkoE,cAAc,KAAY3mE,CAAC,CACnd,SAASswF,GAAGruF,EAAExD,GAA8D,OAA3DA,EAAE4xF,GAAG,CAAC7/C,KAAK,UAAU1oB,SAASrpB,GAAGwD,EAAEuuC,KAAK,EAAE,OAAQg2B,OAAOvkE,EAASA,EAAE2sD,MAAMnwD,CAAC,CAAC,SAAS8xF,GAAGtuF,EAAExD,EAAE4C,EAAErB,GAAwG,OAArG,OAAOA,GAAGuhF,GAAGvhF,GAAG8mF,GAAGroF,EAAEwD,EAAE2sD,MAAM,KAAKvtD,IAAGY,EAAEquF,GAAG7xF,EAAEA,EAAEoiF,aAAa/4D,WAAY2+C,OAAO,EAAEhoE,EAAEkoE,cAAc,KAAY1kE,CAAC,CAGkJ,SAAS8uF,GAAG9uF,EAAExD,EAAE4C,GAAGY,EAAEsgF,OAAO9jF,EAAE,IAAIuB,EAAEiC,EAAEskE,UAAU,OAAOvmE,IAAIA,EAAEuiF,OAAO9jF,GAAGyjF,GAAGjgF,EAAEukE,OAAO/nE,EAAE4C,EAAE,CACxc,SAAS2vF,GAAG/uF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,IAAI1H,EAAE+C,EAAE0kE,cAAc,OAAOznE,EAAE+C,EAAE0kE,cAAc,CAACsqB,YAAYxyF,EAAEirD,UAAU,KAAKwnC,mBAAmB,EAAEh8D,KAAKl1B,EAAEs1B,KAAKj0B,EAAE8vF,SAASvqF,IAAI1H,EAAE+xF,YAAYxyF,EAAES,EAAEwqD,UAAU,KAAKxqD,EAAEgyF,mBAAmB,EAAEhyF,EAAEg2B,KAAKl1B,EAAEd,EAAEo2B,KAAKj0B,EAAEnC,EAAEiyF,SAASvqF,EAAE,CAC3O,SAASwqF,GAAGnvF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEvB,EAAEoiF,aAAaj6E,EAAE5G,EAAE4nF,YAAY1oF,EAAEc,EAAEs1B,KAAsC,GAAjC+4D,GAAGpsF,EAAExD,EAAEuB,EAAE8nB,SAASzmB,GAAkB,KAAO,GAAtBrB,EAAE0nF,GAAEplF,UAAqBtC,EAAI,EAAFA,EAAI,EAAEvB,EAAEgoE,OAAO,QAAQ,CAAC,GAAG,OAAOxkE,GAAG,KAAa,IAARA,EAAEwkE,OAAWxkE,EAAE,IAAIA,EAAExD,EAAEmwD,MAAM,OAAO3sD,GAAG,CAAC,GAAG,KAAKA,EAAEusD,IAAI,OAAOvsD,EAAE0kE,eAAeoqB,GAAG9uF,EAAEZ,EAAE5C,QAAQ,GAAG,KAAKwD,EAAEusD,IAAIuiC,GAAG9uF,EAAEZ,EAAE5C,QAAQ,GAAG,OAAOwD,EAAE2sD,MAAM,CAAC3sD,EAAE2sD,MAAM4X,OAAOvkE,EAAEA,EAAEA,EAAE2sD,MAAM,QAAQ,CAAC,GAAG3sD,IAAIxD,EAAE,MAAMwD,EAAE,KAAK,OAAOA,EAAE8kE,SAAS,CAAC,GAAG,OAAO9kE,EAAEukE,QAAQvkE,EAAEukE,SAAS/nE,EAAE,MAAMwD,EAAEA,EAAEA,EAAEukE,MAAM,CAACvkE,EAAE8kE,QAAQP,OAAOvkE,EAAEukE,OAAOvkE,EAAEA,EAAE8kE,OAAO,CAAC/mE,GAAG,CAAC,CAAQ,GAAPg+E,GAAE0J,GAAE1nF,GAAM,KAAY,EAAPvB,EAAE+xC,MAAQ/xC,EAAEkoE,cAC/e,UAAU,OAAO//D,GAAG,IAAK,WAAqB,IAAVvF,EAAE5C,EAAEmwD,MAAUhoD,EAAE,KAAK,OAAOvF,GAAiB,QAAdY,EAAEZ,EAAEklE,YAAoB,OAAOohB,GAAG1lF,KAAK2E,EAAEvF,GAAGA,EAAEA,EAAE0lE,QAAY,QAAJ1lE,EAAEuF,IAAYA,EAAEnI,EAAEmwD,MAAMnwD,EAAEmwD,MAAM,OAAOhoD,EAAEvF,EAAE0lE,QAAQ1lE,EAAE0lE,QAAQ,MAAMiqB,GAAGvyF,GAAE,EAAGmI,EAAEvF,EAAEnC,GAAG,MAAM,IAAK,YAA6B,IAAjBmC,EAAE,KAAKuF,EAAEnI,EAAEmwD,MAAUnwD,EAAEmwD,MAAM,KAAK,OAAOhoD,GAAG,CAAe,GAAG,QAAjB3E,EAAE2E,EAAE2/D,YAAuB,OAAOohB,GAAG1lF,GAAG,CAACxD,EAAEmwD,MAAMhoD,EAAE,KAAK,CAAC3E,EAAE2E,EAAEmgE,QAAQngE,EAAEmgE,QAAQ1lE,EAAEA,EAAEuF,EAAEA,EAAE3E,CAAC,CAAC+uF,GAAGvyF,GAAE,EAAG4C,EAAE,KAAKnC,GAAG,MAAM,IAAK,WAAW8xF,GAAGvyF,GAAE,EAAG,KAAK,UAAK,GAAQ,MAAM,QAAQA,EAAEkoE,cAAc,KAAK,OAAOloE,EAAEmwD,KAAK,CAC7d,SAASygC,GAAGptF,EAAExD,GAAG,KAAY,EAAPA,EAAE+xC,OAAS,OAAOvuC,IAAIA,EAAEskE,UAAU,KAAK9nE,EAAE8nE,UAAU,KAAK9nE,EAAEgoE,OAAO,EAAE,CAAC,SAAS8nB,GAAGtsF,EAAExD,EAAE4C,GAAyD,GAAtD,OAAOY,IAAIxD,EAAE4jF,aAAapgF,EAAEogF,cAAc8B,IAAI1lF,EAAE8jF,MAAS,KAAKlhF,EAAE5C,EAAE0jF,YAAY,OAAO,KAAK,GAAG,OAAOlgF,GAAGxD,EAAEmwD,QAAQ3sD,EAAE2sD,MAAM,MAAMx9D,MAAM2N,EAAE,MAAM,GAAG,OAAON,EAAEmwD,MAAM,CAA4C,IAAjCvtD,EAAEmlF,GAAZvkF,EAAExD,EAAEmwD,MAAa3sD,EAAE4+E,cAAcpiF,EAAEmwD,MAAMvtD,EAAMA,EAAEmlE,OAAO/nE,EAAE,OAAOwD,EAAE8kE,SAAS9kE,EAAEA,EAAE8kE,SAAQ1lE,EAAEA,EAAE0lE,QAAQyf,GAAGvkF,EAAEA,EAAE4+E,eAAgBra,OAAO/nE,EAAE4C,EAAE0lE,QAAQ,IAAI,CAAC,OAAOtoE,EAAEmwD,KAAK,CAO9a,SAASyiC,GAAGpvF,EAAExD,GAAG,IAAI6hF,GAAE,OAAOr+E,EAAEkvF,UAAU,IAAK,SAAS1yF,EAAEwD,EAAEqzB,KAAK,IAAI,IAAIj0B,EAAE,KAAK,OAAO5C,GAAG,OAAOA,EAAE8nE,YAAYllE,EAAE5C,GAAGA,EAAEA,EAAEsoE,QAAQ,OAAO1lE,EAAEY,EAAEqzB,KAAK,KAAKj0B,EAAE0lE,QAAQ,KAAK,MAAM,IAAK,YAAY1lE,EAAEY,EAAEqzB,KAAK,IAAI,IAAIt1B,EAAE,KAAK,OAAOqB,GAAG,OAAOA,EAAEklE,YAAYvmE,EAAEqB,GAAGA,EAAEA,EAAE0lE,QAAQ,OAAO/mE,EAAEvB,GAAG,OAAOwD,EAAEqzB,KAAKrzB,EAAEqzB,KAAK,KAAKrzB,EAAEqzB,KAAKyxC,QAAQ,KAAK/mE,EAAE+mE,QAAQ,KAAK,CAC5U,SAASuqB,GAAErvF,GAAG,IAAIxD,EAAE,OAAOwD,EAAEskE,WAAWtkE,EAAEskE,UAAU3X,QAAQ3sD,EAAE2sD,MAAMvtD,EAAE,EAAErB,EAAE,EAAE,GAAGvB,EAAE,IAAI,IAAImI,EAAE3E,EAAE2sD,MAAM,OAAOhoD,GAAGvF,GAAGuF,EAAE27E,MAAM37E,EAAEu7E,WAAWniF,GAAkB,SAAf4G,EAAEkqF,aAAsB9wF,GAAW,SAAR4G,EAAE6/D,MAAe7/D,EAAE4/D,OAAOvkE,EAAE2E,EAAEA,EAAEmgE,aAAa,IAAIngE,EAAE3E,EAAE2sD,MAAM,OAAOhoD,GAAGvF,GAAGuF,EAAE27E,MAAM37E,EAAEu7E,WAAWniF,GAAG4G,EAAEkqF,aAAa9wF,GAAG4G,EAAE6/D,MAAM7/D,EAAE4/D,OAAOvkE,EAAE2E,EAAEA,EAAEmgE,QAAyC,OAAjC9kE,EAAE6uF,cAAc9wF,EAAEiC,EAAEkgF,WAAW9gF,EAAS5C,CAAC,CAC7V,SAAS8yF,GAAGtvF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEvB,EAAEoiF,aAAmB,OAANV,GAAG1hF,GAAUA,EAAE+vD,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,OAAO8iC,GAAE7yF,GAAG,KAAK,KAAK,EAUtD,KAAK,GAAG,OAAOggF,GAAGhgF,EAAEsqB,OAAO41D,KAAK2S,GAAE7yF,GAAG,KAVqD,KAAK,EAA2Q,OAAzQuB,EAAEvB,EAAE0mE,UAAUoiB,KAAKxJ,GAAEI,IAAIJ,GAAEG,IAAG4J,KAAK9nF,EAAE2vF,iBAAiB3vF,EAAEkmD,QAAQlmD,EAAE2vF,eAAe3vF,EAAE2vF,eAAe,MAAS,OAAO1tF,GAAG,OAAOA,EAAE2sD,QAAMuyB,GAAG1iF,GAAGA,EAAEgoE,OAAO,EAAE,OAAOxkE,GAAGA,EAAE0kE,cAAc2E,cAAc,KAAa,IAAR7sE,EAAEgoE,SAAahoE,EAAEgoE,OAAO,KAAK,OAAO8Z,KAAKiR,GAAGjR,IAAIA,GAAG,QAAOuP,GAAG7tF,EAAExD,GAAG6yF,GAAE7yF,GAAU,KAAK,KAAK,EAAEgpF,GAAGhpF,GAAG,IAAImI,EAAEwgF,GAAGD,GAAG7kF,SAC7e,GAATjB,EAAE5C,EAAEsqB,KAAQ,OAAO9mB,GAAG,MAAMxD,EAAE0mE,UAAU4qB,GAAG9tF,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG3E,EAAE4uD,MAAMpyD,EAAEoyD,MAAMpyD,EAAEgoE,OAAO,IAAIhoE,EAAEgoE,OAAO,aAAa,CAAC,IAAIzmE,EAAE,CAAC,GAAG,OAAOvB,EAAE0mE,UAAU,MAAM/zE,MAAM2N,EAAE,MAAW,OAALuyF,GAAE7yF,GAAU,IAAI,CAAkB,GAAjBwD,EAAEmlF,GAAGH,GAAG3kF,SAAY6+E,GAAG1iF,GAAG,CAACuB,EAAEvB,EAAE0mE,UAAU9jE,EAAE5C,EAAEsqB,KAAK,IAAI7pB,EAAET,EAAE2iF,cAA+C,OAAjCphF,EAAEw9E,IAAI/+E,EAAEuB,EAAEy9E,IAAIv+E,EAAE+C,EAAE,KAAY,EAAPxD,EAAE+xC,MAAenvC,GAAG,IAAK,SAASs5E,GAAE,SAAS36E,GAAG26E,GAAE,QAAQ36E,GAAG,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQ26E,GAAE,OAAO36E,GAAG,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAI4G,EAAE,EAAEA,EAAE2zE,GAAG7qF,OAAOkX,IAAI+zE,GAAEJ,GAAG3zE,GAAG5G,GAAG,MAAM,IAAK,SAAS26E,GAAE,QAAQ36E,GAAG,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAO26E,GAAE,QACnhB36E,GAAG26E,GAAE,OAAO36E,GAAG,MAAM,IAAK,UAAU26E,GAAE,SAAS36E,GAAG,MAAM,IAAK,QAAQg/D,EAAGh/D,EAAEd,GAAGy7E,GAAE,UAAU36E,GAAG,MAAM,IAAK,SAASA,EAAE8+D,cAAc,CAAC2yB,cAAcvyF,EAAE47B,UAAU6/C,GAAE,UAAU36E,GAAG,MAAM,IAAK,WAAW6/D,GAAG7/D,EAAEd,GAAGy7E,GAAE,UAAU36E,GAAkB,IAAI,IAAIxB,KAAvBogB,GAAGvd,EAAEnC,GAAG0H,EAAE,KAAkB1H,EAAE,GAAGA,EAAE6vD,eAAevwD,GAAG,CAAC,IAAII,EAAEM,EAAEV,GAAG,aAAaA,EAAE,kBAAkBI,EAAEoB,EAAEg0D,cAAcp1D,KAAI,IAAKM,EAAEwyF,0BAA0BxV,GAAGl8E,EAAEg0D,YAAYp1D,EAAEqD,GAAG2E,EAAE,CAAC,WAAWhI,IAAI,kBAAkBA,GAAGoB,EAAEg0D,cAAc,GAAGp1D,KAAI,IAAKM,EAAEwyF,0BAA0BxV,GAAGl8E,EAAEg0D,YAC1ep1D,EAAEqD,GAAG2E,EAAE,CAAC,WAAW,GAAGhI,IAAIk7D,EAAG/K,eAAevwD,IAAI,MAAMI,GAAG,aAAaJ,GAAGm8E,GAAE,SAAS36E,EAAE,CAAC,OAAOqB,GAAG,IAAK,QAAQw8D,EAAG79D,GAAGq/D,EAAGr/D,EAAEd,GAAE,GAAI,MAAM,IAAK,WAAW2+D,EAAG79D,GAAG+/D,GAAG//D,GAAG,MAAM,IAAK,SAAS,IAAK,SAAS,MAAM,QAAQ,oBAAoBd,EAAEyyF,UAAU3xF,EAAE4xF,QAAQzV,IAAIn8E,EAAE4G,EAAEnI,EAAEykF,YAAYljF,EAAE,OAAOA,IAAIvB,EAAEgoE,OAAO,EAAE,KAAK,CAACjoE,EAAE,IAAIoI,EAAE+5D,SAAS/5D,EAAEA,EAAE8rD,cAAc,iCAAiCzwD,IAAIA,EAAE+9D,GAAG3+D,IAAI,iCAAiCY,EAAE,WAAWZ,IAAGY,EAAEzD,EAAE4uD,cAAc,QAAS6F,UAAU,qBAAuBhxD,EAAEA,EAAEwyD,YAAYxyD,EAAEq+D,aAC/f,kBAAkBtgE,EAAEykE,GAAGxiE,EAAEzD,EAAE4uD,cAAc/rD,EAAE,CAACojE,GAAGzkE,EAAEykE,MAAMxiE,EAAEzD,EAAE4uD,cAAc/rD,GAAG,WAAWA,IAAI7C,EAAEyD,EAAEjC,EAAE86B,SAASt8B,EAAEs8B,UAAS,EAAG96B,EAAEi6B,OAAOz7B,EAAEy7B,KAAKj6B,EAAEi6B,QAAQh4B,EAAEzD,EAAEqzF,gBAAgB5vF,EAAEZ,GAAGY,EAAEu7E,IAAI/+E,EAAEwD,EAAEw7E,IAAIz9E,EAAE6vF,GAAG5tF,EAAExD,GAAE,GAAG,GAAIA,EAAE0mE,UAAUljE,EAAEA,EAAE,CAAW,OAAVzD,EAAEgmE,GAAGnjE,EAAErB,GAAUqB,GAAG,IAAK,SAASs5E,GAAE,SAAS14E,GAAG04E,GAAE,QAAQ14E,GAAG2E,EAAE5G,EAAE,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQ26E,GAAE,OAAO14E,GAAG2E,EAAE5G,EAAE,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAI4G,EAAE,EAAEA,EAAE2zE,GAAG7qF,OAAOkX,IAAI+zE,GAAEJ,GAAG3zE,GAAG3E,GAAG2E,EAAE5G,EAAE,MAAM,IAAK,SAAS26E,GAAE,QAAQ14E,GAAG2E,EAAE5G,EAAE,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAO26E,GAAE,QAClf14E,GAAG04E,GAAE,OAAO14E,GAAG2E,EAAE5G,EAAE,MAAM,IAAK,UAAU26E,GAAE,SAAS14E,GAAG2E,EAAE5G,EAAE,MAAM,IAAK,QAAQg/D,EAAG/8D,EAAEjC,GAAG4G,EAAE+3D,EAAG18D,EAAEjC,GAAG26E,GAAE,UAAU14E,GAAG,MAAM,IAAK,SAAiL,QAAQ2E,EAAE5G,QAAxK,IAAK,SAASiC,EAAE68D,cAAc,CAAC2yB,cAAczxF,EAAE86B,UAAUl0B,EAAEwyC,EAAE,CAAC,EAAEp5C,EAAE,CAACwG,WAAM,IAASm0E,GAAE,UAAU14E,GAAG,MAAM,IAAK,WAAW49D,GAAG59D,EAAEjC,GAAG4G,EAAE+4D,GAAG19D,EAAEjC,GAAG26E,GAAE,UAAU14E,GAAiC,IAAI/C,KAAhB0f,GAAGvd,EAAEuF,GAAGhI,EAAEgI,EAAa,GAAGhI,EAAEmwD,eAAe7vD,GAAG,CAAC,IAAIgN,EAAEtN,EAAEM,GAAG,UAAUA,EAAEwkE,GAAGzhE,EAAEiK,GAAG,4BAA4BhN,EAAuB,OAApBgN,EAAEA,EAAEA,EAAEqwE,YAAO,IAAgBpc,GAAGl+D,EAAEiK,GAAI,aAAahN,EAAE,kBAAkBgN,GAAG,aAC7e7K,GAAG,KAAK6K,IAAIu0D,GAAGx+D,EAAEiK,GAAG,kBAAkBA,GAAGu0D,GAAGx+D,EAAE,GAAGiK,GAAG,mCAAmChN,GAAG,6BAA6BA,GAAG,cAAcA,IAAI46D,EAAG/K,eAAe7vD,GAAG,MAAMgN,GAAG,aAAahN,GAAGy7E,GAAE,SAAS14E,GAAG,MAAMiK,GAAG6uD,EAAG94D,EAAE/C,EAAEgN,EAAE1N,GAAG,CAAC,OAAO6C,GAAG,IAAK,QAAQw8D,EAAG57D,GAAGo9D,EAAGp9D,EAAEjC,GAAE,GAAI,MAAM,IAAK,WAAW69D,EAAG57D,GAAG89D,GAAG99D,GAAG,MAAM,IAAK,SAAS,MAAMjC,EAAEwG,OAAOvE,EAAE0sD,aAAa,QAAQ,GAAG+O,EAAG19D,EAAEwG,QAAQ,MAAM,IAAK,SAASvE,EAAE64B,WAAW96B,EAAE86B,SAAmB,OAAV57B,EAAEc,EAAEwG,OAAc+4D,GAAGt9D,IAAIjC,EAAE86B,SAAS57B,GAAE,GAAI,MAAMc,EAAE6+D,cAAcU,GAAGt9D,IAAIjC,EAAE86B,SAAS96B,EAAE6+D,cAClf,GAAI,MAAM,QAAQ,oBAAoBj4D,EAAE+qF,UAAU1vF,EAAE2vF,QAAQzV,IAAI,OAAO96E,GAAG,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAWrB,IAAIA,EAAE8xF,UAAU,MAAM7vF,EAAE,IAAK,MAAMjC,GAAE,EAAG,MAAMiC,EAAE,QAAQjC,GAAE,EAAG,CAACA,IAAIvB,EAAEgoE,OAAO,EAAE,CAAC,OAAOhoE,EAAEoyD,MAAMpyD,EAAEgoE,OAAO,IAAIhoE,EAAEgoE,OAAO,QAAQ,CAAM,OAAL6qB,GAAE7yF,GAAU,KAAK,KAAK,EAAE,GAAGwD,GAAG,MAAMxD,EAAE0mE,UAAU6qB,GAAG/tF,EAAExD,EAAEwD,EAAEm/E,cAAcphF,OAAO,CAAC,GAAG,kBAAkBA,GAAG,OAAOvB,EAAE0mE,UAAU,MAAM/zE,MAAM2N,EAAE,MAAsC,GAAhCsC,EAAE+lF,GAAGD,GAAG7kF,SAAS8kF,GAAGH,GAAG3kF,SAAY6+E,GAAG1iF,GAAG,CAAyC,GAAxCuB,EAAEvB,EAAE0mE,UAAU9jE,EAAE5C,EAAE2iF,cAAcphF,EAAEw9E,IAAI/+E,GAAKS,EAAEc,EAAE4gE,YAAYv/D,IAC/e,QADofY,EACvfm+E,IAAY,OAAOn+E,EAAEusD,KAAK,KAAK,EAAE0tB,GAAGl8E,EAAE4gE,UAAUv/D,EAAE,KAAY,EAAPY,EAAEuuC,OAAS,MAAM,KAAK,GAAE,IAAKvuC,EAAEm/E,cAAcsQ,0BAA0BxV,GAAGl8E,EAAE4gE,UAAUv/D,EAAE,KAAY,EAAPY,EAAEuuC,OAAStxC,IAAIT,EAAEgoE,OAAO,EAAE,MAAMzmE,GAAG,IAAIqB,EAAEs/D,SAASt/D,EAAEA,EAAEqxD,eAAe5D,eAAe9uD,IAAKw9E,IAAI/+E,EAAEA,EAAE0mE,UAAUnlE,CAAC,CAAM,OAALsxF,GAAE7yF,GAAU,KAAK,KAAK,GAA0B,GAAvBs/E,GAAE2J,IAAG1nF,EAAEvB,EAAEkoE,cAAiB,OAAO1kE,GAAG,OAAOA,EAAE0kE,eAAe,OAAO1kE,EAAE0kE,cAAcC,WAAW,CAAC,GAAG0Z,IAAG,OAAOD,IAAI,KAAY,EAAP5hF,EAAE+xC,OAAS,KAAa,IAAR/xC,EAAEgoE,OAAW4a,KAAKC,KAAK7iF,EAAEgoE,OAAO,MAAMvnE,GAAE,OAAQ,GAAGA,EAAEiiF,GAAG1iF,GAAG,OAAOuB,GAAG,OAAOA,EAAE4mE,WAAW,CAAC,GAAG,OAC5f3kE,EAAE,CAAC,IAAI/C,EAAE,MAAM9N,MAAM2N,EAAE,MAAqD,KAA7BG,EAAE,QAApBA,EAAET,EAAEkoE,eAAyBznE,EAAE0nE,WAAW,MAAW,MAAMx1E,MAAM2N,EAAE,MAAMG,EAAEs+E,IAAI/+E,CAAC,MAAM6iF,KAAK,KAAa,IAAR7iF,EAAEgoE,SAAahoE,EAAEkoE,cAAc,MAAMloE,EAAEgoE,OAAO,EAAE6qB,GAAE7yF,GAAGS,GAAE,CAAE,MAAM,OAAOqhF,KAAKiR,GAAGjR,IAAIA,GAAG,MAAMrhF,GAAE,EAAG,IAAIA,EAAE,OAAe,MAART,EAAEgoE,MAAYhoE,EAAE,IAAI,CAAC,OAAG,KAAa,IAARA,EAAEgoE,QAAkBhoE,EAAE8jF,MAAMlhF,EAAE5C,KAAEuB,EAAE,OAAOA,MAAO,OAAOiC,GAAG,OAAOA,EAAE0kE,gBAAgB3mE,IAAIvB,EAAEmwD,MAAM6X,OAAO,KAAK,KAAY,EAAPhoE,EAAE+xC,QAAU,OAAOvuC,GAAG,KAAe,EAAVylF,GAAEplF,SAAW,IAAIyvF,KAAIA,GAAE,GAAGrB,OAAO,OAAOjyF,EAAEykF,cAAczkF,EAAEgoE,OAAO,GAAG6qB,GAAE7yF,GAAU,MAAK,KAAK,EAAE,OAAO8oF,KACrfuI,GAAG7tF,EAAExD,GAAG,OAAOwD,GAAG84E,GAAGt8E,EAAE0mE,UAAUoG,eAAe+lB,GAAE7yF,GAAG,KAAK,KAAK,GAAG,OAAOujF,GAAGvjF,EAAEsqB,KAAKu0C,UAAUg0B,GAAE7yF,GAAG,KAA+C,KAAK,GAA0B,GAAvBs/E,GAAE2J,IAAwB,QAArBxoF,EAAET,EAAEkoE,eAA0B,OAAO2qB,GAAE7yF,GAAG,KAAuC,GAAlCuB,EAAE,KAAa,IAARvB,EAAEgoE,OAA4B,QAAjBjoE,EAAEU,EAAEwqD,WAAsB,GAAG1pD,EAAEqxF,GAAGnyF,GAAE,OAAQ,CAAC,GAAG,IAAI6yF,IAAG,OAAO9vF,GAAG,KAAa,IAARA,EAAEwkE,OAAW,IAAIxkE,EAAExD,EAAEmwD,MAAM,OAAO3sD,GAAG,CAAS,GAAG,QAAXzD,EAAEmpF,GAAG1lF,IAAe,CAAmG,IAAlGxD,EAAEgoE,OAAO,IAAI4qB,GAAGnyF,GAAE,GAAoB,QAAhBc,EAAExB,EAAE0kF,eAAuBzkF,EAAEykF,YAAYljF,EAAEvB,EAAEgoE,OAAO,GAAGhoE,EAAEqyF,aAAa,EAAE9wF,EAAEqB,EAAMA,EAAE5C,EAAEmwD,MAAM,OAAOvtD,GAAOY,EAAEjC,GAANd,EAAEmC,GAAQolE,OAAO,SAC/d,QAAdjoE,EAAEU,EAAEqnE,YAAoBrnE,EAAEijF,WAAW,EAAEjjF,EAAEqjF,MAAMtgF,EAAE/C,EAAE0vD,MAAM,KAAK1vD,EAAE4xF,aAAa,EAAE5xF,EAAEkiF,cAAc,KAAKliF,EAAEynE,cAAc,KAAKznE,EAAEgkF,YAAY,KAAKhkF,EAAEmjF,aAAa,KAAKnjF,EAAEimE,UAAU,OAAOjmE,EAAEijF,WAAW3jF,EAAE2jF,WAAWjjF,EAAEqjF,MAAM/jF,EAAE+jF,MAAMrjF,EAAE0vD,MAAMpwD,EAAEowD,MAAM1vD,EAAE4xF,aAAa,EAAE5xF,EAAEyhF,UAAU,KAAKzhF,EAAEkiF,cAAc5iF,EAAE4iF,cAAcliF,EAAEynE,cAAcnoE,EAAEmoE,cAAcznE,EAAEgkF,YAAY1kF,EAAE0kF,YAAYhkF,EAAE6pB,KAAKvqB,EAAEuqB,KAAK9mB,EAAEzD,EAAE6jF,aAAanjF,EAAEmjF,aAAa,OAAOpgF,EAAE,KAAK,CAACsgF,MAAMtgF,EAAEsgF,MAAMD,aAAargF,EAAEqgF,eAAejhF,EAAEA,EAAE0lE,QAA2B,OAAnBiX,GAAE0J,GAAY,EAAVA,GAAEplF,QAAU,GAAU7D,EAAEmwD,KAAK,CAAC3sD,EAClgBA,EAAE8kE,OAAO,CAAC,OAAO7nE,EAAEo2B,MAAM2jB,KAAI+4C,KAAKvzF,EAAEgoE,OAAO,IAAIzmE,GAAE,EAAGqxF,GAAGnyF,GAAE,GAAIT,EAAE8jF,MAAM,QAAQ,KAAK,CAAC,IAAIviF,EAAE,GAAW,QAARiC,EAAE0lF,GAAGnpF,KAAa,GAAGC,EAAEgoE,OAAO,IAAIzmE,GAAE,EAAmB,QAAhBqB,EAAEY,EAAEihF,eAAuBzkF,EAAEykF,YAAY7hF,EAAE5C,EAAEgoE,OAAO,GAAG4qB,GAAGnyF,GAAE,GAAI,OAAOA,EAAEo2B,MAAM,WAAWp2B,EAAEiyF,WAAW3yF,EAAE+nE,YAAY+Z,GAAE,OAAOgR,GAAE7yF,GAAG,UAAU,EAAEw6C,KAAI/5C,EAAEgyF,mBAAmBc,IAAI,aAAa3wF,IAAI5C,EAAEgoE,OAAO,IAAIzmE,GAAE,EAAGqxF,GAAGnyF,GAAE,GAAIT,EAAE8jF,MAAM,SAASrjF,EAAE+xF,aAAazyF,EAAEuoE,QAAQtoE,EAAEmwD,MAAMnwD,EAAEmwD,MAAMpwD,IAAa,QAAT6C,EAAEnC,EAAEg2B,MAAc7zB,EAAE0lE,QAAQvoE,EAAEC,EAAEmwD,MAAMpwD,EAAEU,EAAEg2B,KAAK12B,EAAE,CAAC,OAAG,OAAOU,EAAEo2B,MAAY72B,EAAES,EAAEo2B,KAAKp2B,EAAEwqD,UAC9ejrD,EAAES,EAAEo2B,KAAK72B,EAAEsoE,QAAQ7nE,EAAEgyF,mBAAmBj4C,KAAIx6C,EAAEsoE,QAAQ,KAAK1lE,EAAEqmF,GAAEplF,QAAQ07E,GAAE0J,GAAE1nF,EAAI,EAAFqB,EAAI,EAAI,EAAFA,GAAK5C,IAAE6yF,GAAE7yF,GAAU,MAAK,KAAK,GAAG,KAAK,GAAG,OAAOwzF,KAAKjyF,EAAE,OAAOvB,EAAEkoE,cAAc,OAAO1kE,GAAG,OAAOA,EAAE0kE,gBAAgB3mE,IAAIvB,EAAEgoE,OAAO,MAAMzmE,GAAG,KAAY,EAAPvB,EAAE+xC,MAAQ,KAAQ,WAAH0+C,MAAiBoC,GAAE7yF,GAAkB,EAAfA,EAAEqyF,eAAiBryF,EAAEgoE,OAAO,OAAO6qB,GAAE7yF,GAAG,KAAK,KAAK,GAAe,KAAK,GAAG,OAAO,KAAK,MAAMrN,MAAM2N,EAAE,IAAIN,EAAE+vD,KAAM,CAClX,SAAS0jC,GAAGjwF,EAAExD,GAAS,OAAN0hF,GAAG1hF,GAAUA,EAAE+vD,KAAK,KAAK,EAAE,OAAOiwB,GAAGhgF,EAAEsqB,OAAO41D,KAAiB,OAAZ18E,EAAExD,EAAEgoE,QAAehoE,EAAEgoE,OAAS,MAAHxkE,EAAS,IAAIxD,GAAG,KAAK,KAAK,EAAE,OAAO8oF,KAAKxJ,GAAEI,IAAIJ,GAAEG,IAAG4J,KAAe,KAAO,OAAjB7lF,EAAExD,EAAEgoE,SAAqB,KAAO,IAAFxkE,IAAQxD,EAAEgoE,OAAS,MAAHxkE,EAAS,IAAIxD,GAAG,KAAK,KAAK,EAAE,OAAOgpF,GAAGhpF,GAAG,KAAK,KAAK,GAA0B,GAAvBs/E,GAAE2J,IAAwB,QAArBzlF,EAAExD,EAAEkoE,gBAA2B,OAAO1kE,EAAE2kE,WAAW,CAAC,GAAG,OAAOnoE,EAAE8nE,UAAU,MAAMn1E,MAAM2N,EAAE,MAAMuiF,IAAI,CAAW,OAAS,OAAnBr/E,EAAExD,EAAEgoE,QAAsBhoE,EAAEgoE,OAAS,MAAHxkE,EAAS,IAAIxD,GAAG,KAAK,KAAK,GAAG,OAAOs/E,GAAE2J,IAAG,KAAK,KAAK,EAAE,OAAOH,KAAK,KAAK,KAAK,GAAG,OAAOvF,GAAGvjF,EAAEsqB,KAAKu0C,UAAU,KAAK,KAAK,GAAG,KAAK,GAAG,OAAO20B,KAC1gB,KAAyB,QAAQ,OAAO,KAAK,CArB7CpC,GAAG,SAAS5tF,EAAExD,GAAG,IAAI,IAAI4C,EAAE5C,EAAEmwD,MAAM,OAAOvtD,GAAG,CAAC,GAAG,IAAIA,EAAEmtD,KAAK,IAAIntD,EAAEmtD,IAAIvsD,EAAE4sD,YAAYxtD,EAAE8jE,gBAAgB,GAAG,IAAI9jE,EAAEmtD,KAAK,OAAOntD,EAAEutD,MAAM,CAACvtD,EAAEutD,MAAM4X,OAAOnlE,EAAEA,EAAEA,EAAEutD,MAAM,QAAQ,CAAC,GAAGvtD,IAAI5C,EAAE,MAAM,KAAK,OAAO4C,EAAE0lE,SAAS,CAAC,GAAG,OAAO1lE,EAAEmlE,QAAQnlE,EAAEmlE,SAAS/nE,EAAE,OAAO4C,EAAEA,EAAEmlE,MAAM,CAACnlE,EAAE0lE,QAAQP,OAAOnlE,EAAEmlE,OAAOnlE,EAAEA,EAAE0lE,OAAO,CAAC,EAAE+oB,GAAG,WAAW,EACxTC,GAAG,SAAS9tF,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAE3E,EAAEm/E,cAAc,GAAGx6E,IAAI5G,EAAE,CAACiC,EAAExD,EAAE0mE,UAAUiiB,GAAGH,GAAG3kF,SAAS,IAA4R9D,EAAxRU,EAAE,KAAK,OAAOmC,GAAG,IAAK,QAAQuF,EAAE+3D,EAAG18D,EAAE2E,GAAG5G,EAAE2+D,EAAG18D,EAAEjC,GAAGd,EAAE,GAAG,MAAM,IAAK,SAAS0H,EAAEwyC,EAAE,CAAC,EAAExyC,EAAE,CAACJ,WAAM,IAASxG,EAAEo5C,EAAE,CAAC,EAAEp5C,EAAE,CAACwG,WAAM,IAAStH,EAAE,GAAG,MAAM,IAAK,WAAW0H,EAAE+4D,GAAG19D,EAAE2E,GAAG5G,EAAE2/D,GAAG19D,EAAEjC,GAAGd,EAAE,GAAG,MAAM,QAAQ,oBAAoB0H,EAAE+qF,SAAS,oBAAoB3xF,EAAE2xF,UAAU1vF,EAAE2vF,QAAQzV,IAAyB,IAAIt9E,KAAzB+f,GAAGvd,EAAErB,GAASqB,EAAE,KAAcuF,EAAE,IAAI5G,EAAE+uD,eAAelwD,IAAI+H,EAAEmoD,eAAelwD,IAAI,MAAM+H,EAAE/H,GAAG,GAAG,UAAUA,EAAE,CAAC,IAAID,EAAEgI,EAAE/H,GAAG,IAAIL,KAAKI,EAAEA,EAAEmwD,eAAevwD,KACjf6C,IAAIA,EAAE,CAAC,GAAGA,EAAE7C,GAAG,GAAG,KAAK,4BAA4BK,GAAG,aAAaA,GAAG,mCAAmCA,GAAG,6BAA6BA,GAAG,cAAcA,IAAIi7D,EAAG/K,eAAelwD,GAAGK,IAAIA,EAAE,KAAKA,EAAEA,GAAG,IAAI5P,KAAKuP,EAAE,OAAO,IAAIA,KAAKmB,EAAE,CAAC,IAAIkM,EAAElM,EAAEnB,GAAyB,GAAtBD,EAAE,MAAMgI,EAAEA,EAAE/H,QAAG,EAAUmB,EAAE+uD,eAAelwD,IAAIqN,IAAItN,IAAI,MAAMsN,GAAG,MAAMtN,GAAG,GAAG,UAAUC,EAAE,GAAGD,EAAE,CAAC,IAAIJ,KAAKI,GAAGA,EAAEmwD,eAAevwD,IAAI0N,GAAGA,EAAE6iD,eAAevwD,KAAK6C,IAAIA,EAAE,CAAC,GAAGA,EAAE7C,GAAG,IAAI,IAAIA,KAAK0N,EAAEA,EAAE6iD,eAAevwD,IAAII,EAAEJ,KAAK0N,EAAE1N,KAAK6C,IAAIA,EAAE,CAAC,GAAGA,EAAE7C,GAAG0N,EAAE1N,GAAG,MAAM6C,IAAInC,IAAIA,EAAE,IAAIA,EAAE5P,KAAKuP,EACpfwC,IAAIA,EAAE6K,MAAM,4BAA4BrN,GAAGqN,EAAEA,EAAEA,EAAEqwE,YAAO,EAAO39E,EAAEA,EAAEA,EAAE29E,YAAO,EAAO,MAAMrwE,GAAGtN,IAAIsN,IAAIhN,EAAEA,GAAG,IAAI5P,KAAKuP,EAAEqN,IAAI,aAAarN,EAAE,kBAAkBqN,GAAG,kBAAkBA,IAAIhN,EAAEA,GAAG,IAAI5P,KAAKuP,EAAE,GAAGqN,GAAG,mCAAmCrN,GAAG,6BAA6BA,IAAIi7D,EAAG/K,eAAelwD,IAAI,MAAMqN,GAAG,aAAarN,GAAG87E,GAAE,SAAS14E,GAAG/C,GAAGN,IAAIsN,IAAIhN,EAAE,MAAMA,EAAEA,GAAG,IAAI5P,KAAKuP,EAAEqN,GAAG,CAAC7K,IAAInC,EAAEA,GAAG,IAAI5P,KAAK,QAAQ+R,GAAG,IAAIxC,EAAEK,GAAKT,EAAEykF,YAAYrkF,KAAEJ,EAAEgoE,OAAO,EAAC,CAAC,EAAEupB,GAAG,SAAS/tF,EAAExD,EAAE4C,EAAErB,GAAGqB,IAAIrB,IAAIvB,EAAEgoE,OAAO,EAAE,EAkBlb,IAAI0rB,IAAG,EAAGC,IAAE,EAAGC,GAAG,oBAAoBC,QAAQA,QAAQ5sD,IAAI6sD,GAAE,KAAK,SAASC,GAAGvwF,EAAExD,GAAG,IAAI4C,EAAEY,EAAE4uD,IAAI,GAAG,OAAOxvD,EAAE,GAAG,oBAAoBA,EAAE,IAAIA,EAAE,KAAK,CAAC,MAAMrB,GAAGyyF,GAAExwF,EAAExD,EAAEuB,EAAE,MAAMqB,EAAEiB,QAAQ,IAAI,CAAC,SAASowF,GAAGzwF,EAAExD,EAAE4C,GAAG,IAAIA,GAAG,CAAC,MAAMrB,GAAGyyF,GAAExwF,EAAExD,EAAEuB,EAAE,CAAC,CAAC,IAAI2yF,IAAG,EAIxR,SAASC,GAAG3wF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEvB,EAAEykF,YAAyC,GAAG,QAAhCljF,EAAE,OAAOA,EAAEA,EAAEsqF,WAAW,MAAiB,CAAC,IAAI1jF,EAAE5G,EAAEA,EAAEiyB,KAAK,EAAE,CAAC,IAAIrrB,EAAE4nD,IAAIvsD,KAAKA,EAAE,CAAC,IAAI/C,EAAE0H,EAAEgkF,QAAQhkF,EAAEgkF,aAAQ,OAAO,IAAS1rF,GAAGwzF,GAAGj0F,EAAE4C,EAAEnC,EAAE,CAAC0H,EAAEA,EAAEqrB,IAAI,OAAOrrB,IAAI5G,EAAE,CAAC,CAAC,SAAS6yF,GAAG5wF,EAAExD,GAAgD,GAAG,QAAhCA,EAAE,QAAlBA,EAAEA,EAAEykF,aAAuBzkF,EAAE6rF,WAAW,MAAiB,CAAC,IAAIjpF,EAAE5C,EAAEA,EAAEwzB,KAAK,EAAE,CAAC,IAAI5wB,EAAEmtD,IAAIvsD,KAAKA,EAAE,CAAC,IAAIjC,EAAEqB,EAAEO,OAAOP,EAAEupF,QAAQ5qF,GAAG,CAACqB,EAAEA,EAAE4wB,IAAI,OAAO5wB,IAAI5C,EAAE,CAAC,CAAC,SAASq0F,GAAG7wF,GAAG,IAAIxD,EAAEwD,EAAE4uD,IAAI,GAAG,OAAOpyD,EAAE,CAAC,IAAI4C,EAAEY,EAAEkjE,UAAiBljE,EAAEusD,IAA8BvsD,EAAEZ,EAAE,oBAAoB5C,EAAEA,EAAEwD,GAAGxD,EAAE6D,QAAQL,CAAC,CAAC,CAClf,SAAS8wF,GAAG9wF,GAAG,IAAIxD,EAAEwD,EAAEskE,UAAU,OAAO9nE,IAAIwD,EAAEskE,UAAU,KAAKwsB,GAAGt0F,IAAIwD,EAAE2sD,MAAM,KAAK3sD,EAAE0+E,UAAU,KAAK1+E,EAAE8kE,QAAQ,KAAK,IAAI9kE,EAAEusD,MAAoB,QAAd/vD,EAAEwD,EAAEkjE,oBAA4B1mE,EAAE++E,WAAW/+E,EAAEg/E,WAAWh/E,EAAEmxB,WAAWnxB,EAAEi/E,WAAWj/E,EAAEk/E,MAAM17E,EAAEkjE,UAAU,KAAKljE,EAAEukE,OAAO,KAAKvkE,EAAEogF,aAAa,KAAKpgF,EAAEm/E,cAAc,KAAKn/E,EAAE0kE,cAAc,KAAK1kE,EAAE4+E,aAAa,KAAK5+E,EAAEkjE,UAAU,KAAKljE,EAAEihF,YAAY,IAAI,CAAC,SAAS8P,GAAG/wF,GAAG,OAAO,IAAIA,EAAEusD,KAAK,IAAIvsD,EAAEusD,KAAK,IAAIvsD,EAAEusD,GAAG,CACna,SAASykC,GAAGhxF,GAAGA,EAAE,OAAO,CAAC,KAAK,OAAOA,EAAE8kE,SAAS,CAAC,GAAG,OAAO9kE,EAAEukE,QAAQwsB,GAAG/wF,EAAEukE,QAAQ,OAAO,KAAKvkE,EAAEA,EAAEukE,MAAM,CAA2B,IAA1BvkE,EAAE8kE,QAAQP,OAAOvkE,EAAEukE,OAAWvkE,EAAEA,EAAE8kE,QAAQ,IAAI9kE,EAAEusD,KAAK,IAAIvsD,EAAEusD,KAAK,KAAKvsD,EAAEusD,KAAK,CAAC,GAAW,EAARvsD,EAAEwkE,MAAQ,SAASxkE,EAAE,GAAG,OAAOA,EAAE2sD,OAAO,IAAI3sD,EAAEusD,IAAI,SAASvsD,EAAOA,EAAE2sD,MAAM4X,OAAOvkE,EAAEA,EAAEA,EAAE2sD,KAAK,CAAC,KAAa,EAAR3sD,EAAEwkE,OAAS,OAAOxkE,EAAEkjE,SAAS,CAAC,CACzT,SAAS+tB,GAAGjxF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEiC,EAAEusD,IAAI,GAAG,IAAIxuD,GAAG,IAAIA,EAAEiC,EAAEA,EAAEkjE,UAAU1mE,EAAE,IAAI4C,EAAEs/D,SAASt/D,EAAEmzD,WAAWvyB,aAAahgC,EAAExD,GAAG4C,EAAE4gC,aAAahgC,EAAExD,IAAI,IAAI4C,EAAEs/D,UAAUliE,EAAE4C,EAAEmzD,YAAavyB,aAAahgC,EAAEZ,IAAK5C,EAAE4C,GAAIwtD,YAAY5sD,GAA4B,QAAxBZ,EAAEA,EAAE8xF,2BAA8B,IAAS9xF,GAAG,OAAO5C,EAAEmzF,UAAUnzF,EAAEmzF,QAAQzV,UAAU,GAAG,IAAIn8E,GAAc,QAAViC,EAAEA,EAAE2sD,OAAgB,IAAIskC,GAAGjxF,EAAExD,EAAE4C,GAAGY,EAAEA,EAAE8kE,QAAQ,OAAO9kE,GAAGixF,GAAGjxF,EAAExD,EAAE4C,GAAGY,EAAEA,EAAE8kE,OAAO,CAC1X,SAASqsB,GAAGnxF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEiC,EAAEusD,IAAI,GAAG,IAAIxuD,GAAG,IAAIA,EAAEiC,EAAEA,EAAEkjE,UAAU1mE,EAAE4C,EAAE4gC,aAAahgC,EAAExD,GAAG4C,EAAEwtD,YAAY5sD,QAAQ,GAAG,IAAIjC,GAAc,QAAViC,EAAEA,EAAE2sD,OAAgB,IAAIwkC,GAAGnxF,EAAExD,EAAE4C,GAAGY,EAAEA,EAAE8kE,QAAQ,OAAO9kE,GAAGmxF,GAAGnxF,EAAExD,EAAE4C,GAAGY,EAAEA,EAAE8kE,OAAO,CAAC,IAAIssB,GAAE,KAAKC,IAAG,EAAG,SAASC,GAAGtxF,EAAExD,EAAE4C,GAAG,IAAIA,EAAEA,EAAEutD,MAAM,OAAOvtD,GAAGmyF,GAAGvxF,EAAExD,EAAE4C,GAAGA,EAAEA,EAAE0lE,OAAO,CACnR,SAASysB,GAAGvxF,EAAExD,EAAE4C,GAAG,GAAGknE,IAAI,oBAAoBA,GAAGkrB,qBAAqB,IAAIlrB,GAAGkrB,qBAAqBnrB,GAAGjnE,EAAE,CAAC,MAAMzC,GAAG,CAAC,OAAOyC,EAAEmtD,KAAK,KAAK,EAAE4jC,IAAGI,GAAGnxF,EAAE5C,GAAG,KAAK,EAAE,IAAIuB,EAAEqzF,GAAEzsF,EAAE0sF,GAAGD,GAAE,KAAKE,GAAGtxF,EAAExD,EAAE4C,GAAOiyF,GAAG1sF,EAAE,QAATysF,GAAErzF,KAAkBszF,IAAIrxF,EAAEoxF,GAAEhyF,EAAEA,EAAE8jE,UAAU,IAAIljE,EAAE0+D,SAAS1+D,EAAEuyD,WAAWC,YAAYpzD,GAAGY,EAAEwyD,YAAYpzD,IAAIgyF,GAAE5+B,YAAYpzD,EAAE8jE,YAAY,MAAM,KAAK,GAAG,OAAOkuB,KAAIC,IAAIrxF,EAAEoxF,GAAEhyF,EAAEA,EAAE8jE,UAAU,IAAIljE,EAAE0+D,SAASwc,GAAGl7E,EAAEuyD,WAAWnzD,GAAG,IAAIY,EAAE0+D,UAAUwc,GAAGl7E,EAAEZ,GAAGwqE,GAAG5pE,IAAIk7E,GAAGkW,GAAEhyF,EAAE8jE,YAAY,MAAM,KAAK,EAAEnlE,EAAEqzF,GAAEzsF,EAAE0sF,GAAGD,GAAEhyF,EAAE8jE,UAAUoG,cAAc+nB,IAAG,EAClfC,GAAGtxF,EAAExD,EAAE4C,GAAGgyF,GAAErzF,EAAEszF,GAAG1sF,EAAE,MAAM,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,IAAIwrF,KAAoB,QAAhBpyF,EAAEqB,EAAE6hF,cAAsC,QAAfljF,EAAEA,EAAEsqF,aAAsB,CAAC1jF,EAAE5G,EAAEA,EAAEiyB,KAAK,EAAE,CAAC,IAAI/yB,EAAE0H,EAAEpI,EAAEU,EAAE0rF,QAAQ1rF,EAAEA,EAAEsvD,SAAI,IAAShwD,IAAI,KAAO,EAAFU,IAAe,KAAO,EAAFA,KAAfwzF,GAAGrxF,EAAE5C,EAAED,GAAyBoI,EAAEA,EAAEqrB,IAAI,OAAOrrB,IAAI5G,EAAE,CAACuzF,GAAGtxF,EAAExD,EAAE4C,GAAG,MAAM,KAAK,EAAE,IAAI+wF,KAAII,GAAGnxF,EAAE5C,GAAiB,oBAAduB,EAAEqB,EAAE8jE,WAAgCuuB,sBAAsB,IAAI1zF,EAAEmmD,MAAM9kD,EAAE+/E,cAAcphF,EAAEulF,MAAMlkF,EAAEslE,cAAc3mE,EAAE0zF,sBAAsB,CAAC,MAAM90F,GAAG6zF,GAAEpxF,EAAE5C,EAAEG,EAAE,CAAC20F,GAAGtxF,EAAExD,EAAE4C,GAAG,MAAM,KAAK,GAAGkyF,GAAGtxF,EAAExD,EAAE4C,GAAG,MAAM,KAAK,GAAU,EAAPA,EAAEmvC,MAAQ4hD,IAAGpyF,EAAEoyF,KAAI,OAChf/wF,EAAEslE,cAAc4sB,GAAGtxF,EAAExD,EAAE4C,GAAG+wF,GAAEpyF,GAAGuzF,GAAGtxF,EAAExD,EAAE4C,GAAG,MAAM,QAAQkyF,GAAGtxF,EAAExD,EAAE4C,GAAG,CAAC,SAASsyF,GAAG1xF,GAAG,IAAIxD,EAAEwD,EAAEihF,YAAY,GAAG,OAAOzkF,EAAE,CAACwD,EAAEihF,YAAY,KAAK,IAAI7hF,EAAEY,EAAEkjE,UAAU,OAAO9jE,IAAIA,EAAEY,EAAEkjE,UAAU,IAAIktB,IAAI5zF,EAAEtP,SAAQ,SAASsP,GAAG,IAAIuB,EAAE4zF,GAAG5Y,KAAK,KAAK/4E,EAAExD,GAAG4C,EAAE2D,IAAIvG,KAAK4C,EAAEkJ,IAAI9L,GAAGA,EAAEu+E,KAAKh9E,EAAEA,GAAG,GAAE,CAAC,CACzQ,SAAS6zF,GAAG5xF,EAAExD,GAAG,IAAI4C,EAAE5C,EAAEkiF,UAAU,GAAG,OAAOt/E,EAAE,IAAI,IAAIrB,EAAE,EAAEA,EAAEqB,EAAE3R,OAAOsQ,IAAI,CAAC,IAAI4G,EAAEvF,EAAErB,GAAG,IAAI,IAAId,EAAE+C,EAAEzD,EAAEC,EAAEG,EAAEJ,EAAEyD,EAAE,KAAK,OAAOrD,GAAG,CAAC,OAAOA,EAAE4vD,KAAK,KAAK,EAAE6kC,GAAEz0F,EAAEumE,UAAUmuB,IAAG,EAAG,MAAMrxF,EAAE,KAAK,EAA4C,KAAK,EAAEoxF,GAAEz0F,EAAEumE,UAAUoG,cAAc+nB,IAAG,EAAG,MAAMrxF,EAAErD,EAAEA,EAAE4nE,MAAM,CAAC,GAAG,OAAO6sB,GAAE,MAAMjiG,MAAM2N,EAAE,MAAMy0F,GAAGt0F,EAAEV,EAAEoI,GAAGysF,GAAE,KAAKC,IAAG,EAAG,IAAIpnF,EAAEtF,EAAE2/D,UAAU,OAAOr6D,IAAIA,EAAEs6D,OAAO,MAAM5/D,EAAE4/D,OAAO,IAAI,CAAC,MAAM3nE,GAAG4zF,GAAE7rF,EAAEnI,EAAEI,EAAE,CAAC,CAAC,GAAkB,MAAfJ,EAAEqyF,aAAmB,IAAIryF,EAAEA,EAAEmwD,MAAM,OAAOnwD,GAAGq1F,GAAGr1F,EAAEwD,GAAGxD,EAAEA,EAAEsoE,OAAO,CACje,SAAS+sB,GAAG7xF,EAAExD,GAAG,IAAI4C,EAAEY,EAAEskE,UAAUvmE,EAAEiC,EAAEwkE,MAAM,OAAOxkE,EAAEusD,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAiB,GAAdqlC,GAAGp1F,EAAEwD,GAAG8xF,GAAG9xF,GAAQ,EAAFjC,EAAI,CAAC,IAAI4yF,GAAG,EAAE3wF,EAAEA,EAAEukE,QAAQqsB,GAAG,EAAE5wF,EAAE,CAAC,MAAM9C,GAAGszF,GAAExwF,EAAEA,EAAEukE,OAAOrnE,EAAE,CAAC,IAAIyzF,GAAG,EAAE3wF,EAAEA,EAAEukE,OAAO,CAAC,MAAMrnE,GAAGszF,GAAExwF,EAAEA,EAAEukE,OAAOrnE,EAAE,CAAC,CAAC,MAAM,KAAK,EAAE00F,GAAGp1F,EAAEwD,GAAG8xF,GAAG9xF,GAAK,IAAFjC,GAAO,OAAOqB,GAAGmxF,GAAGnxF,EAAEA,EAAEmlE,QAAQ,MAAM,KAAK,EAAgD,GAA9CqtB,GAAGp1F,EAAEwD,GAAG8xF,GAAG9xF,GAAK,IAAFjC,GAAO,OAAOqB,GAAGmxF,GAAGnxF,EAAEA,EAAEmlE,QAAmB,GAARvkE,EAAEwkE,MAAS,CAAC,IAAI7/D,EAAE3E,EAAEkjE,UAAU,IAAI1E,GAAG75D,EAAE,GAAG,CAAC,MAAMzH,GAAGszF,GAAExwF,EAAEA,EAAEukE,OAAOrnE,EAAE,CAAC,CAAC,GAAK,EAAFa,GAAoB,OAAd4G,EAAE3E,EAAEkjE,WAAmB,CAAC,IAAIjmE,EAAE+C,EAAEm/E,cAAc5iF,EAAE,OAAO6C,EAAEA,EAAE+/E,cAAcliF,EAAEN,EAAEqD,EAAE8mB,KAAK7c,EAAEjK,EAAEihF,YACje,GAAnBjhF,EAAEihF,YAAY,KAAQ,OAAOh3E,EAAE,IAAI,UAAUtN,GAAG,UAAUM,EAAE6pB,MAAM,MAAM7pB,EAAEmuD,MAAM/nB,EAAG1+B,EAAE1H,GAAGslE,GAAG5lE,EAAEJ,GAAG,IAAIK,EAAE2lE,GAAG5lE,EAAEM,GAAG,IAAIV,EAAE,EAAEA,EAAE0N,EAAExc,OAAO8O,GAAG,EAAE,CAAC,IAAI0zB,EAAEhmB,EAAE1N,GAAGM,EAAEoN,EAAE1N,EAAE,GAAG,UAAU0zB,EAAEwxC,GAAG98D,EAAE9H,GAAG,4BAA4BozB,EAAEiuC,GAAGv5D,EAAE9H,GAAG,aAAaozB,EAAEuuC,GAAG75D,EAAE9H,GAAGi8D,EAAGn0D,EAAEsrB,EAAEpzB,EAAED,EAAE,CAAC,OAAOD,GAAG,IAAK,QAAQugE,EAAGv4D,EAAE1H,GAAG,MAAM,IAAK,WAAW4gE,GAAGl5D,EAAE1H,GAAG,MAAM,IAAK,SAAS,IAAIb,EAAEuI,EAAEk4D,cAAc2yB,YAAY7qF,EAAEk4D,cAAc2yB,cAAcvyF,EAAE47B,SAAS,IAAI9wB,EAAE9K,EAAEsH,MAAM,MAAMwD,EAAEu1D,GAAG34D,IAAI1H,EAAE47B,SAAS9wB,GAAE,GAAI3L,MAAMa,EAAE47B,WAAW,MAAM57B,EAAE2/D,aAAaU,GAAG34D,IAAI1H,EAAE47B,SACnf57B,EAAE2/D,cAAa,GAAIU,GAAG34D,IAAI1H,EAAE47B,SAAS57B,EAAE47B,SAAS,GAAG,IAAG,IAAKl0B,EAAE62E,IAAIv+E,CAAC,CAAC,MAAMC,GAAGszF,GAAExwF,EAAEA,EAAEukE,OAAOrnE,EAAE,CAAC,CAAC,MAAM,KAAK,EAAgB,GAAd00F,GAAGp1F,EAAEwD,GAAG8xF,GAAG9xF,GAAQ,EAAFjC,EAAI,CAAC,GAAG,OAAOiC,EAAEkjE,UAAU,MAAM/zE,MAAM2N,EAAE,MAAM6H,EAAE3E,EAAEkjE,UAAUjmE,EAAE+C,EAAEm/E,cAAc,IAAIx6E,EAAEg6D,UAAU1hE,CAAC,CAAC,MAAMC,GAAGszF,GAAExwF,EAAEA,EAAEukE,OAAOrnE,EAAE,CAAC,CAAC,MAAM,KAAK,EAAgB,GAAd00F,GAAGp1F,EAAEwD,GAAG8xF,GAAG9xF,GAAQ,EAAFjC,GAAK,OAAOqB,GAAGA,EAAEslE,cAAc2E,aAAa,IAAIO,GAAGptE,EAAE8sE,cAAc,CAAC,MAAMpsE,GAAGszF,GAAExwF,EAAEA,EAAEukE,OAAOrnE,EAAE,CAAC,MAAM,KAAK,EAG4G,QAAQ00F,GAAGp1F,EACnfwD,GAAG8xF,GAAG9xF,SAJ4Y,KAAK,GAAG4xF,GAAGp1F,EAAEwD,GAAG8xF,GAAG9xF,GAAqB,MAAlB2E,EAAE3E,EAAE2sD,OAAQ6X,QAAavnE,EAAE,OAAO0H,EAAE+/D,cAAc//D,EAAEu+D,UAAU6uB,SAAS90F,GAAGA,GAClf,OAAO0H,EAAE2/D,WAAW,OAAO3/D,EAAE2/D,UAAUI,gBAAgBstB,GAAGh7C,OAAQ,EAAFj5C,GAAK2zF,GAAG1xF,GAAG,MAAM,KAAK,GAAsF,GAAnFiwB,EAAE,OAAO7wB,GAAG,OAAOA,EAAEslE,cAAqB,EAAP1kE,EAAEuuC,MAAQ4hD,IAAGvzF,EAAEuzF,KAAIlgE,EAAE2hE,GAAGp1F,EAAEwD,GAAGmwF,GAAEvzF,GAAGg1F,GAAGp1F,EAAEwD,GAAG8xF,GAAG9xF,GAAQ,KAAFjC,EAAO,CAA0B,GAAzBnB,EAAE,OAAOoD,EAAE0kE,eAAkB1kE,EAAEkjE,UAAU6uB,SAASn1F,KAAKqzB,GAAG,KAAY,EAAPjwB,EAAEuuC,MAAQ,IAAI+hD,GAAEtwF,EAAEiwB,EAAEjwB,EAAE2sD,MAAM,OAAO18B,GAAG,CAAC,IAAIpzB,EAAEyzF,GAAErgE,EAAE,OAAOqgE,IAAG,CAAe,OAAVvoF,GAAJ3L,EAAEk0F,IAAM3jC,MAAavwD,EAAEmwD,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,GAAGokC,GAAG,EAAEv0F,EAAEA,EAAEmoE,QAAQ,MAAM,KAAK,EAAEgsB,GAAGn0F,EAAEA,EAAEmoE,QAAQ,IAAIhkE,EAAEnE,EAAE8mE,UAAU,GAAG,oBAAoB3iE,EAAEkxF,qBAAqB,CAAC1zF,EAAE3B,EAAEgD,EAAEhD,EAAEmoE,OAAO,IAAI/nE,EAAEuB,EAAEwC,EAAE2jD,MACpf1nD,EAAE2iF,cAAc5+E,EAAE+iF,MAAM9mF,EAAEkoE,cAAcnkE,EAAEkxF,sBAAsB,CAAC,MAAMv0F,GAAGszF,GAAEzyF,EAAEqB,EAAElC,EAAE,CAAC,CAAC,MAAM,KAAK,EAAEqzF,GAAGn0F,EAAEA,EAAEmoE,QAAQ,MAAM,KAAK,GAAG,GAAG,OAAOnoE,EAAEsoE,cAAc,CAACutB,GAAGp1F,GAAG,QAAQ,EAAE,OAAOkL,GAAGA,EAAEw8D,OAAOnoE,EAAEk0F,GAAEvoF,GAAGkqF,GAAGp1F,EAAE,CAACozB,EAAEA,EAAE60C,OAAO,CAAC9kE,EAAE,IAAIiwB,EAAE,KAAKpzB,EAAEmD,IAAI,CAAC,GAAG,IAAInD,EAAE0vD,KAAK,GAAG,OAAOt8B,EAAE,CAACA,EAAEpzB,EAAE,IAAI8H,EAAE9H,EAAEqmE,UAAUtmE,EAAa,oBAAVK,EAAE0H,EAAE+rD,OAA4BgR,YAAYzkE,EAAEykE,YAAY,UAAU,OAAO,aAAazkE,EAAEi1F,QAAQ,QAASv1F,EAAEE,EAAEqmE,UAAkC3mE,OAAE,KAA1B0N,EAAEpN,EAAEsiF,cAAczuB,QAAoB,OAAOzmD,GAAGA,EAAE6iD,eAAe,WAAW7iD,EAAEioF,QAAQ,KAAKv1F,EAAE+zD,MAAMwhC,QACzf1wB,GAAG,UAAUjlE,GAAG,CAAC,MAAMW,GAAGszF,GAAExwF,EAAEA,EAAEukE,OAAOrnE,EAAE,CAAC,OAAO,GAAG,IAAIL,EAAE0vD,KAAK,GAAG,OAAOt8B,EAAE,IAAIpzB,EAAEqmE,UAAUvE,UAAU/hE,EAAE,GAAGC,EAAEsiF,aAAa,CAAC,MAAMjiF,GAAGszF,GAAExwF,EAAEA,EAAEukE,OAAOrnE,EAAE,OAAO,IAAI,KAAKL,EAAE0vD,KAAK,KAAK1vD,EAAE0vD,KAAK,OAAO1vD,EAAE6nE,eAAe7nE,IAAImD,IAAI,OAAOnD,EAAE8vD,MAAM,CAAC9vD,EAAE8vD,MAAM4X,OAAO1nE,EAAEA,EAAEA,EAAE8vD,MAAM,QAAQ,CAAC,GAAG9vD,IAAImD,EAAE,MAAMA,EAAE,KAAK,OAAOnD,EAAEioE,SAAS,CAAC,GAAG,OAAOjoE,EAAE0nE,QAAQ1nE,EAAE0nE,SAASvkE,EAAE,MAAMA,EAAEiwB,IAAIpzB,IAAIozB,EAAE,MAAMpzB,EAAEA,EAAE0nE,MAAM,CAACt0C,IAAIpzB,IAAIozB,EAAE,MAAMpzB,EAAEioE,QAAQP,OAAO1nE,EAAE0nE,OAAO1nE,EAAEA,EAAEioE,OAAO,CAAC,CAAC,MAAM,KAAK,GAAG8sB,GAAGp1F,EAAEwD,GAAG8xF,GAAG9xF,GAAK,EAAFjC,GAAK2zF,GAAG1xF,GAAS,KAAK,IACtd,CAAC,SAAS8xF,GAAG9xF,GAAG,IAAIxD,EAAEwD,EAAEwkE,MAAM,GAAK,EAAFhoE,EAAI,CAAC,IAAIwD,EAAE,CAAC,IAAI,IAAIZ,EAAEY,EAAEukE,OAAO,OAAOnlE,GAAG,CAAC,GAAG2xF,GAAG3xF,GAAG,CAAC,IAAIrB,EAAEqB,EAAE,MAAMY,CAAC,CAACZ,EAAEA,EAAEmlE,MAAM,CAAC,MAAMp1E,MAAM2N,EAAE,KAAM,CAAC,OAAOiB,EAAEwuD,KAAK,KAAK,EAAE,IAAI5nD,EAAE5G,EAAEmlE,UAAkB,GAARnlE,EAAEymE,QAAWhG,GAAG75D,EAAE,IAAI5G,EAAEymE,QAAQ,IAAgB2sB,GAAGnxF,EAATgxF,GAAGhxF,GAAU2E,GAAG,MAAM,KAAK,EAAE,KAAK,EAAE,IAAIpI,EAAEwB,EAAEmlE,UAAUoG,cAAsB2nB,GAAGjxF,EAATgxF,GAAGhxF,GAAUzD,GAAG,MAAM,QAAQ,MAAMpN,MAAM2N,EAAE,MAAO,CAAC,MAAMmN,GAAGumF,GAAExwF,EAAEA,EAAEukE,OAAOt6D,EAAE,CAACjK,EAAEwkE,QAAQ,CAAC,CAAG,KAAFhoE,IAASwD,EAAEwkE,QAAQ,KAAK,CAAC,SAAS2tB,GAAGnyF,EAAExD,EAAE4C,GAAGkxF,GAAEtwF,EAAEoyF,GAAGpyF,EAAExD,EAAE4C,EAAE,CACvb,SAASgzF,GAAGpyF,EAAExD,EAAE4C,GAAG,IAAI,IAAIrB,EAAE,KAAY,EAAPiC,EAAEuuC,MAAQ,OAAO+hD,IAAG,CAAC,IAAI3rF,EAAE2rF,GAAErzF,EAAE0H,EAAEgoD,MAAM,GAAG,KAAKhoD,EAAE4nD,KAAKxuD,EAAE,CAAC,IAAIxB,EAAE,OAAOoI,EAAE+/D,eAAewrB,GAAG,IAAI3zF,EAAE,CAAC,IAAII,EAAEgI,EAAE2/D,UAAUr6D,EAAE,OAAOtN,GAAG,OAAOA,EAAE+nE,eAAeyrB,GAAExzF,EAAEuzF,GAAG,IAAItzF,EAAEuzF,GAAO,GAALD,GAAG3zF,GAAM4zF,GAAElmF,KAAKrN,EAAE,IAAI0zF,GAAE3rF,EAAE,OAAO2rF,IAAOrmF,GAAJ1N,EAAE+zF,IAAM3jC,MAAM,KAAKpwD,EAAEgwD,KAAK,OAAOhwD,EAAEmoE,cAAc2tB,GAAG1tF,GAAG,OAAOsF,GAAGA,EAAEs6D,OAAOhoE,EAAE+zF,GAAErmF,GAAGooF,GAAG1tF,GAAG,KAAK,OAAO1H,GAAGqzF,GAAErzF,EAAEm1F,GAAGn1F,EAAET,EAAE4C,GAAGnC,EAAEA,EAAE6nE,QAAQwrB,GAAE3rF,EAAEurF,GAAGvzF,EAAEwzF,GAAEvzF,CAAC,CAAC01F,GAAGtyF,EAAM,MAAM,KAAoB,KAAf2E,EAAEkqF,eAAoB,OAAO5xF,GAAGA,EAAEsnE,OAAO5/D,EAAE2rF,GAAErzF,GAAGq1F,GAAGtyF,EAAM,CAAC,CACvc,SAASsyF,GAAGtyF,GAAG,KAAK,OAAOswF,IAAG,CAAC,IAAI9zF,EAAE8zF,GAAE,GAAG,KAAa,KAAR9zF,EAAEgoE,OAAY,CAAC,IAAIplE,EAAE5C,EAAE8nE,UAAU,IAAI,GAAG,KAAa,KAAR9nE,EAAEgoE,OAAY,OAAOhoE,EAAE+vD,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG4jC,IAAGS,GAAG,EAAEp0F,GAAG,MAAM,KAAK,EAAE,IAAIuB,EAAEvB,EAAE0mE,UAAU,GAAW,EAAR1mE,EAAEgoE,QAAU2rB,GAAE,GAAG,OAAO/wF,EAAErB,EAAEimF,wBAAwB,CAAC,IAAIr/E,EAAEnI,EAAEiiF,cAAcjiF,EAAEsqB,KAAK1nB,EAAE+/E,cAAcK,GAAGhjF,EAAEsqB,KAAK1nB,EAAE+/E,eAAephF,EAAEwvF,mBAAmB5oF,EAAEvF,EAAEslE,cAAc3mE,EAAEw0F,oCAAoC,CAAC,IAAIt1F,EAAET,EAAEykF,YAAY,OAAOhkF,GAAGklF,GAAG3lF,EAAES,EAAEc,GAAG,MAAM,KAAK,EAAE,IAAIxB,EAAEC,EAAEykF,YAAY,GAAG,OAAO1kF,EAAE,CAAQ,GAAP6C,EAAE,KAAQ,OAAO5C,EAAEmwD,MAAM,OAAOnwD,EAAEmwD,MAAMJ,KAAK,KAAK,EACvf,KAAK,EAAEntD,EAAE5C,EAAEmwD,MAAMuW,UAAUif,GAAG3lF,EAAED,EAAE6C,EAAE,CAAC,MAAM,KAAK,EAAE,IAAIzC,EAAEH,EAAE0mE,UAAU,GAAG,OAAO9jE,GAAW,EAAR5C,EAAEgoE,MAAQ,CAACplE,EAAEzC,EAAE,IAAIsN,EAAEzN,EAAE2iF,cAAc,OAAO3iF,EAAEsqB,MAAM,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAW7c,EAAE4lF,WAAWzwF,EAAEw3E,QAAQ,MAAM,IAAK,MAAM3sE,EAAE27C,MAAMxmD,EAAEwmD,IAAI37C,EAAE27C,KAAK,CAAC,MAAM,KAAK,EAAQ,KAAK,EAAQ,KAAK,GAAyJ,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAhM,KAAK,GAAG,GAAG,OAAOppD,EAAEkoE,cAAc,CAAC,IAAI9nE,EAAEJ,EAAE8nE,UAAU,GAAG,OAAO1nE,EAAE,CAAC,IAAIqzB,EAAErzB,EAAE8nE,cAAc,GAAG,OAAOz0C,EAAE,CAAC,IAAIpzB,EAAEozB,EAAE00C,WAAW,OAAO9nE,GAAG+sE,GAAG/sE,EAAE,CAAC,CAAC,CAAC,MAC5c,QAAQ,MAAM1N,MAAM2N,EAAE,MAAOqzF,IAAW,IAAR3zF,EAAEgoE,OAAWqsB,GAAGr0F,EAAE,CAAC,MAAMJ,GAAGo0F,GAAEh0F,EAAEA,EAAE+nE,OAAOnoE,EAAE,CAAC,CAAC,GAAGI,IAAIwD,EAAE,CAACswF,GAAE,KAAK,KAAK,CAAa,GAAG,QAAflxF,EAAE5C,EAAEsoE,SAAoB,CAAC1lE,EAAEmlE,OAAO/nE,EAAE+nE,OAAO+rB,GAAElxF,EAAE,KAAK,CAACkxF,GAAE9zF,EAAE+nE,MAAM,CAAC,CAAC,SAAS0tB,GAAGjyF,GAAG,KAAK,OAAOswF,IAAG,CAAC,IAAI9zF,EAAE8zF,GAAE,GAAG9zF,IAAIwD,EAAE,CAACswF,GAAE,KAAK,KAAK,CAAC,IAAIlxF,EAAE5C,EAAEsoE,QAAQ,GAAG,OAAO1lE,EAAE,CAACA,EAAEmlE,OAAO/nE,EAAE+nE,OAAO+rB,GAAElxF,EAAE,KAAK,CAACkxF,GAAE9zF,EAAE+nE,MAAM,CAAC,CACvS,SAAS8tB,GAAGryF,GAAG,KAAK,OAAOswF,IAAG,CAAC,IAAI9zF,EAAE8zF,GAAE,IAAI,OAAO9zF,EAAE+vD,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAG,IAAIntD,EAAE5C,EAAE+nE,OAAO,IAAIqsB,GAAG,EAAEp0F,EAAE,CAAC,MAAMyN,GAAGumF,GAAEh0F,EAAE4C,EAAE6K,EAAE,CAAC,MAAM,KAAK,EAAE,IAAIlM,EAAEvB,EAAE0mE,UAAU,GAAG,oBAAoBnlE,EAAEimF,kBAAkB,CAAC,IAAIr/E,EAAEnI,EAAE+nE,OAAO,IAAIxmE,EAAEimF,mBAAmB,CAAC,MAAM/5E,GAAGumF,GAAEh0F,EAAEmI,EAAEsF,EAAE,CAAC,CAAC,IAAIhN,EAAET,EAAE+nE,OAAO,IAAIssB,GAAGr0F,EAAE,CAAC,MAAMyN,GAAGumF,GAAEh0F,EAAES,EAAEgN,EAAE,CAAC,MAAM,KAAK,EAAE,IAAI1N,EAAEC,EAAE+nE,OAAO,IAAIssB,GAAGr0F,EAAE,CAAC,MAAMyN,GAAGumF,GAAEh0F,EAAED,EAAE0N,EAAE,EAAE,CAAC,MAAMA,GAAGumF,GAAEh0F,EAAEA,EAAE+nE,OAAOt6D,EAAE,CAAC,GAAGzN,IAAIwD,EAAE,CAACswF,GAAE,KAAK,KAAK,CAAC,IAAI3zF,EAAEH,EAAEsoE,QAAQ,GAAG,OAAOnoE,EAAE,CAACA,EAAE4nE,OAAO/nE,EAAE+nE,OAAO+rB,GAAE3zF,EAAE,KAAK,CAAC2zF,GAAE9zF,EAAE+nE,MAAM,CAAC,CAC7d,IAwBkNiuB,GAxB9MC,GAAG11F,KAAK8L,KAAK6pF,GAAGh2E,EAAGspE,uBAAuB2M,GAAGj2E,EAAGyvE,kBAAkByG,GAAGl2E,EAAGotD,wBAAwBgY,GAAE,EAAEqG,GAAE,KAAK0K,GAAE,KAAKC,GAAE,EAAE7F,GAAG,EAAED,GAAGnR,GAAG,GAAGiU,GAAE,EAAEiD,GAAG,KAAK7Q,GAAG,EAAE8Q,GAAG,EAAEC,GAAG,EAAEnpF,GAAG,KAAKopF,GAAG,KAAKlB,GAAG,EAAEjC,GAAG1/D,IAAS8iE,GAAG,KAAK7H,IAAG,EAAGC,GAAG,KAAKI,GAAG,KAAKyH,IAAG,EAAGC,GAAG,KAAKC,GAAG,EAAEC,GAAG,EAAEC,GAAG,KAAKC,IAAI,EAAEC,GAAG,EAAE,SAAS9Q,KAAI,OAAO,KAAO,EAAFd,IAAK9qC,MAAK,IAAIy8C,GAAGA,GAAGA,GAAGz8C,IAAG,CAChU,SAAS6rC,GAAG7iF,GAAG,OAAG,KAAY,EAAPA,EAAEuuC,MAAe,EAAK,KAAO,EAAFuzC,KAAM,IAAIgR,GAASA,IAAGA,GAAK,OAAOvT,GAAGtV,YAAkB,IAAIypB,KAAKA,GAAGpsB,MAAMosB,IAAU,KAAP1zF,EAAEi3C,IAAkBj3C,EAAiBA,OAAE,KAAjBA,EAAE0qD,OAAO6oB,OAAmB,GAAG/I,GAAGxqE,EAAE8mB,KAAc,CAAC,SAASg8D,GAAG9iF,EAAExD,EAAE4C,EAAErB,GAAG,GAAG,GAAGw1F,GAAG,MAAMA,GAAG,EAAEC,GAAG,KAAKrkG,MAAM2N,EAAE,MAAM0qE,GAAGxnE,EAAEZ,EAAErB,GAAM,KAAO,EAAF+jF,KAAM9hF,IAAImoF,KAAEnoF,IAAImoF,KAAI,KAAO,EAAFrG,MAAOkR,IAAI5zF,GAAG,IAAI0wF,IAAG6D,GAAG3zF,EAAE8yF,KAAIc,GAAG5zF,EAAEjC,GAAG,IAAIqB,GAAG,IAAI0iF,IAAG,KAAY,EAAPtlF,EAAE+xC,QAAUwhD,GAAG/4C,KAAI,IAAIkmC,IAAIG,MAAK,CAC1Y,SAASuW,GAAG5zF,EAAExD,GAAG,IAAI4C,EAAEY,EAAE6zF,cA5MzB,SAAY7zF,EAAExD,GAAG,IAAI,IAAI4C,EAAEY,EAAEgnE,eAAejpE,EAAEiC,EAAEinE,YAAYtiE,EAAE3E,EAAE8zF,gBAAgB72F,EAAE+C,EAAE+mE,aAAa,EAAE9pE,GAAG,CAAC,IAAIV,EAAE,GAAGgqE,GAAGtpE,GAAGN,EAAE,GAAGJ,EAAE0N,EAAEtF,EAAEpI,IAAO,IAAI0N,EAAM,KAAKtN,EAAEyC,IAAI,KAAKzC,EAAEoB,KAAG4G,EAAEpI,GAAG6qE,GAAGzqE,EAAEH,IAAQyN,GAAGzN,IAAIwD,EAAE+zF,cAAcp3F,GAAGM,IAAIN,CAAC,CAAC,CA4MnLq3F,CAAGh0F,EAAExD,GAAG,IAAIuB,EAAE+oE,GAAG9mE,EAAEA,IAAImoF,GAAE2K,GAAE,GAAG,GAAG,IAAI/0F,EAAE,OAAOqB,GAAG+lE,GAAG/lE,GAAGY,EAAE6zF,aAAa,KAAK7zF,EAAEi0F,iBAAiB,OAAO,GAAGz3F,EAAEuB,GAAGA,EAAEiC,EAAEi0F,mBAAmBz3F,EAAE,CAAgB,GAAf,MAAM4C,GAAG+lE,GAAG/lE,GAAM,IAAI5C,EAAE,IAAIwD,EAAEusD,IA7IsJ,SAAYvsD,GAAGk9E,IAAG,EAAGE,GAAGp9E,EAAE,CA6I5Kk0F,CAAGC,GAAGpb,KAAK,KAAK/4E,IAAIo9E,GAAG+W,GAAGpb,KAAK,KAAK/4E,IAAI46E,IAAG,WAAW,KAAO,EAAFkH,KAAMzE,IAAI,IAAGj+E,EAAE,SAAS,CAAC,OAAOuoE,GAAG5pE,IAAI,KAAK,EAAEqB,EAAEumE,GAAG,MAAM,KAAK,EAAEvmE,EAAEymE,GAAG,MAAM,KAAK,GAAwC,QAAQzmE,EAAE2mE,SAApC,KAAK,UAAU3mE,EAAE+mE,GAAsB/mE,EAAEg1F,GAAGh1F,EAAEi1F,GAAGtb,KAAK,KAAK/4E,GAAG,CAACA,EAAEi0F,iBAAiBz3F,EAAEwD,EAAE6zF,aAAaz0F,CAAC,CAAC,CAC7c,SAASi1F,GAAGr0F,EAAExD,GAAc,GAAXi3F,IAAI,EAAEC,GAAG,EAAK,KAAO,EAAF5R,IAAK,MAAM3yF,MAAM2N,EAAE,MAAM,IAAIsC,EAAEY,EAAE6zF,aAAa,GAAGS,MAAMt0F,EAAE6zF,eAAez0F,EAAE,OAAO,KAAK,IAAIrB,EAAE+oE,GAAG9mE,EAAEA,IAAImoF,GAAE2K,GAAE,GAAG,GAAG,IAAI/0F,EAAE,OAAO,KAAK,GAAG,KAAO,GAAFA,IAAO,KAAKA,EAAEiC,EAAE+zF,eAAev3F,EAAEA,EAAE+3F,GAAGv0F,EAAEjC,OAAO,CAACvB,EAAEuB,EAAE,IAAI4G,EAAEm9E,GAAEA,IAAG,EAAE,IAAI7kF,EAAEu3F,KAAgD,IAAxCrM,KAAInoF,GAAG8yF,KAAIt2F,IAAE22F,GAAG,KAAKpD,GAAG/4C,KAAI,IAAIy9C,GAAGz0F,EAAExD,UAAUk4F,KAAK,KAAK,CAAC,MAAM/3F,GAAGg4F,GAAG30F,EAAErD,EAAE,CAAUmjF,KAAK4S,GAAGryF,QAAQpD,EAAE6kF,GAAEn9E,EAAE,OAAOkuF,GAAEr2F,EAAE,GAAG2rF,GAAE,KAAK2K,GAAE,EAAEt2F,EAAEszF,GAAE,CAAC,GAAG,IAAItzF,EAAE,CAAyC,GAAxC,IAAIA,IAAY,KAARmI,EAAE0iE,GAAGrnE,MAAWjC,EAAE4G,EAAEnI,EAAEo4F,GAAG50F,EAAE2E,KAAQ,IAAInI,EAAE,MAAM4C,EAAE2zF,GAAG0B,GAAGz0F,EAAE,GAAG2zF,GAAG3zF,EAAEjC,GAAG61F,GAAG5zF,EAAEg3C,MAAK53C,EAAE,GAAG,IAAI5C,EAAEm3F,GAAG3zF,EAAEjC,OAChf,CAAuB,GAAtB4G,EAAE3E,EAAEK,QAAQikE,UAAa,KAAO,GAAFvmE,KAGnC,SAAYiC,GAAG,IAAI,IAAIxD,EAAEwD,IAAI,CAAC,GAAW,MAARxD,EAAEgoE,MAAY,CAAC,IAAIplE,EAAE5C,EAAEykF,YAAY,GAAG,OAAO7hF,GAAe,QAAXA,EAAEA,EAAEkpF,QAAiB,IAAI,IAAIvqF,EAAE,EAAEA,EAAEqB,EAAE3R,OAAOsQ,IAAI,CAAC,IAAI4G,EAAEvF,EAAErB,GAAGd,EAAE0H,EAAEqjF,YAAYrjF,EAAEA,EAAEJ,MAAM,IAAI,IAAIowE,GAAG13E,IAAI0H,GAAG,OAAM,CAAE,CAAC,MAAMpI,GAAG,OAAM,CAAE,CAAC,CAAC,CAAW,GAAV6C,EAAE5C,EAAEmwD,MAAwB,MAAfnwD,EAAEqyF,cAAoB,OAAOzvF,EAAEA,EAAEmlE,OAAO/nE,EAAEA,EAAE4C,MAAM,CAAC,GAAG5C,IAAIwD,EAAE,MAAM,KAAK,OAAOxD,EAAEsoE,SAAS,CAAC,GAAG,OAAOtoE,EAAE+nE,QAAQ/nE,EAAE+nE,SAASvkE,EAAE,OAAM,EAAGxD,EAAEA,EAAE+nE,MAAM,CAAC/nE,EAAEsoE,QAAQP,OAAO/nE,EAAE+nE,OAAO/nE,EAAEA,EAAEsoE,OAAO,CAAC,CAAC,OAAM,CAAE,CAHvX+vB,CAAGlwF,KAAe,KAAVnI,EAAE+3F,GAAGv0F,EAAEjC,MAAmB,KAARd,EAAEoqE,GAAGrnE,MAAWjC,EAAEd,EAAET,EAAEo4F,GAAG50F,EAAE/C,KAAK,IAAIT,GAAG,MAAM4C,EAAE2zF,GAAG0B,GAAGz0F,EAAE,GAAG2zF,GAAG3zF,EAAEjC,GAAG61F,GAAG5zF,EAAEg3C,MAAK53C,EAAqC,OAAnCY,EAAE80F,aAAanwF,EAAE3E,EAAE+0F,cAAch3F,EAASvB,GAAG,KAAK,EAAE,KAAK,EAAE,MAAMrN,MAAM2N,EAAE,MAAM,KAAK,EAC8B,KAAK,EAAEk4F,GAAGh1F,EAAEkzF,GAAGC,IAAI,MAD7B,KAAK,EAAU,GAARQ,GAAG3zF,EAAEjC,IAAS,UAAFA,KAAeA,GAAiB,IAAbvB,EAAEw1F,GAAG,IAAIh7C,MAAU,CAAC,GAAG,IAAI8vB,GAAG9mE,EAAE,GAAG,MAAyB,KAAnB2E,EAAE3E,EAAEgnE,gBAAqBjpE,KAAKA,EAAE,CAAC6kF,KAAI5iF,EAAEinE,aAAajnE,EAAEgnE,eAAeriE,EAAE,KAAK,CAAC3E,EAAEi1F,cAAc1a,GAAGya,GAAGjc,KAAK,KAAK/4E,EAAEkzF,GAAGC,IAAI32F,GAAG,KAAK,CAACw4F,GAAGh1F,EAAEkzF,GAAGC,IAAI,MAAM,KAAK,EAAU,GAARQ,GAAG3zF,EAAEjC,IAAS,QAAFA,KAC9eA,EAAE,MAAqB,IAAfvB,EAAEwD,EAAEynE,WAAe9iE,GAAG,EAAE,EAAE5G,GAAG,CAAC,IAAIxB,EAAE,GAAGgqE,GAAGxoE,GAAGd,EAAE,GAAGV,GAAEA,EAAEC,EAAED,IAAKoI,IAAIA,EAAEpI,GAAGwB,IAAId,CAAC,CAAqG,GAApGc,EAAE4G,EAAqG,IAA3F5G,GAAG,KAAXA,EAAEi5C,KAAIj5C,GAAW,IAAI,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAKA,EAAE,KAAK,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAK00F,GAAG10F,EAAE,OAAOA,GAAU,CAACiC,EAAEi1F,cAAc1a,GAAGya,GAAGjc,KAAK,KAAK/4E,EAAEkzF,GAAGC,IAAIp1F,GAAG,KAAK,CAACi3F,GAAGh1F,EAAEkzF,GAAGC,IAAI,MAA+B,QAAQ,MAAMhkG,MAAM2N,EAAE,MAAO,CAAC,CAAW,OAAV82F,GAAG5zF,EAAEg3C,MAAYh3C,EAAE6zF,eAAez0F,EAAEi1F,GAAGtb,KAAK,KAAK/4E,GAAG,IAAI,CACrX,SAAS40F,GAAG50F,EAAExD,GAAG,IAAI4C,EAAE0K,GAA2G,OAAxG9J,EAAEK,QAAQqkE,cAAc2E,eAAeorB,GAAGz0F,EAAExD,GAAGgoE,OAAO,KAAe,KAAVxkE,EAAEu0F,GAAGv0F,EAAExD,MAAWA,EAAE02F,GAAGA,GAAG9zF,EAAE,OAAO5C,GAAG+yF,GAAG/yF,IAAWwD,CAAC,CAAC,SAASuvF,GAAGvvF,GAAG,OAAOkzF,GAAGA,GAAGlzF,EAAEkzF,GAAG7lG,KAAKqgB,MAAMwlF,GAAGlzF,EAAE,CAE5L,SAAS2zF,GAAG3zF,EAAExD,GAAuD,IAApDA,IAAIy2F,GAAGz2F,IAAIw2F,GAAGhzF,EAAEgnE,gBAAgBxqE,EAAEwD,EAAEinE,cAAczqE,EAAMwD,EAAEA,EAAE8zF,gBAAgB,EAAEt3F,GAAG,CAAC,IAAI4C,EAAE,GAAGmnE,GAAG/pE,GAAGuB,EAAE,GAAGqB,EAAEY,EAAEZ,IAAI,EAAE5C,IAAIuB,CAAC,CAAC,CAAC,SAASo2F,GAAGn0F,GAAG,GAAG,KAAO,EAAF8hF,IAAK,MAAM3yF,MAAM2N,EAAE,MAAMw3F,KAAK,IAAI93F,EAAEsqE,GAAG9mE,EAAE,GAAG,GAAG,KAAO,EAAFxD,GAAK,OAAOo3F,GAAG5zF,EAAEg3C,MAAK,KAAK,IAAI53C,EAAEm1F,GAAGv0F,EAAExD,GAAG,GAAG,IAAIwD,EAAEusD,KAAK,IAAIntD,EAAE,CAAC,IAAIrB,EAAEspE,GAAGrnE,GAAG,IAAIjC,IAAIvB,EAAEuB,EAAEqB,EAAEw1F,GAAG50F,EAAEjC,GAAG,CAAC,GAAG,IAAIqB,EAAE,MAAMA,EAAE2zF,GAAG0B,GAAGz0F,EAAE,GAAG2zF,GAAG3zF,EAAExD,GAAGo3F,GAAG5zF,EAAEg3C,MAAK53C,EAAE,GAAG,IAAIA,EAAE,MAAMjQ,MAAM2N,EAAE,MAAiF,OAA3EkD,EAAE80F,aAAa90F,EAAEK,QAAQikE,UAAUtkE,EAAE+0F,cAAcv4F,EAAEw4F,GAAGh1F,EAAEkzF,GAAGC,IAAIS,GAAG5zF,EAAEg3C,MAAY,IAAI,CACvd,SAASk+C,GAAGl1F,EAAExD,GAAG,IAAI4C,EAAE0iF,GAAEA,IAAG,EAAE,IAAI,OAAO9hF,EAAExD,EAAE,CAAC,QAAY,KAAJslF,GAAE1iF,KAAU2wF,GAAG/4C,KAAI,IAAIkmC,IAAIG,KAAK,CAAC,CAAC,SAAS8X,GAAGn1F,GAAG,OAAOqzF,IAAI,IAAIA,GAAG9mC,KAAK,KAAO,EAAFu1B,KAAMwS,KAAK,IAAI93F,EAAEslF,GAAEA,IAAG,EAAE,IAAI1iF,EAAEwzF,GAAG3oB,WAAWlsE,EAAEk5C,GAAE,IAAI,GAAG27C,GAAG3oB,WAAW,KAAKhzB,GAAE,EAAEj3C,EAAE,OAAOA,GAAG,CAAC,QAAQi3C,GAAEl5C,EAAE60F,GAAG3oB,WAAW7qE,EAAM,KAAO,GAAX0iF,GAAEtlF,KAAa6gF,IAAI,CAAC,CAAC,SAAS2S,KAAK/C,GAAGD,GAAG3sF,QAAQy7E,GAAEkR,GAAG,CAChT,SAASyH,GAAGz0F,EAAExD,GAAGwD,EAAE80F,aAAa,KAAK90F,EAAE+0F,cAAc,EAAE,IAAI31F,EAAEY,EAAEi1F,cAAiD,IAAlC,IAAI71F,IAAIY,EAAEi1F,eAAe,EAAEza,GAAGp7E,IAAO,OAAOyzF,GAAE,IAAIzzF,EAAEyzF,GAAEtuB,OAAO,OAAOnlE,GAAG,CAAC,IAAIrB,EAAEqB,EAAQ,OAAN8+E,GAAGngF,GAAUA,EAAEwuD,KAAK,KAAK,EAA6B,QAA3BxuD,EAAEA,EAAE+oB,KAAK21D,yBAA4B,IAAS1+E,GAAG2+E,KAAK,MAAM,KAAK,EAAE4I,KAAKxJ,GAAEI,IAAIJ,GAAEG,IAAG4J,KAAK,MAAM,KAAK,EAAEL,GAAGznF,GAAG,MAAM,KAAK,EAAEunF,KAAK,MAAM,KAAK,GAAc,KAAK,GAAGxJ,GAAE2J,IAAG,MAAM,KAAK,GAAG1F,GAAGhiF,EAAE+oB,KAAKu0C,UAAU,MAAM,KAAK,GAAG,KAAK,GAAG20B,KAAK5wF,EAAEA,EAAEmlE,MAAM,CAAqE,GAApE4jB,GAAEnoF,EAAE6yF,GAAE7yF,EAAEukF,GAAGvkF,EAAEK,QAAQ,MAAMyyF,GAAE7F,GAAGzwF,EAAEszF,GAAE,EAAEiD,GAAG,KAAKE,GAAGD,GAAG9Q,GAAG,EAAEgR,GAAGppF,GAAG,KAAQ,OAAO42E,GAAG,CAAC,IAAIlkF,EAC1f,EAAEA,EAAEkkF,GAAGjzF,OAAO+O,IAAI,GAA2B,QAAhBuB,GAARqB,EAAEshF,GAAGlkF,IAAOqkF,aAAqB,CAACzhF,EAAEyhF,YAAY,KAAK,IAAIl8E,EAAE5G,EAAEiyB,KAAK/yB,EAAEmC,EAAEkiF,QAAQ,GAAG,OAAOrkF,EAAE,CAAC,IAAIV,EAAEU,EAAE+yB,KAAK/yB,EAAE+yB,KAAKrrB,EAAE5G,EAAEiyB,KAAKzzB,CAAC,CAAC6C,EAAEkiF,QAAQvjF,CAAC,CAAC2iF,GAAG,IAAI,CAAC,OAAO1gF,CAAC,CAC3K,SAAS20F,GAAG30F,EAAExD,GAAG,OAAE,CAAC,IAAI4C,EAAEyzF,GAAE,IAAuB,GAAnB/S,KAAKiG,GAAG1lF,QAAQ2mF,GAAMV,GAAG,CAAC,IAAI,IAAIvoF,EAAEooF,GAAEzhB,cAAc,OAAO3mE,GAAG,CAAC,IAAI4G,EAAE5G,EAAE0mB,MAAM,OAAO9f,IAAIA,EAAE28E,QAAQ,MAAMvjF,EAAEA,EAAEiyB,IAAI,CAACs2D,IAAG,CAAE,CAA4C,GAA3CJ,GAAG,EAAEG,GAAED,GAAED,GAAE,KAAKI,IAAG,EAAGC,GAAG,EAAEmM,GAAGtyF,QAAQ,KAAQ,OAAOjB,GAAG,OAAOA,EAAEmlE,OAAO,CAACurB,GAAE,EAAEiD,GAAGv2F,EAAEq2F,GAAE,KAAK,KAAK,CAAC7yF,EAAE,CAAC,IAAI/C,EAAE+C,EAAEzD,EAAE6C,EAAEmlE,OAAO5nE,EAAEyC,EAAE6K,EAAEzN,EAAqB,GAAnBA,EAAEs2F,GAAEn2F,EAAE6nE,OAAO,MAAS,OAAOv6D,GAAG,kBAAkBA,GAAG,oBAAoBA,EAAE8wE,KAAK,CAAC,IAAIn+E,EAAEqN,EAAEgmB,EAAEtzB,EAAEE,EAAEozB,EAAEs8B,IAAI,GAAG,KAAY,EAAPt8B,EAAEse,QAAU,IAAI1xC,GAAG,KAAKA,GAAG,KAAKA,GAAG,CAAC,IAAIT,EAAE6zB,EAAEq0C,UAAUloE,GAAG6zB,EAAEgxD,YAAY7kF,EAAE6kF,YAAYhxD,EAAEy0C,cAActoE,EAAEsoE,cACxez0C,EAAEqwD,MAAMlkF,EAAEkkF,QAAQrwD,EAAEgxD,YAAY,KAAKhxD,EAAEy0C,cAAc,KAAK,CAAC,IAAI38D,EAAEikF,GAAGzvF,GAAG,GAAG,OAAOwL,EAAE,CAACA,EAAEy8D,QAAQ,IAAIynB,GAAGlkF,EAAExL,EAAEI,EAAEM,EAAET,GAAU,EAAPuL,EAAEwmC,MAAQs9C,GAAG5uF,EAAEL,EAAEJ,GAAOyN,EAAErN,EAAE,IAAI2D,GAAZ/D,EAAEuL,GAAck5E,YAAY,GAAG,OAAO1gF,EAAE,CAAC,IAAIrD,EAAE,IAAIumC,IAAIvmC,EAAEoL,IAAI2B,GAAGzN,EAAEykF,YAAY/jF,CAAC,MAAMqD,EAAE+H,IAAI2B,GAAG,MAAMjK,CAAC,CAAM,GAAG,KAAO,EAAFxD,GAAK,CAACqvF,GAAG5uF,EAAEL,EAAEJ,GAAGiyF,KAAK,MAAMzuF,CAAC,CAACiK,EAAE9a,MAAM2N,EAAE,KAAM,MAAM,GAAGuhF,IAAU,EAAP1hF,EAAE4xC,KAAO,CAAC,IAAI2qC,EAAE8S,GAAGzvF,GAAG,GAAG,OAAO28E,EAAE,CAAC,KAAa,MAARA,EAAE1U,SAAe0U,EAAE1U,OAAO,KAAKynB,GAAG/S,EAAE38E,EAAEI,EAAEM,EAAET,GAAG8iF,GAAGyL,GAAG9gF,EAAEtN,IAAI,MAAMqD,CAAC,CAAC,CAAC/C,EAAEgN,EAAE8gF,GAAG9gF,EAAEtN,GAAG,IAAImzF,KAAIA,GAAE,GAAG,OAAOhmF,GAAGA,GAAG,CAAC7M,GAAG6M,GAAGzc,KAAK4P,GAAGA,EAAEV,EAAE,EAAE,CAAC,OAAOU,EAAEsvD,KAAK,KAAK,EAAEtvD,EAAEunE,OAAO,MACpfhoE,IAAIA,EAAES,EAAEqjF,OAAO9jF,EAAkBwlF,GAAG/kF,EAAbouF,GAAGpuF,EAAEgN,EAAEzN,IAAW,MAAMwD,EAAE,KAAK,EAAErD,EAAEsN,EAAE,IAAI0Q,EAAE1d,EAAE6pB,KAAKvW,EAAEtT,EAAEimE,UAAU,GAAG,KAAa,IAARjmE,EAAEunE,SAAa,oBAAoB7pD,EAAE8wE,0BAA0B,OAAOl7E,GAAG,oBAAoBA,EAAEm7E,oBAAoB,OAAOC,KAAKA,GAAG5oF,IAAIwN,KAAK,CAACtT,EAAEunE,OAAO,MAAMhoE,IAAIA,EAAES,EAAEqjF,OAAO9jF,EAAkBwlF,GAAG/kF,EAAbuuF,GAAGvuF,EAAEN,EAAEH,IAAW,MAAMwD,CAAC,EAAE/C,EAAEA,EAAEsnE,MAAM,OAAO,OAAOtnE,EAAE,CAACm4F,GAAGh2F,EAAE,CAAC,MAAMq6E,GAAIj9E,EAAEi9E,EAAGoZ,KAAIzzF,GAAG,OAAOA,IAAIyzF,GAAEzzF,EAAEA,EAAEmlE,QAAQ,QAAQ,CAAC,KAAK,CAAS,CAAC,SAASiwB,KAAK,IAAIx0F,EAAE0yF,GAAGryF,QAAsB,OAAdqyF,GAAGryF,QAAQ2mF,GAAU,OAAOhnF,EAAEgnF,GAAGhnF,CAAC,CACrd,SAASyuF,KAAQ,IAAIqB,IAAG,IAAIA,IAAG,IAAIA,KAAEA,GAAE,GAAE,OAAO3H,IAAG,KAAQ,UAAHjG,KAAe,KAAQ,UAAH8Q,KAAeW,GAAGxL,GAAE2K,GAAE,CAAC,SAASyB,GAAGv0F,EAAExD,GAAG,IAAI4C,EAAE0iF,GAAEA,IAAG,EAAE,IAAI/jF,EAAEy2F,KAAqC,IAA7BrM,KAAInoF,GAAG8yF,KAAIt2F,IAAE22F,GAAG,KAAKsB,GAAGz0F,EAAExD,UAAU64F,KAAK,KAAK,CAAC,MAAM1wF,GAAGgwF,GAAG30F,EAAE2E,EAAE,CAAgC,GAAtBm7E,KAAKgC,GAAE1iF,EAAEszF,GAAGryF,QAAQtC,EAAK,OAAO80F,GAAE,MAAM1jG,MAAM2N,EAAE,MAAiB,OAAXqrF,GAAE,KAAK2K,GAAE,EAAShD,EAAC,CAAC,SAASuF,KAAK,KAAK,OAAOxC,IAAGyC,GAAGzC,GAAE,CAAC,SAAS6B,KAAK,KAAK,OAAO7B,KAAI17B,MAAMm+B,GAAGzC,GAAE,CAAC,SAASyC,GAAGt1F,GAAG,IAAIxD,EAAEg2F,GAAGxyF,EAAEskE,UAAUtkE,EAAEitF,IAAIjtF,EAAEm/E,cAAcn/E,EAAE4+E,aAAa,OAAOpiF,EAAE44F,GAAGp1F,GAAG6yF,GAAEr2F,EAAEm2F,GAAGtyF,QAAQ,IAAI,CAC1d,SAAS+0F,GAAGp1F,GAAG,IAAIxD,EAAEwD,EAAE,EAAE,CAAC,IAAIZ,EAAE5C,EAAE8nE,UAAqB,GAAXtkE,EAAExD,EAAE+nE,OAAU,KAAa,MAAR/nE,EAAEgoE,QAAc,GAAgB,QAAbplE,EAAEkwF,GAAGlwF,EAAE5C,EAAEywF,KAAkB,YAAJ4F,GAAEzzF,OAAc,CAAW,GAAG,QAAbA,EAAE6wF,GAAG7wF,EAAE5C,IAAmC,OAAnB4C,EAAEolE,OAAO,WAAMquB,GAAEzzF,GAAS,GAAG,OAAOY,EAAmE,OAAX8vF,GAAE,OAAE+C,GAAE,MAA5D7yF,EAAEwkE,OAAO,MAAMxkE,EAAE6uF,aAAa,EAAE7uF,EAAE0+E,UAAU,IAA4B,CAAa,GAAG,QAAfliF,EAAEA,EAAEsoE,SAAyB,YAAJ+tB,GAAEr2F,GAASq2F,GAAEr2F,EAAEwD,CAAC,OAAO,OAAOxD,GAAG,IAAIszF,KAAIA,GAAE,EAAE,CAAC,SAASkF,GAAGh1F,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEk5C,GAAEtyC,EAAEiuF,GAAG3oB,WAAW,IAAI2oB,GAAG3oB,WAAW,KAAKhzB,GAAE,EAC3Y,SAAYj3C,EAAExD,EAAE4C,EAAErB,GAAG,GAAGu2F,WAAW,OAAOjB,IAAI,GAAG,KAAO,EAAFvR,IAAK,MAAM3yF,MAAM2N,EAAE,MAAMsC,EAAEY,EAAE80F,aAAa,IAAInwF,EAAE3E,EAAE+0F,cAAc,GAAG,OAAO31F,EAAE,OAAO,KAA2C,GAAtCY,EAAE80F,aAAa,KAAK90F,EAAE+0F,cAAc,EAAK31F,IAAIY,EAAEK,QAAQ,MAAMlR,MAAM2N,EAAE,MAAMkD,EAAE6zF,aAAa,KAAK7zF,EAAEi0F,iBAAiB,EAAE,IAAIh3F,EAAEmC,EAAEkhF,MAAMlhF,EAAE8gF,WAA8J,GA1NtT,SAAYlgF,EAAExD,GAAG,IAAI4C,EAAEY,EAAE+mE,cAAcvqE,EAAEwD,EAAE+mE,aAAavqE,EAAEwD,EAAEgnE,eAAe,EAAEhnE,EAAEinE,YAAY,EAAEjnE,EAAE+zF,cAAcv3F,EAAEwD,EAAEu1F,kBAAkB/4F,EAAEwD,EAAEknE,gBAAgB1qE,EAAEA,EAAEwD,EAAEmnE,cAAc,IAAIppE,EAAEiC,EAAEynE,WAAW,IAAIznE,EAAEA,EAAE8zF,gBAAgB,EAAE10F,GAAG,CAAC,IAAIuF,EAAE,GAAG4hE,GAAGnnE,GAAGnC,EAAE,GAAG0H,EAAEnI,EAAEmI,GAAG,EAAE5G,EAAE4G,IAAI,EAAE3E,EAAE2E,IAAI,EAAEvF,IAAInC,CAAC,CAAC,CA0N5Gu4F,CAAGx1F,EAAE/C,GAAG+C,IAAImoF,KAAI0K,GAAE1K,GAAE,KAAK2K,GAAE,GAAG,KAAoB,KAAf1zF,EAAEyvF,eAAoB,KAAa,KAARzvF,EAAEolE,QAAa4uB,KAAKA,IAAG,EAAGgB,GAAGruB,IAAG,WAAgB,OAALuuB,KAAY,IAAI,KAAIr3F,EAAE,KAAa,MAARmC,EAAEolE,OAAgB,KAAoB,MAAfplE,EAAEyvF,eAAqB5xF,EAAE,CAACA,EAAE21F,GAAG3oB,WAAW2oB,GAAG3oB,WAAW,KAChf,IAAI1tE,EAAE06C,GAAEA,GAAE,EAAE,IAAIt6C,EAAEmlF,GAAEA,IAAG,EAAE6Q,GAAGtyF,QAAQ,KA1CpC,SAAYL,EAAExD,GAAgB,GAAb29E,GAAGpQ,GAAasL,GAAVr1E,EAAEm1E,MAAc,CAAC,GAAG,mBAAmBn1E,EAAE,IAAIZ,EAAE,CAACkvB,MAAMtuB,EAAE21E,eAAe3kD,IAAIhxB,EAAE41E,mBAAmB51E,EAAE,CAA8C,IAAIjC,GAAjDqB,GAAGA,EAAEY,EAAEywD,gBAAgBrxD,EAAEy2E,aAAanrB,QAAeorB,cAAc12E,EAAE02E,eAAe,GAAG/3E,GAAG,IAAIA,EAAEi4E,WAAW,CAAC52E,EAAErB,EAAEk4E,WAAW,IAAItxE,EAAE5G,EAAEm4E,aAAaj5E,EAAEc,EAAEo4E,UAAUp4E,EAAEA,EAAEq4E,YAAY,IAAIh3E,EAAEs/D,SAASzhE,EAAEyhE,QAAQ,CAAC,MAAMya,GAAG/5E,EAAE,KAAK,MAAMY,CAAC,CAAC,IAAIzD,EAAE,EAAEI,GAAG,EAAEsN,GAAG,EAAErN,EAAE,EAAEqzB,EAAE,EAAEpzB,EAAEmD,EAAE5D,EAAE,KAAKI,EAAE,OAAO,CAAC,IAAI,IAAIuL,EAAKlL,IAAIuC,GAAG,IAAIuF,GAAG,IAAI9H,EAAE6hE,WAAW/hE,EAAEJ,EAAEoI,GAAG9H,IAAII,GAAG,IAAIc,GAAG,IAAIlB,EAAE6hE,WAAWz0D,EAAE1N,EAAEwB,GAAG,IAAIlB,EAAE6hE,WAAWniE,GACnfM,EAAE8hE,UAAUlxE,QAAW,QAAQsa,EAAElL,EAAEwhE,aAAkBjiE,EAAES,EAAEA,EAAEkL,EAAE,OAAO,CAAC,GAAGlL,IAAImD,EAAE,MAAMxD,EAA8C,GAA5CJ,IAAIgD,KAAKxC,IAAI+H,IAAIhI,EAAEJ,GAAGH,IAAIa,KAAKgzB,IAAIlyB,IAAIkM,EAAE1N,GAAM,QAAQwL,EAAElL,EAAEk4E,aAAa,MAAU34E,GAAJS,EAAET,GAAMm2D,UAAU,CAAC11D,EAAEkL,CAAC,CAAC3I,GAAG,IAAIzC,IAAI,IAAIsN,EAAE,KAAK,CAACqkB,MAAM3xB,EAAEq0B,IAAI/mB,EAAE,MAAM7K,EAAE,IAAI,CAACA,EAAEA,GAAG,CAACkvB,MAAM,EAAE0C,IAAI,EAAE,MAAM5xB,EAAE,KAA+C,IAA1Cg7E,GAAG,CAAC5E,YAAYx1E,EAAEy1E,eAAer2E,GAAG2qE,IAAG,EAAOumB,GAAE9zF,EAAE,OAAO8zF,IAAG,GAAOtwF,GAAJxD,EAAE8zF,IAAM3jC,MAAM,KAAoB,KAAfnwD,EAAEqyF,eAAoB,OAAO7uF,EAAEA,EAAEukE,OAAO/nE,EAAE8zF,GAAEtwF,OAAO,KAAK,OAAOswF,IAAG,CAAC9zF,EAAE8zF,GAAE,IAAI,IAAI/vF,EAAE/D,EAAE8nE,UAAU,GAAG,KAAa,KAAR9nE,EAAEgoE,OAAY,OAAOhoE,EAAE+vD,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GACvK,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,GAAG,MAA3W,KAAK,EAAE,GAAG,OAAOhsD,EAAE,CAAC,IAAIrD,EAAEqD,EAAE4+E,cAAcjG,EAAE34E,EAAEmkE,cAAc58D,EAAEtL,EAAE0mE,UAAUvoD,EAAE7S,EAAE+7E,wBAAwBrnF,EAAEiiF,cAAcjiF,EAAEsqB,KAAK5pB,EAAEsiF,GAAGhjF,EAAEsqB,KAAK5pB,GAAGg8E,GAAGpxE,EAAEyqF,oCAAoC53E,CAAC,CAAC,MAAM,KAAK,EAAE,IAAIpK,EAAE/T,EAAE0mE,UAAUoG,cAAc,IAAI/4D,EAAEmuD,SAASnuD,EAAEwhD,YAAY,GAAG,IAAIxhD,EAAEmuD,UAAUnuD,EAAEmlE,iBAAiBnlE,EAAEiiD,YAAYjiD,EAAEmlE,iBAAiB,MAAyC,QAAQ,MAAMvmF,MAAM2N,EAAE,MAAO,CAAC,MAAMq8E,GAAGqX,GAAEh0F,EAAEA,EAAE+nE,OAAO4U,EAAE,CAAa,GAAG,QAAfn5E,EAAExD,EAAEsoE,SAAoB,CAAC9kE,EAAEukE,OAAO/nE,EAAE+nE,OAAO+rB,GAAEtwF,EAAE,KAAK,CAACswF,GAAE9zF,EAAE+nE,MAAM,CAAChkE,EAAEmwF,GAAGA,IAAG,CAAW,CAwCld+E,CAAGz1F,EAAEZ,GAAGyyF,GAAGzyF,EAAEY,GAAGu1E,GAAG6E,IAAIrQ,KAAKoQ,GAAGC,GAAGD,GAAG,KAAKn6E,EAAEK,QAAQjB,EAAE+yF,GAAG/yF,EAAEY,EAAE2E,GAAG2gE,KAAKwc,GAAEnlF,EAAEs6C,GAAE16C,EAAEq2F,GAAG3oB,WAAWhtE,CAAC,MAAM+C,EAAEK,QAAQjB,EAAsF,GAApFg0F,KAAKA,IAAG,EAAGC,GAAGrzF,EAAEszF,GAAG3uF,GAAG1H,EAAE+C,EAAE+mE,aAAa,IAAI9pE,IAAI0uF,GAAG,MAjOmJ,SAAY3rF,GAAG,GAAGsmE,IAAI,oBAAoBA,GAAGovB,kBAAkB,IAAIpvB,GAAGovB,kBAAkBrvB,GAAGrmE,OAAE,EAAO,OAAuB,IAAhBA,EAAEK,QAAQmkE,OAAW,CAAC,MAAMhoE,GAAG,CAAC,CAiOxRm5F,CAAGv2F,EAAE8jE,WAAa0wB,GAAG5zF,EAAEg3C,MAAQ,OAAOx6C,EAAE,IAAIuB,EAAEiC,EAAE41F,mBAAmBx2F,EAAE,EAAEA,EAAE5C,EAAE/O,OAAO2R,IAAIuF,EAAEnI,EAAE4C,GAAGrB,EAAE4G,EAAEJ,MAAM,CAACqnF,eAAejnF,EAAEggB,MAAMsmE,OAAOtmF,EAAEsmF,SAAS,GAAGK,GAAG,MAAMA,IAAG,EAAGtrF,EAAEurF,GAAGA,GAAG,KAAKvrF,EAAE,KAAQ,EAAHszF,KAAO,IAAItzF,EAAEusD,KAAK+nC,KAAKr3F,EAAE+C,EAAE+mE,aAAa,KAAO,EAAF9pE,GAAK+C,IAAIwzF,GAAGD,MAAMA,GAAG,EAAEC,GAAGxzF,GAAGuzF,GAAG,EAAElW,IAAgB,CAFxFwY,CAAG71F,EAAExD,EAAE4C,EAAErB,EAAE,CAAC,QAAQ60F,GAAG3oB,WAAWtlE,EAAEsyC,GAAEl5C,CAAC,CAAC,OAAO,IAAI,CAGhc,SAASu2F,KAAK,GAAG,OAAOjB,GAAG,CAAC,IAAIrzF,EAAE2nE,GAAG2rB,IAAI92F,EAAEo2F,GAAG3oB,WAAW7qE,EAAE63C,GAAE,IAAmC,GAA/B27C,GAAG3oB,WAAW,KAAKhzB,GAAE,GAAGj3C,EAAE,GAAGA,EAAK,OAAOqzF,GAAG,IAAIt1F,GAAE,MAAO,CAAmB,GAAlBiC,EAAEqzF,GAAGA,GAAG,KAAKC,GAAG,EAAK,KAAO,EAAFxR,IAAK,MAAM3yF,MAAM2N,EAAE,MAAM,IAAI6H,EAAEm9E,GAAO,IAALA,IAAG,EAAMwO,GAAEtwF,EAAEK,QAAQ,OAAOiwF,IAAG,CAAC,IAAIrzF,EAAEqzF,GAAE/zF,EAAEU,EAAE0vD,MAAM,GAAG,KAAa,GAAR2jC,GAAE9rB,OAAU,CAAC,IAAI7nE,EAAEM,EAAEyhF,UAAU,GAAG,OAAO/hF,EAAE,CAAC,IAAI,IAAIsN,EAAE,EAAEA,EAAEtN,EAAElP,OAAOwc,IAAI,CAAC,IAAIrN,EAAED,EAAEsN,GAAG,IAAIqmF,GAAE1zF,EAAE,OAAO0zF,IAAG,CAAC,IAAIrgE,EAAEqgE,GAAE,OAAOrgE,EAAEs8B,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAGokC,GAAG,EAAE1gE,EAAEhzB,GAAG,IAAIJ,EAAEozB,EAAE08B,MAAM,GAAG,OAAO9vD,EAAEA,EAAE0nE,OAAOt0C,EAAEqgE,GAAEzzF,OAAO,KAAK,OAAOyzF,IAAG,CAAK,IAAIl0F,GAAR6zB,EAAEqgE,IAAUxrB,QAAQ/8D,EAAEkoB,EAAEs0C,OAAa,GAANusB,GAAG7gE,GAAMA,IACnfrzB,EAAE,CAAC0zF,GAAE,KAAK,KAAK,CAAC,GAAG,OAAOl0F,EAAE,CAACA,EAAEmoE,OAAOx8D,EAAEuoF,GAAEl0F,EAAE,KAAK,CAACk0F,GAAEvoF,CAAC,CAAC,CAAC,CAAC,IAAIxH,EAAEtD,EAAEqnE,UAAU,GAAG,OAAO/jE,EAAE,CAAC,IAAIrD,EAAEqD,EAAEosD,MAAM,GAAG,OAAOzvD,EAAE,CAACqD,EAAEosD,MAAM,KAAK,EAAE,CAAC,IAAIusB,EAAEh8E,EAAE4nE,QAAQ5nE,EAAE4nE,QAAQ,KAAK5nE,EAAEg8E,CAAC,OAAO,OAAOh8E,EAAE,CAAC,CAACozF,GAAErzF,CAAC,CAAC,CAAC,GAAG,KAAoB,KAAfA,EAAE4xF,eAAoB,OAAOtyF,EAAEA,EAAEgoE,OAAOtnE,EAAEqzF,GAAE/zF,OAAOC,EAAE,KAAK,OAAO8zF,IAAG,CAAK,GAAG,KAAa,MAApBrzF,EAAEqzF,IAAY9rB,OAAY,OAAOvnE,EAAEsvD,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAGokC,GAAG,EAAE1zF,EAAEA,EAAEsnE,QAAQ,IAAIz8D,EAAE7K,EAAE6nE,QAAQ,GAAG,OAAOh9D,EAAE,CAACA,EAAEy8D,OAAOtnE,EAAEsnE,OAAO+rB,GAAExoF,EAAE,MAAMtL,CAAC,CAAC8zF,GAAErzF,EAAEsnE,MAAM,CAAC,CAAC,IAAI5pD,EAAE3a,EAAEK,QAAQ,IAAIiwF,GAAE31E,EAAE,OAAO21E,IAAG,CAAK,IAAI//E,GAARhU,EAAE+zF,IAAU3jC,MAAM,GAAG,KAAoB,KAAfpwD,EAAEsyF,eAAoB,OAClft+E,EAAEA,EAAEg0D,OAAOhoE,EAAE+zF,GAAE//E,OAAO/T,EAAE,IAAID,EAAEoe,EAAE,OAAO21E,IAAG,CAAK,GAAG,KAAa,MAApB3zF,EAAE2zF,IAAY9rB,OAAY,IAAI,OAAO7nE,EAAE4vD,KAAK,KAAK,EAAE,KAAK,GAAG,KAAK,GAAGqkC,GAAG,EAAEj0F,GAAG,CAAC,MAAM88E,GAAI+W,GAAE7zF,EAAEA,EAAE4nE,OAAOkV,EAAG,CAAC,GAAG98E,IAAIJ,EAAE,CAAC+zF,GAAE,KAAK,MAAM9zF,CAAC,CAAC,IAAI28E,EAAEx8E,EAAEmoE,QAAQ,GAAG,OAAOqU,EAAE,CAACA,EAAE5U,OAAO5nE,EAAE4nE,OAAO+rB,GAAEnX,EAAE,MAAM38E,CAAC,CAAC8zF,GAAE3zF,EAAE4nE,MAAM,CAAC,CAAU,GAATud,GAAEn9E,EAAE04E,KAAQ/W,IAAI,oBAAoBA,GAAGwvB,sBAAsB,IAAIxvB,GAAGwvB,sBAAsBzvB,GAAGrmE,EAAE,CAAC,MAAMy5E,GAAI,CAAC17E,GAAE,CAAE,CAAC,OAAOA,CAAC,CAAC,QAAQk5C,GAAE73C,EAAEwzF,GAAG3oB,WAAWztE,CAAC,CAAC,CAAC,OAAM,CAAE,CAAC,SAASu5F,GAAG/1F,EAAExD,EAAE4C,GAAyBY,EAAE6hF,GAAG7hF,EAAjBxD,EAAE6uF,GAAGrrF,EAAfxD,EAAEuuF,GAAG3rF,EAAE5C,GAAY,GAAY,GAAGA,EAAEomF,KAAI,OAAO5iF,IAAIwnE,GAAGxnE,EAAE,EAAExD,GAAGo3F,GAAG5zF,EAAExD,GAAG,CACze,SAASg0F,GAAExwF,EAAExD,EAAE4C,GAAG,GAAG,IAAIY,EAAEusD,IAAIwpC,GAAG/1F,EAAEA,EAAEZ,QAAQ,KAAK,OAAO5C,GAAG,CAAC,GAAG,IAAIA,EAAE+vD,IAAI,CAACwpC,GAAGv5F,EAAEwD,EAAEZ,GAAG,KAAK,CAAM,GAAG,IAAI5C,EAAE+vD,IAAI,CAAC,IAAIxuD,EAAEvB,EAAE0mE,UAAU,GAAG,oBAAoB1mE,EAAEsqB,KAAK2kE,0BAA0B,oBAAoB1tF,EAAE2tF,oBAAoB,OAAOC,KAAKA,GAAG5oF,IAAIhF,IAAI,CAAuBvB,EAAEqlF,GAAGrlF,EAAjBwD,EAAEwrF,GAAGhvF,EAAfwD,EAAE+qF,GAAG3rF,EAAEY,GAAY,GAAY,GAAGA,EAAE4iF,KAAI,OAAOpmF,IAAIgrE,GAAGhrE,EAAE,EAAEwD,GAAG4zF,GAAGp3F,EAAEwD,IAAI,KAAK,CAAC,CAACxD,EAAEA,EAAE+nE,MAAM,CAAC,CACnV,SAASwnB,GAAG/rF,EAAExD,EAAE4C,GAAG,IAAIrB,EAAEiC,EAAE8rF,UAAU,OAAO/tF,GAAGA,EAAE0G,OAAOjI,GAAGA,EAAEomF,KAAI5iF,EAAEinE,aAAajnE,EAAEgnE,eAAe5nE,EAAE+oF,KAAInoF,IAAI8yF,GAAE1zF,KAAKA,IAAI,IAAI0wF,IAAG,IAAIA,KAAM,UAAFgD,MAAeA,IAAG,IAAI97C,KAAIg7C,GAAGyC,GAAGz0F,EAAE,GAAGizF,IAAI7zF,GAAGw0F,GAAG5zF,EAAExD,EAAE,CAAC,SAASw5F,GAAGh2F,EAAExD,GAAG,IAAIA,IAAI,KAAY,EAAPwD,EAAEuuC,MAAQ/xC,EAAE,GAAGA,EAAE06D,GAAU,KAAQ,WAAfA,KAAK,MAAuBA,GAAG,WAAW,IAAI93D,EAAEwjF,KAAc,QAAV5iF,EAAE8gF,GAAG9gF,EAAExD,MAAcgrE,GAAGxnE,EAAExD,EAAE4C,GAAGw0F,GAAG5zF,EAAEZ,GAAG,CAAC,SAASsvF,GAAG1uF,GAAG,IAAIxD,EAAEwD,EAAE0kE,cAActlE,EAAE,EAAE,OAAO5C,IAAI4C,EAAE5C,EAAEsiF,WAAWkX,GAAGh2F,EAAEZ,EAAE,CACjZ,SAASuyF,GAAG3xF,EAAExD,GAAG,IAAI4C,EAAE,EAAE,OAAOY,EAAEusD,KAAK,KAAK,GAAG,IAAIxuD,EAAEiC,EAAEkjE,UAAcv+D,EAAE3E,EAAE0kE,cAAc,OAAO//D,IAAIvF,EAAEuF,EAAEm6E,WAAW,MAAM,KAAK,GAAG/gF,EAAEiC,EAAEkjE,UAAU,MAAM,QAAQ,MAAM/zE,MAAM2N,EAAE,MAAO,OAAOiB,GAAGA,EAAE0G,OAAOjI,GAAGw5F,GAAGh2F,EAAEZ,EAAE,CAQqK,SAASg1F,GAAGp0F,EAAExD,GAAG,OAAOyoE,GAAGjlE,EAAExD,EAAE,CACjZ,SAASy5F,GAAGj2F,EAAExD,EAAE4C,EAAErB,GAAGuS,KAAKi8C,IAAIvsD,EAAEsQ,KAAKxN,IAAI1D,EAAEkR,KAAKw0D,QAAQx0D,KAAKq8C,MAAMr8C,KAAKi0D,OAAOj0D,KAAK4yD,UAAU5yD,KAAKwW,KAAKxW,KAAKmuE,YAAY,KAAKnuE,KAAKlgB,MAAM,EAAEkgB,KAAKs+C,IAAI,KAAKt+C,KAAKsuE,aAAapiF,EAAE8T,KAAK8vE,aAAa9vE,KAAKo0D,cAAcp0D,KAAK2wE,YAAY3wE,KAAK6uE,cAAc,KAAK7uE,KAAKi+B,KAAKxwC,EAAEuS,KAAKu+E,aAAav+E,KAAKk0D,MAAM,EAAEl0D,KAAKouE,UAAU,KAAKpuE,KAAK4vE,WAAW5vE,KAAKgwE,MAAM,EAAEhwE,KAAKg0D,UAAU,IAAI,CAAC,SAASka,GAAGx+E,EAAExD,EAAE4C,EAAErB,GAAG,OAAO,IAAIk4F,GAAGj2F,EAAExD,EAAE4C,EAAErB,EAAE,CAAC,SAASyuF,GAAGxsF,GAAiB,UAAdA,EAAEA,EAAEiR,aAAuBjR,EAAEk2F,iBAAiB,CAEpd,SAAS3R,GAAGvkF,EAAExD,GAAG,IAAI4C,EAAEY,EAAEskE,UACuB,OADb,OAAOllE,IAAGA,EAAEo/E,GAAGx+E,EAAEusD,IAAI/vD,EAAEwD,EAAE8C,IAAI9C,EAAEuuC,OAAQkwC,YAAYz+E,EAAEy+E,YAAYr/E,EAAE0nB,KAAK9mB,EAAE8mB,KAAK1nB,EAAE8jE,UAAUljE,EAAEkjE,UAAU9jE,EAAEklE,UAAUtkE,EAAEA,EAAEskE,UAAUllE,IAAIA,EAAEw/E,aAAapiF,EAAE4C,EAAE0nB,KAAK9mB,EAAE8mB,KAAK1nB,EAAEolE,MAAM,EAAEplE,EAAEyvF,aAAa,EAAEzvF,EAAEs/E,UAAU,MAAMt/E,EAAEolE,MAAc,SAARxkE,EAAEwkE,MAAeplE,EAAE8gF,WAAWlgF,EAAEkgF,WAAW9gF,EAAEkhF,MAAMtgF,EAAEsgF,MAAMlhF,EAAEutD,MAAM3sD,EAAE2sD,MAAMvtD,EAAE+/E,cAAcn/E,EAAEm/E,cAAc//E,EAAEslE,cAAc1kE,EAAE0kE,cAActlE,EAAE6hF,YAAYjhF,EAAEihF,YAAYzkF,EAAEwD,EAAEogF,aAAahhF,EAAEghF,aAAa,OAAO5jF,EAAE,KAAK,CAAC8jF,MAAM9jF,EAAE8jF,MAAMD,aAAa7jF,EAAE6jF,cAC/ejhF,EAAE0lE,QAAQ9kE,EAAE8kE,QAAQ1lE,EAAEhP,MAAM4P,EAAE5P,MAAMgP,EAAEwvD,IAAI5uD,EAAE4uD,IAAWxvD,CAAC,CACxD,SAASqlF,GAAGzkF,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,GAAG,IAAIV,EAAE,EAAM,GAAJwB,EAAEiC,EAAK,oBAAoBA,EAAEwsF,GAAGxsF,KAAKzD,EAAE,QAAQ,GAAG,kBAAkByD,EAAEzD,EAAE,OAAOyD,EAAE,OAAOA,GAAG,KAAKy5D,EAAG,OAAOmrB,GAAGxlF,EAAEymB,SAASlhB,EAAE1H,EAAET,GAAG,KAAKk9D,EAAGn9D,EAAE,EAAEoI,GAAG,EAAE,MAAM,KAAKg1D,EAAG,OAAO35D,EAAEw+E,GAAG,GAAGp/E,EAAE5C,EAAI,EAAFmI,IAAO85E,YAAY9kB,EAAG35D,EAAEsgF,MAAMrjF,EAAE+C,EAAE,KAAK+5D,EAAG,OAAO/5D,EAAEw+E,GAAG,GAAGp/E,EAAE5C,EAAEmI,IAAK85E,YAAY1kB,EAAG/5D,EAAEsgF,MAAMrjF,EAAE+C,EAAE,KAAKg6D,EAAG,OAAOh6D,EAAEw+E,GAAG,GAAGp/E,EAAE5C,EAAEmI,IAAK85E,YAAYzkB,EAAGh6D,EAAEsgF,MAAMrjF,EAAE+C,EAAE,KAAKm6D,EAAG,OAAOi0B,GAAGhvF,EAAEuF,EAAE1H,EAAET,GAAG,QAAQ,GAAG,kBAAkBwD,GAAG,OAAOA,EAAE,OAAOA,EAAEo7D,UAAU,KAAKxB,EAAGr9D,EAAE,GAAG,MAAMyD,EAAE,KAAK65D,EAAGt9D,EAAE,EAAE,MAAMyD,EAAE,KAAK85D,EAAGv9D,EAAE,GACpf,MAAMyD,EAAE,KAAKi6D,EAAG19D,EAAE,GAAG,MAAMyD,EAAE,KAAKk6D,EAAG39D,EAAE,GAAGwB,EAAE,KAAK,MAAMiC,EAAE,MAAM7Q,MAAM2N,EAAE,IAAI,MAAMkD,EAAEA,SAASA,EAAE,KAAuD,OAAjDxD,EAAEgiF,GAAGjiF,EAAE6C,EAAE5C,EAAEmI,IAAK85E,YAAYz+E,EAAExD,EAAEsqB,KAAK/oB,EAAEvB,EAAE8jF,MAAMrjF,EAAST,CAAC,CAAC,SAASooF,GAAG5kF,EAAExD,EAAE4C,EAAErB,GAA2B,OAAxBiC,EAAEw+E,GAAG,EAAEx+E,EAAEjC,EAAEvB,IAAK8jF,MAAMlhF,EAASY,CAAC,CAAC,SAASouF,GAAGpuF,EAAExD,EAAE4C,EAAErB,GAAuE,OAApEiC,EAAEw+E,GAAG,GAAGx+E,EAAEjC,EAAEvB,IAAKiiF,YAAYtkB,EAAGn6D,EAAEsgF,MAAMlhF,EAAEY,EAAEkjE,UAAU,CAAC6uB,UAAS,GAAW/xF,CAAC,CAAC,SAASwkF,GAAGxkF,EAAExD,EAAE4C,GAA8B,OAA3BY,EAAEw+E,GAAG,EAAEx+E,EAAE,KAAKxD,IAAK8jF,MAAMlhF,EAASY,CAAC,CAC5W,SAAS2kF,GAAG3kF,EAAExD,EAAE4C,GAA8J,OAA3J5C,EAAEgiF,GAAG,EAAE,OAAOx+E,EAAE6lB,SAAS7lB,EAAE6lB,SAAS,GAAG7lB,EAAE8C,IAAItG,IAAK8jF,MAAMlhF,EAAE5C,EAAE0mE,UAAU,CAACoG,cAActpE,EAAEspE,cAAc6sB,gBAAgB,KAAKzR,eAAe1kF,EAAE0kF,gBAAuBloF,CAAC,CACtL,SAAS45F,GAAGp2F,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG2L,KAAKi8C,IAAI/vD,EAAE8T,KAAKg5D,cAActpE,EAAEsQ,KAAKwkF,aAAaxkF,KAAKw7E,UAAUx7E,KAAKjQ,QAAQiQ,KAAK6lF,gBAAgB,KAAK7lF,KAAK2kF,eAAe,EAAE3kF,KAAKujF,aAAavjF,KAAKo9E,eAAep9E,KAAK2zC,QAAQ,KAAK3zC,KAAK2jF,iBAAiB,EAAE3jF,KAAKm3D,WAAWF,GAAG,GAAGj3D,KAAKwjF,gBAAgBvsB,IAAI,GAAGj3D,KAAK42D,eAAe52D,KAAKykF,cAAczkF,KAAKilF,iBAAiBjlF,KAAKyjF,aAAazjF,KAAK22D,YAAY32D,KAAK02D,eAAe12D,KAAKy2D,aAAa,EAAEz2D,KAAK62D,cAAcI,GAAG,GAAGj3D,KAAKw6E,iBAAiB/sF,EAAEuS,KAAKslF,mBAAmBjxF,EAAE2L,KAAK+lF,gCAC/e,IAAI,CAAC,SAASC,GAAGt2F,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,EAAEV,EAAEI,EAAEsN,GAAgN,OAA7MjK,EAAE,IAAIo2F,GAAGp2F,EAAExD,EAAE4C,EAAEzC,EAAEsN,GAAG,IAAIzN,GAAGA,EAAE,GAAE,IAAKS,IAAIT,GAAG,IAAIA,EAAE,EAAES,EAAEuhF,GAAG,EAAE,KAAK,KAAKhiF,GAAGwD,EAAEK,QAAQpD,EAAEA,EAAEimE,UAAUljE,EAAE/C,EAAEynE,cAAc,CAACh8B,QAAQ3qC,EAAEsrE,aAAajqE,EAAEoP,MAAM,KAAKu+E,YAAY,KAAKwJ,0BAA0B,MAAMvV,GAAG/jF,GAAU+C,CAAC,CACzP,SAASwsD,GAAGxsD,GAAG,IAAIA,EAAE,OAAOg8E,GAAuBh8E,EAAE,CAAC,GAAGqkE,GAA1BrkE,EAAEA,EAAE0iF,mBAA8B1iF,GAAG,IAAIA,EAAEusD,IAAI,MAAMp9D,MAAM2N,EAAE,MAAM,IAAIN,EAAEwD,EAAE,EAAE,CAAC,OAAOxD,EAAE+vD,KAAK,KAAK,EAAE/vD,EAAEA,EAAE0mE,UAAUjf,QAAQ,MAAMjkD,EAAE,KAAK,EAAE,GAAGw8E,GAAGhgF,EAAEsqB,MAAM,CAACtqB,EAAEA,EAAE0mE,UAAU6Z,0CAA0C,MAAM/8E,CAAC,EAAExD,EAAEA,EAAE+nE,MAAM,OAAO,OAAO/nE,GAAG,MAAMrN,MAAM2N,EAAE,KAAM,CAAC,GAAG,IAAIkD,EAAEusD,IAAI,CAAC,IAAIntD,EAAEY,EAAE8mB,KAAK,GAAG01D,GAAGp9E,GAAG,OAAOw9E,GAAG58E,EAAEZ,EAAE5C,EAAE,CAAC,OAAOA,CAAC,CACpW,SAASg6F,GAAGx2F,EAAExD,EAAE4C,EAAErB,EAAE4G,EAAE1H,EAAEV,EAAEI,EAAEsN,GAAwK,OAArKjK,EAAEs2F,GAAGl3F,EAAErB,GAAE,EAAGiC,EAAE2E,EAAE1H,EAAEV,EAAEI,EAAEsN,IAAKg6C,QAAQuI,GAAG,MAAMptD,EAAEY,EAAEK,SAAsBpD,EAAEwkF,GAAhB1jF,EAAE6kF,KAAIj+E,EAAEk+E,GAAGzjF,KAAe62B,cAAS,IAASz5B,GAAG,OAAOA,EAAEA,EAAE,KAAKqlF,GAAGziF,EAAEnC,EAAE0H,GAAG3E,EAAEK,QAAQigF,MAAM37E,EAAE6iE,GAAGxnE,EAAE2E,EAAE5G,GAAG61F,GAAG5zF,EAAEjC,GAAUiC,CAAC,CAAC,SAASy2F,GAAGz2F,EAAExD,EAAE4C,EAAErB,GAAG,IAAI4G,EAAEnI,EAAE6D,QAAQpD,EAAE2lF,KAAIrmF,EAAEsmF,GAAGl+E,GAAsL,OAAnLvF,EAAEotD,GAAGptD,GAAG,OAAO5C,EAAEynD,QAAQznD,EAAEynD,QAAQ7kD,EAAE5C,EAAEkxF,eAAetuF,GAAE5C,EAAEilF,GAAGxkF,EAAEV,IAAKqlF,QAAQ,CAACl5C,QAAQ1oC,GAAuB,QAApBjC,OAAE,IAASA,EAAE,KAAKA,KAAavB,EAAEy5B,SAASl4B,GAAe,QAAZiC,EAAE6hF,GAAGl9E,EAAEnI,EAAED,MAAcumF,GAAG9iF,EAAE2E,EAAEpI,EAAEU,GAAG8kF,GAAG/hF,EAAE2E,EAAEpI,IAAWA,CAAC,CAC3b,SAASm6F,GAAG12F,GAAe,OAAZA,EAAEA,EAAEK,SAAcssD,OAAyB3sD,EAAE2sD,MAAMJ,IAAoDvsD,EAAE2sD,MAAMuW,WAAhF,IAA0F,CAAC,SAASvqB,GAAG34C,EAAExD,GAAqB,GAAG,QAArBwD,EAAEA,EAAE0kE,gBAA2B,OAAO1kE,EAAE2kE,WAAW,CAAC,IAAIvlE,EAAEY,EAAE8+E,UAAU9+E,EAAE8+E,UAAU,IAAI1/E,GAAGA,EAAE5C,EAAE4C,EAAE5C,CAAC,CAAC,CAAC,SAAS48C,GAAGp5C,EAAExD,GAAGm8C,GAAG34C,EAAExD,IAAIwD,EAAEA,EAAEskE,YAAY3rB,GAAG34C,EAAExD,EAAE,CAnB7Sg2F,GAAG,SAASxyF,EAAExD,EAAE4C,GAAG,GAAG,OAAOY,EAAE,GAAGA,EAAEm/E,gBAAgB3iF,EAAEoiF,cAAc1C,GAAG77E,QAAQkgF,IAAG,MAAO,CAAC,GAAG,KAAKvgF,EAAEsgF,MAAMlhF,IAAI,KAAa,IAAR5C,EAAEgoE,OAAW,OAAO+b,IAAG,EAzE1I,SAAYvgF,EAAExD,EAAE4C,GAAG,OAAO5C,EAAE+vD,KAAK,KAAK,EAAEkhC,GAAGjxF,GAAG6iF,KAAK,MAAM,KAAK,EAAEkG,GAAG/oF,GAAG,MAAM,KAAK,EAAEggF,GAAGhgF,EAAEsqB,OAAOg2D,GAAGtgF,GAAG,MAAM,KAAK,EAAE4oF,GAAG5oF,EAAEA,EAAE0mE,UAAUoG,eAAe,MAAM,KAAK,GAAG,IAAIvrE,EAAEvB,EAAEsqB,KAAKu0C,SAAS12D,EAAEnI,EAAE2iF,cAAc56E,MAAMw3E,GAAE2D,GAAG3hF,EAAEiiF,eAAejiF,EAAEiiF,cAAcr7E,EAAE,MAAM,KAAK,GAAqB,GAAG,QAArB5G,EAAEvB,EAAEkoE,eAA2B,OAAG,OAAO3mE,EAAE4mE,YAAkBoX,GAAE0J,GAAY,EAAVA,GAAEplF,SAAW7D,EAAEgoE,OAAO,IAAI,MAAQ,KAAKplE,EAAE5C,EAAEmwD,MAAMuzB,YAAmBgO,GAAGluF,EAAExD,EAAE4C,IAAG28E,GAAE0J,GAAY,EAAVA,GAAEplF,SAA8B,QAAnBL,EAAEssF,GAAGtsF,EAAExD,EAAE4C,IAAmBY,EAAE8kE,QAAQ,MAAKiX,GAAE0J,GAAY,EAAVA,GAAEplF,SAAW,MAAM,KAAK,GAC7d,GADgetC,EAAE,KAAKqB,EACrf5C,EAAE0jF,YAAe,KAAa,IAARlgF,EAAEwkE,OAAW,CAAC,GAAGzmE,EAAE,OAAOoxF,GAAGnvF,EAAExD,EAAE4C,GAAG5C,EAAEgoE,OAAO,GAAG,CAA6F,GAA1E,QAAlB7/D,EAAEnI,EAAEkoE,iBAAyB//D,EAAE8iD,UAAU,KAAK9iD,EAAE0uB,KAAK,KAAK1uB,EAAE0jF,WAAW,MAAMtM,GAAE0J,GAAEA,GAAEplF,SAAYtC,EAAE,MAAW,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,OAAOvB,EAAE8jF,MAAM,EAAEsM,GAAG5sF,EAAExD,EAAE4C,GAAG,OAAOktF,GAAGtsF,EAAExD,EAAE4C,EAAE,CAwE7Gu3F,CAAG32F,EAAExD,EAAE4C,GAAGmhF,GAAG,KAAa,OAARvgF,EAAEwkE,MAAmB,MAAM+b,IAAG,EAAGlC,IAAG,KAAa,QAAR7hF,EAAEgoE,QAAgBwZ,GAAGxhF,EAAEihF,GAAGjhF,EAAEpM,OAAiB,OAAVoM,EAAE8jF,MAAM,EAAS9jF,EAAE+vD,KAAK,KAAK,EAAE,IAAIxuD,EAAEvB,EAAEsqB,KAAKsmE,GAAGptF,EAAExD,GAAGwD,EAAExD,EAAEoiF,aAAa,IAAIj6E,EAAEy3E,GAAG5/E,EAAEy/E,GAAE57E,SAAS8/E,GAAG3jF,EAAE4C,GAAGuF,EAAEiiF,GAAG,KAAKpqF,EAAEuB,EAAEiC,EAAE2E,EAAEvF,GAAG,IAAInC,EAAEgqF,KACvI,OAD4IzqF,EAAEgoE,OAAO,EAAE,kBAAkB7/D,GAAG,OAAOA,GAAG,oBAAoBA,EAAE+sD,aAAQ,IAAS/sD,EAAEy2D,UAAU5+D,EAAE+vD,IAAI,EAAE/vD,EAAEkoE,cAAc,KAAKloE,EAAEykF,YAC1e,KAAKzE,GAAGz+E,IAAId,GAAE,EAAG6/E,GAAGtgF,IAAIS,GAAE,EAAGT,EAAEkoE,cAAc,OAAO//D,EAAE2+E,YAAO,IAAS3+E,EAAE2+E,MAAM3+E,EAAE2+E,MAAM,KAAKtC,GAAGxkF,GAAGmI,EAAE4+E,QAAQf,GAAGhmF,EAAE0mE,UAAUv+D,EAAEA,EAAE+9E,gBAAgBlmF,EAAEmnF,GAAGnnF,EAAEuB,EAAEiC,EAAEZ,GAAG5C,EAAEgxF,GAAG,KAAKhxF,EAAEuB,GAAE,EAAGd,EAAEmC,KAAK5C,EAAE+vD,IAAI,EAAE8xB,IAAGphF,GAAGghF,GAAGzhF,GAAG4vF,GAAG,KAAK5vF,EAAEmI,EAAEvF,GAAG5C,EAAEA,EAAEmwD,OAAcnwD,EAAE,KAAK,GAAGuB,EAAEvB,EAAEiiF,YAAYz+E,EAAE,CAAqF,OAApFotF,GAAGptF,EAAExD,GAAGwD,EAAExD,EAAEoiF,aAAuB7gF,GAAV4G,EAAE5G,EAAEw9D,OAAUx9D,EAAEu9D,UAAU9+D,EAAEsqB,KAAK/oB,EAAE4G,EAAEnI,EAAE+vD,IAQtU,SAAYvsD,GAAG,GAAG,oBAAoBA,EAAE,OAAOwsF,GAAGxsF,GAAG,EAAE,EAAE,QAAG,IAASA,GAAG,OAAOA,EAAE,CAAc,IAAbA,EAAEA,EAAEo7D,YAAgBtB,EAAG,OAAO,GAAG,GAAG95D,IAAIi6D,EAAG,OAAO,EAAE,CAAC,OAAO,CAAC,CAR2L28B,CAAG74F,GAAGiC,EAAEw/E,GAAGzhF,EAAEiC,GAAU2E,GAAG,KAAK,EAAEnI,EAAEmwF,GAAG,KAAKnwF,EAAEuB,EAAEiC,EAAEZ,GAAG,MAAMY,EAAE,KAAK,EAAExD,EAAE2wF,GAAG,KAAK3wF,EAAEuB,EAAEiC,EAAEZ,GAAG,MAAMY,EAAE,KAAK,GAAGxD,EAAE6vF,GAAG,KAAK7vF,EAAEuB,EAAEiC,EAAEZ,GAAG,MAAMY,EAAE,KAAK,GAAGxD,EAAE+vF,GAAG,KAAK/vF,EAAEuB,EAAEyhF,GAAGzhF,EAAE+oB,KAAK9mB,GAAGZ,GAAG,MAAMY,EAAE,MAAM7Q,MAAM2N,EAAE,IACvgBiB,EAAE,IAAK,CAAC,OAAOvB,EAAE,KAAK,EAAE,OAAOuB,EAAEvB,EAAEsqB,KAAKniB,EAAEnI,EAAEoiF,aAA2C+N,GAAG3sF,EAAExD,EAAEuB,EAArC4G,EAAEnI,EAAEiiF,cAAc1gF,EAAE4G,EAAE66E,GAAGzhF,EAAE4G,GAAcvF,GAAG,KAAK,EAAE,OAAOrB,EAAEvB,EAAEsqB,KAAKniB,EAAEnI,EAAEoiF,aAA2CuO,GAAGntF,EAAExD,EAAEuB,EAArC4G,EAAEnI,EAAEiiF,cAAc1gF,EAAE4G,EAAE66E,GAAGzhF,EAAE4G,GAAcvF,GAAG,KAAK,EAAEY,EAAE,CAAO,GAANytF,GAAGjxF,GAAM,OAAOwD,EAAE,MAAM7Q,MAAM2N,EAAE,MAAMiB,EAAEvB,EAAEoiF,aAA+Bj6E,GAAlB1H,EAAET,EAAEkoE,eAAkBh8B,QAAQ84C,GAAGxhF,EAAExD,GAAGylF,GAAGzlF,EAAEuB,EAAE,KAAKqB,GAAG,IAAI7C,EAAEC,EAAEkoE,cAA0B,GAAZ3mE,EAAExB,EAAEmsC,QAAWzrC,EAAEosE,aAAY,CAAC,GAAGpsE,EAAE,CAACyrC,QAAQ3qC,EAAEsrE,cAAa,EAAG76D,MAAMjS,EAAEiS,MAAM+nF,0BAA0Bh6F,EAAEg6F,0BAA0BxJ,YAAYxwF,EAAEwwF,aAAavwF,EAAEykF,YAAYC,UAChfjkF,EAAET,EAAEkoE,cAAcznE,EAAU,IAART,EAAEgoE,MAAU,CAAuBhoE,EAAEmxF,GAAG3tF,EAAExD,EAAEuB,EAAEqB,EAAjCuF,EAAEomF,GAAG57F,MAAM2N,EAAE,MAAMN,IAAmB,MAAMwD,CAAC,CAAM,GAAGjC,IAAI4G,EAAE,CAAuBnI,EAAEmxF,GAAG3tF,EAAExD,EAAEuB,EAAEqB,EAAjCuF,EAAEomF,GAAG57F,MAAM2N,EAAE,MAAMN,IAAmB,MAAMwD,CAAC,CAAM,IAAIo+E,GAAGjD,GAAG3+E,EAAE0mE,UAAUoG,cAAcjL,YAAY8f,GAAG3hF,EAAE6hF,IAAE,EAAGC,GAAG,KAAKl/E,EAAE0lF,GAAGtoF,EAAE,KAAKuB,EAAEqB,GAAG5C,EAAEmwD,MAAMvtD,EAAEA,GAAGA,EAAEolE,OAAe,EAATplE,EAAEolE,MAAS,KAAKplE,EAAEA,EAAE0lE,OAAQ,KAAI,CAAM,GAALua,KAAQthF,IAAI4G,EAAE,CAACnI,EAAE8vF,GAAGtsF,EAAExD,EAAE4C,GAAG,MAAMY,CAAC,CAACosF,GAAGpsF,EAAExD,EAAEuB,EAAEqB,EAAE,CAAC5C,EAAEA,EAAEmwD,KAAK,CAAC,OAAOnwD,EAAE,KAAK,EAAE,OAAO+oF,GAAG/oF,GAAG,OAAOwD,GAAGg/E,GAAGxiF,GAAGuB,EAAEvB,EAAEsqB,KAAKniB,EAAEnI,EAAEoiF,aAAa3hF,EAAE,OAAO+C,EAAEA,EAAEm/E,cAAc,KAAK5iF,EAAEoI,EAAEkhB,SAASw0D,GAAGt8E,EAAE4G,GAAGpI,EAAE,KAAK,OAAOU,GAAGo9E,GAAGt8E,EAAEd,KAAKT,EAAEgoE,OAAO,IACnf0oB,GAAGltF,EAAExD,GAAG4vF,GAAGpsF,EAAExD,EAAED,EAAE6C,GAAG5C,EAAEmwD,MAAM,KAAK,EAAE,OAAO,OAAO3sD,GAAGg/E,GAAGxiF,GAAG,KAAK,KAAK,GAAG,OAAO0xF,GAAGluF,EAAExD,EAAE4C,GAAG,KAAK,EAAE,OAAOgmF,GAAG5oF,EAAEA,EAAE0mE,UAAUoG,eAAevrE,EAAEvB,EAAEoiF,aAAa,OAAO5+E,EAAExD,EAAEmwD,MAAMk4B,GAAGroF,EAAE,KAAKuB,EAAEqB,GAAGgtF,GAAGpsF,EAAExD,EAAEuB,EAAEqB,GAAG5C,EAAEmwD,MAAM,KAAK,GAAG,OAAO5uD,EAAEvB,EAAEsqB,KAAKniB,EAAEnI,EAAEoiF,aAA2CyN,GAAGrsF,EAAExD,EAAEuB,EAArC4G,EAAEnI,EAAEiiF,cAAc1gF,EAAE4G,EAAE66E,GAAGzhF,EAAE4G,GAAcvF,GAAG,KAAK,EAAE,OAAOgtF,GAAGpsF,EAAExD,EAAEA,EAAEoiF,aAAax/E,GAAG5C,EAAEmwD,MAAM,KAAK,EAAmD,KAAK,GAAG,OAAOy/B,GAAGpsF,EAAExD,EAAEA,EAAEoiF,aAAa/4D,SAASzmB,GAAG5C,EAAEmwD,MAAM,KAAK,GAAG3sD,EAAE,CACxZ,GADyZjC,EAAEvB,EAAEsqB,KAAKu0C,SAAS12D,EAAEnI,EAAEoiF,aAAa3hF,EAAET,EAAE2iF,cAClf5iF,EAAEoI,EAAEJ,MAAMw3E,GAAE2D,GAAG3hF,EAAEiiF,eAAejiF,EAAEiiF,cAAczjF,EAAK,OAAOU,EAAE,GAAG03E,GAAG13E,EAAEsH,MAAMhI,IAAI,GAAGU,EAAE4oB,WAAWlhB,EAAEkhB,WAAWq2D,GAAG77E,QAAQ,CAAC7D,EAAE8vF,GAAGtsF,EAAExD,EAAE4C,GAAG,MAAMY,CAAC,OAAO,IAAc,QAAV/C,EAAET,EAAEmwD,SAAiB1vD,EAAEsnE,OAAO/nE,GAAG,OAAOS,GAAG,CAAC,IAAIN,EAAEM,EAAEmjF,aAAa,GAAG,OAAOzjF,EAAE,CAACJ,EAAEU,EAAE0vD,MAAM,IAAI,IAAI1iD,EAAEtN,EAAE0jF,aAAa,OAAOp2E,GAAG,CAAC,GAAGA,EAAEg6C,UAAUlmD,EAAE,CAAC,GAAG,IAAId,EAAEsvD,IAAI,EAACtiD,EAAEw3E,IAAI,EAAEriF,GAAGA,IAAKmtD,IAAI,EAAE,IAAI3vD,EAAEK,EAAEgkF,YAAY,GAAG,OAAOrkF,EAAE,CAAY,IAAIqzB,GAAfrzB,EAAEA,EAAEykF,QAAeC,QAAQ,OAAOrxD,EAAEhmB,EAAE+lB,KAAK/lB,GAAGA,EAAE+lB,KAAKC,EAAED,KAAKC,EAAED,KAAK/lB,GAAGrN,EAAE0kF,QAAQr3E,CAAC,CAAC,CAAChN,EAAEqjF,OAAOlhF,EAAgB,QAAd6K,EAAEhN,EAAEqnE,aAAqBr6D,EAAEq2E,OAAOlhF,GAAG6gF,GAAGhjF,EAAEsnE,OAClfnlE,EAAE5C,GAAGG,EAAE2jF,OAAOlhF,EAAE,KAAK,CAAC6K,EAAEA,EAAE+lB,IAAI,CAAC,MAAM,GAAG,KAAK/yB,EAAEsvD,IAAIhwD,EAAEU,EAAE6pB,OAAOtqB,EAAEsqB,KAAK,KAAK7pB,EAAE0vD,WAAW,GAAG,KAAK1vD,EAAEsvD,IAAI,CAAY,GAAG,QAAdhwD,EAAEU,EAAEsnE,QAAmB,MAAMp1E,MAAM2N,EAAE,MAAMP,EAAE+jF,OAAOlhF,EAAgB,QAAdzC,EAAEJ,EAAE+nE,aAAqB3nE,EAAE2jF,OAAOlhF,GAAG6gF,GAAG1jF,EAAE6C,EAAE5C,GAAGD,EAAEU,EAAE6nE,OAAO,MAAMvoE,EAAEU,EAAE0vD,MAAM,GAAG,OAAOpwD,EAAEA,EAAEgoE,OAAOtnE,OAAO,IAAIV,EAAEU,EAAE,OAAOV,GAAG,CAAC,GAAGA,IAAIC,EAAE,CAACD,EAAE,KAAK,KAAK,CAAa,GAAG,QAAfU,EAAEV,EAAEuoE,SAAoB,CAAC7nE,EAAEsnE,OAAOhoE,EAAEgoE,OAAOhoE,EAAEU,EAAE,KAAK,CAACV,EAAEA,EAAEgoE,MAAM,CAACtnE,EAAEV,CAAC,CAAC6vF,GAAGpsF,EAAExD,EAAEmI,EAAEkhB,SAASzmB,GAAG5C,EAAEA,EAAEmwD,KAAK,CAAC,OAAOnwD,EAAE,KAAK,EAAE,OAAOmI,EAAEnI,EAAEsqB,KAAK/oB,EAAEvB,EAAEoiF,aAAa/4D,SAASs6D,GAAG3jF,EAAE4C,GAAWrB,EAAEA,EAAV4G,EAAE67E,GAAG77E,IAAUnI,EAAEgoE,OAAO,EAAE4nB,GAAGpsF,EAAExD,EAAEuB,EAAEqB,GACpf5C,EAAEmwD,MAAM,KAAK,GAAG,OAAgBhoD,EAAE66E,GAAXzhF,EAAEvB,EAAEsqB,KAAYtqB,EAAEoiF,cAA6B2N,GAAGvsF,EAAExD,EAAEuB,EAAtB4G,EAAE66E,GAAGzhF,EAAE+oB,KAAKniB,GAAcvF,GAAG,KAAK,GAAG,OAAOstF,GAAG1sF,EAAExD,EAAEA,EAAEsqB,KAAKtqB,EAAEoiF,aAAax/E,GAAG,KAAK,GAAG,OAAOrB,EAAEvB,EAAEsqB,KAAKniB,EAAEnI,EAAEoiF,aAAaj6E,EAAEnI,EAAEiiF,cAAc1gF,EAAE4G,EAAE66E,GAAGzhF,EAAE4G,GAAGyoF,GAAGptF,EAAExD,GAAGA,EAAE+vD,IAAI,EAAEiwB,GAAGz+E,IAAIiC,GAAE,EAAG88E,GAAGtgF,IAAIwD,GAAE,EAAGmgF,GAAG3jF,EAAE4C,GAAGgkF,GAAG5mF,EAAEuB,EAAE4G,GAAGg/E,GAAGnnF,EAAEuB,EAAE4G,EAAEvF,GAAGouF,GAAG,KAAKhxF,EAAEuB,GAAE,EAAGiC,EAAEZ,GAAG,KAAK,GAAG,OAAO+vF,GAAGnvF,EAAExD,EAAE4C,GAAG,KAAK,GAAG,OAAOwtF,GAAG5sF,EAAExD,EAAE4C,GAAG,MAAMjQ,MAAM2N,EAAE,IAAIN,EAAE+vD,KAAM,EAYxC,IAAIsqC,GAAG,oBAAoBC,YAAYA,YAAY,SAAS92F,GAAGxO,QAAQ04D,MAAMlqD,EAAE,EAAE,SAAS+2F,GAAG/2F,GAAGsQ,KAAK0mF,cAAch3F,CAAC,CACjI,SAASi3F,GAAGj3F,GAAGsQ,KAAK0mF,cAAch3F,CAAC,CAC5J,SAASk3F,GAAGl3F,GAAG,SAASA,GAAG,IAAIA,EAAE0+D,UAAU,IAAI1+D,EAAE0+D,UAAU,KAAK1+D,EAAE0+D,SAAS,CAAC,SAAS77C,GAAG7iB,GAAG,SAASA,GAAG,IAAIA,EAAE0+D,UAAU,IAAI1+D,EAAE0+D,UAAU,KAAK1+D,EAAE0+D,WAAW,IAAI1+D,EAAE0+D,UAAU,iCAAiC1+D,EAAE2+D,WAAW,CAAC,SAASw4B,KAAK,CAExa,SAASC,GAAGp3F,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,IAAI1H,EAAEmC,EAAE8xF,oBAAoB,GAAGj0F,EAAE,CAAC,IAAIV,EAAEU,EAAE,GAAG,oBAAoB0H,EAAE,CAAC,IAAIhI,EAAEgI,EAAEA,EAAE,WAAW,IAAI3E,EAAE02F,GAAGn6F,GAAGI,EAAEowD,KAAK/sD,EAAE,CAAC,CAACy2F,GAAGj6F,EAAED,EAAEyD,EAAE2E,EAAE,MAAMpI,EADxJ,SAAYyD,EAAExD,EAAE4C,EAAErB,EAAE4G,GAAG,GAAGA,EAAE,CAAC,GAAG,oBAAoB5G,EAAE,CAAC,IAAId,EAAEc,EAAEA,EAAE,WAAW,IAAIiC,EAAE02F,GAAGn6F,GAAGU,EAAE8vD,KAAK/sD,EAAE,CAAC,CAAC,IAAIzD,EAAEi6F,GAAGh6F,EAAEuB,EAAEiC,EAAE,EAAE,MAAK,EAAG,EAAG,GAAGm3F,IAAmF,OAA/En3F,EAAEkxF,oBAAoB30F,EAAEyD,EAAEq5E,IAAI98E,EAAE8D,QAAQy4E,GAAG,IAAI94E,EAAE0+D,SAAS1+D,EAAEuyD,WAAWvyD,GAAGm1F,KAAY54F,CAAC,CAAC,KAAKoI,EAAE3E,EAAEy+D,WAAWz+D,EAAEwyD,YAAY7tD,GAAG,GAAG,oBAAoB5G,EAAE,CAAC,IAAIpB,EAAEoB,EAAEA,EAAE,WAAW,IAAIiC,EAAE02F,GAAGzsF,GAAGtN,EAAEowD,KAAK/sD,EAAE,CAAC,CAAC,IAAIiK,EAAEqsF,GAAGt2F,EAAE,GAAE,EAAG,KAAK,GAAK,EAAG,EAAG,GAAGm3F,IAA0G,OAAtGn3F,EAAEkxF,oBAAoBjnF,EAAEjK,EAAEq5E,IAAIpvE,EAAE5J,QAAQy4E,GAAG,IAAI94E,EAAE0+D,SAAS1+D,EAAEuyD,WAAWvyD,GAAGm1F,IAAG,WAAWsB,GAAGj6F,EAAEyN,EAAE7K,EAAErB,EAAE,IAAUkM,CAAC,CACpU8pD,CAAG30D,EAAE5C,EAAEwD,EAAE2E,EAAE5G,GAAG,OAAO24F,GAAGn6F,EAAE,CAHpL06F,GAAGhmF,UAAUygD,OAAOqlC,GAAG9lF,UAAUygD,OAAO,SAAS1xD,GAAG,IAAIxD,EAAE8T,KAAK0mF,cAAc,GAAG,OAAOx6F,EAAE,MAAMrN,MAAM2N,EAAE,MAAM25F,GAAGz2F,EAAExD,EAAE,KAAK,KAAK,EAAEy6F,GAAGhmF,UAAUomF,QAAQN,GAAG9lF,UAAUomF,QAAQ,WAAW,IAAIr3F,EAAEsQ,KAAK0mF,cAAc,GAAG,OAAOh3F,EAAE,CAACsQ,KAAK0mF,cAAc,KAAK,IAAIx6F,EAAEwD,EAAEspE,cAAc6rB,IAAG,WAAWsB,GAAG,KAAKz2F,EAAE,KAAK,KAAK,IAAGxD,EAAE68E,IAAI,IAAI,CAAC,EACzT4d,GAAGhmF,UAAUqmF,2BAA2B,SAASt3F,GAAG,GAAGA,EAAE,CAAC,IAAIxD,EAAEurE,KAAK/nE,EAAE,CAAC8oE,UAAU,KAAK1xD,OAAOpX,EAAEopE,SAAS5sE,GAAG,IAAI,IAAI4C,EAAE,EAAEA,EAAEopE,GAAG/6E,QAAQ,IAAI+O,GAAGA,EAAEgsE,GAAGppE,GAAGgqE,SAAShqE,KAAKopE,GAAGzkE,OAAO3E,EAAE,EAAEY,GAAG,IAAIZ,GAAG8pE,GAAGlpE,EAAE,CAAC,EAEX4nE,GAAG,SAAS5nE,GAAG,OAAOA,EAAEusD,KAAK,KAAK,EAAE,IAAI/vD,EAAEwD,EAAEkjE,UAAU,GAAG1mE,EAAE6D,QAAQqkE,cAAc2E,aAAa,CAAC,IAAIjqE,EAAEynE,GAAGrqE,EAAEuqE,cAAc,IAAI3nE,IAAIsoE,GAAGlrE,EAAI,EAAF4C,GAAKw0F,GAAGp3F,EAAEw6C,MAAK,KAAO,EAAF8qC,MAAOiO,GAAG/4C,KAAI,IAAIqmC,MAAM,CAAC,MAAM,KAAK,GAAG8X,IAAG,WAAW,IAAI34F,EAAEskF,GAAG9gF,EAAE,GAAG,GAAG,OAAOxD,EAAE,CAAC,IAAI4C,EAAEwjF,KAAIE,GAAGtmF,EAAEwD,EAAE,EAAEZ,EAAE,CAAC,IAAGg6C,GAAGp5C,EAAE,GAAG,EAC/b6nE,GAAG,SAAS7nE,GAAG,GAAG,KAAKA,EAAEusD,IAAI,CAAC,IAAI/vD,EAAEskF,GAAG9gF,EAAE,WAAW,GAAG,OAAOxD,EAAasmF,GAAGtmF,EAAEwD,EAAE,UAAX4iF,MAAwBxpC,GAAGp5C,EAAE,UAAU,CAAC,EAAE8nE,GAAG,SAAS9nE,GAAG,GAAG,KAAKA,EAAEusD,IAAI,CAAC,IAAI/vD,EAAEqmF,GAAG7iF,GAAGZ,EAAE0hF,GAAG9gF,EAAExD,GAAG,GAAG,OAAO4C,EAAa0jF,GAAG1jF,EAAEY,EAAExD,EAAXomF,MAAgBxpC,GAAGp5C,EAAExD,EAAE,CAAC,EAAEurE,GAAG,WAAW,OAAO9wB,EAAC,EAAE+wB,GAAG,SAAShoE,EAAExD,GAAG,IAAI4C,EAAE63C,GAAE,IAAI,OAAOA,GAAEj3C,EAAExD,GAAG,CAAC,QAAQy6C,GAAE73C,CAAC,CAAC,EAClSyjE,GAAG,SAAS7iE,EAAExD,EAAE4C,GAAG,OAAO5C,GAAG,IAAK,QAAyB,GAAjB0gE,EAAGl9D,EAAEZ,GAAG5C,EAAE4C,EAAEgsD,KAAQ,UAAUhsD,EAAE0nB,MAAM,MAAMtqB,EAAE,CAAC,IAAI4C,EAAEY,EAAEZ,EAAEmzD,YAAYnzD,EAAEA,EAAEmzD,WAAsF,IAA3EnzD,EAAEA,EAAEm4F,iBAAiB,cAAc5nC,KAAKqD,UAAU,GAAGx2D,GAAG,mBAAuBA,EAAE,EAAEA,EAAE4C,EAAE3R,OAAO+O,IAAI,CAAC,IAAIuB,EAAEqB,EAAE5C,GAAG,GAAGuB,IAAIiC,GAAGjC,EAAEy5F,OAAOx3F,EAAEw3F,KAAK,CAAC,IAAI7yF,EAAEw+D,GAAGplE,GAAG,IAAI4G,EAAE,MAAMxV,MAAM2N,EAAE,KAAKw/D,EAAGv+D,GAAGm/D,EAAGn/D,EAAE4G,EAAE,CAAC,CAAC,CAAC,MAAM,IAAK,WAAWk5D,GAAG79D,EAAEZ,GAAG,MAAM,IAAK,SAAmB,OAAV5C,EAAE4C,EAAEmF,QAAe+4D,GAAGt9D,IAAIZ,EAAEy5B,SAASr8B,GAAE,GAAI,EAAE8mE,GAAG4xB,GAAG3xB,GAAG4xB,GACpa,IAAIsC,GAAG,CAACC,uBAAsB,EAAGC,OAAO,CAAC10B,GAAG6Q,GAAG3Q,GAAGC,GAAGC,GAAG6xB,KAAK0C,GAAG,CAACC,wBAAwB1uB,GAAG2uB,WAAW,EAAEC,QAAQ,SAASC,oBAAoB,aAC1IC,GAAG,CAACH,WAAWF,GAAGE,WAAWC,QAAQH,GAAGG,QAAQC,oBAAoBJ,GAAGI,oBAAoBE,eAAeN,GAAGM,eAAeC,kBAAkB,KAAKC,4BAA4B,KAAKC,4BAA4B,KAAKC,cAAc,KAAKC,wBAAwB,KAAKC,wBAAwB,KAAKC,gBAAgB,KAAKC,mBAAmB,KAAKC,eAAe,KAAKC,qBAAqBl8E,EAAGspE,uBAAuB6S,wBAAwB,SAAS74F,GAAW,OAAO,QAAfA,EAAE6kE,GAAG7kE,IAAmB,KAAKA,EAAEkjE,SAAS,EAAE20B,wBAAwBD,GAAGC,yBARjN,WAAc,OAAO,IAAI,EASpUiB,4BAA4B,KAAKC,gBAAgB,KAAKC,aAAa,KAAKC,kBAAkB,KAAKC,gBAAgB,KAAKC,kBAAkB,kCAAkC,GAAG,qBAAqBC,+BAA+B,CAAC,IAAIC,GAAGD,+BAA+B,IAAIC,GAAGC,YAAYD,GAAGE,cAAc,IAAIlzB,GAAGgzB,GAAGG,OAAOvB,IAAI3xB,GAAG+yB,EAAE,CAAC,MAAMr5F,IAAG,CAAC,CAACtR,EAAQ0qE,mDAAmDq+B,GAC9Y/oG,EAAQ+qG,aAAa,SAASz5F,EAAExD,GAAG,IAAI4C,EAAE,EAAErO,UAAUtD,aAAQ,IAASsD,UAAU,GAAGA,UAAU,GAAG,KAAK,IAAImmG,GAAG16F,GAAG,MAAMrN,MAAM2N,EAAE,MAAM,OAbuH,SAAYkD,EAAExD,EAAE4C,GAAG,IAAIrB,EAAE,EAAEhN,UAAUtD,aAAQ,IAASsD,UAAU,GAAGA,UAAU,GAAG,KAAK,MAAM,CAACqqE,SAAS5B,EAAG12D,IAAI,MAAM/E,EAAE,KAAK,GAAGA,EAAE8nB,SAAS7lB,EAAEspE,cAAc9sE,EAAEkoF,eAAetlF,EAAE,CAa1Rs6F,CAAG15F,EAAExD,EAAE,KAAK4C,EAAE,EAAE1Q,EAAQirG,WAAW,SAAS35F,EAAExD,GAAG,IAAI06F,GAAGl3F,GAAG,MAAM7Q,MAAM2N,EAAE,MAAM,IAAIsC,GAAE,EAAGrB,EAAE,GAAG4G,EAAEkyF,GAA4P,OAAzP,OAAOr6F,QAAG,IAASA,KAAI,IAAKA,EAAEo9F,sBAAsBx6F,GAAE,QAAI,IAAS5C,EAAEsuF,mBAAmB/sF,EAAEvB,EAAEsuF,uBAAkB,IAAStuF,EAAEo5F,qBAAqBjxF,EAAEnI,EAAEo5F,qBAAqBp5F,EAAE85F,GAAGt2F,EAAE,GAAE,EAAG,KAAK,EAAKZ,EAAE,EAAGrB,EAAE4G,GAAG3E,EAAEq5E,IAAI78E,EAAE6D,QAAQy4E,GAAG,IAAI94E,EAAE0+D,SAAS1+D,EAAEuyD,WAAWvyD,GAAU,IAAI+2F,GAAGv6F,EAAE,EACrf9N,EAAQmrG,YAAY,SAAS75F,GAAG,GAAG,MAAMA,EAAE,OAAO,KAAK,GAAG,IAAIA,EAAE0+D,SAAS,OAAO1+D,EAAE,IAAIxD,EAAEwD,EAAE0iF,gBAAgB,QAAG,IAASlmF,EAAE,CAAC,GAAG,oBAAoBwD,EAAE0xD,OAAO,MAAMviE,MAAM2N,EAAE,MAAiC,MAA3BkD,EAAE9O,OAAO20C,KAAK7lC,GAAGtS,KAAK,KAAWyB,MAAM2N,EAAE,IAAIkD,GAAI,CAAqC,OAA5BA,EAAE,QAAVA,EAAE6kE,GAAGroE,IAAc,KAAKwD,EAAEkjE,SAAkB,EAAEx0E,EAAQorG,UAAU,SAAS95F,GAAG,OAAOm1F,GAAGn1F,EAAE,EAAEtR,EAAQqrG,QAAQ,SAAS/5F,EAAExD,EAAE4C,GAAG,IAAIyjB,GAAGrmB,GAAG,MAAMrN,MAAM2N,EAAE,MAAM,OAAOs6F,GAAG,KAAKp3F,EAAExD,GAAE,EAAG4C,EAAE,EAC/Y1Q,EAAQsrG,YAAY,SAASh6F,EAAExD,EAAE4C,GAAG,IAAI83F,GAAGl3F,GAAG,MAAM7Q,MAAM2N,EAAE,MAAM,IAAIiB,EAAE,MAAMqB,GAAGA,EAAE66F,iBAAiB,KAAKt1F,GAAE,EAAG1H,EAAE,GAAGV,EAAEs6F,GAAyO,GAAtO,OAAOz3F,QAAG,IAASA,KAAI,IAAKA,EAAEw6F,sBAAsBj1F,GAAE,QAAI,IAASvF,EAAE0rF,mBAAmB7tF,EAAEmC,EAAE0rF,uBAAkB,IAAS1rF,EAAEw2F,qBAAqBr5F,EAAE6C,EAAEw2F,qBAAqBp5F,EAAEg6F,GAAGh6F,EAAE,KAAKwD,EAAE,EAAE,MAAMZ,EAAEA,EAAE,KAAKuF,EAAE,EAAG1H,EAAEV,GAAGyD,EAAEq5E,IAAI78E,EAAE6D,QAAQy4E,GAAG94E,GAAMjC,EAAE,IAAIiC,EAAE,EAAEA,EAAEjC,EAAEtQ,OAAOuS,IAA2B2E,GAAhBA,GAAPvF,EAAErB,EAAEiC,IAAOk6F,aAAgB96F,EAAE+6F,SAAS,MAAM39F,EAAE65F,gCAAgC75F,EAAE65F,gCAAgC,CAACj3F,EAAEuF,GAAGnI,EAAE65F,gCAAgChpG,KAAK+R,EACvhBuF,GAAG,OAAO,IAAIsyF,GAAGz6F,EAAE,EAAE9N,EAAQgjE,OAAO,SAAS1xD,EAAExD,EAAE4C,GAAG,IAAIyjB,GAAGrmB,GAAG,MAAMrN,MAAM2N,EAAE,MAAM,OAAOs6F,GAAG,KAAKp3F,EAAExD,GAAE,EAAG4C,EAAE,EAAE1Q,EAAQ0rG,uBAAuB,SAASp6F,GAAG,IAAI6iB,GAAG7iB,GAAG,MAAM7Q,MAAM2N,EAAE,KAAK,QAAOkD,EAAEkxF,sBAAqBiE,IAAG,WAAWiC,GAAG,KAAK,KAAKp3F,GAAE,GAAG,WAAWA,EAAEkxF,oBAAoB,KAAKlxF,EAAEq5E,IAAI,IAAI,GAAE,KAAG,EAAM,EAAE3qF,EAAQ2rG,wBAAwBnF,GAC/UxmG,EAAQ4rG,oCAAoC,SAASt6F,EAAExD,EAAE4C,EAAErB,GAAG,IAAI8kB,GAAGzjB,GAAG,MAAMjQ,MAAM2N,EAAE,MAAM,GAAG,MAAMkD,QAAG,IAASA,EAAE0iF,gBAAgB,MAAMvzF,MAAM2N,EAAE,KAAK,OAAOs6F,GAAGp3F,EAAExD,EAAE4C,GAAE,EAAGrB,EAAE,EAAErP,EAAQqpG,QAAQ,oEChU7L,IAAI9nE,EAAIpjC,EAAQ,OAEd6B,EAAQirG,WAAa1pE,EAAE0pE,WACvBjrG,EAAQsrG,YAAc/pE,EAAE+pE,iDCH1B,SAASO,IAEP,GAC4C,qBAAnCnB,gCAC4C,oBAA5CA,+BAA+BmB,SAcxC,IAEEnB,+BAA+BmB,SAASA,EAC1C,CAAE,MAAO71F,GAGPlT,QAAQ04D,MAAMxlD,EAChB,CACF,CAKE61F,GACA9rG,EAAOC,QAAU,EAAjBD,2CCzBW,IAAIwO,EAAEpQ,EAAQ,OAASod,EAAEqvD,OAAOC,IAAI,iBAAiB38D,EAAE08D,OAAOC,IAAI,kBAAkBtpC,EAAE/+B,OAAO+f,UAAU67C,eAAevsD,EAAEtD,EAAEm8D,mDAAmD+yB,kBAAkBrvF,EAAE,CAACgG,KAAI,EAAG8rD,KAAI,EAAG4rC,QAAO,EAAGC,UAAS,GAChP,SAAS59F,EAAEuC,EAAEY,EAAEzD,GAAG,IAAIC,EAAEuB,EAAE,CAAC,EAAE4G,EAAE,KAAKhI,EAAE,KAAiF,IAAIH,UAAhF,IAASD,IAAIoI,EAAE,GAAGpI,QAAG,IAASyD,EAAE8C,MAAM6B,EAAE,GAAG3E,EAAE8C,UAAK,IAAS9C,EAAE4uD,MAAMjyD,EAAEqD,EAAE4uD,KAAc5uD,EAAEiwB,EAAE88B,KAAK/sD,EAAExD,KAAKM,EAAEgwD,eAAetwD,KAAKuB,EAAEvB,GAAGwD,EAAExD,IAAI,GAAG4C,GAAGA,EAAEqgF,aAAa,IAAIjjF,KAAKwD,EAAEZ,EAAEqgF,kBAAe,IAAS1hF,EAAEvB,KAAKuB,EAAEvB,GAAGwD,EAAExD,IAAI,MAAM,CAAC4+D,SAASnxD,EAAE6c,KAAK1nB,EAAE0D,IAAI6B,EAAEiqD,IAAIjyD,EAAEunD,MAAMnmD,EAAEmmF,OAAO3jF,EAAEF,QAAQ,CAAC3R,EAAQgsG,SAAS99F,EAAElO,EAAQisG,IAAI99F,EAAEnO,EAAQksG,KAAK/9F,oCCD7V,IAAID,EAAE08D,OAAOC,IAAI,iBAAiBh5D,EAAE+4D,OAAOC,IAAI,gBAAgBz8D,EAAEw8D,OAAOC,IAAI,kBAAkB18D,EAAEy8D,OAAOC,IAAI,qBAAqBn9D,EAAEk9D,OAAOC,IAAI,kBAAkBr8D,EAAEo8D,OAAOC,IAAI,kBAAkBhpD,EAAE+oD,OAAOC,IAAI,iBAAiBvrE,EAAEsrE,OAAOC,IAAI,qBAAqB5+C,EAAE2+C,OAAOC,IAAI,kBAAkBzxD,EAAEwxD,OAAOC,IAAI,cAAcxxD,EAAEuxD,OAAOC,IAAI,cAActqD,EAAEqqD,OAAOe,SACzW,IAAIrjB,EAAE,CAACyrC,UAAU,WAAW,OAAM,CAAE,EAAEO,mBAAmB,WAAW,EAAED,oBAAoB,WAAW,EAAEJ,gBAAgB,WAAW,GAAG1rC,EAAE/lD,OAAOC,OAAOunF,EAAE,CAAC,EAAE,SAASoD,EAAE97E,EAAExD,EAAEmI,GAAG2L,KAAK4zC,MAAMlkD,EAAEsQ,KAAK2zC,QAAQznD,EAAE8T,KAAKgyE,KAAK5J,EAAEpoE,KAAKizE,QAAQ5+E,GAAGqyC,CAAC,CACwI,SAASmiC,IAAI,CAAyB,SAAS4C,EAAE/7E,EAAExD,EAAEmI,GAAG2L,KAAK4zC,MAAMlkD,EAAEsQ,KAAK2zC,QAAQznD,EAAE8T,KAAKgyE,KAAK5J,EAAEpoE,KAAKizE,QAAQ5+E,GAAGqyC,CAAC,CADxP8kC,EAAE7qE,UAAUilF,iBAAiB,CAAC,EACpQpa,EAAE7qE,UAAU4pF,SAAS,SAAS76F,EAAExD,GAAG,GAAG,kBAAkBwD,GAAG,oBAAoBA,GAAG,MAAMA,EAAE,MAAM7Q,MAAM,yHAAyHmhB,KAAKizE,QAAQZ,gBAAgBryE,KAAKtQ,EAAExD,EAAE,WAAW,EAAEs/E,EAAE7qE,UAAU6pF,YAAY,SAAS96F,GAAGsQ,KAAKizE,QAAQP,mBAAmB1yE,KAAKtQ,EAAE,cAAc,EAAgBm5E,EAAEloE,UAAU6qE,EAAE7qE,UAAsF,IAAIgrE,EAAEF,EAAE9qE,UAAU,IAAIkoE,EACrf8C,EAAElgB,YAAYggB,EAAE9kC,EAAEglC,EAAEH,EAAE7qE,WAAWgrE,EAAEkH,sBAAqB,EAAG,IAAI9E,EAAErtF,MAAMmB,QAAQ+mF,EAAEhoF,OAAO+f,UAAU67C,eAAeg1B,EAAE,CAACzhF,QAAQ,MAAMuiF,EAAE,CAAC9/E,KAAI,EAAG8rD,KAAI,EAAG4rC,QAAO,EAAGC,UAAS,GACtK,SAAShV,EAAEzlF,EAAExD,EAAEmI,GAAG,IAAI5G,EAAEqB,EAAE,CAAC,EAAE6K,EAAE,KAAKtN,EAAE,KAAK,GAAG,MAAMH,EAAE,IAAIuB,UAAK,IAASvB,EAAEoyD,MAAMjyD,EAAEH,EAAEoyD,UAAK,IAASpyD,EAAEsG,MAAMmH,EAAE,GAAGzN,EAAEsG,KAAKtG,EAAE08E,EAAEnsB,KAAKvwD,EAAEuB,KAAK6kF,EAAE91B,eAAe/uD,KAAKqB,EAAErB,GAAGvB,EAAEuB,IAAI,IAAIxB,EAAExL,UAAUtD,OAAO,EAAE,GAAG,IAAI8O,EAAE6C,EAAEymB,SAASlhB,OAAO,GAAG,EAAEpI,EAAE,CAAC,IAAI,IAAIU,EAAEjM,MAAMuL,GAAG0zB,EAAE,EAAEA,EAAE1zB,EAAE0zB,IAAIhzB,EAAEgzB,GAAGl/B,UAAUk/B,EAAE,GAAG7wB,EAAEymB,SAAS5oB,CAAC,CAAC,GAAG+C,GAAGA,EAAEy/E,aAAa,IAAI1hF,KAAKxB,EAAEyD,EAAEy/E,kBAAe,IAASrgF,EAAErB,KAAKqB,EAAErB,GAAGxB,EAAEwB,IAAI,MAAM,CAACq9D,SAASx+D,EAAEkqB,KAAK9mB,EAAE8C,IAAImH,EAAE2kD,IAAIjyD,EAAEunD,MAAM9kD,EAAE8kF,OAAOpC,EAAEzhF,QAAQ,CAChV,SAAS+lF,EAAEpmF,GAAG,MAAM,kBAAkBA,GAAG,OAAOA,GAAGA,EAAEo7D,WAAWx+D,CAAC,CAAoG,IAAIypF,EAAE,OAAO,SAASK,EAAE1mF,EAAExD,GAAG,MAAM,kBAAkBwD,GAAG,OAAOA,GAAG,MAAMA,EAAE8C,IAA7K,SAAgB9C,GAAG,IAAIxD,EAAE,CAAC,IAAI,KAAK,IAAI,MAAM,MAAM,IAAIwD,EAAE7D,QAAQ,SAAQ,SAAS6D,GAAG,OAAOxD,EAAEwD,EAAE,GAAE,CAA+E+6F,CAAO,GAAG/6F,EAAE8C,KAAKtG,EAAEoB,SAAS,GAAG,CAC/W,SAASuqF,EAAEnoF,EAAExD,EAAEmI,EAAE5G,EAAEqB,GAAG,IAAI6K,SAASjK,EAAK,cAAciK,GAAG,YAAYA,IAAEjK,EAAE,MAAK,IAAIrD,GAAE,EAAG,GAAG,OAAOqD,EAAErD,GAAE,OAAQ,OAAOsN,GAAG,IAAK,SAAS,IAAK,SAAStN,GAAE,EAAG,MAAM,IAAK,SAAS,OAAOqD,EAAEo7D,UAAU,KAAKx+D,EAAE,KAAK2D,EAAE5D,GAAE,GAAI,GAAGA,EAAE,OAAWyC,EAAEA,EAANzC,EAAEqD,GAASA,EAAE,KAAKjC,EAAE,IAAI2oF,EAAE/pF,EAAE,GAAGoB,EAAEsgF,EAAEj/E,IAAIuF,EAAE,GAAG,MAAM3E,IAAI2E,EAAE3E,EAAE7D,QAAQkqF,EAAE,OAAO,KAAK8B,EAAE/oF,EAAE5C,EAAEmI,EAAE,IAAG,SAAS3E,GAAG,OAAOA,CAAC,KAAI,MAAMZ,IAAIgnF,EAAEhnF,KAAKA,EADnW,SAAWY,EAAExD,GAAG,MAAM,CAAC4+D,SAASx+D,EAAEkqB,KAAK9mB,EAAE8mB,KAAKhkB,IAAItG,EAAEoyD,IAAI5uD,EAAE4uD,IAAI1K,MAAMlkD,EAAEkkD,MAAMggC,OAAOlkF,EAAEkkF,OAAO,CACyQiC,CAAE/mF,EAAEuF,IAAIvF,EAAE0D,KAAKnG,GAAGA,EAAEmG,MAAM1D,EAAE0D,IAAI,IAAI,GAAG1D,EAAE0D,KAAK3G,QAAQkqF,EAAE,OAAO,KAAKrmF,IAAIxD,EAAEnP,KAAK+R,IAAI,EAAyB,GAAvBzC,EAAE,EAAEoB,EAAE,KAAKA,EAAE,IAAIA,EAAE,IAAOsgF,EAAEr+E,GAAG,IAAI,IAAIzD,EAAE,EAAEA,EAAEyD,EAAEvS,OAAO8O,IAAI,CAC/e,IAAIU,EAAEc,EAAE2oF,EADwez8E,EACrfjK,EAAEzD,GAAeA,GAAGI,GAAGwrF,EAAEl+E,EAAEzN,EAAEmI,EAAE1H,EAAEmC,EAAE,MAAM,GAAGnC,EAPsU,SAAW+C,GAAG,OAAG,OAAOA,GAAG,kBAAkBA,EAAS,KAAsC,oBAAjCA,EAAEiP,GAAGjP,EAAEiP,IAAIjP,EAAE,eAA0CA,EAAE,IAAI,CAO5bm3C,CAAEn3C,GAAG,oBAAoB/C,EAAE,IAAI+C,EAAE/C,EAAE8vD,KAAK/sD,GAAGzD,EAAE,IAAI0N,EAAEjK,EAAEgwB,QAAQ5rB,MAA6BzH,GAAGwrF,EAA1Bl+E,EAAEA,EAAE1F,MAA0B/H,EAAEmI,EAAtB1H,EAAEc,EAAE2oF,EAAEz8E,EAAE1N,KAAkB6C,QAAQ,GAAG,WAAW6K,EAAE,MAAMzN,EAAE0zE,OAAOlwE,GAAG7Q,MAAM,mDAAmD,oBAAoBqN,EAAE,qBAAqBtL,OAAO20C,KAAK7lC,GAAGtS,KAAK,MAAM,IAAI8O,GAAG,6EAA6E,OAAOG,CAAC,CACzZ,SAAS0yF,EAAErvF,EAAExD,EAAEmI,GAAG,GAAG,MAAM3E,EAAE,OAAOA,EAAE,IAAIjC,EAAE,GAAGqB,EAAE,EAAmD,OAAjD+oF,EAAEnoF,EAAEjC,EAAE,GAAG,IAAG,SAASiC,GAAG,OAAOxD,EAAEuwD,KAAKpoD,EAAE3E,EAAEZ,IAAI,IAAUrB,CAAC,CAAC,SAAS+xF,EAAE9vF,GAAG,IAAI,IAAIA,EAAEg7F,QAAQ,CAAC,IAAIx+F,EAAEwD,EAAEi7F,SAAQz+F,EAAEA,KAAMu+E,MAAK,SAASv+E,GAAM,IAAIwD,EAAEg7F,UAAU,IAAIh7F,EAAEg7F,UAAQh7F,EAAEg7F,QAAQ,EAAEh7F,EAAEi7F,QAAQz+F,EAAC,IAAE,SAASA,GAAM,IAAIwD,EAAEg7F,UAAU,IAAIh7F,EAAEg7F,UAAQh7F,EAAEg7F,QAAQ,EAAEh7F,EAAEi7F,QAAQz+F,EAAC,KAAI,IAAIwD,EAAEg7F,UAAUh7F,EAAEg7F,QAAQ,EAAEh7F,EAAEi7F,QAAQz+F,EAAE,CAAC,GAAG,IAAIwD,EAAEg7F,QAAQ,OAAOh7F,EAAEi7F,QAAQC,QAAQ,MAAMl7F,EAAEi7F,OAAQ,CAC5Z,IAAI9K,EAAE,CAAC9vF,QAAQ,MAAMiwF,EAAE,CAACrmB,WAAW,MAAMumB,EAAE,CAACxK,uBAAuBmK,EAAErmB,wBAAwBwmB,EAAEnE,kBAAkBrK,GAAGpzF,EAAQysG,SAAS,CAAC9oG,IAAIg9F,EAAEniG,QAAQ,SAAS8S,EAAExD,EAAEmI,GAAG0qF,EAAErvF,GAAE,WAAWxD,EAAEkR,MAAM4C,KAAKvf,UAAU,GAAE4T,EAAE,EAAEoB,MAAM,SAAS/F,GAAG,IAAIxD,EAAE,EAAuB,OAArB6yF,EAAErvF,GAAE,WAAWxD,GAAG,IAAUA,CAAC,EAAE7L,QAAQ,SAASqP,GAAG,OAAOqvF,EAAErvF,GAAE,SAASA,GAAG,OAAOA,CAAC,KAAI,EAAE,EAAEo7F,KAAK,SAASp7F,GAAG,IAAIomF,EAAEpmF,GAAG,MAAM7Q,MAAM,yEAAyE,OAAO6Q,CAAC,GAAGtR,EAAQ2zF,UAAUvG,EAAEptF,EAAQgsG,SAAS59F,EACnepO,EAAQ2sG,SAASj/F,EAAE1N,EAAQ4sG,cAAcvf,EAAErtF,EAAQ6sG,WAAW1+F,EAAEnO,EAAQ8sG,SAAS7gF,EAAEjsB,EAAQ0qE,mDAAmDo3B,EAC9I9hG,EAAQ+sG,aAAa,SAASz7F,EAAExD,EAAEmI,GAAG,GAAG,OAAO3E,QAAG,IAASA,EAAE,MAAM7Q,MAAM,iFAAiF6Q,EAAE,KAAK,IAAIjC,EAAEk5C,EAAE,CAAC,EAAEj3C,EAAEkkD,OAAO9kD,EAAEY,EAAE8C,IAAImH,EAAEjK,EAAE4uD,IAAIjyD,EAAEqD,EAAEkkF,OAAO,GAAG,MAAM1nF,EAAE,CAAoE,QAAnE,IAASA,EAAEoyD,MAAM3kD,EAAEzN,EAAEoyD,IAAIjyD,EAAEmlF,EAAEzhF,cAAS,IAAS7D,EAAEsG,MAAM1D,EAAE,GAAG5C,EAAEsG,KAAQ9C,EAAE8mB,MAAM9mB,EAAE8mB,KAAK24D,aAAa,IAAIljF,EAAEyD,EAAE8mB,KAAK24D,aAAa,IAAIxiF,KAAKT,EAAE08E,EAAEnsB,KAAKvwD,EAAES,KAAK2lF,EAAE91B,eAAe7vD,KAAKc,EAAEd,QAAG,IAAST,EAAES,SAAI,IAASV,EAAEA,EAAEU,GAAGT,EAAES,GAAG,CAAC,IAAIA,EAAElM,UAAUtD,OAAO,EAAE,GAAG,IAAIwP,EAAEc,EAAE8nB,SAASlhB,OAAO,GAAG,EAAE1H,EAAE,CAACV,EAAEvL,MAAMiM,GACrf,IAAI,IAAIgzB,EAAE,EAAEA,EAAEhzB,EAAEgzB,IAAI1zB,EAAE0zB,GAAGl/B,UAAUk/B,EAAE,GAAGlyB,EAAE8nB,SAAStpB,CAAC,CAAC,MAAM,CAAC6+D,SAASx+D,EAAEkqB,KAAK9mB,EAAE8mB,KAAKhkB,IAAI1D,EAAEwvD,IAAI3kD,EAAEi6C,MAAMnmD,EAAEmmF,OAAOvnF,EAAE,EAAEjO,EAAQgtG,cAAc,SAAS17F,GAAqK,OAAlKA,EAAE,CAACo7D,SAAS7qD,EAAEyvE,cAAchgF,EAAE27F,eAAe37F,EAAE47F,aAAa,EAAEC,SAAS,KAAKC,SAAS,KAAKC,cAAc,KAAKC,YAAY,OAAQH,SAAS,CAACzgC,SAASl+D,EAAEm+D,SAASr7D,GAAUA,EAAE87F,SAAS97F,CAAC,EAAEtR,EAAQy8D,cAAcs6B,EAAE/2F,EAAQutG,cAAc,SAASj8F,GAAG,IAAIxD,EAAEipF,EAAE1M,KAAK,KAAK/4E,GAAY,OAATxD,EAAEsqB,KAAK9mB,EAASxD,CAAC,EAAE9N,EAAQwtG,UAAU,WAAW,MAAM,CAAC77F,QAAQ,KAAK,EAC9d3R,EAAQytG,WAAW,SAASn8F,GAAG,MAAM,CAACo7D,SAASptE,EAAE0jE,OAAO1xD,EAAE,EAAEtR,EAAQ0tG,eAAehW,EAAE13F,EAAQ2tG,KAAK,SAASr8F,GAAG,MAAM,CAACo7D,SAASrzD,EAAEuzD,SAAS,CAAC0/B,SAAS,EAAEC,QAAQj7F,GAAGu7D,MAAMu0B,EAAE,EAAEphG,EAAQ4tG,KAAK,SAASt8F,EAAExD,GAAG,MAAM,CAAC4+D,SAAStzD,EAAEgf,KAAK9mB,EAAEysF,aAAQ,IAASjwF,EAAE,KAAKA,EAAE,EAAE9N,EAAQ6tG,gBAAgB,SAASv8F,GAAG,IAAIxD,EAAE8zF,EAAErmB,WAAWqmB,EAAErmB,WAAW,CAAC,EAAE,IAAIjqE,GAAG,CAAC,QAAQswF,EAAErmB,WAAWztE,CAAC,CAAC,EAAE9N,EAAQ8tG,aAAa,WAAW,MAAMrtG,MAAM,2DAA4D,EAC1cT,EAAQm7F,YAAY,SAAS7pF,EAAExD,GAAG,OAAO2zF,EAAE9vF,QAAQwpF,YAAY7pF,EAAExD,EAAE,EAAE9N,EAAQo7F,WAAW,SAAS9pF,GAAG,OAAOmwF,EAAE9vF,QAAQypF,WAAW9pF,EAAE,EAAEtR,EAAQ67F,cAAc,WAAW,EAAE77F,EAAQ87F,iBAAiB,SAASxqF,GAAG,OAAOmwF,EAAE9vF,QAAQmqF,iBAAiBxqF,EAAE,EAAEtR,EAAQq7F,UAAU,SAAS/pF,EAAExD,GAAG,OAAO2zF,EAAE9vF,QAAQ0pF,UAAU/pF,EAAExD,EAAE,EAAE9N,EAAQk8F,MAAM,WAAW,OAAOuF,EAAE9vF,QAAQuqF,OAAO,EAAEl8F,EAAQs7F,oBAAoB,SAAShqF,EAAExD,EAAEmI,GAAG,OAAOwrF,EAAE9vF,QAAQ2pF,oBAAoBhqF,EAAExD,EAAEmI,EAAE,EAC7bjW,EAAQu7F,mBAAmB,SAASjqF,EAAExD,GAAG,OAAO2zF,EAAE9vF,QAAQ4pF,mBAAmBjqF,EAAExD,EAAE,EAAE9N,EAAQw7F,gBAAgB,SAASlqF,EAAExD,GAAG,OAAO2zF,EAAE9vF,QAAQ6pF,gBAAgBlqF,EAAExD,EAAE,EAAE9N,EAAQy7F,QAAQ,SAASnqF,EAAExD,GAAG,OAAO2zF,EAAE9vF,QAAQ8pF,QAAQnqF,EAAExD,EAAE,EAAE9N,EAAQ07F,WAAW,SAASpqF,EAAExD,EAAEmI,GAAG,OAAOwrF,EAAE9vF,QAAQ+pF,WAAWpqF,EAAExD,EAAEmI,EAAE,EAAEjW,EAAQ27F,OAAO,SAASrqF,GAAG,OAAOmwF,EAAE9vF,QAAQgqF,OAAOrqF,EAAE,EAAEtR,EAAQ47F,SAAS,SAAStqF,GAAG,OAAOmwF,EAAE9vF,QAAQiqF,SAAStqF,EAAE,EAAEtR,EAAQi8F,qBAAqB,SAAS3qF,EAAExD,EAAEmI,GAAG,OAAOwrF,EAAE9vF,QAAQsqF,qBAAqB3qF,EAAExD,EAAEmI,EAAE,EAC/ejW,EAAQ+7F,cAAc,WAAW,OAAO0F,EAAE9vF,QAAQoqF,eAAe,EAAE/7F,EAAQqpG,QAAQ,6CCtBjFtpG,EAAOC,QAAU,EAAjBD,2CCAAA,EAAOC,QAAU,EAAjBD,gstHCMW,SAASwO,EAAE+C,EAAExD,GAAG,IAAI4C,EAAEY,EAAEvS,OAAOuS,EAAE3S,KAAKmP,GAAGwD,EAAE,KAAK,EAAEZ,GAAG,CAAC,IAAIrB,EAAEqB,EAAE,IAAI,EAAEuF,EAAE3E,EAAEjC,GAAG,KAAG,EAAExB,EAAEoI,EAAEnI,IAA0B,MAAMwD,EAA7BA,EAAEjC,GAAGvB,EAAEwD,EAAEZ,GAAGuF,EAAEvF,EAAErB,CAAc,CAAC,CAAC,SAASpB,EAAEqD,GAAG,OAAO,IAAIA,EAAEvS,OAAO,KAAKuS,EAAE,EAAE,CAAC,SAASiK,EAAEjK,GAAG,GAAG,IAAIA,EAAEvS,OAAO,OAAO,KAAK,IAAI+O,EAAEwD,EAAE,GAAGZ,EAAEY,EAAEsD,MAAM,GAAGlE,IAAI5C,EAAE,CAACwD,EAAE,GAAGZ,EAAEY,EAAE,IAAI,IAAIjC,EAAE,EAAE4G,EAAE3E,EAAEvS,OAAOktB,EAAEhW,IAAI,EAAE5G,EAAE4c,GAAG,CAAC,IAAIsV,EAAE,GAAGlyB,EAAE,GAAG,EAAEk5C,EAAEj3C,EAAEiwB,GAAG1vB,EAAE0vB,EAAE,EAAEnoB,EAAE9H,EAAEO,GAAG,GAAG,EAAEhE,EAAE06C,EAAE73C,GAAGmB,EAAEoE,GAAG,EAAEpI,EAAEuL,EAAEmvC,IAAIj3C,EAAEjC,GAAG+J,EAAE9H,EAAEO,GAAGnB,EAAErB,EAAEwC,IAAIP,EAAEjC,GAAGk5C,EAAEj3C,EAAEiwB,GAAG7wB,EAAErB,EAAEkyB,OAAQ,MAAG1vB,EAAEoE,GAAG,EAAEpI,EAAEuL,EAAE1I,IAA0B,MAAMY,EAA7BA,EAAEjC,GAAG+J,EAAE9H,EAAEO,GAAGnB,EAAErB,EAAEwC,CAAc,EAAC,CAAC,OAAO/D,CAAC,CAC3c,SAASD,EAAEyD,EAAExD,GAAG,IAAI4C,EAAEY,EAAEy8F,UAAUjgG,EAAEigG,UAAU,OAAO,IAAIr9F,EAAEA,EAAEY,EAAEqqE,GAAG7tE,EAAE6tE,EAAE,CAAC,GAAG,kBAAkBqyB,aAAa,oBAAoBA,YAAYnwB,IAAI,CAAC,IAAI3vE,EAAE8/F,YAAYhuG,EAAQ82E,aAAa,WAAW,OAAO5oE,EAAE2vE,KAAK,CAAC,KAAK,CAAC,IAAIzvE,EAAEwvE,KAAKzvE,EAAEC,EAAEyvE,MAAM79E,EAAQ82E,aAAa,WAAW,OAAO1oE,EAAEyvE,MAAM1vE,CAAC,CAAC,CAAC,IAAIT,EAAE,GAAGc,EAAE,GAAGqT,EAAE,EAAEviB,EAAE,KAAK+Z,EAAE,EAAEkH,GAAE,EAAGkoC,GAAE,EAAGH,GAAE,EAAG0hC,EAAE,oBAAoBhtB,WAAWA,WAAW,KAAKowB,EAAE,oBAAoBrB,aAAaA,aAAa,KAAKtB,EAAE,qBAAqBwjB,aAAaA,aAAa,KACnT,SAAS5gB,EAAE/7E,GAAG,IAAI,IAAIxD,EAAEG,EAAEO,GAAG,OAAOV,GAAG,CAAC,GAAG,OAAOA,EAAEy5B,SAAShsB,EAAE/M,OAAQ,MAAGV,EAAEogG,WAAW58F,GAAgD,MAA9CiK,EAAE/M,GAAGV,EAAEigG,UAAUjgG,EAAEqgG,eAAe5/F,EAAEb,EAAEI,EAAa,CAACA,EAAEG,EAAEO,EAAE,CAAC,CAAC,SAAS++E,EAAEj8E,GAAa,GAAVg3C,GAAE,EAAG+kC,EAAE/7E,IAAOm3C,EAAE,GAAG,OAAOx6C,EAAEP,GAAG+6C,GAAE,EAAGknC,EAAEnF,OAAO,CAAC,IAAI18E,EAAEG,EAAEO,GAAG,OAAOV,GAAGslF,EAAE7F,EAAEz/E,EAAEogG,UAAU58F,EAAE,CAAC,CACra,SAASk5E,EAAEl5E,EAAExD,GAAG26C,GAAE,EAAGH,IAAIA,GAAE,EAAG8kC,EAAE8G,GAAGA,GAAG,GAAG3zE,GAAE,EAAG,IAAI7P,EAAE2I,EAAE,IAAS,IAALg0E,EAAEv/E,GAAOxO,EAAE2O,EAAEP,GAAG,OAAOpO,MAAMA,EAAE6uG,eAAergG,IAAIwD,IAAIylF,MAAM,CAAC,IAAI1nF,EAAE/P,EAAEioC,SAAS,GAAG,oBAAoBl4B,EAAE,CAAC/P,EAAEioC,SAAS,KAAKluB,EAAE/Z,EAAE8uG,cAAc,IAAIn4F,EAAE5G,EAAE/P,EAAE6uG,gBAAgBrgG,GAAGA,EAAE9N,EAAQ82E,eAAe,oBAAoB7gE,EAAE3W,EAAEioC,SAAStxB,EAAE3W,IAAI2O,EAAEP,IAAI6N,EAAE7N,GAAG2/E,EAAEv/E,EAAE,MAAMyN,EAAE7N,GAAGpO,EAAE2O,EAAEP,EAAE,CAAC,GAAG,OAAOpO,EAAE,IAAI2sB,GAAE,MAAO,CAAC,IAAIsV,EAAEtzB,EAAEO,GAAG,OAAO+yB,GAAG6xD,EAAE7F,EAAEhsD,EAAE2sE,UAAUpgG,GAAGme,GAAE,CAAE,CAAC,OAAOA,CAAC,CAAC,QAAQ3sB,EAAE,KAAK+Z,EAAE3I,EAAE6P,GAAE,CAAE,CAAC,CAD1a,qBAAqB47C,gBAAW,IAASA,UAAUkyC,iBAAY,IAASlyC,UAAUkyC,WAAWC,gBAAgBnyC,UAAUkyC,WAAWC,eAAejkB,KAAKluB,UAAUkyC,YAC2Q,IACzP1N,EAD6PlJ,GAAE,EAAGC,EAAE,KAAKxD,GAAG,EAAEyD,EAAE,EAAEK,GAAG,EACvc,SAASjB,IAAI,QAAO/2F,EAAQ82E,eAAekhB,EAAEL,EAAO,CAAC,SAAS8B,IAAI,GAAG,OAAO/B,EAAE,CAAC,IAAIpmF,EAAEtR,EAAQ82E,eAAekhB,EAAE1mF,EAAE,IAAIxD,GAAE,EAAG,IAAIA,EAAE4pF,GAAE,EAAGpmF,EAAE,CAAC,QAAQxD,EAAE6yF,KAAKlJ,GAAE,EAAGC,EAAE,KAAK,CAAC,MAAMD,GAAE,CAAE,CAAO,GAAG,oBAAoBhN,EAAEkW,EAAE,WAAWlW,EAAEgP,EAAE,OAAO,GAAG,qBAAqB8U,eAAe,CAAC,IAAInN,EAAE,IAAImN,eAAe9M,EAAEL,EAAEoN,MAAMpN,EAAEqN,MAAMC,UAAUjV,EAAEkH,EAAE,WAAWc,EAAEkN,YAAY,KAAK,CAAC,MAAMhO,EAAE,WAAW3W,EAAEyP,EAAE,EAAE,EAAE,SAAS9J,EAAEr+E,GAAGomF,EAAEpmF,EAAEmmF,IAAIA,GAAE,EAAGkJ,IAAI,CAAC,SAASvN,EAAE9hF,EAAExD,GAAGomF,EAAElK,GAAE,WAAW14E,EAAEtR,EAAQ82E,eAAe,GAAEhpE,EAAE,CAC5d9N,EAAQ03E,sBAAsB,EAAE13E,EAAQk3E,2BAA2B,EAAEl3E,EAAQw3E,qBAAqB,EAAEx3E,EAAQs3E,wBAAwB,EAAEt3E,EAAQ4uG,mBAAmB,KAAK5uG,EAAQo3E,8BAA8B,EAAEp3E,EAAQ02E,wBAAwB,SAASplE,GAAGA,EAAEi2B,SAAS,IAAI,EAAEvnC,EAAQ6uG,2BAA2B,WAAWpmD,GAAGloC,IAAIkoC,GAAE,EAAGknC,EAAEnF,GAAG,EAC1UxqF,EAAQ8uG,wBAAwB,SAASx9F,GAAG,EAAEA,GAAG,IAAIA,EAAExO,QAAQ04D,MAAM,mHAAmHm8B,EAAE,EAAErmF,EAAEjD,KAAKC,MAAM,IAAIgD,GAAG,CAAC,EAAEtR,EAAQg3E,iCAAiC,WAAW,OAAO39D,CAAC,EAAErZ,EAAQ+uG,8BAA8B,WAAW,OAAO9gG,EAAEP,EAAE,EAAE1N,EAAQgvG,cAAc,SAAS19F,GAAG,OAAO+H,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,IAAIvL,EAAE,EAAE,MAAM,QAAQA,EAAEuL,EAAE,IAAI3I,EAAE2I,EAAEA,EAAEvL,EAAE,IAAI,OAAOwD,GAAG,CAAC,QAAQ+H,EAAE3I,CAAC,CAAC,EAAE1Q,EAAQivG,wBAAwB,WAAW,EAC9fjvG,EAAQ62E,sBAAsB,WAAW,EAAE72E,EAAQkvG,yBAAyB,SAAS59F,EAAExD,GAAG,OAAOwD,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQA,EAAE,EAAE,IAAIZ,EAAE2I,EAAEA,EAAE/H,EAAE,IAAI,OAAOxD,GAAG,CAAC,QAAQuL,EAAE3I,CAAC,CAAC,EAChM1Q,EAAQw2E,0BAA0B,SAASllE,EAAExD,EAAE4C,GAAG,IAAIrB,EAAErP,EAAQ82E,eAA8F,OAA/E,kBAAkBpmE,GAAG,OAAOA,EAAaA,EAAE,kBAAZA,EAAEA,EAAEy+F,QAA6B,EAAEz+F,EAAErB,EAAEqB,EAAErB,EAAGqB,EAAErB,EAASiC,GAAG,KAAK,EAAE,IAAI2E,GAAG,EAAE,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,KAAK,EAAEA,EAAE,WAAW,MAAM,KAAK,EAAEA,EAAE,IAAI,MAAM,QAAQA,EAAE,IAAmN,OAAzM3E,EAAE,CAACqqE,GAAG95D,IAAI0lB,SAASz5B,EAAEsgG,cAAc98F,EAAE48F,UAAUx9F,EAAEy9F,eAAvDl4F,EAAEvF,EAAEuF,EAAoE83F,WAAW,GAAGr9F,EAAErB,GAAGiC,EAAEy8F,UAAUr9F,EAAEnC,EAAEC,EAAE8C,GAAG,OAAOrD,EAAEP,IAAI4D,IAAIrD,EAAEO,KAAK85C,GAAG8kC,EAAE8G,GAAGA,GAAG,GAAG5rC,GAAE,EAAG8qC,EAAE7F,EAAE78E,EAAErB,MAAMiC,EAAEy8F,UAAU93F,EAAE1H,EAAEb,EAAE4D,GAAGm3C,GAAGloC,IAAIkoC,GAAE,EAAGknC,EAAEnF,KAAYl5E,CAAC,EACnetR,EAAQ22E,qBAAqBogB,EAAE/2F,EAAQovG,sBAAsB,SAAS99F,GAAG,IAAIxD,EAAEuL,EAAE,OAAO,WAAW,IAAI3I,EAAE2I,EAAEA,EAAEvL,EAAE,IAAI,OAAOwD,EAAE0N,MAAM4C,KAAKvf,UAAU,CAAC,QAAQgX,EAAE3I,CAAC,CAAC,CAAC,sCCf7J3Q,EAAOC,QAAU,EAAjBD,0BCEFA,EAAOC,QALP,SAA2BqrD,EAAKvkC,IACnB,MAAPA,GAAeA,EAAMukC,EAAItsD,UAAQ+nB,EAAMukC,EAAItsD,QAC/C,IAAK,IAAIL,EAAI,EAAG2wG,EAAO,IAAI/sG,MAAMwkB,GAAMpoB,EAAIooB,EAAKpoB,IAAK2wG,EAAK3wG,GAAK2sD,EAAI3sD,GACnE,OAAO2wG,CACT,EACoCtvG,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,2BCFzGD,EAAOC,QAHP,SAAyBqrD,GACvB,GAAI/oD,MAAMmB,QAAQ4nD,GAAM,OAAOA,CACjC,EACkCtrD,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BCHvG,IAAIuvG,EAAmB,EAAQ,OAI/BxvG,EAAOC,QAHP,SAA4BqrD,GAC1B,GAAI/oD,MAAMmB,QAAQ4nD,GAAM,OAAOkkD,EAAiBlkD,EAClD,EACqCtrD,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,2BCC1GD,EAAOC,QALP,SAAyBw0C,EAAUg7D,GACjC,KAAMh7D,aAAoBg7D,GACxB,MAAM,IAAI3+D,UAAU,oCAExB,EACkC9wC,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BCLvG,IAAIyvG,EAAgB,EAAQ,OAC5B,SAASC,EAAkBhnF,EAAQ8sC,GACjC,IAAK,IAAI92D,EAAI,EAAGA,EAAI82D,EAAMz2D,OAAQL,IAAK,CACrC,IAAIixG,EAAan6C,EAAM92D,GACvBixG,EAAWpiC,WAAaoiC,EAAWpiC,aAAc,EACjDoiC,EAAWriC,cAAe,EACtB,UAAWqiC,IAAYA,EAAWC,UAAW,GACjDptG,OAAO4pE,eAAe1jD,EAAQ+mF,EAAcE,EAAWv7F,KAAMu7F,EAC/D,CACF,CASA5vG,EAAOC,QARP,SAAsBwvG,EAAaK,EAAYC,GAM7C,OALID,GAAYH,EAAkBF,EAAYjtF,UAAWstF,GACrDC,GAAaJ,EAAkBF,EAAaM,GAChDttG,OAAO4pE,eAAeojC,EAAa,YAAa,CAC9CI,UAAU,IAELJ,CACT,EAC+BzvG,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BClBpG,IAAI+vG,EAA6B,EAAQ,OAoDzChwG,EAAOC,QAnDP,SAAoCgwG,EAAGC,GACrC,IAAIvhE,EAAuB,qBAAXk8B,QAA0BolC,EAAEplC,OAAOe,WAAaqkC,EAAE,cAClE,IAAKthE,EAAI,CACP,GAAIpsC,MAAMmB,QAAQusG,KAAOthE,EAAKqhE,EAA2BC,KAAOC,GAAkBD,GAAyB,kBAAbA,EAAEjxG,OAAqB,CAC/G2vC,IAAIshE,EAAIthE,GACZ,IAAIhwC,EAAI,EACJ+rF,EAAI,WAAc,EACtB,MAAO,CACLrnF,EAAGqnF,EACH54E,EAAG,WACD,OAAInT,GAAKsxG,EAAEjxG,OAAe,CACxB2W,MAAM,GAED,CACLA,MAAM,EACNG,MAAOm6F,EAAEtxG,KAEb,EACAuX,EAAG,SAAWi6F,GACZ,MAAMA,CACR,EACA3hG,EAAGk8E,EAEP,CACA,MAAM,IAAI55C,UAAU,wIACtB,CACA,IAEE76B,EAFEm6F,GAAmB,EACrBC,GAAS,EAEX,MAAO,CACLhtG,EAAG,WACDsrC,EAAKA,EAAG2vB,KAAK2xC,EACf,EACAn+F,EAAG,WACD,IAAIuI,EAAOs0B,EAAGpN,OAEd,OADA6uE,EAAmB/1F,EAAK1E,KACjB0E,CACT,EACAnE,EAAG,SAAWo6F,GACZD,GAAS,EACTp6F,EAAMq6F,CACR,EACA9hG,EAAG,WACD,IACO4hG,GAAoC,MAAhBzhE,EAAW,QAAWA,EAAW,QAC5D,CAAE,QACA,GAAI0hE,EAAQ,MAAMp6F,CACpB,CACF,EAEJ,EAC6CjW,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BCpDlH,IAAIyvG,EAAgB,EAAQ,OAe5B1vG,EAAOC,QAdP,SAAyB29D,EAAKvpD,EAAKyB,GAYjC,OAXAzB,EAAMq7F,EAAcr7F,MACTupD,EACTn7D,OAAO4pE,eAAezO,EAAKvpD,EAAK,CAC9ByB,MAAOA,EACP03D,YAAY,EACZD,cAAc,EACdsiC,UAAU,IAGZjyC,EAAIvpD,GAAOyB,EAEN8nD,CACT,EACkC59D,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,2BCZvGD,EAAOC,QAHP,SAA0BswG,GACxB,GAAsB,qBAAX1lC,QAAmD,MAAzB0lC,EAAK1lC,OAAOe,WAA2C,MAAtB2kC,EAAK,cAAuB,OAAOhuG,MAAMg1C,KAAKg5D,EACtH,EACmCvwG,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,2BCwBxGD,EAAOC,QA3BP,SAA+B0N,EAAGQ,GAChC,IAAIM,EAAI,MAAQd,EAAI,KAAO,oBAAsBk9D,QAAUl9D,EAAEk9D,OAAOe,WAAaj+D,EAAE,cACnF,GAAI,MAAQc,EAAG,CACb,IAAIyH,EACFpE,EACAnT,EACAmjB,EACAvQ,EAAI,GACJ/C,GAAI,EACJyhG,GAAI,EACN,IACE,GAAItxG,GAAK8P,EAAIA,EAAE6vD,KAAK3wD,IAAI4zB,KAAM,IAAMpzB,EAAG,CACrC,GAAI1L,OAAOgM,KAAOA,EAAG,OACrBD,GAAI,CACN,MAAO,OAASA,GAAK0H,EAAIvX,EAAE2/D,KAAK7vD,IAAIkH,QAAUpE,EAAE3S,KAAKsX,EAAEJ,OAAQvE,EAAEvS,SAAWmP,GAAIK,GAAI,GACtF,CAAE,MAAOb,GACPsiG,GAAI,EAAIn+F,EAAInE,CACd,CAAE,QACA,IACE,IAAKa,GAAK,MAAQC,EAAU,SAAMqT,EAAIrT,EAAU,SAAKhM,OAAOqf,KAAOA,GAAI,MACzE,CAAE,QACA,GAAImuF,EAAG,MAAMn+F,CACf,CACF,CACA,OAAOP,CACT,CACF,EACwCvR,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,2BCxB7GD,EAAOC,QAHP,WACE,MAAM,IAAI6wC,UAAU,4IACtB,EACmC9wC,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,2BCAxGD,EAAOC,QAHP,WACE,MAAM,IAAI6wC,UAAU,uIACtB,EACqC9wC,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BCH1G,IAAIosE,EAAiB,EAAQ,OAC7B,SAASmkC,EAAQt6F,EAAGvI,GAClB,IAAIc,EAAIhM,OAAO20C,KAAKlhC,GACpB,GAAIzT,OAAOguG,sBAAuB,CAChC,IAAIR,EAAIxtG,OAAOguG,sBAAsBv6F,GACrCvI,IAAMsiG,EAAIA,EAAEptG,QAAO,SAAU8K,GAC3B,OAAOlL,OAAO4qE,yBAAyBn3D,EAAGvI,GAAG6/D,UAC/C,KAAK/+D,EAAE7P,KAAKqgB,MAAMxQ,EAAGwhG,EACvB,CACA,OAAOxhG,CACT,CAYAzO,EAAOC,QAXP,SAAwBiW,GACtB,IAAK,IAAIvI,EAAI,EAAGA,EAAIrL,UAAUtD,OAAQ2O,IAAK,CACzC,IAAIc,EAAI,MAAQnM,UAAUqL,GAAKrL,UAAUqL,GAAK,CAAC,EAC/CA,EAAI,EAAI6iG,EAAQ/tG,OAAOgM,IAAI,GAAIhQ,SAAQ,SAAUkP,GAC/C0+D,EAAen2D,EAAGvI,EAAGc,EAAEd,GACzB,IAAKlL,OAAOiuG,0BAA4BjuG,OAAOkuG,iBAAiBz6F,EAAGzT,OAAOiuG,0BAA0BjiG,IAAM+hG,EAAQ/tG,OAAOgM,IAAIhQ,SAAQ,SAAUkP,GAC7IlL,OAAO4pE,eAAen2D,EAAGvI,EAAGlL,OAAO4qE,yBAAyB5+D,EAAGd,GACjE,GACF,CACA,OAAOuI,CACT,EACiClW,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BCtBtG,IAAI2wG,EAAiB,EAAQ,OACzBC,EAAuB,EAAQ,OAC/Bb,EAA6B,EAAQ,OACrCc,EAAkB,EAAQ,OAI9B9wG,EAAOC,QAHP,SAAwBqrD,EAAK3sD,GAC3B,OAAOiyG,EAAetlD,IAAQulD,EAAqBvlD,EAAK3sD,IAAMqxG,EAA2B1kD,EAAK3sD,IAAMmyG,GACtG,EACiC9wG,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,6BCPtG,IAAI8wG,EAAoB,EAAQ,OAC5BC,EAAkB,EAAQ,OAC1BhB,EAA6B,EAAQ,OACrCiB,EAAoB,EAAQ,OAIhCjxG,EAAOC,QAHP,SAA4BqrD,GAC1B,OAAOylD,EAAkBzlD,IAAQ0lD,EAAgB1lD,IAAQ0kD,EAA2B1kD,IAAQ2lD,GAC9F,EACqCjxG,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BCP1G,IAAIixG,EAAU,iBAWdlxG,EAAOC,QAVP,SAAsBupD,EAAO2nD,GAC3B,GAAuB,WAAnBD,EAAQ1nD,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAI4nD,EAAO5nD,EAAMqhB,OAAOwmC,aACxB,QAAa1+F,IAATy+F,EAAoB,CACtB,IAAIE,EAAMF,EAAK9yC,KAAK9U,EAAO2nD,GAAQ,WACnC,GAAqB,WAAjBD,EAAQI,GAAmB,OAAOA,EACtC,MAAM,IAAIxgE,UAAU,+CACtB,CACA,OAAiB,WAATqgE,EAAoB1vB,OAASvyE,QAAQs6C,EAC/C,EAC+BxpD,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BCXpG,IAAIixG,EAAU,iBACVG,EAAc,EAAQ,OAK1BrxG,EAAOC,QAJP,SAAwB2nE,GACtB,IAAIvzD,EAAMg9F,EAAYzpC,EAAK,UAC3B,MAAwB,WAAjBspC,EAAQ78F,GAAoBA,EAAMotE,OAAOptE,EAClD,EACiCrU,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,2BCNtG,SAASixG,EAAQjB,GAGf,OAAQjwG,EAAOC,QAAUixG,EAAU,mBAAqBrmC,QAAU,iBAAmBA,OAAOe,SAAW,SAAUqkC,GAC/G,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAK,mBAAqBplC,QAAUolC,EAAE3iC,cAAgBzC,QAAUolC,IAAMplC,OAAOroD,UAAY,gBAAkBytF,CACpH,EAAGjwG,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,QAAUixG,EAAQjB,EAC5F,CACAjwG,EAAOC,QAAUixG,EAASlxG,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,+BCT/F,IAAIuvG,EAAmB,EAAQ,OAS/BxvG,EAAOC,QARP,SAAqCgwG,EAAGsB,GACtC,GAAKtB,EAAL,CACA,GAAiB,kBAANA,EAAgB,OAAOT,EAAiBS,EAAGsB,GACtD,IAAIz/F,EAAIrP,OAAO+f,UAAUrT,SAASmvD,KAAK2xC,GAAGn9F,MAAM,GAAI,GAEpD,MADU,WAANhB,GAAkBm+F,EAAE3iC,cAAax7D,EAAIm+F,EAAE3iC,YAAY3Q,MAC7C,QAAN7qD,GAAqB,QAANA,EAAoBvP,MAAMg1C,KAAK04D,GACxC,cAANn+F,GAAqB,2CAA2CmpD,KAAKnpD,GAAW09F,EAAiBS,EAAGsB,QAAxG,CALc,CAMhB,EAC8CvxG,EAAOC,QAAQsvG,YAAa,EAAMvvG,EAAOC,QAAiB,QAAID,EAAOC,UCR/GuxG,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqB/+F,IAAjBg/F,EACH,OAAOA,EAAa1xG,QAGrB,IAAID,EAASwxG,EAAyBE,GAAY,CAGjDzxG,QAAS,CAAC,GAOX,OAHA2xG,EAAoBF,GAAUpzC,KAAKt+D,EAAOC,QAASD,EAAQA,EAAOC,QAASwxG,GAGpEzxG,EAAOC,OACf,CAGAwxG,EAAoBjwE,EAAIowE,ECxBxBH,EAAoBniG,EAAI,SAASrP,EAAS4xG,GACzC,IAAI,IAAIx9F,KAAOw9F,EACXJ,EAAoBxB,EAAE4B,EAAYx9F,KAASo9F,EAAoBxB,EAAEhwG,EAASoU,IAC5E5R,OAAO4pE,eAAepsE,EAASoU,EAAK,CAAEm5D,YAAY,EAAMj5D,IAAKs9F,EAAWx9F,IAG3E,ECPAo9F,EAAoBjjG,EAAI,CAAC,EAGzBijG,EAAoBv7F,EAAI,SAAS47F,GAChC,OAAO5lB,QAAQ6lB,IAAItvG,OAAO20C,KAAKq6D,EAAoBjjG,GAAG6I,QAAO,SAAS26F,EAAU39F,GAE/E,OADAo9F,EAAoBjjG,EAAE6F,GAAKy9F,EAASE,GAC7BA,CACR,GAAG,IACJ,ECPAP,EAAoB3vF,EAAI,SAASgwF,GAEhC,MAAO,aAAeA,EAAf,oBACR,ECHAL,EAAoBQ,SAAW,SAASH,GAGxC,ECJAL,EAAoB3jG,EAAI,WACvB,GAA0B,kBAAfokG,WAAyB,OAAOA,WAC3C,IACC,OAAOrwF,MAAQ,IAAIswF,SAAS,cAAb,EAChB,CAAE,MAAOj8F,GACR,GAAsB,kBAAX+lD,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBw1C,EAAoBxB,EAAI,SAASryC,EAAKI,GAAQ,OAAOv7D,OAAO+f,UAAU67C,eAAeC,KAAKV,EAAKI,EAAO,aCAtG,IAAIo0C,EAAa,CAAC,EACdC,EAAoB,kBAExBZ,EAAoBtjG,EAAI,SAAS2yD,EAAKnrD,EAAMtB,EAAKy9F,GAChD,GAAGM,EAAWtxC,GAAQsxC,EAAWtxC,GAAKliE,KAAK+W,OAA3C,CACA,IAAI6rD,EAAQ8wC,EACZ,QAAW3/F,IAAR0B,EAEF,IADA,IAAIk+F,EAAUz2C,SAAS+F,qBAAqB,UACpCljE,EAAI,EAAGA,EAAI4zG,EAAQvzG,OAAQL,IAAK,CACvC,IAAI0E,EAAIkvG,EAAQ5zG,GAChB,GAAG0E,EAAE6/D,aAAa,QAAUpC,GAAOz9D,EAAE6/D,aAAa,iBAAmBmvC,EAAoBh+F,EAAK,CAAEmtD,EAASn+D,EAAG,KAAO,CACpH,CAEGm+D,IACH8wC,GAAa,GACb9wC,EAAS1F,SAASY,cAAc,WAEzB81C,QAAU,QACjBhxC,EAAOixC,QAAU,IACbhB,EAAoBiB,IACvBlxC,EAAOvD,aAAa,QAASwzC,EAAoBiB,IAElDlxC,EAAOvD,aAAa,eAAgBo0C,EAAoBh+F,GAExDmtD,EAAOrK,IAAM2J,GAEdsxC,EAAWtxC,GAAO,CAACnrD,GACnB,IAAIg9F,EAAmB,SAASzwE,EAAM4iD,GAErCtjB,EAAOhG,QAAUgG,EAAOlG,OAAS,KACjC0wB,aAAaymB,GACb,IAAIG,EAAUR,EAAWtxC,GAIzB,UAHOsxC,EAAWtxC,GAClBU,EAAOsC,YAActC,EAAOsC,WAAWC,YAAYvC,GACnDoxC,GAAWA,EAAQn0G,SAAQ,SAASgmC,GAAM,OAAOA,EAAGqgD,EAAQ,IACzD5iD,EAAM,OAAOA,EAAK4iD,EACtB,EACI2tB,EAAUx1C,WAAW01C,EAAiBroB,KAAK,UAAM33E,EAAW,CAAE0lB,KAAM,UAAW1P,OAAQ64C,IAAW,MACtGA,EAAOhG,QAAUm3C,EAAiBroB,KAAK,KAAM9oB,EAAOhG,SACpDgG,EAAOlG,OAASq3C,EAAiBroB,KAAK,KAAM9oB,EAAOlG,QACnDg3C,GAAcx2C,SAAS/sB,KAAKovB,YAAYqD,EApCkB,CAqC3D,KCxCAiwC,EAAoB9jG,EAAI,SAAS1N,GACX,qBAAX4qE,QAA0BA,OAAOgoC,aAC1CpwG,OAAO4pE,eAAepsE,EAAS4qE,OAAOgoC,YAAa,CAAE/8F,MAAO,WAE7DrT,OAAO4pE,eAAepsE,EAAS,aAAc,CAAE6V,OAAO,GACvD,ECNA27F,EAAoBpjG,EAAI,8BCKxB,IAAIykG,EAAkB,CACrB,IAAK,GAGNrB,EAAoBjjG,EAAEyD,EAAI,SAAS6/F,EAASE,GAE1C,IAAIe,EAAqBtB,EAAoBxB,EAAE6C,EAAiBhB,GAAWgB,EAAgBhB,QAAWn/F,EACtG,GAA0B,IAAvBogG,EAGF,GAAGA,EACFf,EAASpzG,KAAKm0G,EAAmB,QAC3B,CAGL,IAAIC,EAAU,IAAI9mB,SAAQ,SAASG,EAAS4mB,GAAUF,EAAqBD,EAAgBhB,GAAW,CAACzlB,EAAS4mB,EAAS,IACzHjB,EAASpzG,KAAKm0G,EAAmB,GAAKC,GAGtC,IAAIlyC,EAAM2wC,EAAoBpjG,EAAIojG,EAAoB3vF,EAAEgwF,GAEpDr2C,EAAQ,IAAI/6D,MAgBhB+wG,EAAoBtjG,EAAE2yD,GAfH,SAASgkB,GAC3B,GAAG2sB,EAAoBxB,EAAE6C,EAAiBhB,KAEf,KAD1BiB,EAAqBD,EAAgBhB,MACRgB,EAAgBhB,QAAWn/F,GACrDogG,GAAoB,CACtB,IAAIG,EAAYpuB,IAAyB,SAAfA,EAAMzsD,KAAkB,UAAYysD,EAAMzsD,MAChE86E,EAAUruB,GAASA,EAAMn8D,QAAUm8D,EAAMn8D,OAAOwuC,IACpDsE,EAAM8gC,QAAU,iBAAmBuV,EAAU,cAAgBoB,EAAY,KAAOC,EAAU,IAC1F13C,EAAMkB,KAAO,iBACblB,EAAMpjC,KAAO66E,EACbz3C,EAAM23C,QAAUD,EAChBJ,EAAmB,GAAGt3C,EACvB,CAEF,GACyC,SAAWq2C,EAASA,EAE/D,CAEH,EAaA,IAAIuB,EAAuB,SAASC,EAA4B1gG,GAC/D,IAKI8+F,EAAUI,EALVyB,EAAW3gG,EAAK,GAChB4gG,EAAc5gG,EAAK,GACnB6gG,EAAU7gG,EAAK,GAGIjU,EAAI,EAC3B,GAAG40G,EAASG,MAAK,SAAS93B,GAAM,OAA+B,IAAxBk3B,EAAgBl3B,EAAW,IAAI,CACrE,IAAI81B,KAAY8B,EACZ/B,EAAoBxB,EAAEuD,EAAa9B,KACrCD,EAAoBjwE,EAAEkwE,GAAY8B,EAAY9B,IAGhD,GAAG+B,EAAsBA,EAAQhC,EAClC,CAEA,IADG6B,GAA4BA,EAA2B1gG,GACrDjU,EAAI40G,EAASv0G,OAAQL,IACzBmzG,EAAUyB,EAAS50G,GAChB8yG,EAAoBxB,EAAE6C,EAAiBhB,IAAYgB,EAAgBhB,IACrEgB,EAAgBhB,GAAS,KAE1BgB,EAAgBhB,GAAW,CAG7B,EAEI6B,EAAqBz3C,KAAiC,2BAAIA,KAAiC,4BAAK,GACpGy3C,EAAmBl1G,QAAQ40G,EAAqB/oB,KAAK,KAAM,IAC3DqpB,EAAmB/0G,KAAOy0G,EAAqB/oB,KAAK,KAAMqpB,EAAmB/0G,KAAK0rF,KAAKqpB,wDCvFxE,SAASzC,EAAQjB,GAG9B,OAAOiB,EAAU,mBAAqBrmC,QAAU,iBAAmBA,OAAOe,SAAW,SAAUqkC,GAC7F,cAAcA,CAChB,EAAI,SAAUA,GACZ,OAAOA,GAAK,mBAAqBplC,QAAUolC,EAAE3iC,cAAgBzC,QAAUolC,IAAMplC,OAAOroD,UAAY,gBAAkBytF,CACpH,EAAGiB,EAAQjB,EACb,CCNe,SAAS2D,EAAehsC,GACrC,IAAIvzD,ECFS,SAAsBm1C,EAAO2nD,GAC1C,GAAuB,WAAnBD,EAAQ1nD,IAAiC,OAAVA,EAAgB,OAAOA,EAC1D,IAAI4nD,EAAO5nD,EAAMqhB,OAAOwmC,aACxB,QAAa1+F,IAATy+F,EAAoB,CACtB,IAAIE,EAAMF,EAAK9yC,KAAK9U,EAAO2nD,GAAQ,WACnC,GAAqB,WAAjBD,EAAQI,GAAmB,OAAOA,EACtC,MAAM,IAAIxgE,UAAU,+CACtB,CACA,OAAiB,WAATqgE,EAAoB1vB,OAASvyE,QAAQs6C,EAC/C,CDPY,CAAYoe,EAAK,UAC3B,MAAwB,WAAjBspC,EAAQ78F,GAAoBA,EAAMotE,OAAOptE,EAClD,CEJA,SAASm8F,EAAQt6F,EAAGvI,GAClB,IAAIc,EAAIhM,OAAO20C,KAAKlhC,GACpB,GAAIzT,OAAOguG,sBAAuB,CAChC,IAAIR,EAAIxtG,OAAOguG,sBAAsBv6F,GACrCvI,IAAMsiG,EAAIA,EAAEptG,QAAO,SAAU8K,GAC3B,OAAOlL,OAAO4qE,yBAAyBn3D,EAAGvI,GAAG6/D,UAC/C,KAAK/+D,EAAE7P,KAAKqgB,MAAMxQ,EAAGwhG,EACvB,CACA,OAAOxhG,CACT,CACe,SAASolG,EAAe39F,GACrC,IAAK,IAAIvI,EAAI,EAAGA,EAAIrL,UAAUtD,OAAQ2O,IAAK,CACzC,IAAIc,EAAI,MAAQnM,UAAUqL,GAAKrL,UAAUqL,GAAK,CAAC,EAC/CA,EAAI,EAAI6iG,EAAQ/tG,OAAOgM,IAAI,GAAIhQ,SAAQ,SAAUkP,GCbtC,IAAyBiwD,EAAKvpD,EAAKyB,EAAV8nD,EDcnB1nD,ECdwB7B,EDcrB1G,ECd0BmI,EDcvBrH,EAAEd,ICb3B0G,EAAM,EAAcA,MACTupD,EACTn7D,OAAO4pE,eAAezO,EAAKvpD,EAAK,CAC9ByB,MAAOA,EACP03D,YAAY,EACZD,cAAc,EACdsiC,UAAU,IAGZjyC,EAAIvpD,GAAOyB,CDKX,IAAKrT,OAAOiuG,0BAA4BjuG,OAAOkuG,iBAAiBz6F,EAAGzT,OAAOiuG,0BAA0BjiG,IAAM+hG,EAAQ/tG,OAAOgM,IAAIhQ,SAAQ,SAAUkP,GAC7IlL,OAAO4pE,eAAen2D,EAAGvI,EAAGlL,OAAO4qE,yBAAyB5+D,EAAGd,GACjE,GACF,CACA,OAAOuI,CACT,sCELI49F,EAAgB,SAASxkG,EAAGvB,GAI5B,OAHA+lG,EAAgBrxG,OAAOsxG,gBAClB,CAAEC,UAAW,cAAgBzxG,OAAS,SAAU+M,EAAGvB,GAAKuB,EAAE0kG,UAAYjmG,CAAE,GACzE,SAAUuB,EAAGvB,GAAK,IAAK,IAAIM,KAAKN,EAAOtL,OAAO+f,UAAU67C,eAAeC,KAAKvwD,EAAGM,KAAIiB,EAAEjB,GAAKN,EAAEM,GAAG,EAC5FylG,EAAcxkG,EAAGvB,EAC5B,EAUO,IAAIkmG,EAAW,WAQlB,OAPAA,EAAWxxG,OAAOC,QAAU,SAAkB+L,GAC1C,IAAK,IAAIpL,EAAG1E,EAAI,EAAGmT,EAAIxP,UAAUtD,OAAQL,EAAImT,EAAGnT,IAE5C,IAAK,IAAI0P,KADThL,EAAIf,UAAU3D,GACO8D,OAAO+f,UAAU67C,eAAeC,KAAKj7D,EAAGgL,KAAII,EAAEJ,GAAKhL,EAAEgL,IAE9E,OAAOI,CACf,EACWwlG,EAASh1F,MAAM4C,KAAMvf,UAChC,ECpCM+7D,EAAiB57D,OAAO+f,UAAU67C,eAMxC,SAAS0V,EAAG16D,EAAQC,GAEhB,OAAID,IAAMC,EAGO,IAAND,GAAiB,IAANC,GAAW,EAAID,IAAM,EAAIC,EAGpCD,IAAMA,GAAKC,IAAMA,CAEhC,CAOgB,SAAA46F,EAAaC,EAAWC,GACpC,GAAIrgC,EAAGogC,EAAMC,GACT,OAAO,EAGX,GAAoB,kBAATD,GAA8B,OAATA,GACZ,kBAATC,GAA8B,OAATA,EAC5B,OAAO,EAGX,IAAMC,EAAQ5xG,OAAO20C,KAAK+8D,GACpBG,EAAQ7xG,OAAO20C,KAAKg9D,GAE1B,GAAIC,EAAMr1G,SAAWs1G,EAAMt1G,OACvB,OAAO,EAIX,IAAK,IAAIL,EAAI,EAAGA,EAAI01G,EAAMr1G,OAAQL,IAC9B,IACK0/D,EAAeC,KAAK81C,EAAMC,EAAM11G,MAChCo1E,EAAGogC,EAAKE,EAAM11G,IAAKy1G,EAAKC,EAAM11G,KAE/B,OAAO,EAIf,OAAO,CACX,KCAa41G,EAAO1pC,OAAO,QAuMd2pC,EAAU3pC,OAAO,WAsVd,SAAA4pC,EACZ/rF,EACAgsF,GAEA,IAAMC,EAAgBlyG,OAAOimB,KAAYA,EACrCA,EAAOwzC,QACPvpD,EACJ,GAAIgiG,EAAe,CACf,GAAIA,EAAc3gB,UAAW,CAGzB,IAAM4gB,EAAc,WAEhB,IAAIC,EAAQF,EAAcE,MAMtBhgB,EAAQ,IAAIigB,EACZD,EACAF,EAAc93F,KACdg4F,EAAMtgG,IAAIogG,EAAc93F,MACxBg4F,EAAME,SATc,WAAM,OAAAC,EAAS,CACnCH,MAAOA,EACPhgB,MAAOA,EACPnsE,OAAQusF,EAAMvsF,QAChB,IAQF,MAAO,CACHmsF,MAAOA,EACPhgB,MAAOA,EACPnsE,OAAQA,EAEhB,EACMwsF,EAAoBC,EAAAA,SAAeP,GAAlCK,EAAKC,EAAA,GAAEF,EAAQE,EAAA,GAEtB,GAAID,EAAMJ,QAAUF,EAAcE,SAAW,WAAYI,GACrD,MAAM,IAAIG,EAAuBT,EAAc93F,KAAMw4F,EAAQC,0BAKjE7yG,OAAO4pE,eAAe4oC,EAAO,QAAS,CAAEznC,YAAY,IACpD/qE,OAAO4pE,eAAe4oC,EAAO,QAAS,CAAEznC,YAAY,IACpD/qE,OAAO4pE,eAAe4oC,EAAO,SAAU,CAAEznC,YAAY,IAErDynC,EAAMpgB,MAAM0gB,YACRZ,EAAc93F,KACdo4F,EAAMJ,MAAMtgG,IAAIogG,EAAc93F,MAC9Bo4F,EAAMJ,MAAME,QAGZE,EAAMvsF,SAAWA,GAErBusF,EAAMvsF,OAASA,EAKfisF,EAAca,UAAUP,EAAMpgB,OAC9B4gB,GAA0B,WAMtB,OAFAR,EAAMpgB,MAAM6gB,UACZf,EAAca,UAAUP,EAAMpgB,OACvB,WACHogB,EAAMpgB,MAAM8gB,YACZhB,EAAciB,YAAYX,EAAMpgB,MACpC,IACD,IAEH,IAAIA,EAAQogB,EAAMpgB,MAAM34B,OAGxB,OADA+4C,EAAM,uBAAyBpgB,EACxBA,CACV,CAGO+f,EAAc,WAEd,IAAIC,EAAQF,EAAcE,MAMtBhgB,EAAQ,IAAIigB,EACZD,EACAgB,EACAhB,EAAMtgG,IAAIshG,GACVhB,EAAME,SATc,WAAM,OAAAe,EAAS,CACnCjB,MAAOA,EACPhgB,MAAOA,EACPnsE,OAAQqtF,EAAMrtF,QAChB,IAQF,MAAO,CACHmsF,MAAOA,EACPhgB,MAAOA,EACPnsE,OAAQA,EAEhB,EApBA,IAqBMstF,EAAoBb,EAAAA,SAAeP,GAAlCmB,EAAKC,EAAA,GAAEF,EAAQE,EAAA,GAEtB,GAAID,EAAMlB,QAAUF,EAAcE,SAAW,WAAYkB,GACrD,MAAM,IAAIX,EAAuBT,EAAc93F,KAAMw4F,EAAQC,0BAIjE7yG,OAAO4pE,eAAe0pC,EAAO,QAAS,CAAEvoC,YAAY,IACpD/qE,OAAO4pE,eAAe0pC,EAAO,QAAS,CAAEvoC,YAAY,IACpD/qE,OAAO4pE,eAAe0pC,EAAO,SAAU,CAAEvoC,YAAY,IAErDuoC,EAAMlhB,MAAM0gB,YACRM,EACAE,EAAMlB,MAAMtgG,IAAIshG,GAChBE,EAAMlB,MAAME,QAGZgB,EAAMrtF,SAAWA,GAErBqtF,EAAMrtF,OAASA,EAKfqtF,EAAMlB,MAAMW,UAAUO,EAAMlhB,OAC5B4gB,GAA0B,WAMtB,OAFAM,EAAMlhB,MAAM6gB,UACZK,EAAMlB,MAAMW,UAAUO,EAAMlhB,OACrB,WACHkhB,EAAMlhB,MAAM8gB,YACZI,EAAMlB,MAAMe,YAAYG,EAAMlhB,MAClC,IACD,IAECA,EAAoCkhB,EAAMlhB,MAAM34B,OACpD,IADA,IACS+5C,EAAM,EAAGA,EAAMtB,EAAc93F,KAAK7d,OAAQi3G,GAAO,EACtDphB,EAAQA,EAAMvoC,OAAOqoD,EAAc93F,KAAKo5F,IAI5C,OADAF,EAAM,uBAAyBlhB,EACxBA,CAEd,CAGO+f,EAAc,WAEd,IAAIC,EAAQqB,EAAYxtF,GAKpBmsE,EAAQ,IAAIigB,EACZD,EACAgB,EACAhB,EAAMtgG,IAAIshG,GACVhB,EAAME,SARc,WAAM,OAAAoB,EAAS,CACnCtB,MAAOA,EACPhgB,MAAOA,GACT,IAQF,MAAO,CACHggB,MAAOA,EACPhgB,MAAOA,EAEf,EAlBA,IAmBMuhB,EAAoBjB,EAAAA,SAAeP,GAAlCyB,EAAKD,EAAA,GAAED,EAAQC,EAAA,GAEtB,GAAI,WAAYC,EACZ,MAAM,IAAIjB,EAAuBS,EAAUR,EAAQC,0BAIvD7yG,OAAO4pE,eAAegqC,EAAO,QAAS,CAAE7oC,YAAY,IACpD/qE,OAAO4pE,eAAegqC,EAAO,QAAS,CAAE7oC,YAAY,IAEpD6oC,EAAMxhB,MAAM0gB,YACRM,EACAQ,EAAMxB,MAAMtgG,IAAIshG,GAChBQ,EAAMxB,MAAME,SACZ,GAMJsB,EAAMxB,MAAMW,UAAUa,EAAMxhB,OAI5BwhB,EAAMxB,MAAMyB,SAAS5B,GACrBe,GAA0B,WAOtB,OAHAY,EAAMxhB,MAAM6gB,UACZW,EAAMxB,MAAMW,UAAUa,EAAMxhB,OAC5BwhB,EAAMxB,MAAMyB,SAAS5B,GACd,WACH2B,EAAMxhB,MAAM8gB,YACZU,EAAMxB,MAAMe,YAAYS,EAAMxhB,OAC9BwhB,EAAMxB,MAAM0B,YAChB,IACD,IAEC1hB,EAAQwhB,EAAMxhB,MAAM34B,OAGxB,OADAm6C,EAAM,sBAAwBxhB,EACvBA,CAEf,CAoEA,IAEKwgB,EAFCn5C,EAAO2O,OAAO,SAEpB,SAAKwqC,GACDA,EAAAA,EAAA,2DAEAA,EAAAA,EAAA,2DACAA,EAAAA,EAAA,yDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,yDACAA,EAAAA,EAAA,mDACAA,EAAAA,EAAA,iCACAA,EAAAA,EAAA,iCAEAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,yDAEAA,EAAAA,EAAA,yCAEAA,EAAAA,EAAA,2CACAA,EAAAA,EAAA,2CACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,uDACAA,EAAAA,EAAA,uDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,iDACAA,EAAAA,EAAA,uCACAA,EAAAA,EAAA,uCACAA,EAAAA,EAAA,+BACAA,EAAAA,EAAA,8BACH,CA/BD,CAAKA,IAAAA,EA+BJ,KAED,IAAAD,EAAA,SAAAoB,GACI,SAAApB,EAAYv4F,EAAY++D,EAAa66B,UACjCD,EAAMl4C,KAAA,yBAAA9+D,OAAoBo8E,EAAc,aAAAp8E,OAAAqd,EAAK5d,KAAK,MAAIO,OAAGi3G,EAAU,cAAcj3G,OAAAi3G,GAAY,GAAO,OAChG,0DAA0Dj3G,OAAAo8E,KAAK,KAE3E,OF13BO,SAAmBtsE,EAAGvB,GACzB,GAAiB,oBAANA,GAA0B,OAANA,EAC3B,MAAM,IAAI+iC,UAAU,uBAAyB2wC,OAAO1zE,GAAK,iCAE7D,SAAS2oG,IAAO70F,KAAKyrD,YAAch+D,CAAE,CADrCwkG,EAAcxkG,EAAGvB,GAEjBuB,EAAEkT,UAAkB,OAANzU,EAAatL,OAAOyO,OAAOnD,IAAM2oG,EAAGl0F,UAAYzU,EAAEyU,UAAW,IAAIk0F,EACnF,CE+2BqCC,CAAKvB,EAAAoB,GAKzCpB,CAAD,CALA,CAAqC10G,OAgB/Bk2G,EAAgB/rC,OAAO,eAEvBgrC,EAAiB,GAIvBgB,EAAA,WAiBI,SAAAA,EAAoBC,GAApB,IA0BCv/E,EAAA,KA1BmB,KAAMu/E,OAANA,EAbb,KAAO/B,QAAG,EAIT,KAAAgC,aAAgC,IAAI/hE,IAUpCvyC,OAAOq0G,KAAYA,GACnBE,EAAcC,gBAAgBH,GAC9Bj1F,KAAKq1F,YAAYJ,GACVA,IAAWvC,GAClB1yF,KAAKq1F,iBAAYvkG,GAGrB,IAAIwkG,EAA6B,WAC7B5/E,EAAK6/E,cAAc7B,YACfM,EACAt+E,EAAKhjB,IAAIshG,GACTt+E,EAAKw9E,SACL,EAER,EACAoC,EAA2BE,IAAe,EAE1Cx1F,KAAKu1F,cAAgB,IAAItC,EACrBjzF,KACAg0F,EACAh0F,KAAKtN,IAAIshG,GACTh0F,KAAKkzF,QACLoC,GAEJt1F,KAAK2zF,UAAU3zF,KAAKu1F,eAoO5B,OAjOIP,EAAWr0F,UAAA00F,YAAX,SAAYlE,GAAZ,IAgCCz7E,EAAA,KA/BG1V,KAAKi1F,OAASvC,EACd1yF,KAAKy1F,mBAAgB3kG,EACrBkP,KAAK01F,sBAAmB5kG,EAEnBqgG,GAOLA,EAAUA,EACL1mB,MAAK,SAAC3+E,GACC4pB,EAAKigF,WAAaxE,IAClBz7E,EAAKigF,cAAW7kG,EAChB4kB,EAAK+/E,mBAAgB3kG,EACrB4kB,EAAKggF,iBACLhgF,EAAKu3B,OAAOv3B,EAAK6/E,cAAcl7C,OAAQ3kC,EAAK11B,IAAIg0G,EAAUloG,IAElE,IACC4+E,OAAM,SAACt2E,GACJ,GAAIshB,EAAKigF,WAAaxE,EAAS,CAC3Bz7E,EAAKigF,cAAW7kG,EAChB4kB,EAAKggF,sBAAmB5kG,EACxB4kB,EAAK+/E,cAAgBrhG,EACrBshB,EAAKw9E,SAAW,EAChB,IAAI75B,EAAK,CAAEr+D,KAAMg5F,GACjBt+E,EAAKu3B,OAAOv3B,EAAK6/E,cAAcl7C,OAAQgf,EAC1C,CACL,IACJr5D,KAAK21F,SAAWxE,GAzBZnxF,KAAK21F,SAAW,IAAItrB,SAA0B,SAAAG,GAC1C90D,EAAKggF,iBAAmBlrB,CAC5B,KA0BRwqB,EAAQr0F,UAAA8zF,SAAR,SAASmB,eACD51F,KAAKkzF,QAAU,IACflzF,KAAKkzF,SAAWlzF,KAAKkzF,cAEDpiG,IAApBkP,KAAK61F,aACL71F,KAAK61F,WAA6B,OAAhBD,QAAgB,IAAhBA,OAAgB,EAAhBA,IAClB51F,KAAK81F,kBAA6C,QAAzB3B,EAAiB,QAAjBd,EAAArzF,KAAK61F,kBAAY,IAAAxC,OAAA,EAAAA,EAAA0C,gBAAQ,IAAA5B,OAAA,EAAAA,EAAA13C,KAAA42C,EAAGrzF,KAAKu1F,cAAcl7C,OAAQ,CAAC,GAE1D,QAAvB27C,EAAe,QAAfzB,EAAAv0F,KAAK61F,kBAAU,IAAAtB,OAAA,EAAAA,EAAE0B,cAAM,IAAAD,GAAAA,EAAAv5C,KAAA83C,EAAGv0F,KAAKu1F,cAAcl7C,OAAQr6C,KAAK81F,mBAAqB,CAAC,KAIxFd,EAAAr0F,UAAA+zF,WAAA,mBACQ10F,KAAK61F,aACoB,QAAzB1B,GAAAd,EAAArzF,KAAK61F,YAAWK,iBAAS,IAAA/B,GAAAA,EAAA13C,KAAA42C,EAAGrzF,KAAKu1F,cAAcl7C,eACxCr6C,KAAK61F,kBACL71F,KAAK81F,mBAEZ91F,KAAKkzF,QAAU,IACflzF,KAAKkzF,SAAWlzF,KAAKkzF,UAI7BtyG,OAAA4pE,eAAIwqC,EAASr0F,UAAA,aAAbjO,IAAA,WACI,OAAOsN,KAAK81F,mDAGhBl1G,OAAA4pE,eAAIwqC,EAAOr0F,UAAA,WAAXjO,IAAA,WACI,OAAOsN,KAAK21F,0CAGhB/0G,OAAA4pE,eAAIwqC,EAAYr0F,UAAA,gBAAhBjO,IAAA,WACI,OAAOsN,KAAKy1F,+CAGhBT,EAAGr0F,UAAAjO,IAAH,SAAIsI,GACA,IAAIre,EAASqjB,KAAKi1F,OAClB,OAAIt4G,IAAW+1G,GAGf13F,EAAKpe,SAAQ,SAAA4P,GACT7P,EAASA,EAAO6P,EACpB,IAJW7P,GAQfq4G,EAAAr0F,UAAA3gB,IAAA,SAAIgb,EAAY/G,WACZ,GAAI+L,KAAKkzF,QAAU,EAEf,MAAM,IAAIK,EAAuBv4F,EAAMw4F,EAAQ2C,uBAGnD,GAAoB,IAAhBn7F,EAAK7d,OAAc,CAGnB,GAAI8W,IAAUy+F,EACV1yF,KAAKq1F,iBAAYvkG,QACd,GAAIlQ,OAAOqT,KAAWA,GAASkhG,EAAcC,gBAAgBnhG,GAChE+L,KAAKq1F,YAAYphG,GACjBA,EAAQy+F,MACL,IAAI1yF,KAAK21F,WAAa31F,KAAK01F,iBAC9B,MAAM,IAAInC,EAAuBv4F,EAAMw4F,EAAQ4C,sBAE/Cp2F,KAAKy1F,mBAAgB3kG,CACxB,CAED,IAAIulG,EAAYr2F,KAAKi1F,OAIrB,GAHAj1F,KAAKi1F,OAAShhG,EACd+L,KAAKs2F,WAEDD,IAAc3D,GAAQ1yF,KAAKi1F,SAAWvC,GAAQ1yF,KAAK01F,iBAAkB,CACrE11F,KAAK21F,cAAW7kG,EAChBkP,KAAKy1F,mBAAgB3kG,EACrB,IAAIylG,EAAWv2F,KAAK01F,iBACpB11F,KAAK01F,iBACLa,EAASv2F,KAAKi1F,OACjB,CAED,MAAO,CACHj6F,KAAIA,EAEX,CAED,GAAIpa,OAAOqT,KAAWA,GAASkhG,EAAcC,gBAAgBnhG,GAEzD,MAAM,IAAIs/F,EAAuBv4F,EAAMw4F,EAAQgD,0BAInD,IADA,IAAI1vF,EAAS9G,KAAKi1F,OACTn4G,EAAI,EAAGA,EAAIke,EAAK7d,OAAS,EAAGL,GAAK,EACtCgqB,EAASA,EAAO9L,EAAKle,IAGzB,IAAM0P,EAAIwO,EAAKA,EAAK7d,OAAS,GAC7B,OAAIqP,KAAKsa,EACD7S,IAAUy+F,GAEV5rF,EAAOta,GAAKyH,EACZ+L,KAAKs2F,WACE,CACHt7F,KAAIA,KAIJta,MAAMmB,QAAQilB,IAAwB,kBAANta,EAChCsa,EAAOrT,OAAOjH,EAAG,UAEVsa,EAAOta,GAElBwT,KAAKs2F,WAKE,CACHt7F,KAAMA,EAAK/J,MAAM,GAAI,GACrBwlG,SAAWpD,EAAA,GAAAA,EAAC7mG,GAAI,IAAY6mG,KAKpCp/F,IAAUy+F,GAEV5rF,EAAOta,GAAKyH,EACZ+L,KAAKs2F,WAKE,CACHt7F,KAAMA,EAAK/J,MAAM,GAAI,GACrBwlG,SAAWtC,EAAA,GAAAA,EAAC3nG,GAAI,IAAY2nG,KAM7B,CACHn5F,KAAIA,IAIZg6F,EAAAr0F,UAAA+1F,OAAA,SAAO1jB,EAAuD/+E,WACjC,QAAzBkgG,EAAiB,QAAjBd,EAAArzF,KAAK61F,kBAAY,IAAAxC,OAAA,EAAAA,EAAAsD,gBAAQ,IAAAxC,GAAAA,EAAA13C,KAAA42C,EAAGrgB,EAAO/+E,EAAO+L,KAAKu1F,cAAcl7C,SAGjE26C,EAAAr0F,UAAAi2F,SAAA,SAAS5jB,EAAuD/+E,WACjC,QAA3BkgG,EAAiB,QAAjBd,EAAArzF,KAAK61F,kBAAY,IAAAxC,OAAA,EAAAA,EAAAwD,kBAAU,IAAA1C,GAAAA,EAAA13C,KAAA42C,EAAGrgB,EAAO/+E,EAAO+L,KAAKu1F,cAAcl7C,SAGnE26C,EAAAr0F,UAAAssC,OAAA,SAAO+lC,EAAuD3Z,GAA9D,QAgBC3jD,EAAA,KAfyB,QAAtBy+E,EAAiB,QAAjBd,EAAArzF,KAAK61F,kBAAY,IAAAxC,OAAA,EAAAA,EAAAyD,aAAK,IAAA3C,GAAAA,EAAA13C,KAAA42C,EAAGrgB,EAAO3Z,EAAIr5D,KAAKu1F,cAAcl7C,QAEvD,IAAMo8C,EAAU,IAAItjE,IAIhBkmC,EAAGo9B,UAAoE,IAAzD71G,OAAOwL,OAAOitE,EAAGo9B,SAAS97E,WAAU,SAAA79B,GAAK,MAAM,MAANA,CAAA,IAEvD8D,OAAO20C,KAAK8jC,EAAGo9B,SAAS75G,SAAQ,SAAA4V,GAC5BkjB,EAAKw/E,aAAat4G,SAAQ,SAAA4E,GAAK,OAAAA,EAAEs1G,MAAM,CAAE97F,KAAMq+D,EAAGr+D,KAAKrd,OAAO6U,IAAQikG,EAAvC,GACnC,IAEAz2F,KAAKk1F,aAAat4G,SAAQ,SAAA4E,GAAK,OAAAA,EAAEs1G,MAAMz9B,EAAIo9B,EAAZ,IAEnCA,EAAQ75G,SAAQ,SAAA8S,GAAK,OAAAA,GAAG,KAG5BslG,EAAAr0F,UAAA21F,SAAA,WACQt2F,KAAKkzF,QAAU,IACflzF,KAAKkzF,SAAW,GAEhBlzF,KAAKkzF,QAAU,IACflzF,KAAKkzF,SAAW,IAGxB8B,EAAAr0F,UAAAo2F,UAAA,WACI,OAAO/2F,KAAKu1F,eAGhBP,EAASr0F,UAAAgzF,UAAT,SAAUrnG,GACN0T,KAAKk1F,aAAal9F,IAAI1L,IAG1B0oG,EAAWr0F,UAAAozF,YAAX,SAAYznG,GACR0T,KAAKk1F,aAAa/gG,OAAO7H,IAG7B0oG,EAAAr0F,UAAAq2F,OAAA,WACI,MAAM,IAAIzD,EAAuBS,EAAUR,EAAQyD,eAE1DjC,CAAD,CA9QA,GAiRMkC,EAAcluC,OAAO,eAGrBwsC,EAAcxsC,OAAO,eAE3BiqC,EAAA,WAiBI,SACoBA,EAAAD,EACTh4F,EACCm8F,EACAC,EACAC,GAJQ,KAAKrE,MAALA,EACT,KAAIh4F,KAAJA,EACC,KAAWm8F,YAAXA,EACA,KAAYC,aAAZA,EACA,KAASC,UAATA,EAbJ,KAASC,UAAqBJ,EA8kB1C,OA1kBIt2G,OAAA4pE,eAAIyoC,EAAStyF,UAAAgyF,EAAA,CAAbjgG,IAAA,WACI,MAAO,CAACsN,KAAKtN,MAAOsN,KAAKq6C,yCAW7B44C,EAAWtyF,UAAA+yF,YAAX,SAAY14F,EAAYm8F,EAAgBC,EAAsBhnD,GAC1DpwC,KAAKhF,KAAOA,EACZgF,KAAKm3F,YAAcA,EACnBn3F,KAAKo3F,aAAeA,EACpBp3F,KAAKs3F,UAAYJ,EAEb9mD,UACOpwC,KAAKu3F,gBACLv3F,KAAKw3F,uBACLx3F,KAAKy3F,uBAEZz3F,KAAK03F,yBAA2B13F,KAAK23F,iBACrC33F,KAAKy3F,qBAAuBz3F,KAAK43F,qBAE9B53F,KAAK23F,wBACL33F,KAAK43F,cAUhB3E,EAAAtyF,UAAAk3F,UAAA,WAaI73F,KAAKtN,IAAI,CAAEolG,yBAAyB,EAAMC,QAAS/3F,KAAK03F,2BACxD13F,KAAK43F,aAAYxF,EAAAA,EAAA,GACVpyF,KAAKy3F,sBACLz3F,KAAK43F,eAIhB3E,EAAYtyF,UAAAq3F,aAAZ,SAAaF,GAUT,GATI93F,KAAKo3F,eAAiBp3F,KAAKgzF,MAAME,UACjClzF,KAAKm3F,YAAcn3F,KAAKgzF,MAAMtgG,IAAIsN,KAAKhF,MACvCgF,KAAKo3F,aAAep3F,KAAKgzF,MAAME,QAE3BlzF,KAAKs3F,YAAcJ,IACnBl3F,KAAKs3F,UAAYJ,EACjBl3F,KAAKtN,IAAI,CAAEolG,yBAAyB,MAGxCA,EACA,OAAO93F,KAAKm3F,YAEhB,GAAIn3F,KAAKgzF,MAAMiF,aACX,MAAMj4F,KAAKgzF,MAAMiF,aAErB,GAAIj4F,KAAKgzF,MAAM7B,QACX,MAAM,IAAIoC,EAAuBvzF,KAAKhF,KAAMw4F,EAAQ0E,sBAExD,OAAOl4F,KAAKm3F,aAGhBlE,EAAGtyF,UAAAjO,IAAH,SAAIhW,SACMy6G,EAAcn3F,KAAKg4F,aAAa,OAAAt7G,QAAA,IAAAA,OAAA,EAAAA,EAASo7G,yBAC/C,OAAI,OAAAp7G,QAAO,IAAPA,OAAO,EAAPA,EAASy7G,SACFhB,GAEPn3F,KAAKs3F,YAAcJ,IACfx2G,MAAMmB,QAAQs1G,GACdn3F,KAAKs3F,UAAYt3F,KAAKo4F,eAAejB,GAC9Bv2G,OAAOu2G,KAAiBA,EAC6B,YAAT,QAA/C9D,EAAC8D,EAAiC1rC,mBAAa,IAAA4nC,OAAA,EAAAA,EAAAv4C,MAC/C96C,KAAKs3F,UAAYt3F,KAAKq4F,gBAAgBlB,IAGtCn3F,KAAK23F,kBAAmB,EACxB33F,KAAKs3F,UAAYH,GAGrBn3F,KAAKs3F,UAAYH,IAGrB,OAAAz6G,QAAO,IAAPA,OAAO,EAAPA,EAASq7G,UACT/3F,KAAK23F,kBAAmB,EACjBR,GAEJn3F,KAAKs3F,YAGhB12G,OAAA4pE,eAAIyoC,EAAKtyF,UAAA,SAATjO,IAAA,WAKI,OAAOsN,KAAKtN,uCAGhBugG,EAActyF,UAAA23F,eAAd,SAAeC,GAMX,GALwB,oBAAbA,IACPA,EAAYA,EAAmCv4F,KAAKg4F,iBAExDh4F,KAAKgzF,MAAM0D,OAAO12F,KAAKq6C,OAAkDk+C,GAErE33G,OAAO23G,KAAcA,GAAYA,EAAUxD,GAE3C,MAAM,IAAIxB,EAAuBvzF,KAAKhF,KAAMw4F,EAAQgF,0BAExD,OAAID,IAAa33G,OAAO23G,IAAaA,IAAav4F,KAAKg4F,cAAa,GAGzD,KAEJh4F,KAAKgzF,MAAMhzG,IAAIggB,KAAKhF,KAAMu9F,IAGrCtF,EAAGtyF,UAAA3gB,IAAH,SAAIu4G,GACA,IAAIl/B,EAAKr5D,KAAKs4F,eAAeC,GACzBl/B,GACAr5D,KAAKgzF,MAAM/lD,OAAOjtC,KAAKq6C,OAA0Dgf,IAIzF45B,EAActyF,UAAA83F,eAAd,SAAeC,GACX,IAAI5sG,EAAIkU,KAAK24F,iBAAiBD,GAC9B,OAAI5sG,EACO,CAACA,EAAEkP,MAEP,IAGXi4F,EAAgBtyF,UAAAg4F,iBAAhB,SAAiBD,GACb,IAAME,EAAe54F,KAAKg4F,eAM1B,GAL2B,oBAAhBU,IACPA,EAAeA,EAAyBE,IAE5C54F,KAAKgzF,MAAM4D,SAAS52F,KAAKq6C,OAAkDq+C,GAEvEh4G,MAAMmB,QAAQ+2G,GAAe,CAC7B,GAAIl4G,MAAMmB,QAAQ62G,GAAc,CAC5B,IAAIG,EAAoC,CAAE79F,KAAMgF,KAAKhF,KAAMy7F,QAAS,CAAC,GAIrE,OAHAiC,EAAY97G,SAAQ,SAACyX,EAAGvX,GACpB+7G,EAAGpC,QAAQmC,EAAa77G,KAAKsX,GAAK,GAAK,GAC3C,IACIzT,OAAO20C,KAAKsjE,EAAGpC,SAASt5G,OAAS,GACjC6iB,KAAKs4F,eAAeM,GACbC,GAEJ,IACV,CACG,IAAIC,EAAoC,CAAE99F,KAAMgF,KAAKhF,KAAMy7F,QAAS,CAAC,GAC/DsC,EAA2B,GAyBjC,OAxBAn4G,OAAO20C,KAAKmjE,GACP32G,KAAI,SAAAjF,GAAK,OAAAuQ,OAAOvQ,EAAP,IACTi2B,MAAK,SAACrjB,EAAGxD,GAAM,OAAAwD,EAAIxD,CAAJ,IACftP,SAAQ,SAAAE,GACL,IAAMgD,EAAQuN,OAAOvQ,GACfk8G,EAAeN,EAAY54G,GAC7Bk5G,IAAiBtG,GACjBoG,EAAGrC,QAAQ32G,GAAS,IACpBi5G,EAAeh8G,KAAK+C,KAGhBg5G,EAAGrC,QAAQ32G,GADXA,KAAS84G,EACW,IAEA,IAEvBA,EAAoC94G,GAASk5G,EAEtD,IAIJD,EAAetnG,UAAU7U,SAAQ,SAAA4P,GAC5BosG,EAA+BnlG,OAAOjH,EAAG,EAC9C,IACI5L,OAAO20C,KAAKujE,EAAGrC,SAASt5G,OAAS,GACjC6iB,KAAKs4F,eAAeM,GACbE,GAEJ,IAEd,CAAM,GAAIl4G,OAAOg4G,KAAkBA,EAAc,CAC9C,IAAIK,EAAoC,CAAEj+F,KAAMgF,KAAKhF,KAAMy7F,QAAS,CAAC,GAerE,OAdA71G,OAAO20C,KAAKmjE,GAAiC97G,SAAQ,SAAA4V,GACjD,IAAMwmG,EAAeN,EAAYlmG,GAC7BwmG,IAAiBtG,GACjBuG,EAAGxC,QAAQjkG,GAAO,WACXomG,EAAapmG,KAGhBymG,EAAGxC,QAAQjkG,GADXA,KAAOomG,EACW,IAEA,IAEtBA,EAAapmG,GAAOwmG,EAE5B,IACIp4G,OAAO20C,KAAK0jE,EAAGxC,SAASt5G,OAAS,GACjC6iB,KAAKs4F,eAAeM,GACbK,GAEJ,IACV,CAAM,MAA4B,kBAAjBL,EACP54F,KAAKs4F,eAAgBM,EAAeh5B,OAAO84B,IAE3C14F,KAAKs4F,eAAeI,IAInCzF,EAAKtyF,UAAAsxB,MAAL,SAAMymE,GACF,IAAI5sG,EAAIkU,KAAK24F,iBAAiBD,GAC1B5sG,GACAkU,KAAKgzF,MAAM/lD,OAAOjtC,KAAKq6C,OAA0DvuD,IAIzFmnG,EAAMtyF,UAAA8pC,OAAN,SAA0Bj4C,GACtB,OAAOwN,KAAKq8C,MAAM7pD,GAAwB6nD,QAG9C44C,EAAQtyF,UAAAu4F,SAAR,SAASn+F,GACL,IAAiB,IAAAo+F,EAAA,EAAAC,EAAAr+F,EAAAo+F,EAAKC,EAAAj8G,OAALg8G,IAAO,CAAnB,IAAIn+F,EAAIo+F,EAAAD,GACTn5F,KAAKgzF,MAAM/lD,OAAOjtC,KAAKq6C,OAA0D,CAAEr/C,KAAIA,GAC1F,GAGLi4F,EAAQtyF,UAAA8zF,SAAR,SAASmB,GACL51F,KAAKgzF,MAAMyB,SAASmB,IAGxB3C,EAAAtyF,UAAA+zF,WAAA,WACI10F,KAAKgzF,MAAM0B,cAGfzB,EAAStyF,UAAAgzF,UAAT,SAAUrnG,QACmBwE,IAArBkP,KAAKq5F,cACLr5F,KAAKq5F,YAAc,IAAIlmE,KAE3BnzB,KAAKq5F,YAAYrhG,IAAI1L,IAGzB2mG,EAAWtyF,UAAAozF,YAAX,SAAYznG,GACJ0T,KAAKq5F,aACLr5F,KAAKq5F,YAAYllG,OAAO7H,IAIhC1L,OAAA4pE,eAAIyoC,EAAStyF,UAAA,aAAbjO,IAAA,WACI,OAAQsN,KAAKq3F,UAAU7B,oCAG3BvC,EAAAtyF,UAAAkzF,QAAA,kBACW7zF,KAAKq3F,UAAU7B,IAG1BvC,EAAAtyF,UAAAmzF,UAAA,WACI9zF,KAAKq3F,UAAU7B,IAAe,GAGlCvC,EAAAtyF,UAAAm2F,MAAA,SAAMz9B,EAAyBo9B,GAA/B,IAiEC/gF,EAAA,KATS4jF,EAvDS,iBACPC,GAAa,EACb7jF,EAAKiiF,kBAEFjiF,EAAK4hF,YAAcJ,IACtBT,EAAQz+F,IAAI0d,EAAK2hF,kBACV3hF,EAAK6hF,SACZgC,GAAa,GAEjB,IACMC,EADKngC,EAAGr+D,KACY0a,EAAK1a,KAAK7d,QACpC,QAAqB2T,IAAjB0oG,GAGA,GAAI9jF,EAAK4hF,YAAcJ,EAAa,CAKhC,GAJAT,EAAQz+F,IAAI0d,EAAK2hF,kBACV3hF,EAAK6hF,gBACL7hF,EAAKkiF,aAERv+B,EAAGo9B,SAAW/gF,EAAK8hF,gBAEnB,GAAI92G,MAAMmB,QAAQ6zB,EAAKyhF,cAChBv2G,OAAOwL,OAAOitE,EAAGo9B,SAASv4D,SAAS,KAAM,CAG5C,IAAIu7D,EAAoB74G,OAAO20C,KAAK8jC,EAAGo9B,SAClC10G,KAAI,SAAAjF,GAAK,OAAAuQ,OAAOvQ,EAAP,IACTi2B,MAAK,SAACrjB,EAAGxD,GAAM,OAAAwD,EAAIxD,CAAJ,IACfk+B,MAAK,SAAAttC,GAAC,IAAAu2G,EAAI,MAAoB,OAAV,QAAVA,EAAAh6B,EAAGo9B,eAAO,IAAApD,OAAA,EAAAA,EAAGv2G,GAAU,IACtC,IAAK,IAAI48G,KAAYhkF,EAAK8hF,iBAClBnqG,OAAOqsG,IAAaD,GACpBC,KAAYrgC,EAAGo9B,iBACR/gF,EAAK8hF,gBAAgBkC,EAGvC,MACG,IAAK,IAAIA,KAAYrgC,EAAGo9B,eACb/gF,EAAK8hF,gBAAgBkC,eAI7BhkF,EAAK8hF,gBAEhB,OAAO,CACV,MACE,CACH,IAAMmC,EAA6B,QAAjBtG,EAAA39E,EAAKkiF,oBAAY,IAAAvE,OAAA,EAAAA,EAAGmG,GACtC,GAAIG,GAAaA,EAAU7C,MAAMz9B,EAAIo9B,GAEjC,cADO/gF,EAAK6hF,UACL,CAEd,CACD,OAAOgC,CACX,CAEgBtsD,GAQhB,OAPKqsD,QAAgCxoG,IAArBkP,KAAKq5F,aACjBr5F,KAAKq5F,YAAYz8G,SAAQ,SAAA4E,GACjBA,EAAEs1G,MAAMz9B,EAAIo9B,WACL/gF,EAAK6hF,QAEpB,IAEG+B,GAGX14G,OAAA4pE,eAAIyoC,EAAItyF,UAAA,QAARjO,IAAA,WACI,IAAMuB,EAAQ+L,KAAKtN,MACnB,OAAIhS,MAAMmB,QAAQoS,GACPrT,OAAO20C,KAAKthC,GAAOlS,KAAI,SAAAjF,GAAK,OAAAuQ,OAAOvQ,EAAE,IAAEkE,QAAO,SAAAlE,GAAK,OAAAuQ,OAAOusG,UAAU98G,EAAjB,IAG1D8D,OAAOqT,KAAWA,EACXrT,OAAO20C,KAAKthC,QADvB,mCAMJg/F,EAAKtyF,UAAA07C,MAAL,SAAM7pD,GACFwN,KAAK43F,aAAe53F,KAAK43F,cAAgB,CAAC,EAC1C,IAAMiC,EAAc75F,KAAK43F,aAAap7C,eAAehqD,IAAQwN,KAAK43F,aAAaplG,GAC/E,GAAIqnG,EACA,OAAOA,EAGX,IAAM1C,EAAcn3F,KAAKm3F,YAAY3kG,GACrC,GAA2B,oBAAhB2kG,EAEP,MAAM,IAAI5D,EAAuBvzF,KAAKhF,KAAMw4F,EAAQsG,sBAExD95F,KAAKw3F,gBAAkBx3F,KAAKw3F,iBAAmB,CAAC,EAChD,IACI1rG,EADEuwD,EAAQr8C,KAAKw3F,gBAAgBhlG,GAyBnC,OAvBI6pD,GACAA,EAAMq3C,YACF1zF,KAAKhF,KAAKrd,OAAO6U,GACjB2kG,EACAn3F,KAAKo3F,cACL,GAEJtrG,EAAIuwD,IAEJvwD,EAAI,IAAImnG,EACJjzF,KAAKgzF,MACLhzF,KAAKhF,KAAKrd,OAAO6U,GACjB2kG,EACAn3F,KAAKo3F,aACLp3F,KAAKq3F,WAETr3F,KAAKw3F,gBAAgBhlG,GAAO1G,GAE5BkU,KAAK23F,mBAEL7rG,EAAE6rG,kBAAmB,GAEzB33F,KAAK43F,aAAaplG,GAAO1G,EAClBA,GAGHmnG,EAActyF,UAAAy3F,eAAtB,SAAuBQ,GAAvB,IAiCCljF,EAAA,KAhCG,OAAOqkF,EAAU/5F,KAAKhF,KAAM49F,GACxB,WAAM,OAAAA,CAAA,IACN,SAAC9xF,EAAgBtU,GACb,GAAY,WAARA,EACA,OAAQsU,EAAc3pB,OAE1B,GAAIqV,KAAO9R,MAAMigB,UACb,OAAOjgB,MAAMigB,UAAUnO,GAE3B,GAAIA,IAAQuiG,EACR,OAAOr/E,EAEX,GAAmB,kBAARljB,EAEP,OAAOsU,EAAOtU,GAElB,IAAM1S,EAAQuN,OAAOmF,GACrB,OAAKnF,OAAOusG,UAAU95G,GAGf41B,EAAK2mC,MAAMv8D,GAAO4S,WAHzB,CAIJ,IACA,SAACoU,EAAgBtU,EAAkByB,GAC/B,GAAmB,kBAARzB,EAGP,OADAsU,EAAOtU,GAAOyB,GACP,EAEX,MAAM,IAAIs/F,EAAuB79E,EAAK1a,KAAMw4F,EAAQwG,sBAExD,IAIA/G,EAAetyF,UAAA03F,gBAAvB,SAAwBO,GAAxB,IA0BCljF,EAAA,KAzBG,OAAOqkF,EAAU/5F,KAAKhF,KAAM49F,GACxB,WAAM,OAAAA,CAAA,IACN,SAAC9xF,EAAgBtU,GACb,OAAIA,KAAO5R,OAAO+f,UACP/f,OAAO+f,UAAUnO,GAExBA,IAAQuiG,EACDr/E,EAEQ,kBAARljB,EAEAsU,EAAOtU,GAEXkjB,EAAK2mC,MAAM7pD,GAAKE,KAC3B,IACA,SAACoU,EAAgBtU,EAAkByB,GAC/B,GAAmB,kBAARzB,EAGP,OADAsU,EAAOtU,GAAOyB,GACP,EAEX,MAAM,IAAIs/F,EAAuB79E,EAAK1a,KAAMw4F,EAAQwG,sBAExD,IAIR/G,EAAAtyF,UAAA05C,KAAA,eAuGC3kC,EAAA,KAtGG,GAAI1V,KAAKu3F,SACL,OAAOv3F,KAAKu3F,SAoGhB,OATAv3F,KAAKu3F,SAAWwC,EAAU/5F,KAAKhF,KAAMgF,KAAKm3F,aACtC,SAAC8C,GACG,OAAOvkF,EAAKhjB,IAAI,CAAEolG,yBAAyB,EAAMK,QAAa,OAAJ8B,QAAA,IAAAA,OAAA,EAAAA,EAAM9B,aA1FzD,SAAC34C,EAAWhtD,GACvB,GAAIA,IAAQ6nD,EACR,OAAO3kC,EAEX,GAAmB,kBAARljB,EAAX,CAGA,GAAY,WAARA,EACA,MAAM,IAAI+gG,EAAuB79E,EAAK1a,KAAMw4F,EAAQ0G,cAGxD,IAAIC,EAAe,SAACh+C,GAChB,IAAMy8C,EAAeljF,EAAKhjB,IAAI,CAAEolG,wBAAkC,aAAT37C,GAAgC,gBAATA,IAEhF,GAAIA,KAAQv7D,OAAO+f,UAOf,OAAO/f,OAAO+f,UAAUw7C,GAG5B,GACKv7D,OAAOg4G,KAAkBA,GAE1BA,IAAiBlG,EAHrB,CAcA,GAAIhyG,MAAMmB,QAAQ+2G,GAAe,CAC7B,GAAa,WAATz8C,EACA,OAAOy8C,EAAaz7G,OAExB,GAAIg/D,KAAQz7D,MAAMigB,UACd,OAAOjgB,MAAMigB,UAAUw7C,GAE3B,IAAMr8D,EAAQuN,OAAO8uD,GACrB,IAAK9uD,OAAOusG,UAAU95G,GAClB,OAEJ,OAAO41B,EAAK+0B,OAAO3qD,EACtB,CACD,OAAO41B,EAAK+0B,OAAO0R,EAAK7uD,WAfvB,CAgBL,EAEA,OAAQkF,GACJ,IAAK,OACD,OAAOkjB,EAAK1a,KAChB,IAAK,OACD,OAAO0a,EAAK6f,KAChB,IAAK,QACD,OAAO7f,EAAKzhB,MAChB,IAAK,SACD,OAAOyhB,EAAK0kF,OAChB,IAAK,WACD,OAAO1kF,EAAK2kF,SAChB,IAAK,UACD,OAAO3kF,EAAKy7E,QAChB,IAAK,QACD,OAAOz7E,EAAKkkC,MAChB,IAAK,MACD,OAAO,SAACqgD,GAAiD,OAAAvkF,EAAKhjB,IAAIunG,EAAT,EAC7D,IAAK,MACD,OAAO,SAACztG,GAAyB,OAAAkpB,EAAK11B,IAAIwM,EAAT,EACrC,IAAK,QACD,OAAO,SAACA,GAAgC,OAAAkpB,EAAKuc,MAAMzlC,EAAX,EAC5C,IAAK,SACD,OAAO,SAACA,GAAe,OAAA2tG,EAAa3tG,EAAb,EAC3B,QAEI,IAAI8tG,EAAM5kF,EAAKs9E,MAAMH,UACrB,OAAIyH,GAAO9nG,KAAO8nG,EACPA,EAAI9nG,GAAKkjB,EAAK2kC,QAGlB8/C,EAAa3nG,GA9E3B,CAgFL,IAOI,SAACgtD,EAAGhtD,EAAKyB,GACL,MAAM,IAAIs/F,EAAuB79E,EAAK1a,KAAMw4F,EAAQ+G,sBAExD,GACGv6F,KAAKu3F,UAGhB32G,OAAA4pE,eAAIyoC,EAAQtyF,UAAA,YAAZjO,IAAA,WAEI,OADAsN,KAAKtN,IAAI,CAAEolG,yBAAyB,MAC3B93F,KAAKgzF,MAAM7B,yCAGxBvwG,OAAA4pE,eAAIyoC,EAAOtyF,UAAA,WAAXjO,IAAA,iBAGCgjB,EAAA,KADG,OADA1V,KAAKtN,IAAI,CAAEolG,yBAAyB,IACX,QAAlBzE,EAAArzF,KAAKgzF,MAAM7B,eAAO,IAAAkC,OAAA,EAAAA,EAAE5oB,MAAK,SAAAjrB,GAAK,OAAA9pC,EAAK2kC,MAAL,qCAGzCz5D,OAAA4pE,eAAIyoC,EAAKtyF,UAAA,SAATjO,IAAA,WAEI,OADAsN,KAAKtN,IAAI,CAAEolG,0BAA2B93F,KAAKgzF,MAAMiF,eAC1Cj4F,KAAKgzF,MAAMiF,8CAGtBr3G,OAAA4pE,eAAIyoC,EAAMtyF,UAAA,UAAVjO,IAAA,WACI,IAAMuB,EAAQ+L,KAAKtN,MACnB,OAAc,OAAVuB,QAA4BnD,IAAVmD,EACXA,EAEJ+L,KAAKq6C,wCAEnB44C,CAAD,CAvlBA,GAylBA,SAAS8G,EACL/+F,EAEAw/F,EAEAC,EAEAC,EAEAC,EACAC,GAEA,IAAMC,EAAiB,SAACC,GACpB,MAAM,IAAIvH,EAAuBv4F,EAAM8/F,EAC3C,EAIA,OAHIl6G,OAAO45G,KAAqBA,IAC5BA,EAAkB,CAAC,GAEhB,IAAIO,MAAMP,EAAiB,CAC9BQ,eAAgB,SAACC,GAGb,IAAMC,EAAaT,IACnB,YAAmB3pG,IAAfoqG,GAA2C,OAAfA,EACrB,KAEPA,IAAexI,EACR9xG,OAAOo6G,eAAe,IAAI3wB,SAAQ,WAAQ,KAE9CzpF,OAAOo6G,eAAeE,IAEjChJ,eAAgB,SAAC+I,EAASv9G,GACtB,OAAOm9G,EAAeD,EAClBpH,EAAQ2H,qBACR3H,EAAQ4H,uBAEhBC,aAAc,SAACJ,GAGX,OAAO,GAGXK,kBAAmB,SAACL,GAChB,OAAOJ,EAAeD,EAClBpH,EAAQ+H,wBACR/H,EAAQgI,0BAEhBhwC,yBAA0B,SAACyvC,EAASzuG,GAChC,IAAM0uG,EAAaT,IAEnB,GAAI75G,OAAOs6G,KAAgBA,EAAY,CACnC,IAAMO,EAAS76G,OAAO4qE,yBAAyB0vC,EAAY1uG,GAC3D,OAAI9L,MAAMmB,QAAQq5G,IAAe1uG,KAAK9L,MAAMigB,UACjC86F,EAEJA,GAAU,CAEb/vC,cAAc,EACdC,WAAY8vC,EAAO9vC,WACnBj5D,IAAK,WAAM,OAAAgoG,EAAeQ,EAAY1uG,EAAE,EACxCxM,SAAK8Q,EAEZ,CAED,IAAI8pG,GAAgBM,IAAexI,EAGnC,MAAU,UAANlmG,EACO,CAEHk/D,cAAc,EACdC,YAAY,EACZj5D,IAAK,WAAM,OAAA+nG,EAAa,CAAEtC,SAAS,GAAO,EAC1Cn4G,SAAK8Q,GAGH,SAANtE,EACO,CAEHk/D,cAAc,EACdC,YAAY,EACZj5D,IAAK,WAAM,OAAAsI,CAAI,EACfhb,SAAK8Q,QANb,GAWJ2B,IAAK,SAACwoG,EAASzuG,GACX,GAAiB,kBAANA,EACP,OAAO,EAEX,IAAM0uG,EAAaT,IACnB,OAAI75G,OAAOs6G,KAAgBA,EAChB1uG,KAAK0uG,GAEZN,GAAgBM,IAAexI,IAGtB,UAANlmG,GAAuB,SAANA,IAE5BkG,IAAKgoG,EACL16G,IAAK26G,EACLe,eAAgB,SAACT,EAASzuG,GACtB,OAAOquG,EAAeD,EAClBpH,EAAQmI,qBACRnI,EAAQoI,uBAEhBpxC,eAAgB,SAACywC,EAASzuG,EAAGsnD,GACzB,OAAO+mD,EAAeD,EAClBpH,EAAQqI,qBACRrI,EAAQsI,uBAEhBnN,QAAS,SAACsM,GACN,IAAMC,EAAaT,IAWnB,OAVI/5G,MAAMmB,QAAQq5G,SACSpqG,IAAnBmqG,EAAQ99G,QAIRyD,OAAO4pE,eAAegwC,EAAiB,SAAU,CAC7CvmG,MAAO,EAAG+5F,UAAU,EAAMriC,YAAY,EAAOD,cAAc,IAInE9qE,OAAOs6G,KAAgBA,EAChBt6G,OAAOm7G,oBAAoBb,GAElCN,GAAgBM,IAAexI,EACxB,GAEJ,CAAC,QAAS,SAErBt1F,MAAO,SAAC69F,EAASe,EAASC,GACtB,OAAOpB,EAAeD,EAClBpH,EAAQ0I,YACR1I,EAAQ2I,cAEhBzxC,UAAW,SAACuwC,EAASgB,EAAUG,GAC3B,OAAOvB,EAAeD,EAClBpH,EAAQ6I,gBACR7I,EAAQ8I,mBAGxB,CAEA,SAASjI,EAAkBkI,GACvB,IAAI7vC,EAA+B6vC,EAInC,GAHuB,oBAAZA,IACP7vC,EAAgB6vC,KAEhB37G,OAAO8rE,KAAkBA,GAAgBA,EAAaqoC,GACtD,MAAM,IAAIxB,EAAuBS,EAAUR,EAAQgJ,2BAEvD,OAAO,IAAIxH,EAAMtoC,EACrB,CAkCA,IAsEI+vC,EAUAC,EAUAC,EAUAC,EAUAC,EAUAC,EAUAC,EAlIA5H,EAAsF,CACtF6H,6BAA8B,SAC9BC,kBAAsC,kBAAZC,UAEtBA,EACJ9H,gBAAiB,SAAC5oG,GAAM,OAAA69E,QAAQG,QAAQh+E,KAAOA,CAAC,EAChD2wG,yCAAyC,GAiD7C,SAASC,EAAsB9kB,EAA6B+kB,GACxD,IAAgB,IAAAlE,EAAA,EAAA9F,EAAA/a,GAAQ,GAAR6gB,EAAA9F,EAAAl2G,OAAAg8G,IAAY,CAAvB,IAAMr8G,EAACu2G,EAAA8F,GACR,GAAIr8G,IAAM8D,OAAO9D,GAAI,CACjB,IAAIk2F,EAASl2F,EAAUu9D,GACvB,GAAI24B,EAAO,CACP,GAAIqqB,GAAiBlI,EAAcgI,wCAC/B,MAAM,IAAI5J,EAAuBvgB,EAAMh4E,KAAMw4F,EAAQ8J,2BAEzDtqB,EAAM6kB,WACT,CACJ,CACJ,CACD,OAAOvf,CACX,CAOA,SAASilB,EAAmBC,EAA8BllB,GAEtD,OADA8kB,EAAsB9kB,GAAM,GACrBmkB,EAAgBe,EAAQllB,EACnC,CAOA,SAASmlB,EAAyBD,EAA8BllB,GAE5D,OADA8kB,EAAsB9kB,GAAM,GACrBokB,EAAsBc,EAAQllB,EACzC,CAOA,SAASolB,EAA4BF,EAA8BllB,GAE/D,OADA8kB,EAAsB9kB,GAAM,GACrBqkB,EAAyBa,EAAQllB,EAC5C,CAOA,SAASqlB,EAA6Cr/C,EAA+Bs/C,EAAetlB,GAEhG,OADA8kB,EAAsB9kB,GAAM,GACrBskB,EAA0Bt+C,EAAKs/C,EAAMtlB,EAChD,CAOA,SAASulB,EAAoBC,EAAkBxlB,GAE3C,OADA8kB,EAAsB9kB,GAAM,GACrBukB,EAAciB,EAASxlB,EAClC,CAOA,SAASylB,EAAyCp4E,EAAa2yD,GAE3D,OADA8kB,EAAsB9kB,GAAM,GACrBwkB,EAAkBn3E,EAAU2yD,EACvC,CAuBA,SAAS0lB,EACLjsB,EACAksB,GAEA,OAAOlB,EAAWhrB,GAAW,SAACmsB,EAAWC,GAErC,OADAf,EAAsBx8G,OAAO20C,KAAK4oE,GAAWp8G,KAAI,SAAAjF,GAAK,OAAAqhH,EAAUrhH,EAAE,KAAG,IAC7DmhH,GAAiB5L,GAAc6L,EAAWC,EACtD,GACJ,CAEA,SAASC,KACA3B,GAAmBnJ,EAAAA,YACpBmJ,EAAkBnJ,EAAAA,UAClBA,EAAAA,UAAqBiK,IAEpBb,GAAyBpJ,EAAAA,kBAC1BoJ,EAAwBpJ,EAAAA,gBACxBA,EAAAA,gBAA2BmK,IAE1Bd,GAA4BrJ,EAAAA,qBAC7BqJ,EAA2BrJ,EAAAA,mBAC3BA,EAAAA,mBAA8BoK,IAE7Bd,GAA6BtJ,EAAAA,sBAC9BsJ,EAA4BtJ,EAAAA,oBAC5BA,EAAAA,oBAA+BqK,IAE9Bd,GAAiBvJ,EAAAA,UAClBuJ,EAAgBvJ,EAAAA,QAChBA,EAAAA,QAAmBuK,IAElBf,GAAqBxJ,EAAAA,cACtBwJ,EAAoBxJ,EAAAA,YACpBA,EAAAA,YAAuByK,IAEtBhB,GAAczJ,EAAAA,OACfyJ,EAAazJ,EAAAA,KACbA,EAAAA,KAAgB0K,EAExB,CACAI,IAGA,IAAMxK,EAA8C,qBAAXx5C,OAAyBsiD,EAAyBD,EC1+DrF4B,EDsPU,SACZ9B,EACA1J,GAEA,IAAMG,EAAQqB,EAAYkI,GAG1B,OAFAvJ,EAAMyB,SAAS5B,GACCG,EAAM+D,YACP18C,MACnB,CC9PmBikD,CA/FM,CACvBnhH,OAAQ,GACRgrD,MAAO,IACP3hB,OAAQ,GACR95B,MAAO,EACP6xG,KAAM,EACNC,KAAM,EACNC,YAAY,EACZC,cAAe,EACfC,gBAAiB,EACjBC,aAAc,EACdC,gBAAiB,IACjBC,SAAS,EACTC,UAAU,EACVC,aAAc,EACdtgF,MAAO,CACL,CACE6qB,MAAO,SACP01D,QAAS,QACTC,SAAU,KACV/2D,MAAO,GACPhrD,OAAQ,GACRqa,EAAG,EACHC,EAAG,GAEL,CACE8xC,MAAO,SACP01D,QAAS,OACTC,SAAU,GACV/2D,MAAO,GACPhrD,OAAQ,GACRqa,EAAG,EACHC,EAAG,GAEL,CACE8xC,MAAO,YACP01D,QAAS,OACT92D,MAAO,GACPhrD,OAAQ,EACR+hH,SAAU,GACV1nG,EAAG,EACHC,EAAG,GAEL,CACE8xC,MAAO,SACP01D,QAAS,QACT92D,MAAO,KACPhrD,OAAQ,GACR+hH,SAAU,GACV1nG,EAAG,EACHC,EAAG,GAEL,CACE8xC,MAAO,SACP01D,QAAS,MACT92D,MAAO,GACPhrD,OAAQ,GACR+hH,SAAU,GACV1nG,EAAG,EACHC,EAAG,IAGP0nG,UAAW,CACT,CACE3nG,EAAG,GACHC,EAAG,GACH+uB,OAAQ,EACR44E,cAAe,EACfC,cAAe,GACd,CACD7nG,GAAI,GACJC,EAAG,GACH+uB,OAAQ,EACR44E,cAAe,EACfC,cAAe,GACd,CACD7nG,GAAI,GACJC,GAAI,GACJ+uB,OAAQ,EACR44E,cAAe,EACfC,cAAe,GACd,CACD7nG,EAAG,GACHC,GAAI,GACJ+uB,OAAQ,EACR44E,cAAe,EACfC,cAAe,IAGnBC,YAAY,EACZC,uBAAwB,KACxBC,QAAQ,EACRH,cAAe,OAKJI,EAAY,WACvB,OAAO7M,EAAayL,EACtB,mCCxKaqB,EAAsB,CAAC,MAAO,SAAU,OAAQ,QAAS,QAAS,QCSlEhhF,EAAQ,SACnBiqB,GACI,IADYg3D,EAAyBl/G,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAG,CAAC,SAAU,OAAQ,QAAS,OAAQ,SAExEtD,EACkDwrD,EADlDxrD,OAAQgrD,EAC0CQ,EAD1CR,MAAO3hB,EACmCmiB,EADnCniB,OAAQg4E,EAC2B71D,EAD3B61D,KAC7BG,EAAwDh2D,EAAxDg2D,gBAAiBE,EAAuCl2D,EAAvCk2D,gBAAwBe,EAAej3D,EAAtBjqB,MAEhC/hC,EAAkB,GAgEtB,OA/DA+iH,EAAS9iH,SAAQ,SAACqiH,GACKW,EAAW5+G,QAAO,SAAC6+G,GACtC,SAAIF,EAAezhE,SAAS+gE,IAAYY,EAAKZ,UAAYA,IAChDY,CAIX,IAEajjH,SAAQ,SAACiiC,EAAM/hC,GAC1B,IAAI0a,EACAC,EACAkH,EACAmhG,EAEEC,EAAqBpB,EAAoC,EAAhBE,EAA2B,EAALL,EAErE,GAAgB,UAAZS,EACFxnG,EAAIta,EAAU4iH,EAAmB,EACjCvoG,EAAK2wC,EAAM,EAAKtpB,EAAKpnB,EACrBkH,EAAK6nB,EAAO,EAAK3H,EAAKrnB,EACtBsoG,EAAM,EAACp2D,EAAAA,EAAAA,UAAS,IAAI,EAAE,QACjB,GAAgB,UAAZu1D,EACTznG,EAAIuoG,EAAqB,EACzBtoG,EAAKta,EAAO,EAAK0hC,EAAKpnB,EACtBkH,EAAK6nB,EAAO,EAAK3H,EAAKrnB,EACtBsoG,EAAM,CAAC,GAAEp2D,EAAAA,EAAAA,UAAS,IAAI,QACjB,GAAgB,SAAZu1D,EACTxnG,EAAIsoG,EAAqB,EACzBvoG,EAAK2wC,EAAM,EAAKtpB,EAAKpnB,EACrBkH,EAAK6nB,EAAO,EAAK3H,EAAKrnB,EACtBsoG,EAAM,EAACp2D,EAAAA,EAAAA,UAAS,IAAI,EAAE,QACjB,GAAgB,SAAZu1D,EACTznG,EAAI2wC,EAAS43D,EAAmB,EAChCtoG,EAAKta,EAAO,EAAK0hC,EAAKpnB,EACtBkH,EAAK6nB,EAAO,EAAK3H,EAAKrnB,EACtBsoG,EAAM,CAAC,GAAEp2D,EAAAA,EAAAA,UAAS,IAAI,OACjB,IAAgB,WAAZu1D,GAAoC,QAAZA,EAMjC,MAAM,IAAIpgH,MAAM,oBAADlB,OAAqBshH,IALpCxnG,EAAKta,EAAO,EAAK0hC,EAAKrnB,EACtBA,EAAK2wC,EAAM,EAAKtpB,EAAKpnB,EACrBkH,EAAI,EACJmhG,EAAM,CAAC,EAAE,EAAE,EAGb,CAEmB,WAAfjhF,EAAK0qB,MACP5sD,EAAOI,MAAKirB,EAAAA,EAAAA,WAAU,CAACxQ,EAAGC,EAAGkH,IAAIiJ,EAAAA,EAAAA,QAAOk4F,GAAKn/D,EAAAA,EAAAA,QAAO,CAClDjZ,KAAM,CAAC7I,EAAKspB,MAAOtpB,EAAKspB,MAAO43D,QAET,cAAflhF,EAAK0qB,MACd5sD,EAAOI,MAAKirB,EAAAA,EAAAA,WAAU,CAACxQ,EAAGC,EAAGkH,IAAIiJ,EAAAA,EAAAA,QAAOk4F,GAAKn/D,EAAAA,EAAAA,QAAO,CAClDjZ,KAAM,CAAC7I,EAAKspB,MAAOtpB,EAAK1hC,OAAQ4iH,QAEV,WAAflhF,EAAK0qB,OACd5sD,EAAOI,MAAKirB,EAAAA,EAAAA,WAAU,CAACxQ,EAAGC,EAAGkH,IAAIiJ,EAAAA,EAAAA,QAAOk4F,GAAK/jF,EAAAA,EAAAA,UAAS,CACpD3lB,OAAQyoB,EAAKqgF,SAAW,EACxB14E,OAAQu5E,MAGd,GACF,KAEOnvF,EAAAA,EAAAA,OAAMj0B,EACf,cCrEaqjH,GAAS,SAACX,GACrB,IAAMY,EAAaZ,EAAea,EAAmBC,EAC/CC,EAAaf,EAAea,EAE5BG,GAAQ30E,EAAAA,GAAAA,OACZiV,EAAAA,EAAAA,QAAO,CACLjZ,KAAM,CAACu4E,EAAW,EAAGA,EAAYA,MAEnCj4F,EAAAA,EAAAA,WACE,EACIi4F,EAAW,EAAG,EAAE,IAEpBlkF,EAAAA,EAAAA,UAAS,CACPyK,OAAQy5E,EACR7pG,OAAQ6pG,EAAW,MAKnBK,GAAQ50E,EAAAA,GAAAA,OACZiV,EAAAA,EAAAA,QAAO,CACLjZ,KAAM,CAAC04E,EAAW,EAAGA,EAAYA,MAEnCp4F,EAAAA,EAAAA,WACE,EACIo4F,EAAW,EAAIF,EAAkB,EAAE,IAEvCnkF,EAAAA,EAAAA,UAAS,CACPyK,OAAQ45E,EACRhqG,OAAQgqG,EAAW,MAKzB,OAAO9sG,EAAAA,EAAAA,UACL+sG,GACAr4F,EAAAA,EAAAA,WAAU,CAvCK,EAuCO,EAtCZ,GAsCsBs4F,IAChCt4F,EAAAA,EAAAA,WAAU,EAAEi4F,EAAW,EAAEA,IAAan4F,EAAAA,EAAAA,SAAQ,IAAI46B,EAAAA,EAAAA,MAAK,CAAChb,KAAiB,EAAXu4E,OAC9Dj4F,EAAAA,EAAAA,WAAU,EAAEi4F,EAAW,EAAE,EAAE,IAAIlkF,EAAAA,EAAAA,UAAS,CAACyK,OAAQy5E,EAAY7pG,OAAQipG,EAAc,KAEvF,EC9CakB,GAAc,SAACj0G,EAAW+d,EAAWhe,GAA2B,IAAhBP,EAACrL,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,EAAGe,EAACf,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,IAC5DqO,GAAIitB,EAAAA,EAAAA,UAAS,CACjByK,OAAQn6B,EACR+J,OAAQtK,EACRgC,SAAUtM,EACVuW,OAAQ,CAAC,EAAE,EAAE1L,EAAE,KAGjB,OAAOq/B,EAAAA,GAAAA,OACL1jB,EAAAA,EAAAA,WAAU,CAAClc,EAAGA,EAAG,GAAIgD,IACrBkZ,EAAAA,EAAAA,WAAU,CAAC1b,EAAER,EAAGA,EAAG,GAAIgD,IACvBkZ,EAAAA,EAAAA,WAAU,CAAClc,EAAGue,EAAEve,EAAG,GAAIgD,IACvBkZ,EAAAA,EAAAA,WAAU,CAAC1b,EAAER,EAAGue,EAAEve,EAAG,GAAIgD,GAE7B,EAcM0xG,GAAgB,SAAC10G,EAAWO,GAAsB,IAAX7K,EAACf,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,IAC7C,OAAO6S,EAAAA,EAAAA,WACLqtC,EAAAA,EAAAA,QAAO,CAACjZ,KAAM,CAAG,EAAF57B,EAAO,EAAFA,EAAKO,MACzB2b,EAAAA,EAAAA,WAAU,CAAClc,EAAGA,EAAG,GAAIy0G,GAAYz0G,EAAGA,EAAGO,EAAGP,EAAGtK,KAC7CwmB,EAAAA,EAAAA,WAAU,CAAG,EAAFlc,EAAI,EAAE,IAAI60C,EAAAA,EAAAA,QAAO,CAACjZ,KAAM,CAAG,EAAF57B,EAAO,EAAFA,EAAKO,MAElD,EAEao0G,GAAS,SAACn0G,EAAW+d,EAAWhe,GAA2B,IAAhBP,EAACrL,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,EAAGe,EAACf,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,IACvDigH,GAAiBptG,EAAAA,EAAAA,UACrBitG,GAAYj0G,EAAG+d,EAAGhe,EAAGP,EAAGtK,IACxBwmB,EAAAA,EAAAA,WAAU,CAAC,EAAG,EAAG,GAAIu4F,GAAYz0G,EAAGA,EAAGO,EAAGP,EAAGtK,KAC7CwmB,EAAAA,EAAAA,WAAU,CAAC1b,EAAER,EAAG,EAAG,GAAIy0G,GAAYz0G,EAAGA,EAAGO,EAAGP,EAAGtK,KAC/CwmB,EAAAA,EAAAA,WAAU,CAAC,EAAGqC,EAAEve,EAAG,GAAIy0G,GAAYz0G,EAAGA,EAAGO,EAAGP,EAAGtK,KAC/CwmB,EAAAA,EAAAA,WAAU,CAAC1b,EAAER,EAAGue,EAAEve,EAAG,GAAIy0G,GAAYz0G,EAAGA,EAAGO,EAAGP,EAAGtK,KAanD,OAXgB8R,EAAAA,EAAAA,UACdotG,GACA14F,EAAAA,EAAAA,WAAU,CAAC,EAAK,EAAFlc,EAAK,IAAIic,EAAAA,EAAAA,UAAQ2hC,EAAAA,EAAAA,UAAS,GAAI82D,GAAc10G,EAAK,EAAFO,EAAK7K,MAClEwmB,EAAAA,EAAAA,WAAU,CAAG,EAAFlc,EAAK,EAAG,IAAIic,EAAAA,EAAAA,UAAQ2hC,EAAAA,EAAAA,UAAS,GAAI82D,GAAc10G,EAAK,EAAFO,EAAK7K,MAClEwmB,EAAAA,EAAAA,WAAU,CAAC1b,EAAK,EAAFR,EAAK,IAAIic,EAAAA,EAAAA,UAAQ2hC,EAAAA,EAAAA,UAAS,IAAK82D,GAAc10G,EAAK,EAAFO,EAAK7K,MACnEwmB,EAAAA,EAAAA,WAAU,CAAC1b,EAAK,EAAFR,EAAM,EAAG,IAAIic,EAAAA,EAAAA,UAAQ2hC,EAAAA,EAAAA,UAAS,IAAK82D,GAAc10G,EAAK,EAAFO,EAAK7K,MACvEwmB,EAAAA,EAAAA,WAAU,CAAC1b,EAAG+d,EAAK,EAAFve,EAAM,IAAIic,EAAAA,EAAAA,UAAQ2hC,EAAAA,EAAAA,UAAS,KAAM82D,GAAc10G,EAAK,EAAFO,EAAK7K,MACxEwmB,EAAAA,EAAAA,WAAU,CAAC1b,EAAK,EAAFR,EAAMue,EAAG,IAAItC,EAAAA,EAAAA,UAAQ2hC,EAAAA,EAAAA,UAAS,KAAM82D,GAAc10G,EAAK,EAAFO,EAAK7K,MACxEwmB,EAAAA,EAAAA,WAAU,CAAC,EAAGqC,EAAK,EAAFve,EAAM,IAAIic,EAAAA,EAAAA,UAAQ2hC,EAAAA,EAAAA,UAAS,KAAM82D,GAAc10G,EAAK,EAAFO,EAAK7K,MACxEwmB,EAAAA,EAAAA,WAAU,CAAG,EAAFlc,EAAKue,EAAG,IAAItC,EAAAA,EAAAA,UAAQ2hC,EAAAA,EAAAA,UAAS,KAAM82D,GAAc10G,EAAK,EAAFO,EAAK7K,KAGxE,EAEam/G,GAAc,SAACr0G,EAAW+d,EAAWhe,EAAWO,GAA2B,IAAhBd,EAACrL,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,EAAGe,EAACf,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,IACvE4/G,EAAQI,GAAOn0G,EAAG+d,EAAGhe,EAAGP,EAAGtK,GAC3B8+G,EAAQG,GAAOn0G,EAAK,EAAFM,EAAMyd,EAAK,EAAFzd,EAAMP,EAAGP,EAAGtK,GAC7C,OAAO8R,EAAAA,EAAAA,UAAS+sG,GAAOr4F,EAAAA,EAAAA,WAAU,CAACpb,EAAGA,EAAG,GAAI0zG,GAC9C,EC3CaM,GAAiB,SAACj4D,GAC7B,IAAQxrD,EAAuFwrD,EAAvFxrD,OAAQgrD,EAA+EQ,EAA/ER,MAAOq2D,EAAwE71D,EAAxE61D,KAAMQ,EAAkEr2D,EAAlEq2D,aAAcN,EAAoD/1D,EAApD+1D,cAAeC,EAAqCh2D,EAArCg2D,gBAAiBE,EAAoBl2D,EAApBk2D,gBAC3E,OAAO8B,GAAYx4D,EAAY,EAALq2D,EAAyB,EAAhBK,EAAoB1hH,EAAa,EAALqhH,EAAyB,EAAhBK,EAAoBH,EAAeC,GAAkBK,EAAaR,GAAM,EAClJ,ECtBagB,GAAS,SAAC72D,GACrB,IAAQxrD,EAA6DwrD,EAA7DxrD,OAAQgrD,EAAqDQ,EAArDR,MAAO3hB,EAA8CmiB,EAA9CniB,OAAQg4E,EAAsC71D,EAAtC61D,KAAMQ,EAAgCr2D,EAAhCq2D,aAAcK,EAAkB12D,EAAlB02D,cAC7ChkG,EAAU2jG,EAAa,EAAGR,EAChC,OAAO5tF,EAAAA,EAAAA,QACL5I,EAAAA,EAAAA,WAAU,CAAC3M,EAAQA,EAAQmrB,EAAO,IAAIzK,EAAAA,EAAAA,UAAS,CAAC3lB,OAAQipG,EAAc,EAAG74E,OAAQA,MACjFxe,EAAAA,EAAAA,WAAU,CAACmgC,EAAM9sC,EAAQA,EAAQmrB,EAAO,IAAIzK,EAAAA,EAAAA,UAAS,CAAC3lB,OAAQipG,EAAc,EAAG74E,OAAQA,MACvFxe,EAAAA,EAAAA,WAAU,CAAC3M,EAAQle,EAAOke,EAAQmrB,EAAO,IAAIzK,EAAAA,EAAAA,UAAS,CAAC3lB,OAAQipG,EAAc,EAAG74E,OAAQA,MACxFxe,EAAAA,EAAAA,WAAU,CAACmgC,EAAM9sC,EAAQle,EAAOke,EAAQmrB,EAAO,IAAIzK,EAAAA,EAAAA,UAAS,CAAC3lB,OAAQipG,EAAc,EAAG74E,OAAQA,KAElG,ECLQlzB,GAAoBmM,EAAAA,SAApBnM,SAAUsd,GAAUnR,EAAAA,SAAVmR,MAELwU,GAAO,SAACujB,GACnB,IAAQxrD,EAAuFwrD,EAAvFxrD,OAAQgrD,EAA+EQ,EAA/ER,MAAO3hB,EAAwEmiB,EAAxEniB,OAAQg4E,EAAgE71D,EAAhE61D,KAAM9xG,EAA0Di8C,EAA1Dj8C,MAAOsyG,EAAmDr2D,EAAnDq2D,aAAcL,EAAqCh2D,EAArCg2D,gBAAiBE,EAAoBl2D,EAApBk2D,gBAErErjD,EAAO,GACPqlD,EAAY,GAEdC,EAAQtC,EAmCZ,OAlCI71D,EAAO81D,aACTqC,EAAgB,EAAPtC,EAA+B,EAAlBK,EAAuBF,GAG3Ch2D,EAAO62D,QACThkD,EAAKz+D,KAAKuW,GACRitG,GAAYp4D,EAAOhrD,EAAQqpC,EAAQw4E,IACnCh3F,EAAAA,EAAAA,WAAU,CACR84F,EAAMA,EAAMp0G,GAEd+zG,GACEt4D,EAAa,EAAN24D,EACP3jH,EAAc,EAAN2jH,EACRt6E,GACCw4E,EAAaR,GAAM,MAGxBqC,EAAU9jH,KAAKyiH,GAAO72D,KAEtB6S,EAAKz+D,KHVsB,SAACuP,EAAW+d,EAAWhe,EAAWO,GAA2B,IAAhBd,EAACrL,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,EAAGe,EAACf,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,IAC3E4/G,EAAQE,GAAYj0G,EAAG+d,EAAGhe,EAAGP,EAAGtK,GAChC8+G,EAAQC,GAAYj0G,EAAK,EAAFM,EAAMyd,EAAK,EAAFzd,EAAMP,EAAGP,EAAGtK,GAClD,OAAO8R,EAAAA,EAAAA,UAAS+sG,GAAOr4F,EAAAA,EAAAA,WAAU,CAACpb,EAAGA,EAAGA,GAAI0zG,GAC9C,CGMcS,CAAgB54D,EAAOhrD,EAAQqpC,EAAQs6E,EAAO9B,IAGtDr2D,EAAO22D,YACT9jD,EAAKz+D,KJYc,SAAC4rD,GACtB,IAAQxrD,EAAwDwrD,EAAxDxrD,OAAQgrD,EAAgDQ,EAAhDR,MAAO62D,EAAyCr2D,EAAzCq2D,aAAcO,EAA2B52D,EAA3B42D,uBAC/BU,EAAaV,EAAwBW,EAAmBC,EACxDa,EAAgBhC,EAAciB,EAAW,EACzCthG,EAAIshG,EAAW,EACrB,OAAOrvF,EAAAA,EAAAA,QACL5I,EAAAA,EAAAA,WAAU,EAnDK,EAmDSg5F,EAAeriG,GAAIqhG,GAAOT,KAClDv3F,EAAAA,EAAAA,WAAU,EApDK,EAoDS7qB,EAAO6jH,EAAeriG,GAAIqhG,GAAOT,KACzDv3F,EAAAA,EAAAA,WAAU,CAACmgC,EArDI,EAqDc64D,EAAeriG,IAAIipB,EAAAA,EAAAA,SAAQo4E,GAAOT,MAC/Dv3F,EAAAA,EAAAA,WAAU,CAACmgC,EAtDI,EAsDchrD,EAAO6jH,EAAeriG,IAAIipB,EAAAA,EAAAA,SAAQo4E,GAAOT,KAE1E,CIvBc0B,CAAQt4D,IAGhBA,EAAO81D,YACToC,EAAU9jH,KFxCsB,SAAC4rD,GACnC,IAAQxrD,EAC2CwrD,EAD3CxrD,OAAQgrD,EACmCQ,EADnCR,MAAO3hB,EAC4BmiB,EAD5BniB,OAAQg4E,EACoB71D,EADpB61D,KAAMG,EACch2D,EADdg2D,gBAAiBC,EACHj2D,EADGi2D,aACpDF,EAAiD/1D,EAAjD+1D,cAAeG,EAAkCl2D,EAAlCk2D,gBAAiBG,EAAiBr2D,EAAjBq2D,aAClC,OAAOh3F,EAAAA,EAAAA,WACL,CACEw2F,EACAA,EACAh4E,GAAQo4E,EAAaF,IAEvBiC,GACEx4D,EAAY,EAALq2D,EACPrhH,EAAa,EAALqhH,EACRI,EAAaF,EAAcG,EAC3BF,EAAiC,EAAhBE,GAChBG,EAAaR,GAAM,GAG1B,CEuBmB0C,CAAqBv4D,IAGlCA,EAAOjqB,MAAMvhC,OAAS,GACxB0jH,EAAU9jH,KAAK2hC,EAAMiqB,IAGnBk4D,EAAU1jH,OAAS,EACdmW,GAASsd,GAAM4qC,GAAO5qC,GAAMiwF,IAE5BjwF,GAAM4qC,EAEjB,EClDQ5qC,GAAUnR,EAAAA,SAAVmR,MACA5I,GAActX,EAAAA,WAAdsX,UAEKm5F,GAAM,SAACx4D,GAClB,IAAQxrD,EAA4FwrD,EAA5FxrD,OAAQgrD,EAAoFQ,EAApFR,MAAOq2D,EAA6E71D,EAA7E61D,KAAMD,EAAuE51D,EAAvE41D,KAAMS,EAAiEr2D,EAAjEq2D,aAAcL,EAAmDh2D,EAAnDg2D,gBAAiBC,EAAkCj2D,EAAlCi2D,aAAcC,EAAoBl2D,EAApBk2D,gBAE1E5uD,EAAW,GACX4wD,EAAY,GA2ClB,OAzCA5wD,EAASlzD,KAAKwjH,GAAYp4D,EAAOhrD,EAAQohH,EAAMS,IAE3Cr2D,EAAO62D,QACTvvD,EAASlzD,KACPirB,GAAU,CACRw2F,EAAKK,EACLL,EAAKK,EACLN,GAEFoC,GACEx4D,EAAY,EAALq2D,EAAyB,EAAhBK,EAChB1hH,EAAa,EAALqhH,EAAyB,EAAhBK,EACjBD,EACAD,GACCK,EAAaR,GAAM,KAGxBqC,EAAU9jH,KAAKyiH,GAAO72D,KAEtBsH,EAASlzD,KACPirB,GAAU,CACRw2F,EAAKK,EACLL,EAAKK,EACLN,GJlBoB,SAACjyG,EAAW+d,EAAWhe,EAAWO,GAA2B,IAAhBd,EAACrL,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,EAAGe,EAACf,UAAAtD,OAAA,QAAA2T,IAAArQ,UAAA,GAAAA,UAAA,GAAC,IACxE4/G,EAAQE,GAAYj0G,EAAG+d,EAAGhe,EAAGP,EAAGtK,GAChC8+G,EAAQC,GAAYj0G,EAAK,EAAFM,EAAMyd,EAAK,EAAFzd,EAAMP,EAAGP,EAAGtK,GAClD,OAAO8R,EAAAA,EAAAA,UAAS+sG,GAAOr4F,EAAAA,EAAAA,WAAU,CAACpb,EAAGA,EAAG,GAAI0zG,GAC9C,CIgBMc,CACEj5D,EAAY,EAALq2D,EAAyB,EAAhBK,EAChB1hH,EAAa,EAALqhH,EAAyB,EAAhBK,EACjBD,EACAD,EACAK,KAKYr2D,EAAOjqB,MAAM19B,QAAO,SAACtD,EAAGZ,GAAO,MAAqB,QAAdY,EAAEuhH,OAAiB,IAAG9hH,OAE9D,GACd0jH,EAAU9jH,KAAK2hC,EAAMiqB,EAAQ,CAAC,SAG5Bk4D,EAAU1jH,OAAS,GACdmW,EAAAA,EAAAA,UAASsd,GAAMq/B,GAAWr/B,GAAMiwF,IAEhCjwF,GAAMq/B,EAEjB,EC9CakvD,GAAY,SAACx2D,GACxB,IAAQw2D,EAAoCx2D,EAApCw2D,UAAWhiH,EAAyBwrD,EAAzBxrD,OAAQgrD,EAAiBQ,EAAjBR,MAAOz7C,EAAUi8C,EAAVj8C,MAE5B20G,EAAkB,GAOxB,OALAlC,EAAUviH,SAAQ,SAAC0kH,GACjB,IAjBqBC,EAiBf5iG,EAAK2iG,EAAM96E,OAAO,EAAK95B,EAC7B20G,EAAOtkH,MAAKirB,EAAAA,EAAAA,WAAU,CAAEmgC,EAAM,EAAGm5D,EAAM9pG,EAAIra,EAAO,EAAGmkH,EAAM7pG,EAAGkH,IAlBzC4iG,EAkBsDD,GAjBtEhuG,EAAAA,EAAAA,WACLyoB,EAAAA,EAAAA,UAAS,CACPyK,OAAQ+6E,EAAY/6E,OAAQpwB,OAAQmrG,EAAYnC,cAAgB,EAAGtxG,SAAU,MAE/EiuB,EAAAA,EAAAA,UAAS,CACPyK,OAAQ+6E,EAAY/6E,OAAQpwB,OAAQmrG,EAAYlC,cAAgB,EAAGvxG,SAAU,QAajF,KAEO8iB,EAAAA,EAAAA,OAAMywF,EACf,cCVM90D,GAAoBoG,EAAAA,QAAQ3F,YAC5B/B,GAASrqD,OAAOC,OAAO,CAAC,EAAG0rD,GAAkBnuB,UAE7CojF,GAAgB9yD,EAAAA,SAASmE,MAC3B4uD,GAAUD,GAAcpjF,SAExBsjF,GAAQ,EACRC,GAAQ,EAERC,GAAc,CAAC,EAAG,GAClBC,GAAW,CAAC,EAAG,GACf1yD,GAAY,EACZ2yD,IAAc,EACdp0D,IAAY,EACZq0D,IAAa,EAcJC,GAAW,WAEtB,IAAMr5D,EAAS82D,IAEPtiH,EAGwBwrD,EAHxBxrD,OAAQgrD,EAGgBQ,EAHhBR,MAAO3hB,EAGSmiB,EAHTniB,OAAQg4E,EAGC71D,EAHD61D,KAAM9xG,EAGLi8C,EAHKj8C,MAAO6xG,EAGZ51D,EAHY41D,KAAMS,EAGlBr2D,EAHkBq2D,aAActgF,EAGhCiqB,EAHgCjqB,MAC9D8gF,EAE8B72D,EAF9B62D,OAAQf,EAEsB91D,EAFtB81D,WAAYa,EAEU32D,EAFV22D,WAAYD,EAEF12D,EAFE02D,cAAeV,EAEjBh2D,EAFiBg2D,gBAC/CD,EAC8B/1D,EAD9B+1D,cAAeE,EACej2D,EADfi2D,aAAcW,EACC52D,EADD42D,uBAAwBV,EACvBl2D,EADuBk2D,gBAC1CoD,EAAmBt5D,EAA9Bw2D,UAEI+C,GAAYnoB,EAAAA,EAAAA,QAA8B,MAC1CooB,GAAOpoB,EAAAA,EAAAA,QAAqB,MAC5BqoB,GAAQroB,EAAAA,EAAAA,QAAqB,MAC7BsoB,GAAkBtoB,EAAAA,EAAAA,QAAqB,MACvCuoB,GAAavoB,EAAAA,EAAAA,QAAqB,MAClCrmC,GAAQqmC,EAAAA,EAAAA,QAAqB,MAC7BwoB,GAAgBxoB,EAAAA,EAAAA,QAA6B,MAC7CyoB,GAAWzoB,EAAAA,EAAAA,QAAsB,MACjC0oB,GAAiB1oB,EAAAA,EAAAA,QAAsB,MACvC2oB,GAAS3oB,EAAAA,EAAAA,SAAgB,GAwEzB4oB,EAAkB,SAAlBA,EAAmBC,GAGvB,GArCsB,WACtB,GAAIhB,GAAY,IAAMA,GAAY,GAAI,CACpC,IAAMtI,EAAUkI,GAAc55F,OAAO,CAAE8mC,SAAU+yD,GAASx2D,OAAQA,GAAQoD,MAtE5D,MAsEkFuzD,IAChGH,GAAOlqD,EAAAA,EAAA,GAAQkqD,IAAYnI,EAAQ5qD,UACnCqzD,IAAa,EACbH,GAAc,CAAC,EAAG,EACpB,CAEA,GAAIC,GAAS,IAAMA,GAAS,GAAI,CAC9B,IAAMvI,EAAUkI,GAAcvzD,IAAI,CAAES,SAAS+yD,GAASx2D,OAAOA,GAAQoD,MA5E1D,GA4E6EwzD,IACxFJ,GAAOlqD,EAAAA,EAAA,GAAQkqD,IAAYnI,EAAQ5qD,UACnCmzD,GAAW,CAAC,EAAG,GACf52D,GAAOP,SAAW4uD,EAAQruD,OAAOP,SACjCO,GAAOnkC,OAASwyF,EAAQruD,OAAOnkC,OAC/Bi7F,IAAa,CACf,CAEA,GAAI5yD,GAAW,CACb,IAAMmqD,EAAUkI,GAAcr1D,KAAK,CAAEuC,SAAS+yD,GAASx2D,OAAOA,GAAQoD,MApF1D,KAoF8Ec,IAC1FsyD,GAAOlqD,EAAAA,EAAA,GAAQkqD,IAAYnI,EAAQ5qD,UACnCS,GAAY,EACZ4yD,IAAa,CACf,CAEA,GAAIr0D,GAAW,CAAC,IAADm1D,EAAAC,EACb,GAA0B,QAAtBD,EAACN,EAAcxyG,eAAO,IAAA8yG,IAArBA,EAAuB5yD,SAAU,OACtCwxD,GAAQ/zD,UAAUG,UAAY,EAC9B,IAAMyrD,EAAUkI,GAAc9zD,UAAU,CAAEgB,SAAU+yD,GAASx2D,OAAQA,GAAQgF,SAA+B,QAAvB6yD,EAAEP,EAAcxyG,eAAO,IAAA+yG,OAAA,EAArBA,EAAuB7yD,WAC9GwxD,GAAOlqD,EAAAA,EAAA,GAAQkqD,IAAYnI,EAAQ5qD,UACnChB,IAAY,EACZq0D,IAAa,CACf,CACF,CAGEgB,GAEIhB,GAAY,CACd,IAAMiB,EAAUxB,GAAcv0D,OAAO,CAAEyB,SAAU+yD,GAASx2D,OAAQA,KAClEw2D,GAAOlqD,EAAAA,EAAA,GAAQkqD,IAAYuB,EAAQt0D,UACnCqzD,GAAaN,GAAQ1yD,QAErB9D,GAAOP,SAAWs4D,EAAQ/3D,OAAOP,SACjC6B,GAAkBU,OAAOhC,IAEzBu3D,EAASzyG,SAAWyyG,EAASzyG,QAAQwyG,EAAcxyG,QACrD,CAEK2yG,EAAO3yG,UACV0yG,EAAe1yG,QAAUkzG,sBAAsBN,GACnD,EAiGA,OAvFAlpB,EAAAA,EAAAA,YAAU,WACR,IAAIj8E,EAEFA,EADEihG,EAAWxqG,MACP,CAAEk0C,EAAMl0C,MAAM,EArJV,IAqJuB9W,EAAO8W,MAAM,EAAG,GAE3C,CAACivG,IAAY/lH,EAAO8W,MAAM,EAAG,GAErCkuG,EAAKpyG,SAAUiY,EAAAA,EAAAA,WAAUxK,EAAK2jG,GAAIx4D,EAAOj2C,OAC3C,GAAG,CAACvV,EAAQgrD,EAAOo2D,EAAMC,EAAMQ,EAAcQ,EAAQf,EAAYY,EAC/DV,EAAiBC,EAAcC,EAAiBngF,KAGlD+6D,EAAAA,EAAAA,YAAU,WACR,IAAIj8E,EAEFA,EADEihG,EAAWxqG,MACP,EAAEk0C,EAAMl0C,MAAM,GAAI9W,EAAO8W,MAAM,EAAG,GAElC,GAAGk0C,EAAMl0C,MAAOivG,KAAc/lH,EAAO8W,MAAM,EAAG,GAEtDmuG,EAAMryG,SAAUiY,EAAAA,EAAAA,WAAUxK,EAAK4nB,GAAKujB,EAAOj2C,OAC7C,GAAG,CAACvV,EAAQgrD,EAAO3hB,EAAQg4E,EAAM9xG,EAAOsyG,EAActgF,EAAO4gF,EAC3DE,EAAQf,EAAYY,EAAeV,EAAiBC,EAAcF,EAClEa,EAAwBV,KAG1BplB,EAAAA,EAAAA,YAAU,WACR,GAAI9wC,EAAO81D,WAAY,CACrB,IAAMjhG,EAAM,EAAE2qC,EAAMl0C,MAAOk0C,EAAMl0C,MAAM,EA7K7B,IA6K0C9W,EAAO8W,MAAM,EAAG,GACpEouG,EAAgBtyG,SAAUiY,EAAAA,EAAAA,WAAUxK,EAAKojG,GAAej4D,EAAOj2C,OACjE,CACF,GAAG,CAACvV,EAAQgrD,EAAOq2D,EAAMQ,EAAcP,EAAYC,EAAeG,EAAiBF,KAGnFllB,EAAAA,EAAAA,YAAU,WAEN,IAAIj8E,EADFykG,EAAehuG,MAAM9W,OAAS,IAG9BqgB,EADEihG,EAAWxqG,MACP,EAAEk0C,EAAMl0C,MAAM,GAAI9W,EAAO8W,MAAM,EAAG,GAElC,GAAGk0C,EAAMl0C,MAAOivG,KAAc/lH,EAAO8W,MAAM,EAAG,GAEtDquG,EAAWvyG,SAAUiY,EAAAA,EAAAA,WAAUxK,EAAK2hG,GAAUx2D,EAAOj2C,QAEzD,GAAG,CAACuvG,EAAgBxD,EAAYD,EAAM9xG,EAAO85B,KAG7CizD,EAAAA,EAAAA,YAAU,WACR,IAAI98F,EAAkB,GAElBwlH,EAAKpyG,SAASpT,EAAOI,KAAKolH,EAAKpyG,SAC/BqyG,EAAMryG,SAASpT,EAAOI,KAAKqlH,EAAMryG,SACjCsyG,EAAgBtyG,SAAW0uG,EAAWxqG,OAAOtX,EAAOI,KAAKslH,EAAgBtyG,SACzEuyG,EAAWvyG,SAAWkyG,EAAehuG,MAAM9W,OAAS,GAAGR,EAAOI,KAAKulH,EAAWvyG,SAElF2jD,EAAM3jD,SAAU6gB,EAAAA,EAAAA,OAAMj0B,EACxB,GAAG,CAACwlH,EAAKpyG,QAASqyG,EAAMryG,QAASsyG,EAAgBtyG,QAASuyG,EAAWvyG,WAGrE0pF,EAAAA,EAAAA,YAAU,WACH/lC,EAAM3jD,UAEXwyG,EAAcxyG,QAAU,CACtBk7C,OAAQA,GACRqH,aAAcA,EAAAA,aACdrC,UAAU6C,EAAAA,EAAAA,oBAAmB,CAAC,EAAGY,EAAM3jD,UAE3C,GAAG,CAAC2jD,EAAM3jD,WAGV0pF,EAAAA,EAAAA,YAAU,WACHyoB,EAAUnyG,UAAWyyG,EAASzyG,UAC/BmyG,EAAUnyG,UAAYyyG,EAASzyG,UACjCyyG,EAASzyG,SAAUsiD,EAAAA,EAAAA,eAAc,CAC/B0E,UAAW,CAAEmrD,UAAWA,EAAUnyG,YAhFtCw8C,GAAkBM,cAAc5B,GAAQA,GAAQ,CAC9C9C,MAAOiS,OAAOgmD,WACd55E,OAAQ4zB,OAAO+oD,cAkFjBR,IACF,GAAG,CAACjvD,EAAO6uD,EAAeC,EAAUN,KAGpCzoB,EAAAA,EAAAA,YAAU,WACH/lC,EAAM3jD,SAAYwyG,EAAcxyG,SAAYyyG,EAASzyG,SAAYmyG,EAAUnyG,UAChFwyG,EAAcxyG,QAAQkgD,UAAW6C,EAAAA,EAAAA,oBAAmB,CAAC,EAAGY,EAAM3jD,SAC9DgyG,IAAa,EACf,GAAG,CAACruD,EAAM3jD,WAEHqzG,EAAAA,GAAAA,KAAA,OACLrpC,GAAG,QACHzb,IAAK4jD,EACLmB,cA1LuC,SAACC,GACxC,GAAIxB,GAAJ,CACA,IAAMyB,EAAK7B,GAAQ4B,EAAG1mC,MAChB4mC,EAAKF,EAAGzmC,MAAQ8kC,IAEY,IAAhB2B,EAAGvmC,UAEnB8kC,GAAS,IAAM0B,EACf1B,GAAS,IAAM2B,IAEf5B,GAAY,IAAM2B,EAClB3B,GAAY,IAAM4B,GAGpB9B,GAAQ4B,EAAG1mC,MACX+kC,GAAQ2B,EAAGzmC,MAEXymC,EAAGloC,gBAhBoB,CAiBzB,EAyKEqoC,cAvKuC,SAACH,GAAQ,IAADI,EAC/C5B,IAAc,EACdJ,GAAQ4B,EAAG1mC,MACX+kC,GAAQ2B,EAAGzmC,MACM,QAAjB6mC,EAAAxB,EAAUnyG,eAAO,IAAA2zG,GAAjBA,EAAmBC,kBAAkBL,EAAGjrC,UAC1C,EAmKEurC,YAjKqC,SAACN,GAAQ,IAADO,EAC7C/B,IAAc,EACG,QAAjB+B,EAAA3B,EAAUnyG,eAAO,IAAA8zG,GAAjBA,EAAmBC,sBAAsBR,EAAGjrC,UAC9C,EA+JE0rC,QA7JsC,SAACT,GACvCn0D,IAAam0D,EAAGriC,MAClB,GA6JF,ECjQe,SAAS+iC,GAAkBv6D,EAAKvkC,IAClC,MAAPA,GAAeA,EAAMukC,EAAItsD,UAAQ+nB,EAAMukC,EAAItsD,QAC/C,IAAK,IAAIL,EAAI,EAAG2wG,EAAO,IAAI/sG,MAAMwkB,GAAMpoB,EAAIooB,EAAKpoB,IAAK2wG,EAAK3wG,GAAK2sD,EAAI3sD,GACnE,OAAO2wG,CACT,CCAe,SAASz5F,GAAey1C,EAAK3sD,GAC1C,OCLa,SAAyB2sD,GACtC,GAAI/oD,MAAMmB,QAAQ4nD,GAAM,OAAOA,CACjC,CDGS,CAAeA,IELT,SAA+B39C,EAAGQ,GAC/C,IAAIM,EAAI,MAAQd,EAAI,KAAO,oBAAsBk9D,QAAUl9D,EAAEk9D,OAAOe,WAAaj+D,EAAE,cACnF,GAAI,MAAQc,EAAG,CACb,IAAIyH,EACFpE,EACAnT,EACAmjB,EACAvQ,EAAI,GACJ/C,GAAI,EACJyhG,GAAI,EACN,IACE,GAAItxG,GAAK8P,EAAIA,EAAE6vD,KAAK3wD,IAAI4zB,KAAM,IAAMpzB,EAAG,CACrC,GAAI1L,OAAOgM,KAAOA,EAAG,OACrBD,GAAI,CACN,MAAO,OAASA,GAAK0H,EAAIvX,EAAE2/D,KAAK7vD,IAAIkH,QAAUpE,EAAE3S,KAAKsX,EAAEJ,OAAQvE,EAAEvS,SAAWmP,GAAIK,GAAI,GACtF,CAAE,MAAOb,GACPsiG,GAAI,EAAIn+F,EAAInE,CACd,CAAE,QACA,IACE,IAAKa,GAAK,MAAQC,EAAU,SAAMqT,EAAIrT,EAAU,SAAKhM,OAAOqf,KAAOA,GAAI,MACzE,CAAE,QACA,GAAImuF,EAAG,MAAMn+F,CACf,CACF,CACA,OAAOP,CACT,CACF,CFrBgC,CAAqB+5C,EAAK3sD,IGJ3C,SAAqCsxG,EAAGsB,GACrD,GAAKtB,EAAL,CACA,GAAiB,kBAANA,EAAgB,OAAO,GAAiBA,EAAGsB,GACtD,IAAIz/F,EAAIrP,OAAO+f,UAAUrT,SAASmvD,KAAK2xC,GAAGn9F,MAAM,GAAI,GAEpD,MADU,WAANhB,GAAkBm+F,EAAE3iC,cAAax7D,EAAIm+F,EAAE3iC,YAAY3Q,MAC7C,QAAN7qD,GAAqB,QAANA,EAAoBvP,MAAMg1C,KAAK04D,GACxC,cAANn+F,GAAqB,2CAA2CmpD,KAAKnpD,GAAW,GAAiBm+F,EAAGsB,QAAxG,CALc,CAMhB,CHHgE,CAA2BjmD,EAAK3sD,IILjF,WACb,MAAM,IAAImyC,UAAU,4IACtB,CJGsG,EACtG,CKNO,ICCIg1E,GAAiB,CAC1BriH,WAAOkP,EACP42B,UAAM52B,EACN2vD,eAAW3vD,EACXsvD,WAAOtvD,EACPozG,UAAMpzG,GAEGqzG,GAAc7Q,EAAAA,eAAuBA,EAAAA,cAAoB2Q,ICRhE7R,GAAoC,WAQtC,OAPAA,GAAWxxG,OAAOC,QAAU,SAAU+L,GACpC,IAAK,IAAIpL,EAAG1E,EAAI,EAAGmT,EAAIxP,UAAUtD,OAAQL,EAAImT,EAAGnT,IAE9C,IAAK,IAAI0P,KADThL,EAAIf,UAAU3D,GACO8D,OAAO+f,UAAU67C,eAAeC,KAAKj7D,EAAGgL,KAAII,EAAEJ,GAAKhL,EAAEgL,IAE5E,OAAOI,CACT,EACOwlG,GAASh1F,MAAM4C,KAAMvf,UAC9B,EACI2jH,GAAgC,SAAU5iH,EAAG6S,GAC/C,IAAIzH,EAAI,CAAC,EACT,IAAK,IAAIJ,KAAKhL,EAAOZ,OAAO+f,UAAU67C,eAAeC,KAAKj7D,EAAGgL,IAAM6H,EAAEwhB,QAAQrpB,GAAK,IAAGI,EAAEJ,GAAKhL,EAAEgL,IAC9F,GAAS,MAALhL,GAAqD,oBAAjCZ,OAAOguG,sBAA2C,KAAI9xG,EAAI,EAAb,IAAgB0P,EAAI5L,OAAOguG,sBAAsBptG,GAAI1E,EAAI0P,EAAErP,OAAQL,IAClIuX,EAAEwhB,QAAQrpB,EAAE1P,IAAM,GAAK8D,OAAO+f,UAAU0jG,qBAAqB5nD,KAAKj7D,EAAGgL,EAAE1P,MAAK8P,EAAEJ,EAAE1P,IAAM0E,EAAEgL,EAAE1P,IADuB,CAGvH,OAAO8P,CACT,EAGA,SAAS03G,GAAavvF,GACpB,OAAOA,GAAQA,EAAKhzB,KAAI,SAAUmyB,EAAMp3B,GACtC,OAAOw2G,EAAAA,cAAoBp/E,EAAK+nC,IAAKm2C,GAAS,CAC5C5/F,IAAK1V,GACJo3B,EAAKgwF,MAAOI,GAAapwF,EAAKmoC,OACnC,GACF,CACO,SAASkoD,GAAQxzG,GAEtB,OAAO,SAAU6iD,GACf,OAAO0/C,EAAAA,cAAoBkR,GAAUpS,GAAS,CAC5C8R,KAAM9R,GAAS,CAAC,EAAGrhG,EAAKmzG,OACvBtwD,GAAQ0wD,GAAavzG,EAAKsrD,OAC/B,CACF,CACO,SAASmoD,GAAS5wD,GACvB,IAAI6wD,EAAO,SAAUC,GACnB,IAKIjkD,EALAyjD,EAAOtwD,EAAMswD,KACfx8E,EAAOksB,EAAMlsB,KACb6zB,EAAQ3H,EAAM2H,MACdopD,EAAWP,GAAOxwD,EAAO,CAAC,OAAQ,OAAQ,UACxCgxD,EAAel9E,GAAQg9E,EAAKh9E,MAAQ,MAIxC,OAFIg9E,EAAKjkD,YAAWA,EAAYikD,EAAKjkD,WACjC7M,EAAM6M,YAAWA,GAAaA,EAAYA,EAAY,IAAM,IAAM7M,EAAM6M,WACrE6yC,EAAAA,cAAoB,MAAOlB,GAAS,CACzCyS,OAAQ,eACRC,KAAM,eACN9zC,YAAa,KACZ0zC,EAAKR,KAAMA,EAAMS,EAAU,CAC5BlkD,UAAWA,EACXL,MAAOgyC,GAASA,GAAS,CACvBxwG,MAAOgyD,EAAMhyD,OAAS8iH,EAAK9iH,OAC1B8iH,EAAKtkD,OAAQxM,EAAMwM,OACtB55B,OAAQo+E,EACRz8D,MAAOy8D,EACPG,MAAO,+BACLxpD,GAAS+3C,EAAAA,cAAoB,QAAS,KAAM/3C,GAAQ3H,EAAMr+B,SAChE,EACA,YAAuBzkB,IAAhBqzG,GAA4B7Q,EAAAA,cAAoB6Q,GAAY3Y,SAAU,MAAM,SAAUkZ,GAC3F,OAAOD,EAAKC,EACd,IAAKD,EAAKR,GACZ,CCo/CO,SAASe,GAASpxD,GACvB,OAAO2wD,GAAQ,CAAC,IAAM,MAAM,KAAO,CAAC,QAAU,aAAa,MAAQ,CAAC,CAAC,IAAM,OAAO,KAAO,CAAC,EAAI,oBAAvFA,CAA4G3wD,EACrH,CAqLO,SAASqxD,GAAQrxD,GACtB,OAAO2wD,GAAQ,CAAC,IAAM,MAAM,KAAO,CAAC,QAAU,aAAa,MAAQ,CAAC,CAAC,IAAM,OAAO,KAAO,CAAC,EAAI,uCAAvFA,CAA+H3wD,EACxI,CAqdO,SAASsxD,GAAStxD,GACvB,OAAO2wD,GAAQ,CAAC,IAAM,MAAM,KAAO,CAAC,QAAU,aAAa,MAAQ,CAAC,CAAC,IAAM,OAAO,KAAO,CAAC,EAAI,oHAAoH,CAAC,IAAM,OAAO,KAAO,CAAC,EAAI,+BAArOA,CAAqQ3wD,EAC9Q,CAkkCO,SAASuxD,GAAmBvxD,GACjC,OAAO2wD,GAAQ,CAAC,IAAM,MAAM,KAAO,CAAC,QAAU,aAAa,MAAQ,CAAC,CAAC,IAAM,OAAO,KAAO,CAAC,EAAI,+GAAvFA,CAAuM3wD,EAChN,CAyEO,SAASwxD,GAAmBxxD,GACjC,OAAO2wD,GAAQ,CAAC,IAAM,MAAM,KAAO,CAAC,QAAU,aAAa,MAAQ,CAAC,CAAC,IAAM,OAAO,KAAO,CAAC,EAAI,yOAAvFA,CAAiU3wD,EAC1U,CAwpBO,SAASyxD,GAAazxD,GAC3B,OAAO2wD,GAAQ,CAAC,IAAM,MAAM,KAAO,CAAC,QAAU,aAAa,MAAQ,CAAC,CAAC,IAAM,OAAO,KAAO,CAAC,EAAI,0GAAvFA,CAAkM3wD,EAC3M,CCr+HA,IAAM0xD,GAAc,SAAH1vG,GAIV,IAHL2vG,EAAK3vG,EAAL2vG,MAAOtxG,EAAK2B,EAAL3B,MAAKuxG,EAAA5vG,EAAEpI,IAAAA,OAAG,IAAAg4G,OAAC10G,EAAS00G,EAAAC,EAAA7vG,EAAE4C,KAAAA,OAAI,IAAAitG,EAAC,EAACA,EAAEC,EAAQ9vG,EAAR8vG,SASrC,OACEC,EAAAA,GAAAA,MAAA,OAAKllD,UAAU,cAAalrC,SAAA,EAC1B6tF,EAAAA,GAAAA,KAAA,SAAA7tF,SAAQgwF,KACRnC,EAAAA,GAAAA,KAAA,SAAO5sF,KAAK,SAAShpB,IAAKA,EAAK8+D,aAAcr4D,EAAOuE,KAAMA,EAAMotG,OAAQF,EAAUG,UARhE,SAACxxG,GACP,UAAXA,EAAEyzC,MACHzzC,EAAE0mE,cAAc+qC,MAEpB,MAOF,EAEMC,GAAW,SAAHv6D,GAAA,IAAK+5D,EAAK/5D,EAAL+5D,MAAOt5C,EAAOzgB,EAAPygB,QAASy5C,EAAQl6D,EAARk6D,SAAQ,OACzCC,EAAAA,GAAAA,MAAA,OAAKllD,UAAU,cAAalrC,SAAA,EAC1B6tF,EAAAA,GAAAA,KAAA,SAAA7tF,SAAQgwF,KACRnC,EAAAA,GAAAA,KAAA,SAAO5sF,KAAK,WAAWy1C,QAASA,EAASy5C,SAAUA,MAC/C,EAGFM,GAAY,SAAH/2D,GAA8H,IAAzH15B,EAAQ05B,EAAR15B,SAAUgmC,EAAKtM,EAALsM,MAAO0qD,EAAMh3D,EAANg3D,OAAQ7mB,EAAOnwC,EAAPmwC,QAC3C,OACEumB,EAAAA,GAAAA,MAAA,OAAKllD,UAAS,aAAA9iE,OAAesoH,EAAS,SAAW,IAAK1wF,SAAA,EAClDowF,EAAAA,GAAAA,MAAA,KAAGllD,UAAU,mBAAmB2+B,QAASA,EAAQ7pE,SAAA,CAC9CgmC,GACD6nD,EAAAA,GAAAA,KAAA,QAAM3iD,UAAU,iBAAgBlrC,SAC7B0wF,GAAS7C,EAAAA,GAAAA,KAAC4B,GAAO,KAAM5B,EAAAA,GAAAA,KAAC6B,GAAM,UAGrC7B,EAAAA,GAAAA,KAAA,OAAK3iD,UAAU,iBAAgBlrC,SAC5BA,MAIT,EAEa2wF,GAAa,WACxB,IAAAC,EAGuB1G,IAHftiH,EAAMgpH,EAANhpH,OAAQgrD,EAAKg+D,EAALh+D,MAAO3hB,EAAM2/E,EAAN3/E,OAAQ95B,EAAKy5G,EAALz5G,MAAO6xG,EAAI4H,EAAJ5H,KAAMC,EAAI2H,EAAJ3H,KAAMQ,EAAYmH,EAAZnH,aAAcO,EAAsB4G,EAAtB5G,uBAC9D7gF,EAAKynF,EAALznF,MAAOygF,EAASgH,EAAThH,UAAWG,EAAU6G,EAAV7G,WAClBb,EAAU0H,EAAV1H,WAAYe,EAAM2G,EAAN3G,OAAQH,EAAa8G,EAAb9G,cAAeX,EAAayH,EAAbzH,cAAeC,EAAewH,EAAfxH,gBAAiBC,EAAYuH,EAAZvH,aACnEC,EAAesH,EAAftH,gBAEIuH,EAAe,SAAC/xG,EAA2DrU,GAC/EqU,EAAE0mE,cAAc9mE,OAASjU,EAAIqmH,WAAWhyG,EAAE0mE,cAAc9mE,OAC1D,EA6B+DqyG,EAAAtyG,IAA7BgmF,EAAAA,EAAAA,UAAwB,MAAK,GAAxDusB,EAASD,EAAA,GAAEE,EAAYF,EAAA,GAExBG,EAAgB,SAAC3pH,GAEnB0pH,EADCD,IAAczpH,EACF,KAEAA,EAEjB,EAEA,OACE6oH,EAAAA,GAAAA,MAAA,QAAM5rC,GAAG,aAAa2sC,SAtCH,SAACryG,GACpBA,EAAE+mE,iBACFnhB,SAASuB,KAAKmrD,OAChB,EAmC+CpxF,SAAA,EAE3CowF,EAAAA,GAAAA,MAACK,GAAS,CAACzqD,MAAM,UAAU0qD,OAAsB,IAAdM,EAAiBnnB,QAAS,kBAAMqnB,EAAc,EAAE,EAAClxF,SAAA,EAClF6tF,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,SAAStxG,MAAO9W,EAAO8W,MAAOzG,IAAK,EAAGk4G,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGlX,EAAO6C,IAAI,KACrGojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,QAAQtxG,MAAOk0C,EAAMl0C,MAAOzG,IAAK,EAAGk4G,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAG8zC,EAAMnoD,IAAI,KAClGojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,SAAStxG,MAAOuyB,EAAOvyB,MAAOzG,IAAK,EAAGk4G,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGmyB,EAAOxmC,IAAI,KACrGojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,kBAAkBtxG,MAAOvH,EAAMuH,MAAOzG,IAAK,EAAGk4G,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAG3H,EAAM1M,IAAI,KAC5GojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,iBAAiBtxG,MAAOuqG,EAAKvqG,MAAOzG,IAAK,EAAGk4G,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGmqG,EAAKx+G,IAAI,KACzGojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,gBAAgBtxG,MAAOsqG,EAAKtqG,MAAOzG,IAAK,EAAGk4G,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGkqG,EAAKv+G,IAAI,KACxGojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,gBAAgBtxG,MAAO+qG,EAAa/qG,MAAOzG,IAAK,EAAGk4G,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAG2qG,EAAah/G,IAAI,QAG1H2lH,EAAAA,GAAAA,MAACK,GAAS,CAACzqD,MAAM,aAAa0qD,OAAsB,IAAdM,EAAiBnnB,QAAS,kBAAMqnB,EAAc,EAAE,EAAClxF,SAAA,EACrF6tF,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,mBAAmBtxG,MAAO0qG,EAAgB1qG,MAAOzG,IAAK,EAAGgL,KAAM,IAAMktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGsqG,EAAgB3+G,IAAI,KAC7IojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,gBAAgBtxG,MAAO2qG,EAAa3qG,MAAOzG,IAAK,EAAGgL,KAAM,IAAMktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGuqG,EAAa5+G,IAAI,KACpIojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,mBAAmBtxG,MAAO4qG,EAAgB5qG,MAAOzG,IAAK,IAAMgL,KAAM,IAAMktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGwqG,EAAgB7+G,IAAI,QAGlJ2lH,EAAAA,GAAAA,MAACK,GAAS,CAACzqD,MAAM,QAAQ0qD,OAAsB,IAAdM,EAAiBnnB,QAAS,kBAAMqnB,EAAc,EAAE,EAAClxF,SAAA,CAC/EmJ,EAAM38B,KAAI,SAAC88B,EAAM/hC,GAAC,OACf6oH,EAAAA,GAAAA,MAAA,OAA0DllD,UAAU,aAAYlrC,SAAA,EAC9E6tF,EAAAA,GAAAA,KAAA,UAAQ3iD,UAAU,aAAa2+B,QAAS,kBAAM1gE,EAAM5hC,GAAGkD,IAAI0yG,EAAK,EAACn9E,UAC/D6tF,EAAAA,GAAAA,KAAC8B,GAAO,CAAC3pD,MAAM,cAAc7zB,KAAK,KAAK9lC,MAAM,eAE/CwhH,EAAAA,GAAAA,KAAA,KAAA7tF,UAAGowF,EAAAA,GAAAA,MAAA,KAAApwF,SAAA,CAAG,QAAMz4B,EAAE,QACd6oH,EAAAA,GAAAA,MAAA,OAAKllD,UAAU,cAAalrC,SAAA,EAC1B6tF,EAAAA,GAAAA,KAAA,SAAA7tF,SAAO,WACPowF,EAAAA,GAAAA,MAAA,UAAQ1xG,MAAO4qB,EAAK0qB,MAAMt1C,MAAOyxG,SAAU,SAACrxG,GAAC,OAAKwqB,EAAK0qB,MAAMvpD,IAAIqU,EAAEyS,OAAO7S,MAA6B,EAACshB,SAAA,EACtG6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAM,SAAQshB,SAAC,YACvB6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAM,SAAQshB,SAAC,YACvB6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAM,YAAWshB,SAAC,qBAG9BowF,EAAAA,GAAAA,MAAA,OAAKllD,UAAU,cAAalrC,SAAA,EAC1B6tF,EAAAA,GAAAA,KAAA,SAAA7tF,SAAO,aACPowF,EAAAA,GAAAA,MAAA,UAAQ1xG,MAAO4qB,EAAKogF,QAAQhrG,MAAOyxG,SAAU,SAACrxG,GAAC,OAAKwqB,EAAKogF,QAAQj/G,IAAIqU,EAAEyS,OAAO7S,MAAiB,EAACshB,SAAA,EAC9F6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAO,QAAQshB,SAAC,WACxB6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAO,QAAQshB,SAAC,WACxB6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAO,OAAOshB,SAAC,UACvB6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAO,OAAOshB,SAAC,UACvB6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAO,MAAMshB,SAAC,SACtB6tF,EAAAA,GAAAA,KAAA,UAAQnvG,MAAO,SAASshB,SAAC,kBAG7B6tF,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,IAAItxG,MAAO4qB,EAAKrnB,EAAEvD,MAAOyxG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGwqB,EAAKrnB,EAAExX,IAAI,KACxFojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,IAAItxG,MAAO4qB,EAAKpnB,EAAExD,MAAOyxG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGwqB,EAAKpnB,EAAEzX,IAAI,KACjE,cAArB6+B,EAAK0qB,MAAMt1C,OAA8C,WAArB4qB,EAAK0qB,MAAMt1C,SACjDmvG,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,QAAQtxG,MAAO4qB,EAAKspB,MAAMl0C,MAAOuE,KAAM,GAAKktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGwqB,EAAKspB,MAAMnoD,IAAI,IAEzF,cAArB6+B,EAAK0qB,MAAMt1C,QACVmvG,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,SAAStxG,MAAO4qB,EAAK1hC,OAAO8W,MAAOuE,KAAM,GAAKktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGwqB,EAAK1hC,OAAO6C,IAAI,IAE9F,WAArB6+B,EAAK0qB,MAAMt1C,QACVmvG,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,WAAWtxG,MAAO4qB,EAAKqgF,SAASjrG,MAAOuE,KAAM,GAAKktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGwqB,EAAKqgF,SAASl/G,IAAI,MAAI,GAAArC,OAjCnHkhC,EAAK0qB,MAAMt1C,OAAKtW,OAAGkhC,EAAKogF,QAAQhrG,OAAKtW,OAAGb,GAmC/C,KAGVsmH,EAAAA,GAAAA,KAAA,UAAQ3iD,UAAU,UAAU2+B,QA3FlB,WACd1gE,EAAMA,EAAMvhC,QAAQ6C,IAAI,CACtBupD,MAAO,SACP01D,QAAS,QACTC,SAAU,KACV/2D,MAAO,GACPhrD,OAAQ,GACRsa,EAAG0wC,EAAMl0C,MAAM,EACfuD,EAAG,GAEP,EAiFmD+d,SAAC,qBAGhDowF,EAAAA,GAAAA,MAACK,GAAS,CAACzqD,MAAM,aAAa0qD,OAAsB,IAAdM,EAAiBnnB,QAAS,kBAAMqnB,EAAc,EAAE,EAAClxF,SAAA,CACpF4pF,EAAUp9G,KAAI,SAACu/G,EAAOxkH,GAAC,OACtB6oH,EAAAA,GAAAA,MAAA,OAAkDllD,UAAU,aAAYlrC,SAAA,EACtE6tF,EAAAA,GAAAA,KAAA,UAAQ3iD,UAAU,aAAa2+B,QAAS,kBAAM+f,EAAUriH,GAAGkD,IAAI0yG,EAAK,EAACn9E,UACnE6tF,EAAAA,GAAAA,KAAC8B,GAAO,CAAC3pD,MAAM,eAAe7zB,KAAK,KAAK9lC,MAAM,eAEhDwhH,EAAAA,GAAAA,KAAA,KAAA7tF,UAAGowF,EAAAA,GAAAA,MAAA,KAAApwF,SAAA,CAAG,SAAOz4B,EAAE,QACfsmH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,IAAItxG,MAAOqtG,EAAM9pG,EAAEvD,MAAOyxG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGitG,EAAM9pG,EAAExX,IAAI,KAC1FojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,IAAItxG,MAAOqtG,EAAM7pG,EAAExD,MAAOyxG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGitG,EAAM7pG,EAAEzX,IAAI,KAC1FojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,SAAStxG,MAAOqtG,EAAM96E,OAAOvyB,MAAOyxG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGitG,EAAM96E,OAAOxmC,IAAI,KACzGojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,iBAAiBtxG,MAAOqtG,EAAMlC,cAAcnrG,MAAOyxG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGitG,EAAMlC,cAAcp/G,IAAI,KAC/HojH,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,iBAAiBtxG,MAAOqtG,EAAMjC,cAAcprG,MAAOyxG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGitG,EAAMjC,cAAcr/G,IAAI,MAAI,GAAArC,OATxH2jH,EAAM9pG,EAAEvD,OAAKtW,OAAG2jH,EAAM7pG,EAAExD,OAAKtW,OAAGb,GAUvC,KAERsmH,EAAAA,GAAAA,KAAA,UAAQ3iD,UAAU,UAAU2+B,QAhGd,WAClB+f,EAAUA,EAAUhiH,QAAQ6C,IAAI,CAC9BwX,EAAG,EACHC,EAAG,EACH+uB,OAAQ,EACR44E,cAAe,EACfC,cAAe,GAEnB,EAwFuD9pF,SAAC,sBAGpDowF,EAAAA,GAAAA,MAACK,GAAS,CAACzqD,MAAM,gBAAgB0qD,OAAsB,IAAdM,EAAiBnnB,QAAS,kBAAMqnB,EAAc,EAAE,EAAClxF,SAAA,EACxF6tF,EAAAA,GAAAA,KAAC2C,GAAQ,CAACR,MAAM,aAAat5C,QAASwyC,EAAWxqG,MAAOyxG,SAAU,SAACrxG,GACjEoqG,EAAWz+G,IAAIqU,EAAE0mE,cAAc9O,SAC/B53D,EAAE0mE,cAAc9O,SAAWuzC,EAAOx/G,KAAI,EACxC,IAEEy+G,EAAWxqG,QACTmvG,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,iBAAiBtxG,MAAOyqG,EAAczqG,MAAOzG,IAAK,EAAGgL,KAAM,IAAMktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGqqG,EAAc1+G,IAAI,QAI7I2lH,EAAAA,GAAAA,MAACK,GAAS,CAACzqD,MAAM,aAAa0qD,OAAsB,IAAdM,EAAiBnnB,QAAS,kBAAMqnB,EAAc,EAAE,EAAClxF,SAAA,EACrF6tF,EAAAA,GAAAA,KAAC2C,GAAQ,CAACR,MAAM,aAAat5C,QAASuzC,EAAOvrG,MAAOyxG,SAAU,SAACrxG,GAC7DmrG,EAAOx/G,IAAIqU,EAAE0mE,cAAc9O,UAC1B53D,EAAE0mE,cAAc9O,SAAWwyC,EAAWz+G,KAAI,EAC7C,IAEEw/G,EAAOvrG,QACLmvG,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,iBAAiBtxG,MAAOorG,EAAcprG,MAAOzG,IAAK,EAAGgL,KAAM,IAAMktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGgrG,EAAcr/G,IAAI,QAI7I2lH,EAAAA,GAAAA,MAACK,GAAS,CAACzqD,MAAM,cAAc0qD,OAAsB,IAAdM,EAAiBnnB,QAAS,kBAAMqnB,EAAc,EAAE,EAAClxF,SAAA,EACtF6tF,EAAAA,GAAAA,KAAC2C,GAAQ,CAACR,MAAM,cAAct5C,QAASqzC,EAAWrrG,MAAOyxG,SAAU,SAACrxG,GAAC,OAAKirG,EAAWt/G,IAAIqU,EAAE0mE,cAAc9O,QAAQ,IAE/GqzC,EAAWrrG,QACTmvG,EAAAA,GAAAA,KAACkC,GAAW,CAACC,MAAM,iBAAiBtxG,MAAOsrG,EAAuBtrG,MAAOzG,IAAK,EAAGgL,KAAM,IAAMktG,SAAU,SAACrxG,GAAC,OAAK+xG,EAAa/xG,EAAGkrG,EAAuBv/G,IAAI,QAI/JojH,EAAAA,GAAAA,KAAA,UAAQ5sF,KAAK,SAASiqC,UAAU,SAAQlrC,SAAC,aAI/C,0BClMMqxF,GAAqB,WACzB,IAAMC,EAAK,IAAI7qC,KAOf,MAAO,GANG6qC,EAAGC,eACHD,EAAGE,WAAW,GACdF,EAAGG,UACHH,EAAGI,WACFJ,EAAGK,aACJL,EAAGM,YAEf,EAEaC,GAAQ,WACnB,IAAuCd,EAAAtyG,IAAfgmF,EAAAA,EAAAA,WAAS,GAAM,GAAhCzgC,EAAI+sD,EAAA,GAAEe,EAAOf,EAAA,GAEd39D,EAAS82D,IAET6H,GAAYvtB,EAAAA,EAAAA,QAAyB,MAErCwtB,EAAU,SAACzsD,EAActqD,GAC7B,IAAMg3G,GAAUjnH,EAAAA,GAAAA,WAAU,CAACO,QAAQ,GAAQ0P,GACrCi3G,EAAO,IAAIpuD,KAAK,CAACmuD,GAAU,CAAChxF,KAAM,8BACxCikC,EAAAA,GAAAA,QAAOgtD,EAAM3sD,EAAO,OACtB,EAuCA,OACE6qD,EAAAA,GAAAA,MAAA,OAAK5rC,GAAG,QAAOxkD,SAAA,EACb6tF,EAAAA,GAAAA,KAAA,UAAQ3iD,UAAU,cAAc2+B,QAAS,eAAAsoB,EAAA,OAAuB,QAAvBA,EAAMJ,EAAUv3G,eAAO,IAAA23G,OAAA,EAAjBA,EAAmBf,OAAO,EAACpxF,UACxE6tF,EAAAA,GAAAA,KAACgC,GAAiB,CAAC7pD,MAAM,0BAA0B7zB,KAAK,KAAK9lC,MAAM,eAErEwhH,EAAAA,GAAAA,KAAA,UAAQ3iD,UAAU,cAAc2+B,QAAS,kBAZtB,WACrB,IAAMuoB,EAAQf,KACR71G,EAAOsuD,KAAKqD,UAAU/Z,EAAOj2C,MAAO,KAAM,GAC1Ck1G,EAAW,IAAIvuD,KAAK,CAACtoD,GAAO,CAACylB,KAAM,gBACzCikC,EAAAA,GAAAA,QAAOmtD,EAAU,aAAeD,EAAQ,QAC1C,CAOmDE,EAAgB,EAACtyF,UAC9D6tF,EAAAA,GAAAA,KAACiC,GAAW,CAAC9pD,MAAM,wBAAwB7zB,KAAK,KAAK9lC,MAAM,eAE7DwhH,EAAAA,GAAAA,KAAA,UAAQ3iD,UAAU,cAAc2+B,QAAS,kBAAMioB,GAAQ,EAAK,EAAC9xF,UAC3D6tF,EAAAA,GAAAA,KAAC+B,GAAiB,CAAC5pD,MAAM,gBAAgB7zB,KAAK,KAAK9lC,MAAM,eAG3DwhH,EAAAA,GAAAA,KAAA,SAAO9kD,IAAKgpD,EAAW9wF,KAAK,OAAOsxF,OAAO,QAAQrnD,UAAU,SAASilD,SA7BlD,SAACrxG,GACtB,GAAKA,EAAEyS,OAAOihG,MAAd,CACA,IAAMC,EAAa,IAAIpsD,WACvBosD,EAAWC,WAAW5zG,EAAEyS,OAAOihG,MAAM,GAAI,SACzCC,EAAWvuD,OAAS,SAAAplD,GAClB,IAAMtD,EAAOsuD,KAAKd,MAAMypD,EAAWrrH,QACnCgsD,EAAO3oD,IAAI+Q,EACb,CAN2B,CAO7B,KAuBIqyG,EAAAA,GAAAA,KAAA,OAAKrpC,GAAG,QAAQtZ,UAAWlH,EAAO,OAAS,GAAGhkC,UAC5CowF,EAAAA,GAAAA,MAAA,OAAK5rC,GAAG,gBAAexkD,SAAA,EACrB6tF,EAAAA,GAAAA,KAAA,QAAMrpC,GAAG,QAAQqlB,QAAS,kBAAMioB,GAAQ,EAAM,EAAC9xF,SAAC,UAChD6tF,EAAAA,GAAAA,KAAA,KAAA7tF,SAAG,+FACH6tF,EAAAA,GAAAA,KAAA,UAAQrpC,GAAG,SAASqlB,QAvDV,WAChB,IAAMuoB,EAAQf,KAEdW,EAAQ,iBAAmBI,EAAOxG,GAAIx4D,EAAOj2C,QAEzCi2C,EAAOw2D,UAAUlrG,MAAM9W,OAAS,EAClCoqH,EAAQ,kBAAoBI,GAAO/2F,EAAAA,EAAAA,OACjCwU,GAAKujB,EAAOj2C,OACZysG,GAAUx2D,EAAOj2C,SAGnB60G,EAAQ,kBAAoBI,EAAOviF,GAAKujB,EAAOj2C,QAG7Ci2C,EAAO81D,WAAWxqG,OACpBszG,EAAQ,6BAA+BI,EAAO/G,GAAej4D,EAAOj2C,QAEtE20G,GAAQ,EACV,EAqC+C9xF,SAAC,kBAKlD,EChGA,SAASu4E,GAAkBhnF,EAAQ8sC,GACjC,IAAK,IAAI92D,EAAI,EAAGA,EAAI82D,EAAMz2D,OAAQL,IAAK,CACrC,IAAIixG,EAAan6C,EAAM92D,GACvBixG,EAAWpiC,WAAaoiC,EAAWpiC,aAAc,EACjDoiC,EAAWriC,cAAe,EACtB,UAAWqiC,IAAYA,EAAWC,UAAW,GACjDptG,OAAO4pE,eAAe1jD,EAAQ,EAAcinF,EAAWv7F,KAAMu7F,EAC/D,CACF,CCTe,SAASma,GAAgB9Z,EAAG5hG,GAKzC,OAJA07G,GAAkBtnH,OAAOsxG,eAAiBtxG,OAAOsxG,eAAezpB,OAAS,SAAyB2lB,EAAG5hG,GAEnG,OADA4hG,EAAE+D,UAAY3lG,EACP4hG,CACT,EACO8Z,GAAgB9Z,EAAG5hG,EAC5B,CCNe,SAAS27G,GAAgB/Z,GAItC,OAHA+Z,GAAkBvnH,OAAOsxG,eAAiBtxG,OAAOo6G,eAAevyB,OAAS,SAAyB2lB,GAChG,OAAOA,EAAE+D,WAAavxG,OAAOo6G,eAAe5M,EAC9C,EACO+Z,GAAgB/Z,EACzB,CCHe,SAASga,GAA2B/tD,EAAMoC,GACvD,GAAIA,IAA2B,WAAlB4yC,EAAQ5yC,IAAsC,oBAATA,GAChD,OAAOA,EACF,QAAa,IAATA,EACT,MAAM,IAAIxtB,UAAU,4DAEtB,OCRa,SAAgCorB,GAC7C,QAAa,IAATA,EACF,MAAM,IAAIguD,eAAe,6DAE3B,OAAOhuD,CACT,CDGS,CAAsBA,EAC/B,CENe,SAASiuD,GAAaC,GACnC,IAAIC,ECJS,WACb,GAAuB,qBAAZ/9C,UAA4BA,QAAQC,UAAW,OAAO,EACjE,GAAID,QAAQC,UAAU+9C,KAAM,OAAO,EACnC,GAAqB,oBAAV1N,MAAsB,OAAO,EACxC,IAEE,OADA2N,QAAQ/nG,UAAUmtD,QAAQrR,KAAKgO,QAAQC,UAAUg+C,QAAS,IAAI,WAAa,MACpE,CACT,CAAE,MAAOr0G,GACP,OAAO,CACT,CACF,CDNkC,GAChC,OAAO,WACL,IACE1X,EADEgsH,EAAQ,GAAeJ,GAE3B,GAAIC,EAA2B,CAC7B,IAAII,EAAY,GAAe5oG,MAAMyrD,YACrC9uE,EAAS8tE,QAAQC,UAAUi+C,EAAOloH,UAAWmoH,EAC/C,MACEjsH,EAASgsH,EAAMvrG,MAAM4C,KAAMvf,WAE7B,OAAO,GAA0Buf,KAAMrjB,EACzC,CACF,CEhB4C,IAyC5C,GAvCkB,SAAAksH,ICDH,SAAmBC,EAAUC,GAC1C,GAA0B,oBAAfA,GAA4C,OAAfA,EACtC,MAAM,IAAI95E,UAAU,sDAEtB65E,EAASnoG,UAAY/f,OAAOyO,OAAO05G,GAAcA,EAAWpoG,UAAW,CACrE8qD,YAAa,CACXx3D,MAAO60G,EACP9a,UAAU,EACVtiC,cAAc,KAGlB9qE,OAAO4pE,eAAes+C,EAAU,YAAa,CAC3C9a,UAAU,IAER+a,GAAY,GAAeD,EAAUC,EAC3C,CDdkBC,CAAAC,EAAAJ,GAAA,IPQmBjb,EAAaK,EAAYC,EOR5CyG,EAAA2T,GAAAW,GAChB,SAAAA,EAAar1D,GAAO,IAAAl+B,EAGQ,OENf,SAAyBkd,EAAUg7D,GAChD,KAAMh7D,aAAoBg7D,GACxB,MAAM,IAAI3+D,UAAU,oCAExB,CFDsBpb,CAAA,KAAAo1F,IAClBvzF,EAAAi/E,EAAAl4C,KAAA,KAAM7I,IACDs1D,EAAI5V,EAAAA,YACT59E,EAAK8pC,EAAI8zC,EAAAA,YAAiB59E,CAC5B,CA+BC,OP5BkCk4E,EOHlCqb,GPG+Chb,EOH/C,EAAAz7F,IAAA,SAAAyB,MACD,WACE,OAAOq/F,EAAAA,cAAoB,OAAQ,CAAEh1C,IAAKt+C,KAAKkpG,GAAK5V,EAAAA,cAAoB,IAAG/7C,EAAAA,EAAA,GAAOv3C,KAAK4zC,OAAK,IAAE0K,IAAKt+C,KAAKw/C,IAAKx/C,KAAK4zC,MAAMr+B,UAC1H,GAAC,CAAA/iB,IAAA,oBAAAyB,MACD,WACE+L,KAAKmpG,OACP,GAAC,CAAA32G,IAAA,0BAAAyB,MACD,WAEE,OADA+L,KAAKowC,QACE,IACT,GAAC,CAAA59C,IAAA,qBAAAyB,MACD,WACE+L,KAAKmpG,OACP,GAAC,CAAA32G,IAAA,uBAAAyB,MACD,WACE+L,KAAKowC,OACP,GAAC,CAAA59C,IAAA,QAAAyB,MACD,WAAS,IAAAm1G,EAAA,KACD5pD,EAAIx/C,KAAKkpG,EAAEn5G,QAAQusD,YAAYrC,SAASY,cAAc,SAC5D,wCAAoD4vB,MAAK,SAAA70E,GAAgB,IAAbwrD,EAAMxrD,EAANwrD,OACpC,MAAlBgoD,EAAK5pD,EAAEzvD,SACTqxD,EAAO5B,EAAElD,YAAY8sD,EAAK5pD,EAAEzvD,UAAU,SAAUmsD,GAC9C,IACEsD,EAAEyC,WAAWonD,aAAantD,EAAIsD,EAChC,CAAE,MAAOA,GAAI,CACf,GAEJ,GACF,GAAC,CAAAhtD,IAAA,QAAAyB,MACD,WACE+L,KAAKkpG,EAAEn5G,QAAQs5G,aAAarpG,KAAKw/C,EAAEzvD,QAASiQ,KAAKkpG,EAAEn5G,QAAQo+D,UAC7D,MP3BgB2/B,GAAkBF,EAAYjtF,UAAWstF,GACrDC,GAAaJ,GAAkBF,EAAaM,GAChDttG,OAAO4pE,eAAeojC,EAAa,YAAa,CAC9CI,UAAU,IOwBXib,CAAA,CApCe,CAASje,EAAAA,eGAdse,GAAU,WACrB,OACE3D,EAAAA,GAAAA,MAAA,OAAKllD,UAAU,UAASlrC,SAAA,EACtB6tF,EAAAA,GAAAA,KAAA,KAAGnoD,KAAK,2CAA2Cn0C,OAAO,SAASk0C,IAAI,aAAYzlC,UACjF6tF,EAAAA,GAAAA,KAAA,OAAK9tD,IAAI,+FAA+Fi0D,IAAI,UAAU/iF,OAAO,KAAK2hB,MAAM,WAE1Ii7D,EAAAA,GAAAA,KAAA,KAAGnoD,KAAK,4CAA4Cn0C,OAAO,SAASk0C,IAAI,aAAYzlC,UAClF6tF,EAAAA,GAAAA,KAAA,OAAK9tD,IAAI,0DAA0Di0D,IAAI,kBAAkB/iF,OAAO,KAAK2hB,MAAM,MAAMiY,MAAO,CAACopD,aAAc,YAEzIpG,EAAAA,GAAAA,KAAC6F,GAAY,CAAChuD,KAAK,iDAAiD,YAAU,QAAQ,kBAAgB,OAAO,aAAW,6CAA4C1lC,SAAC,WAK3K,ECQA,OAXA,WACE,OACEowF,EAAAA,GAAAA,MAAA8D,GAAAA,SAAA,CAAAl0F,SAAA,EACE6tF,EAAAA,GAAAA,KAACpB,GAAQ,KACToB,EAAAA,GAAAA,KAAC8C,GAAU,KACX9C,EAAAA,GAAAA,KAACgE,GAAK,KACNhE,EAAAA,GAAAA,KAACkG,GAAO,MAGd,ECRA,GAZwB,SAACI,GACnBA,GAAeA,aAAuBpZ,UACxC,6BAAqB7lB,MAAK,SAAA70E,GAAkD,IAA/C+zG,EAAM/zG,EAAN+zG,OAAQC,EAAMh0G,EAANg0G,OAAQC,EAAMj0G,EAANi0G,OAAQC,EAAMl0G,EAANk0G,OAAQC,EAAOn0G,EAAPm0G,QAC3DJ,EAAOD,GACPE,EAAOF,GACPG,EAAOH,GACPI,EAAOJ,GACPK,EAAQL,EACV,GAEJ,ECPaM,EAAAA,WAAoB/vD,SAASgwD,eAAe,SAEpD7oD,QACHgiD,EAAAA,GAAAA,KAAC9P,EAAAA,WAAgB,CAAA/9E,UACf6tF,EAAAA,GAAAA,KAAC8G,GAAG,OAORC","sources":["../OpenJSCAD.org/packages/io/stl-serializer/CSGToStla.js","../OpenJSCAD.org/packages/io/stl-serializer/CSGToStlb.js","../OpenJSCAD.org/packages/io/stl-serializer/index.js","../OpenJSCAD.org/packages/modeling/src/colors/colorNameToRgb.js","../OpenJSCAD.org/packages/modeling/src/colors/colorize.js","../OpenJSCAD.org/packages/modeling/src/colors/cssColors.js","../OpenJSCAD.org/packages/modeling/src/colors/hexToRgb.js","../OpenJSCAD.org/packages/modeling/src/colors/hslToRgb.js","../OpenJSCAD.org/packages/modeling/src/colors/hsvToRgb.js","../OpenJSCAD.org/packages/modeling/src/colors/hueToColorComponent.js","../OpenJSCAD.org/packages/modeling/src/colors/index.js","../OpenJSCAD.org/packages/modeling/src/colors/rgbToHex.js","../OpenJSCAD.org/packages/modeling/src/colors/rgbToHsl.js","../OpenJSCAD.org/packages/modeling/src/colors/rgbToHsv.js","../OpenJSCAD.org/packages/modeling/src/curves/bezier/arcLengthToT.js","../OpenJSCAD.org/packages/modeling/src/curves/bezier/create.js","../OpenJSCAD.org/packages/modeling/src/curves/bezier/index.js","../OpenJSCAD.org/packages/modeling/src/curves/bezier/length.js","../OpenJSCAD.org/packages/modeling/src/curves/bezier/lengths.js","../OpenJSCAD.org/packages/modeling/src/curves/bezier/tangentAt.js","../OpenJSCAD.org/packages/modeling/src/curves/bezier/valueAt.js","../OpenJSCAD.org/packages/modeling/src/curves/index.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/applyTransforms.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/clone.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/create.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/fromCompactBinary.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/fromPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/index.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/isA.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/reverse.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/toCompactBinary.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/toOutlines.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/toPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/toSides.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/toString.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/transform.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom2/validate.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/applyTransforms.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/clone.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/create.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/fromCompactBinary.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/fromPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/index.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/invert.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/isA.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/toCompactBinary.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/toPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/toPolygons.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/toString.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/transform.js","../OpenJSCAD.org/packages/modeling/src/geometries/geom3/validate.js","../OpenJSCAD.org/packages/modeling/src/geometries/index.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/appendArc.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/appendBezier.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/appendPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/applyTransforms.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/clone.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/close.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/concat.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/create.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/equals.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/fromCompactBinary.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/fromPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/index.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/isA.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/reverse.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/toCompactBinary.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/toPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/toString.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/transform.js","../OpenJSCAD.org/packages/modeling/src/geometries/path2/validate.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly2/arePointsInside.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly2/create.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly2/flip.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly2/index.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly2/measureArea.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/clone.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/create.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/fromPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/fromPointsAndPlane.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/index.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/invert.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/isA.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/isConvex.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/measureArea.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/measureBoundingBox.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/measureBoundingSphere.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/measureSignedVolume.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/plane.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/toPoints.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/toString.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/transform.js","../OpenJSCAD.org/packages/modeling/src/geometries/poly3/validate.js","../OpenJSCAD.org/packages/modeling/src/index.js","../OpenJSCAD.org/packages/modeling/src/maths/OrthoNormalBasis.js","../OpenJSCAD.org/packages/modeling/src/maths/constants.js","../OpenJSCAD.org/packages/modeling/src/maths/index.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/clone.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/closestPoint.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/copy.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/create.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/direction.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/distanceToPoint.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/equals.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/fromPoints.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/fromValues.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/index.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/intersectPointOfLines.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/origin.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/reverse.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/toString.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/transform.js","../OpenJSCAD.org/packages/modeling/src/maths/line2/xAtY.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/clone.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/closestPoint.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/copy.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/create.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/direction.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/distanceToPoint.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/equals.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/fromPlanes.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/fromPointAndDirection.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/fromPoints.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/index.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/intersectPointOfLineAndPlane.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/origin.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/reverse.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/toString.js","../OpenJSCAD.org/packages/modeling/src/maths/line3/transform.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/add.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/clone.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/copy.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/create.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/equals.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromRotation.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromScaling.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromTaitBryanRotation.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromTranslation.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromValues.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromVectorRotation.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromXRotation.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromYRotation.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/fromZRotation.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/identity.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/index.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/invert.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/isIdentity.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/isMirroring.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/isOnlyTransformScale.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/mirrorByPlane.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/multiply.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/rotate.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/rotateX.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/rotateY.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/rotateZ.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/scale.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/subtract.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/toString.js","../OpenJSCAD.org/packages/modeling/src/maths/mat4/translate.js","../OpenJSCAD.org/packages/modeling/src/maths/plane/flip.js","../OpenJSCAD.org/packages/modeling/src/maths/plane/fromNormalAndPoint.js","../OpenJSCAD.org/packages/modeling/src/maths/plane/fromPoints.js","../OpenJSCAD.org/packages/modeling/src/maths/plane/fromPointsRandom.js","../OpenJSCAD.org/packages/modeling/src/maths/plane/index.js","../OpenJSCAD.org/packages/modeling/src/maths/plane/projectionOfPoint.js","../OpenJSCAD.org/packages/modeling/src/maths/plane/signedDistanceToPoint.js","../OpenJSCAD.org/packages/modeling/src/maths/plane/transform.js","../OpenJSCAD.org/packages/modeling/src/maths/utils/aboutEqualNormals.js","../OpenJSCAD.org/packages/modeling/src/maths/utils/area.js","../OpenJSCAD.org/packages/modeling/src/maths/utils/index.js","../OpenJSCAD.org/packages/modeling/src/maths/utils/interpolateBetween2DPointsForY.js","../OpenJSCAD.org/packages/modeling/src/maths/utils/intersect.js","../OpenJSCAD.org/packages/modeling/src/maths/utils/solve2Linear.js","../OpenJSCAD.org/packages/modeling/src/maths/utils/trigonometry.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/abs.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/add.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/angle.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/angleDegrees.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/angleRadians.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/clone.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/copy.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/create.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/cross.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/distance.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/divide.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/dot.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/equals.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/fromAngleDegrees.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/fromAngleRadians.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/fromScalar.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/fromValues.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/index.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/length.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/lerp.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/max.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/min.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/multiply.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/negate.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/normal.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/normalize.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/rotate.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/scale.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/snap.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/squaredDistance.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/squaredLength.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/subtract.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/toString.js","../OpenJSCAD.org/packages/modeling/src/maths/vec2/transform.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/abs.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/add.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/angle.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/clone.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/copy.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/create.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/cross.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/distance.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/divide.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/dot.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/equals.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/fromScalar.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/fromValues.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/fromVec2.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/index.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/length.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/lerp.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/max.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/min.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/multiply.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/negate.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/normalize.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/orthogonal.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/rotateX.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/rotateY.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/rotateZ.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/scale.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/snap.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/squaredDistance.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/squaredLength.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/subtract.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/toString.js","../OpenJSCAD.org/packages/modeling/src/maths/vec3/transform.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/clone.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/copy.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/create.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/dot.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/equals.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/fromScalar.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/fromValues.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/index.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/toString.js","../OpenJSCAD.org/packages/modeling/src/maths/vec4/transform.js","../OpenJSCAD.org/packages/modeling/src/measurements/calculateEpsilonFromBounds.js","../OpenJSCAD.org/packages/modeling/src/measurements/index.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureAggregateArea.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureAggregateBoundingBox.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureAggregateEpsilon.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureAggregateVolume.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureArea.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureBoundingBox.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureBoundingSphere.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureCenter.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureCenterOfMass.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureDimensions.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureEpsilon.js","../OpenJSCAD.org/packages/modeling/src/measurements/measureVolume.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/fromFakePolygons.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/index.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/intersect.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/intersectGeom2.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/intersectGeom3.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/intersectGeom3Sub.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/mayOverlap.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/scission.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/scissionGeom3.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/subtract.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/subtractGeom2.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/subtractGeom3.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/subtractGeom3Sub.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/to3DWalls.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/trees/Node.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/trees/PolygonTreeNode.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/trees/Tree.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/trees/index.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/trees/splitLineSegmentByPlane.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/trees/splitPolygonByPlane.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/union.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/unionGeom2.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/unionGeom3.js","../OpenJSCAD.org/packages/modeling/src/operations/booleans/unionGeom3Sub.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/expand.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/expandGeom2.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/expandGeom3.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/expandPath2.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/expandShell.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/extrudePolygon.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/index.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/offset.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/offsetFromPoints.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/offsetGeom2.js","../OpenJSCAD.org/packages/modeling/src/operations/expansions/offsetPath2.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/earcut/assignHoles.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/earcut/eliminateHoles.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/earcut/index.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/earcut/linkedList.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/earcut/linkedListSort.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/earcut/linkedPolygon.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/earcut/polygonHierarchy.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/earcut/triangle.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeFromSlices.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeHelical.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeLinear.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeLinearGeom2.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeLinearPath2.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeRectangular.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeRectangularGeom2.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeRectangularPath2.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeRotate.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/extrudeWalls.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/index.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/project.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/calculatePlane.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/clone.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/create.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/equals.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/fromPoints.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/fromSides.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/index.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/isA.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/repair.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/reverse.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/toEdges.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/toPolygons.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/toString.js","../OpenJSCAD.org/packages/modeling/src/operations/extrusions/slice/transform.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/hull.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/hullChain.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/hullGeom2.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/hullGeom3.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/hullPath2.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/hullPoints2.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/index.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/quickhull/Face.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/quickhull/HalfEdge.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/quickhull/QuickHull.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/quickhull/Vertex.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/quickhull/VertexList.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/quickhull/get-plane-normal.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/quickhull/index.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/quickhull/point-line-distance.js","../OpenJSCAD.org/packages/modeling/src/operations/hulls/toUniquePoints.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/generalize.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/index.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/insertTjunctions.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/mergePolygons.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/reTesselateCoplanarPolygons.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/retessellate.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/snap.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/snapPolygons.js","../OpenJSCAD.org/packages/modeling/src/operations/modifiers/triangulatePolygons.js","../OpenJSCAD.org/packages/modeling/src/operations/transforms/align.js","../OpenJSCAD.org/packages/modeling/src/operations/transforms/center.js","../OpenJSCAD.org/packages/modeling/src/operations/transforms/index.js","../OpenJSCAD.org/packages/modeling/src/operations/transforms/mirror.js","../OpenJSCAD.org/packages/modeling/src/operations/transforms/rotate.js","../OpenJSCAD.org/packages/modeling/src/operations/transforms/scale.js","../OpenJSCAD.org/packages/modeling/src/operations/transforms/transform.js","../OpenJSCAD.org/packages/modeling/src/operations/transforms/translate.js","../OpenJSCAD.org/packages/modeling/src/primitives/arc.js","../OpenJSCAD.org/packages/modeling/src/primitives/circle.js","../OpenJSCAD.org/packages/modeling/src/primitives/commonChecks.js","../OpenJSCAD.org/packages/modeling/src/primitives/cube.js","../OpenJSCAD.org/packages/modeling/src/primitives/cuboid.js","../OpenJSCAD.org/packages/modeling/src/primitives/cylinder.js","../OpenJSCAD.org/packages/modeling/src/primitives/cylinderElliptic.js","../OpenJSCAD.org/packages/modeling/src/primitives/ellipse.js","../OpenJSCAD.org/packages/modeling/src/primitives/ellipsoid.js","../OpenJSCAD.org/packages/modeling/src/primitives/geodesicSphere.js","../OpenJSCAD.org/packages/modeling/src/primitives/index.js","../OpenJSCAD.org/packages/modeling/src/primitives/line.js","../OpenJSCAD.org/packages/modeling/src/primitives/polygon.js","../OpenJSCAD.org/packages/modeling/src/primitives/polyhedron.js","../OpenJSCAD.org/packages/modeling/src/primitives/rectangle.js","../OpenJSCAD.org/packages/modeling/src/primitives/roundedCuboid.js","../OpenJSCAD.org/packages/modeling/src/primitives/roundedCylinder.js","../OpenJSCAD.org/packages/modeling/src/primitives/roundedRectangle.js","../OpenJSCAD.org/packages/modeling/src/primitives/sphere.js","../OpenJSCAD.org/packages/modeling/src/primitives/square.js","../OpenJSCAD.org/packages/modeling/src/primitives/star.js","../OpenJSCAD.org/packages/modeling/src/primitives/torus.js","../OpenJSCAD.org/packages/modeling/src/primitives/triangle.js","../OpenJSCAD.org/packages/modeling/src/text/fonts/single-line/hershey/simplex.js","../OpenJSCAD.org/packages/modeling/src/text/index.js","../OpenJSCAD.org/packages/modeling/src/text/vectorChar.js","../OpenJSCAD.org/packages/modeling/src/text/vectorParams.js","../OpenJSCAD.org/packages/modeling/src/text/vectorText.js","../OpenJSCAD.org/packages/modeling/src/utils/areAllShapesTheSameType.js","../OpenJSCAD.org/packages/modeling/src/utils/degToRad.js","../OpenJSCAD.org/packages/modeling/src/utils/flatten.js","../OpenJSCAD.org/packages/modeling/src/utils/fnNumberSort.js","../OpenJSCAD.org/packages/modeling/src/utils/index.js","../OpenJSCAD.org/packages/modeling/src/utils/insertSorted.js","../OpenJSCAD.org/packages/modeling/src/utils/padArrayToLength.js","../OpenJSCAD.org/packages/modeling/src/utils/radToDeg.js","../OpenJSCAD.org/packages/modeling/src/utils/radiusToSegments.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/bound-utils/boundingBox.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/bound-utils/computeBounds.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/cameras/camera.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/cameras/orthographicCamera.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/cameras/perspectiveCamera.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/controls/orbitControls.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/geometry-utils-V2/entitiesFromSolids.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/geometry-utils-V2/geom2ToGeometries.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/geometry-utils-V2/geom3ToGeometries.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/geometry-utils-V2/path2ToGeometries.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/index.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawAxis/index.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawGrid/index.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawGrid/multi.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawLines/colorOnlyShaders.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawLines/index.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawLines/meshShaders.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawLines/vColorShaders.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawMesh/index.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawMesh/meshShaders.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/commands/drawMesh/vColorShaders.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/render.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/renderContext.js","../OpenJSCAD.org/packages/utils/regl-renderer/src/rendering/renderDefaults.js","../node_modules/@jscad/array-utils/src/flatten.js","../node_modules/@jscad/array-utils/src/fnNumberSort.js","../node_modules/@jscad/array-utils/src/head.js","../node_modules/@jscad/array-utils/src/index.js","../node_modules/@jscad/array-utils/src/insertSorted.js","../node_modules/@jscad/array-utils/src/nth.js","../node_modules/@jscad/array-utils/src/padToLength.js","../node_modules/@jscad/array-utils/src/toArray.js","../node_modules/camera-unproject/index.js","../node_modules/camera-unproject/lib/projectMat4.js","../node_modules/file-saver/src/FileSaver.js","../node_modules/github-buttons/dist/buttons.esm.js","../node_modules/gl-mat4/adjoint.js","../node_modules/gl-mat4/clone.js","../node_modules/gl-mat4/copy.js","../node_modules/gl-mat4/create.js","../node_modules/gl-mat4/determinant.js","../node_modules/gl-mat4/fromQuat.js","../node_modules/gl-mat4/fromRotation.js","../node_modules/gl-mat4/fromRotationTranslation.js","../node_modules/gl-mat4/fromScaling.js","../node_modules/gl-mat4/fromTranslation.js","../node_modules/gl-mat4/fromXRotation.js","../node_modules/gl-mat4/fromYRotation.js","../node_modules/gl-mat4/fromZRotation.js","../node_modules/gl-mat4/frustum.js","../node_modules/gl-mat4/identity.js","../node_modules/gl-mat4/index.js","../node_modules/gl-mat4/invert.js","../node_modules/gl-mat4/lookAt.js","../node_modules/gl-mat4/multiply.js","../node_modules/gl-mat4/ortho.js","../node_modules/gl-mat4/perspective.js","../node_modules/gl-mat4/perspectiveFromFieldOfView.js","../node_modules/gl-mat4/rotate.js","../node_modules/gl-mat4/rotateX.js","../node_modules/gl-mat4/rotateY.js","../node_modules/gl-mat4/rotateZ.js","../node_modules/gl-mat4/scale.js","../node_modules/gl-mat4/str.js","../node_modules/gl-mat4/translate.js","../node_modules/gl-mat4/transpose.js","../node_modules/gl-vec3/add.js","../node_modules/gl-vec3/angle.js","../node_modules/gl-vec3/ceil.js","../node_modules/gl-vec3/clone.js","../node_modules/gl-vec3/copy.js","../node_modules/gl-vec3/create.js","../node_modules/gl-vec3/cross.js","../node_modules/gl-vec3/dist.js","../node_modules/gl-vec3/distance.js","../node_modules/gl-vec3/div.js","../node_modules/gl-vec3/divide.js","../node_modules/gl-vec3/dot.js","../node_modules/gl-vec3/epsilon.js","../node_modules/gl-vec3/equals.js","../node_modules/gl-vec3/exactEquals.js","../node_modules/gl-vec3/floor.js","../node_modules/gl-vec3/forEach.js","../node_modules/gl-vec3/fromValues.js","../node_modules/gl-vec3/index.js","../node_modules/gl-vec3/inverse.js","../node_modules/gl-vec3/len.js","../node_modules/gl-vec3/length.js","../node_modules/gl-vec3/lerp.js","../node_modules/gl-vec3/max.js","../node_modules/gl-vec3/min.js","../node_modules/gl-vec3/mul.js","../node_modules/gl-vec3/multiply.js","../node_modules/gl-vec3/negate.js","../node_modules/gl-vec3/normalize.js","../node_modules/gl-vec3/random.js","../node_modules/gl-vec3/rotateX.js","../node_modules/gl-vec3/rotateY.js","../node_modules/gl-vec3/rotateZ.js","../node_modules/gl-vec3/round.js","../node_modules/gl-vec3/scale.js","../node_modules/gl-vec3/scaleAndAdd.js","../node_modules/gl-vec3/set.js","../node_modules/gl-vec3/sqrDist.js","../node_modules/gl-vec3/sqrLen.js","../node_modules/gl-vec3/squaredDistance.js","../node_modules/gl-vec3/squaredLength.js","../node_modules/gl-vec3/sub.js","../node_modules/gl-vec3/subtract.js","../node_modules/gl-vec3/transformMat3.js","../node_modules/gl-vec3/transformMat4.js","../node_modules/gl-vec3/transformQuat.js","../node_modules/react-dom/cjs/react-dom.production.min.js","../node_modules/react-dom/client.js","../node_modules/react-dom/index.js","../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/cjs/react.production.min.js","../node_modules/react/index.js","../node_modules/react/jsx-runtime.js","../node_modules/scheduler/cjs/scheduler.production.min.js","../node_modules/scheduler/index.js","../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/arrayWithoutHoles.js","../node_modules/@babel/runtime/helpers/classCallCheck.js","../node_modules/@babel/runtime/helpers/createClass.js","../node_modules/@babel/runtime/helpers/createForOfIteratorHelper.js","../node_modules/@babel/runtime/helpers/defineProperty.js","../node_modules/@babel/runtime/helpers/iterableToArray.js","../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/nonIterableRest.js","../node_modules/@babel/runtime/helpers/nonIterableSpread.js","../node_modules/@babel/runtime/helpers/objectSpread2.js","../node_modules/@babel/runtime/helpers/slicedToArray.js","../node_modules/@babel/runtime/helpers/toConsumableArray.js","../node_modules/@babel/runtime/helpers/toPrimitive.js","../node_modules/@babel/runtime/helpers/toPropertyKey.js","../node_modules/@babel/runtime/helpers/typeof.js","../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","../webpack/bootstrap","../webpack/runtime/define property getters","../webpack/runtime/ensure chunk","../webpack/runtime/get javascript chunk filename","../webpack/runtime/get mini-css chunk filename","../webpack/runtime/global","../webpack/runtime/hasOwnProperty shorthand","../webpack/runtime/load script","../webpack/runtime/make namespace object","../webpack/runtime/publicPath","../webpack/runtime/jsonp chunk loading","../node_modules/@babel/runtime/helpers/esm/typeof.js","../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","../node_modules/@babel/runtime/helpers/esm/objectSpread2.js","../node_modules/@babel/runtime/helpers/esm/defineProperty.js","../node_modules/@hookstate/node_modules/.pnpm/tslib@2.4.0/node_modules/tslib/tslib.es6.js","../node_modules/@hookstate/core/src/is-shallow-equal.ts","../node_modules/@hookstate/core/src/index.ts","lib/params.ts","lib/enclosure/index.ts","lib/enclosure/holes.ts","lib/enclosure/wallmount.ts","lib/enclosure/utils.ts","lib/enclosure/waterproofseal.ts","lib/enclosure/screws.ts","lib/enclosure/base.ts","lib/enclosure/lid.ts","lib/enclosure/pcbmount.ts","ui/Renderer.tsx","../node_modules/@babel/runtime/helpers/esm/arrayLikeToArray.js","../node_modules/@babel/runtime/helpers/esm/slicedToArray.js","../node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","../node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","../node_modules/@babel/runtime/helpers/esm/unsupportedIterableToArray.js","../node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","../node_modules/react-icons/lib/esm/iconsManifest.js","../node_modules/react-icons/lib/esm/iconContext.js","../node_modules/react-icons/lib/esm/iconBase.js","../node_modules/react-icons/bi/index.esm.js","ui/ParamForm.tsx","ui/Tools.tsx","../node_modules/@babel/runtime/helpers/esm/createClass.js","../node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/getPrototypeOf.js","../node_modules/@babel/runtime/helpers/esm/possibleConstructorReturn.js","../node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js","../node_modules/@babel/runtime/helpers/esm/createSuper.js","../node_modules/@babel/runtime/helpers/esm/isNativeReflectConstruct.js","../node_modules/react-github-btn/index.js","../node_modules/@babel/runtime/helpers/esm/inherits.js","../node_modules/@babel/runtime/helpers/esm/classCallCheck.js","ui/Funding.tsx","ui/App.tsx","lib/reportWebVitals.ts","index.tsx"],"sourcesContent":["const { geometries } = require('@jscad/modeling')\n\n// objects must be an array of 3D geomertries (with polygons)\nconst serializeText = (objects, options) => {\n options.statusCallback && options.statusCallback({ progress: 0 })\n\n const result = `solid JSCAD\n${convertToStl(objects, options)}\nendsolid JSCAD\n`\n options.statusCallback && options.statusCallback({ progress: 100 })\n return [result]\n}\n\nconst convertToStl = (objects, options) => {\n const result = []\n objects.forEach((object, i) => {\n result.push(convertToFacets(object, options))\n options.statusCallback && options.statusCallback({ progress: 100 * i / objects.length })\n })\n return result.join('\\n')\n}\n\nconst convertToFacets = (object, options) => {\n const result = []\n const polygons = geometries.geom3.toPolygons(object)\n polygons.forEach((polygon, i) => {\n result.push(convertToFacet(polygon))\n })\n return result.join('\\n')\n}\n\nconst vector3DtoStlString = (v) => `${v[0]} ${v[1]} ${v[2]}`\n\nconst vertextoStlString = (vertex) => `vertex ${vector3DtoStlString(vertex)}`\n\nconst convertToFacet = (polygon) => {\n const result = []\n if (polygon.vertices.length >= 3) {\n // STL requires triangular polygons. If our polygon has more vertices, create multiple triangles:\n const firstVertexStl = vertextoStlString(polygon.vertices[0])\n for (let i = 0; i < polygon.vertices.length - 2; i++) {\n const facet = `facet normal ${vector3DtoStlString(geometries.poly3.plane(polygon))}\nouter loop\n${firstVertexStl}\n${vertextoStlString(polygon.vertices[i + 1])}\n${vertextoStlString(polygon.vertices[i + 2])}\nendloop\nendfacet`\n result.push(facet)\n }\n }\n return result.join('\\n')\n}\n\nmodule.exports = {\n serializeText\n}\n","const { geometries } = require('@jscad/modeling')\n\n// see http://en.wikipedia.org/wiki/STL_%28file_format%29#Binary_STL\n\n// objects must be an array of 3D geometries\nconst serializeBinary = (objects, options) => {\n options.statusCallback && options.statusCallback({ progress: 0 })\n\n // first check if the host is little-endian:\n const buffer = new ArrayBuffer(4)\n const int32buffer = new Int32Array(buffer, 0, 1)\n const int8buffer = new Int8Array(buffer, 0, 4)\n int32buffer[0] = 0x11223344\n if (int8buffer[0] !== 0x44) {\n throw new Error('Binary STL output is currently only supported on little-endian (Intel) processors')\n }\n\n let numtriangles = 0\n let numpolygons = 0\n objects.forEach((object, i) => {\n const polygons = geometries.geom3.toPolygons(object)\n polygons.forEach((polygon) => {\n const numvertices = polygon.vertices.length\n const thisnumtriangles = (numvertices >= 3) ? numvertices - 2 : 0\n numtriangles += thisnumtriangles\n numpolygons += 1\n })\n })\n\n const headerarray = new Uint8Array(80)\n for (let i = 0; i < 80; i++) {\n headerarray[i] = 65\n }\n\n const ar1 = new Uint32Array(1)\n ar1[0] = numtriangles\n\n // write the triangles to allTrianglesBuffer:\n const allTrianglesBuffer = new ArrayBuffer(50 * numtriangles)\n const allTrianglesBufferAsInt8 = new Int8Array(allTrianglesBuffer)\n\n // a tricky problem is that a Float32Array must be aligned at 4-byte boundaries (at least in certain browsers)\n // while each triangle takes 50 bytes. Therefore we write each triangle to a temporary buffer, and copy that\n // into allTrianglesBuffer:\n const triangleBuffer = new ArrayBuffer(50)\n const triangleBufferAsInt8 = new Int8Array(triangleBuffer)\n\n // each triangle consists of 12 floats:\n const triangleFloat32array = new Float32Array(triangleBuffer, 0, 12)\n // and one uint16:\n const triangleUint16array = new Uint16Array(triangleBuffer, 48, 1)\n\n let byteoffset = 0\n\n objects.forEach((object) => {\n const polygons = geometries.geom3.toPolygons(object)\n polygons.forEach((polygon, index) => {\n const vertices = polygon.vertices\n const numvertices = vertices.length\n const plane = geometries.poly3.plane(polygon)\n for (let i = 0; i < numvertices - 2; i++) {\n triangleFloat32array[0] = plane[0]\n triangleFloat32array[1] = plane[1]\n triangleFloat32array[2] = plane[2]\n let arindex = 3\n for (let v = 0; v < 3; v++) {\n const vv = v + ((v > 0) ? i : 0)\n const vertex = vertices[vv]\n triangleFloat32array[arindex++] = vertex[0]\n triangleFloat32array[arindex++] = vertex[1]\n triangleFloat32array[arindex++] = vertex[2]\n }\n triangleUint16array[0] = 0\n // copy the triangle into allTrianglesBuffer:\n allTrianglesBufferAsInt8.set(triangleBufferAsInt8, byteoffset)\n byteoffset += 50\n }\n\n options.statusCallback && options.statusCallback({ progress: 100 * index / numpolygons })\n })\n })\n options.statusCallback && options.statusCallback({ progress: 100 })\n return [headerarray.buffer, ar1.buffer, allTrianglesBuffer] // 'blobable array'\n}\n\nmodule.exports = {\n serializeBinary\n}\n","/*\nJSCAD Geometry to STL Format Serialization\n\n## License\n\nCopyright (c) 2018-2019 JSCAD Organization https://github.com/jscad\n\nAll code released under MIT license\n\nNotes:\n1) geom2 conversion to:\n none\n2) geom3 conversion to:\n STL mesh\n3) path2 conversion to:\n none\n*/\n\n/**\n * Serializer of JSCAD geometries to STL mesh.\n * @module io/stl-serializer\n * @example\n * const { serializer, mimeType } = require('@jscad/stl-serializer')\n */\n\nconst { geometries, modifiers } = require('@jscad/modeling')\n\nconst { flatten, toArray } = require('@jscad/array-utils')\n\nconst { serializeBinary } = require('./CSGToStlb')\nconst { serializeText } = require('./CSGToStla')\n\nconst mimeType = 'application/sla'\n\n/**\n * Serialize the give objects to STL mesh.\n * @param {Object} options - options for serialization\n * @param {String} [options.binary='true'] - target format for data\n * @param {Function} [options.statusCallback] - call back function for progress ({ progress: 0-100 })\n * @param {...Object} objects - objects to serialize as STL\n * @returns {Array} serialized contents with one STL mesh (either string or binary data)\n * @alias module:io/stl-serializer.serialize\n * @example\n * const geometry = primitives.cube()\n * const stlData = serializer({binary: false}, geometry)\n */\nconst serialize = (options, ...objects) => {\n const defaults = {\n binary: true,\n statusCallback: null\n }\n options = Object.assign({}, defaults, options)\n\n objects = flatten(objects)\n\n // convert only 3D geometries\n let objects3d = objects.filter((object) => geometries.geom3.isA(object))\n\n if (objects3d.length === 0) throw new Error('only 3D geometries can be serialized to STL')\n if (objects.length !== objects3d.length) console.warn('some objects could not be serialized to STL')\n\n // convert to triangles\n objects3d = toArray(modifiers.generalize({ snap: true, triangulate: true }, objects3d))\n\n return options.binary ? serializeBinary(objects3d, options) : serializeText(objects3d, options)\n}\n\nmodule.exports = {\n mimeType,\n serialize\n}\n","const cssColors = require('./cssColors')\n\n/**\n * Converts a CSS color name to RGB color.\n *\n * @param {String} s - the CSS color name\n * @return {Array} the RGB color, or undefined if not found\n * @alias module:modeling/colors.colorNameToRgb\n * @example\n * let mysphere = colorize(colorNameToRgb('lightblue'), sphere())\n */\nconst colorNameToRgb = (s) => cssColors[s.toLowerCase()]\n\nmodule.exports = colorNameToRgb\n","const flatten = require('../utils/flatten')\n\nconst geom2 = require('../geometries/geom2')\nconst geom3 = require('../geometries/geom3')\nconst path2 = require('../geometries/path2')\nconst poly3 = require('../geometries/poly3')\n\nconst colorGeom2 = (color, object) => {\n const newgeom2 = geom2.clone(object)\n newgeom2.color = color\n return newgeom2\n}\n\nconst colorGeom3 = (color, object) => {\n const newgeom3 = geom3.clone(object)\n newgeom3.color = color\n return newgeom3\n}\n\nconst colorPath2 = (color, object) => {\n const newpath2 = path2.clone(object)\n newpath2.color = color\n return newpath2\n}\n\nconst colorPoly3 = (color, object) => {\n const newpoly = poly3.clone(object)\n newpoly.color = color\n return newpoly\n}\n\n/**\n * Assign the given color to the given objects.\n * @param {Array} color - RGBA color values, where each value is between 0 and 1.0\n * @param {Object|Array} objects - the objects of which to apply the given color\n * @return {Object|Array} new object, or list of new objects with an additional attribute 'color'\n * @alias module:modeling/colors.colorize\n *\n * @example\n * let redSphere = colorize([1,0,0], sphere()) // red\n * let greenCircle = colorize([0,1,0,0.8], circle()) // green transparent\n * let blueArc = colorize([0,0,1], arc()) // blue\n * let wildcylinder = colorize(colorNameToRgb('fuchsia'), cylinder()) // CSS color\n */\nconst colorize = (color, ...objects) => {\n if (!Array.isArray(color)) throw new Error('color must be an array')\n if (color.length < 3) throw new Error('color must contain R, G and B values')\n if (color.length === 3) color = [color[0], color[1], color[2], 1.0] // add alpha\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n const results = objects.map((object) => {\n if (geom2.isA(object)) return colorGeom2(color, object)\n if (geom3.isA(object)) return colorGeom3(color, object)\n if (path2.isA(object)) return colorPath2(color, object)\n if (poly3.isA(object)) return colorPoly3(color, object)\n\n object.color = color\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = colorize\n","/**\n * @alias module:modeling/colors.cssColors\n * @see CSS color table from http://www.w3.org/TR/css3-color/\n * @enum {Array}\n * @example\n * let newshape = colorize(cssColors.red, oldshape)\n */\nconst cssColors = {\n // basic color keywords\n black: [0 / 255, 0 / 255, 0 / 255],\n silver: [192 / 255, 192 / 255, 192 / 255],\n gray: [128 / 255, 128 / 255, 128 / 255],\n white: [255 / 255, 255 / 255, 255 / 255],\n maroon: [128 / 255, 0 / 255, 0 / 255],\n red: [255 / 255, 0 / 255, 0 / 255],\n purple: [128 / 255, 0 / 255, 128 / 255],\n fuchsia: [255 / 255, 0 / 255, 255 / 255],\n green: [0 / 255, 128 / 255, 0 / 255],\n lime: [0 / 255, 255 / 255, 0 / 255],\n olive: [128 / 255, 128 / 255, 0 / 255],\n yellow: [255 / 255, 255 / 255, 0 / 255],\n navy: [0 / 255, 0 / 255, 128 / 255],\n blue: [0 / 255, 0 / 255, 255 / 255],\n teal: [0 / 255, 128 / 255, 128 / 255],\n aqua: [0 / 255, 255 / 255, 255 / 255],\n // extended color keywords\n aliceblue: [240 / 255, 248 / 255, 255 / 255],\n antiquewhite: [250 / 255, 235 / 255, 215 / 255],\n // 'aqua': [ 0 / 255, 255 / 255, 255 / 255 ],\n aquamarine: [127 / 255, 255 / 255, 212 / 255],\n azure: [240 / 255, 255 / 255, 255 / 255],\n beige: [245 / 255, 245 / 255, 220 / 255],\n bisque: [255 / 255, 228 / 255, 196 / 255],\n // 'black': [ 0 / 255, 0 / 255, 0 / 255 ],\n blanchedalmond: [255 / 255, 235 / 255, 205 / 255],\n // 'blue': [ 0 / 255, 0 / 255, 255 / 255 ],\n blueviolet: [138 / 255, 43 / 255, 226 / 255],\n brown: [165 / 255, 42 / 255, 42 / 255],\n burlywood: [222 / 255, 184 / 255, 135 / 255],\n cadetblue: [95 / 255, 158 / 255, 160 / 255],\n chartreuse: [127 / 255, 255 / 255, 0 / 255],\n chocolate: [210 / 255, 105 / 255, 30 / 255],\n coral: [255 / 255, 127 / 255, 80 / 255],\n cornflowerblue: [100 / 255, 149 / 255, 237 / 255],\n cornsilk: [255 / 255, 248 / 255, 220 / 255],\n crimson: [220 / 255, 20 / 255, 60 / 255],\n cyan: [0 / 255, 255 / 255, 255 / 255],\n darkblue: [0 / 255, 0 / 255, 139 / 255],\n darkcyan: [0 / 255, 139 / 255, 139 / 255],\n darkgoldenrod: [184 / 255, 134 / 255, 11 / 255],\n darkgray: [169 / 255, 169 / 255, 169 / 255],\n darkgreen: [0 / 255, 100 / 255, 0 / 255],\n darkgrey: [169 / 255, 169 / 255, 169 / 255],\n darkkhaki: [189 / 255, 183 / 255, 107 / 255],\n darkmagenta: [139 / 255, 0 / 255, 139 / 255],\n darkolivegreen: [85 / 255, 107 / 255, 47 / 255],\n darkorange: [255 / 255, 140 / 255, 0 / 255],\n darkorchid: [153 / 255, 50 / 255, 204 / 255],\n darkred: [139 / 255, 0 / 255, 0 / 255],\n darksalmon: [233 / 255, 150 / 255, 122 / 255],\n darkseagreen: [143 / 255, 188 / 255, 143 / 255],\n darkslateblue: [72 / 255, 61 / 255, 139 / 255],\n darkslategray: [47 / 255, 79 / 255, 79 / 255],\n darkslategrey: [47 / 255, 79 / 255, 79 / 255],\n darkturquoise: [0 / 255, 206 / 255, 209 / 255],\n darkviolet: [148 / 255, 0 / 255, 211 / 255],\n deeppink: [255 / 255, 20 / 255, 147 / 255],\n deepskyblue: [0 / 255, 191 / 255, 255 / 255],\n dimgray: [105 / 255, 105 / 255, 105 / 255],\n dimgrey: [105 / 255, 105 / 255, 105 / 255],\n dodgerblue: [30 / 255, 144 / 255, 255 / 255],\n firebrick: [178 / 255, 34 / 255, 34 / 255],\n floralwhite: [255 / 255, 250 / 255, 240 / 255],\n forestgreen: [34 / 255, 139 / 255, 34 / 255],\n // 'fuchsia': [ 255 / 255, 0 / 255, 255 / 255 ],\n gainsboro: [220 / 255, 220 / 255, 220 / 255],\n ghostwhite: [248 / 255, 248 / 255, 255 / 255],\n gold: [255 / 255, 215 / 255, 0 / 255],\n goldenrod: [218 / 255, 165 / 255, 32 / 255],\n // 'gray': [ 128 / 255, 128 / 255, 128 / 255 ],\n // 'green': [ 0 / 255, 128 / 255, 0 / 255 ],\n greenyellow: [173 / 255, 255 / 255, 47 / 255],\n grey: [128 / 255, 128 / 255, 128 / 255],\n honeydew: [240 / 255, 255 / 255, 240 / 255],\n hotpink: [255 / 255, 105 / 255, 180 / 255],\n indianred: [205 / 255, 92 / 255, 92 / 255],\n indigo: [75 / 255, 0 / 255, 130 / 255],\n ivory: [255 / 255, 255 / 255, 240 / 255],\n khaki: [240 / 255, 230 / 255, 140 / 255],\n lavender: [230 / 255, 230 / 255, 250 / 255],\n lavenderblush: [255 / 255, 240 / 255, 245 / 255],\n lawngreen: [124 / 255, 252 / 255, 0 / 255],\n lemonchiffon: [255 / 255, 250 / 255, 205 / 255],\n lightblue: [173 / 255, 216 / 255, 230 / 255],\n lightcoral: [240 / 255, 128 / 255, 128 / 255],\n lightcyan: [224 / 255, 255 / 255, 255 / 255],\n lightgoldenrodyellow: [250 / 255, 250 / 255, 210 / 255],\n lightgray: [211 / 255, 211 / 255, 211 / 255],\n lightgreen: [144 / 255, 238 / 255, 144 / 255],\n lightgrey: [211 / 255, 211 / 255, 211 / 255],\n lightpink: [255 / 255, 182 / 255, 193 / 255],\n lightsalmon: [255 / 255, 160 / 255, 122 / 255],\n lightseagreen: [32 / 255, 178 / 255, 170 / 255],\n lightskyblue: [135 / 255, 206 / 255, 250 / 255],\n lightslategray: [119 / 255, 136 / 255, 153 / 255],\n lightslategrey: [119 / 255, 136 / 255, 153 / 255],\n lightsteelblue: [176 / 255, 196 / 255, 222 / 255],\n lightyellow: [255 / 255, 255 / 255, 224 / 255],\n // 'lime': [ 0 / 255, 255 / 255, 0 / 255 ],\n limegreen: [50 / 255, 205 / 255, 50 / 255],\n linen: [250 / 255, 240 / 255, 230 / 255],\n magenta: [255 / 255, 0 / 255, 255 / 255],\n // 'maroon': [ 128 / 255, 0 / 255, 0 / 255 ],\n mediumaquamarine: [102 / 255, 205 / 255, 170 / 255],\n mediumblue: [0 / 255, 0 / 255, 205 / 255],\n mediumorchid: [186 / 255, 85 / 255, 211 / 255],\n mediumpurple: [147 / 255, 112 / 255, 219 / 255],\n mediumseagreen: [60 / 255, 179 / 255, 113 / 255],\n mediumslateblue: [123 / 255, 104 / 255, 238 / 255],\n mediumspringgreen: [0 / 255, 250 / 255, 154 / 255],\n mediumturquoise: [72 / 255, 209 / 255, 204 / 255],\n mediumvioletred: [199 / 255, 21 / 255, 133 / 255],\n midnightblue: [25 / 255, 25 / 255, 112 / 255],\n mintcream: [245 / 255, 255 / 255, 250 / 255],\n mistyrose: [255 / 255, 228 / 255, 225 / 255],\n moccasin: [255 / 255, 228 / 255, 181 / 255],\n navajowhite: [255 / 255, 222 / 255, 173 / 255],\n // 'navy': [ 0 / 255, 0 / 255, 128 / 255 ],\n oldlace: [253 / 255, 245 / 255, 230 / 255],\n // 'olive': [ 128 / 255, 128 / 255, 0 / 255 ],\n olivedrab: [107 / 255, 142 / 255, 35 / 255],\n orange: [255 / 255, 165 / 255, 0 / 255],\n orangered: [255 / 255, 69 / 255, 0 / 255],\n orchid: [218 / 255, 112 / 255, 214 / 255],\n palegoldenrod: [238 / 255, 232 / 255, 170 / 255],\n palegreen: [152 / 255, 251 / 255, 152 / 255],\n paleturquoise: [175 / 255, 238 / 255, 238 / 255],\n palevioletred: [219 / 255, 112 / 255, 147 / 255],\n papayawhip: [255 / 255, 239 / 255, 213 / 255],\n peachpuff: [255 / 255, 218 / 255, 185 / 255],\n peru: [205 / 255, 133 / 255, 63 / 255],\n pink: [255 / 255, 192 / 255, 203 / 255],\n plum: [221 / 255, 160 / 255, 221 / 255],\n powderblue: [176 / 255, 224 / 255, 230 / 255],\n // 'purple': [ 128 / 255, 0 / 255, 128 / 255 ],\n // 'red': [ 255 / 255, 0 / 255, 0 / 255 ],\n rosybrown: [188 / 255, 143 / 255, 143 / 255],\n royalblue: [65 / 255, 105 / 255, 225 / 255],\n saddlebrown: [139 / 255, 69 / 255, 19 / 255],\n salmon: [250 / 255, 128 / 255, 114 / 255],\n sandybrown: [244 / 255, 164 / 255, 96 / 255],\n seagreen: [46 / 255, 139 / 255, 87 / 255],\n seashell: [255 / 255, 245 / 255, 238 / 255],\n sienna: [160 / 255, 82 / 255, 45 / 255],\n // 'silver': [ 192 / 255, 192 / 255, 192 / 255 ],\n skyblue: [135 / 255, 206 / 255, 235 / 255],\n slateblue: [106 / 255, 90 / 255, 205 / 255],\n slategray: [112 / 255, 128 / 255, 144 / 255],\n slategrey: [112 / 255, 128 / 255, 144 / 255],\n snow: [255 / 255, 250 / 255, 250 / 255],\n springgreen: [0 / 255, 255 / 255, 127 / 255],\n steelblue: [70 / 255, 130 / 255, 180 / 255],\n tan: [210 / 255, 180 / 255, 140 / 255],\n // 'teal': [ 0 / 255, 128 / 255, 128 / 255 ],\n thistle: [216 / 255, 191 / 255, 216 / 255],\n tomato: [255 / 255, 99 / 255, 71 / 255],\n turquoise: [64 / 255, 224 / 255, 208 / 255],\n violet: [238 / 255, 130 / 255, 238 / 255],\n wheat: [245 / 255, 222 / 255, 179 / 255],\n // 'white': [ 255 / 255, 255 / 255, 255 / 255 ],\n whitesmoke: [245 / 255, 245 / 255, 245 / 255],\n // 'yellow': [ 255 / 255, 255 / 255, 0 / 255 ],\n yellowgreen: [154 / 255, 205 / 255, 50 / 255]\n}\n\nmodule.exports = cssColors\n","/**\n * Converts CSS color notations (string of hex values) to RGB values.\n *\n * @see https://www.w3.org/TR/css-color-3/\n * @param {String} notation - color notation\n * @return {Array} RGB color values\n * @alias module:modeling/colors.hexToRgb\n *\n * @example\n * let mysphere = colorize(hexToRgb('#000080'), sphere()) // navy blue\n */\nconst hexToRgb = (notation) => {\n notation = notation.replace('#', '')\n if (notation.length < 6) throw new Error('the given notation must contain 3 or more hex values')\n\n const r = parseInt(notation.substring(0, 2), 16) / 255\n const g = parseInt(notation.substring(2, 4), 16) / 255\n const b = parseInt(notation.substring(4, 6), 16) / 255\n if (notation.length >= 8) {\n const a = parseInt(notation.substring(6, 8), 16) / 255\n return [r, g, b, a]\n }\n return [r, g, b]\n}\n\nmodule.exports = hexToRgb\n","const flatten = require('../utils/flatten')\n\nconst hueToColorComponent = require('./hueToColorComponent')\n\n/**\n * Converts HSL color values to RGB color values.\n *\n * @see http://en.wikipedia.org/wiki/HSL_color_space\n * @param {...Number|Array} values - HSL or HSLA color values\n * @return {Array} RGB or RGBA color values\n * @alias module:modeling/colors.hslToRgb\n *\n * @example\n * let mysphere = colorize(hslToRgb([0.9166666666666666, 1, 0.5]), sphere())\n */\nconst hslToRgb = (...values) => {\n values = flatten(values)\n if (values.length < 3) throw new Error('values must contain H, S and L values')\n\n const h = values[0]\n const s = values[1]\n const l = values[2]\n\n let r = l // default is achromatic\n let g = l\n let b = l\n\n if (s !== 0) {\n const q = l < 0.5 ? l * (1 + s) : l + s - l * s\n const p = 2 * l - q\n r = hueToColorComponent(p, q, h + 1 / 3)\n g = hueToColorComponent(p, q, h)\n b = hueToColorComponent(p, q, h - 1 / 3)\n }\n\n if (values.length > 3) {\n // add alpha value if provided\n const a = values[3]\n return [r, g, b, a]\n }\n return [r, g, b]\n}\n\nmodule.exports = hslToRgb\n","const flatten = require('../utils/flatten')\n\n/**\n * Converts HSV color values to RGB color values.\n *\n * @see http://en.wikipedia.org/wiki/HSV_color_space.\n * @param {...Number|Array} values - HSV or HSVA color values\n * @return {Array} RGB or RGBA color values\n * @alias module:modeling/colors.hsvToRgb\n *\n * @example\n * let mysphere = colorize(hsvToRgb([0.9166666666666666, 1, 1]), sphere())\n */\nconst hsvToRgb = (...values) => {\n values = flatten(values)\n if (values.length < 3) throw new Error('values must contain H, S and V values')\n\n const h = values[0]\n const s = values[1]\n const v = values[2]\n\n let r = 0\n let g = 0\n let b = 0\n\n const i = Math.floor(h * 6)\n const f = h * 6 - i\n const p = v * (1 - s)\n const q = v * (1 - f * s)\n const t = v * (1 - (1 - f) * s)\n\n switch (i % 6) {\n case 0:\n r = v\n g = t\n b = p\n break\n case 1:\n r = q\n g = v\n b = p\n break\n case 2:\n r = p\n g = v\n b = t\n break\n case 3:\n r = p\n g = q\n b = v\n break\n case 4:\n r = t\n g = p\n b = v\n break\n case 5:\n r = v\n g = p\n b = q\n break\n }\n\n if (values.length > 3) {\n // add alpha value if provided\n const a = values[3]\n return [r, g, b, a]\n }\n return [r, g, b]\n}\n\nmodule.exports = hsvToRgb\n","/**\n * Convert hue values to a color component (ie one of r, g, b)\n * @param {Number} p\n * @param {Number} q\n * @param {Number} t\n * @return {Number} color component\n * @alias module:modeling/colors.hueToColorComponent\n */\nconst hueToColorComponent = (p, q, t) => {\n if (t < 0) t += 1\n if (t > 1) t -= 1\n if (t < 1 / 6) return p + (q - p) * 6 * t\n if (t < 1 / 2) return q\n if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6\n return p\n}\n\nmodule.exports = hueToColorComponent\n","/**\n * All shapes (primitives or the results of operations) can be assigned a color (RGBA).\n * In all cases, the function returns the results, and never changes the original shapes.\n * @module modeling/colors\n * @example\n * const { colorize, hexToRgb } = require('@jscad/modeling').colors\n */\nmodule.exports = {\n colorize: require('./colorize'),\n colorNameToRgb: require('./colorNameToRgb'),\n cssColors: require('./cssColors'),\n hexToRgb: require('./hexToRgb'),\n hslToRgb: require('./hslToRgb'),\n hsvToRgb: require('./hsvToRgb'),\n hueToColorComponent: require('./hueToColorComponent'),\n rgbToHex: require('./rgbToHex'),\n rgbToHsl: require('./rgbToHsl'),\n rgbToHsv: require('./rgbToHsv')\n}\n","const flatten = require('../utils/flatten')\n\n/**\n * Convert the given RGB color values to CSS color notation (string)\n * @see https://www.w3.org/TR/css-color-3/\n * @param {...Number|Array} values - RGB or RGBA color values\n * @return {String} CSS color notation\n * @alias module:modeling/colors.rgbToHex\n */\nconst rgbToHex = (...values) => {\n values = flatten(values)\n if (values.length < 3) throw new Error('values must contain R, G and B values')\n\n const r = values[0] * 255\n const g = values[1] * 255\n const b = values[2] * 255\n\n let s = `#${Number(0x1000000 + r * 0x10000 + g * 0x100 + b).toString(16).substring(1, 7)}`\n\n if (values.length > 3) {\n // convert alpha to opacity\n s = s + Number(values[3] * 255).toString(16)\n }\n return s\n}\n\nmodule.exports = rgbToHex\n","const flatten = require('../utils/flatten')\n\n/**\n * Converts an RGB color value to HSL.\n *\n * @see http://en.wikipedia.org/wiki/HSL_color_space.\n * @see http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c\n * @param {...Number|Array} values - RGB or RGBA color values\n * @return {Array} HSL or HSLA color values\n * @alias module:modeling/colors.rgbToHsl\n */\nconst rgbToHsl = (...values) => {\n values = flatten(values)\n if (values.length < 3) throw new Error('values must contain R, G and B values')\n\n const r = values[0]\n const g = values[1]\n const b = values[2]\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n let h\n let s\n const l = (max + min) / 2\n\n if (max === min) {\n h = s = 0 // achromatic\n } else {\n const d = max - min\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min)\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0)\n break\n case g:\n h = (b - r) / d + 2\n break\n case b:\n h = (r - g) / d + 4\n break\n }\n h /= 6\n }\n\n if (values.length > 3) {\n // add alpha value if provided\n const a = values[3]\n return [h, s, l, a]\n }\n return [h, s, l]\n}\n\nmodule.exports = rgbToHsl\n","const flatten = require('../utils/flatten')\n\n/**\n * Converts an RGB color value to HSV.\n *\n * @see http://en.wikipedia.org/wiki/HSV_color_space.\n * @param {...Number|Array} values - RGB or RGBA color values\n * @return {Array} HSV or HSVA color values\n * @alias module:modeling/colors.rgbToHsv\n */\nconst rgbToHsv = (...values) => {\n values = flatten(values)\n if (values.length < 3) throw new Error('values must contain R, G and B values')\n\n const r = values[0]\n const g = values[1]\n const b = values[2]\n\n const max = Math.max(r, g, b)\n const min = Math.min(r, g, b)\n let h\n const v = max\n\n const d = max - min\n const s = max === 0 ? 0 : d / max\n\n if (max === min) {\n h = 0 // achromatic\n } else {\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0)\n break\n case g:\n h = (b - r) / d + 2\n break\n case b:\n h = (r - g) / d + 4\n break\n }\n h /= 6\n }\n\n if (values.length > 3) {\n // add alpha if provided\n const a = values[3]\n return [h, s, v, a]\n }\n return [h, s, v]\n}\n\nmodule.exports = rgbToHsv\n","const lengths = require('./lengths')\n\n/**\n * Convert a given arc length along a bezier curve to a t value.\n * Useful for generating equally spaced points along a bezier curve.\n *\n * @example\n * const points = [];\n * const segments = 9; // this will generate 10 equally spaced points\n * const increment = bezier.length(100, bezierCurve) / segments;\n * for(let i = 0; i <= segments; i++) {\n * const t = bezier.arcLengthToT({distance: i * increment}, bezierCurve);\n * const point = bezier.valueAt(t, bezierCurve);\n * points.push(point);\n * }\n * return points;\n *\n * @param {Object} [options] options for construction\n * @param {Number} [options.distance=0] the distance along the bezier curve for which we want to find the corresponding t value.\n * @param {Number} [options.segments=100] the number of segments to use when approximating the curve length.\n * @param {Object} bezier a bezier curve.\n * @returns a number in the [0, 1] interval or NaN if the arcLength is negative or greater than the total length of the curve.\n * @alias module:modeling/curves/bezier.arcLengthToT\n */\nconst arcLengthToT = (options, bezier) => {\n const defaults = {\n distance: 0,\n segments: 100\n }\n const { distance, segments } = Object.assign({}, defaults, options)\n\n const arcLengths = lengths(segments, bezier)\n // binary search for the index with largest value smaller than target arcLength\n let startIndex = 0\n let endIndex = segments\n while (startIndex <= endIndex) {\n const middleIndex = Math.floor(startIndex + (endIndex - startIndex) / 2)\n const diff = arcLengths[middleIndex] - distance\n if (diff < 0) {\n startIndex = middleIndex + 1\n } else if (diff > 0) {\n endIndex = middleIndex - 1\n } else {\n endIndex = middleIndex\n break\n }\n }\n // if we have an exact match, return it\n const targetIndex = endIndex\n if (arcLengths[targetIndex] === distance) {\n return targetIndex / segments\n }\n // we could get finer grain at lengths, or use simple interpolation between two points\n const lengthBefore = arcLengths[targetIndex]\n const lengthAfter = arcLengths[targetIndex + 1]\n const segmentLength = lengthAfter - lengthBefore\n // determine where we are between the 'before' and 'after' points\n const segmentFraction = (distance - lengthBefore) / segmentLength\n // add that fractional amount and return\n return (targetIndex + segmentFraction) / segments\n}\n\nmodule.exports = arcLengthToT\n","/**\n * Represents a bezier easing function.\n * @typedef {Object} bezier\n * @property {Array} points - The control points for the bezier curve. The first and last point will also be the start and end of the curve\n * @property {string} pointType - A reference to the type and dimensionality of the points that the curve was created from\n * @property {number} dimensions - The dimensionality of the bezier\n * @property {Array} permutations - A pre-calculation of the bezier algorithm's co-efficients\n * @property {Array} tangentPermutations - A pre-calculation of the bezier algorithm's tangent co-efficients\n *\n */\n\n/**\n * Creates an object representing a bezier easing curve.\n * Curves can have both an arbitrary number of control points, and an arbitrary number of dimensions.\n *\n * @example\n * const b = bezier.create([0,10]) // a linear progression from 0 to 10\n * const b = bezier.create([0, 0, 10, 10]) // a symmetrical cubic easing curve that starts slowly and ends slowly from 0 to 10\n * const b = bezier.create([0,0,0], [0,5,10], [10,0,-5], [10,10,10]]) // a cubic 3 dimensional easing curve that can generate position arrays for modelling\n * // Usage\n * let position = bezier.valueAt(t,b) // where 0 < t < 1\n * let tangent = bezier.tangentAt(t,b) // where 0 < t < 1\n *\n * @param {Array} points An array with at least 2 elements of either all numbers, or all arrays of numbers that are the same size.\n * @returns {bezier} a new bezier data object\n * @alias module:modeling/curves/bezier.create\n */\nconst create = (points) => {\n if (!Array.isArray(points)) throw new Error('Bezier points must be a valid array/')\n if (points.length < 2) throw new Error('Bezier points must contain at least 2 values.')\n const pointType = getPointType(points)\n\n return {\n points: points,\n pointType: pointType,\n dimensions: pointType === 'float_single' ? 0 : points[0].length,\n permutations: getPermutations(points.length - 1),\n tangentPermutations: getPermutations(points.length - 2)\n }\n}\n\nconst getPointType = function (points) {\n let firstPointType = null\n points.forEach((point) => {\n let pType = ''\n if (Number.isFinite(point)) {\n pType = 'float_single'\n } else if (Array.isArray(point)) {\n point.forEach((val) => {\n if (!Number.isFinite(val)) throw new Error('Bezier point values must all be numbers.')\n })\n pType = 'float_' + point.length\n } else throw new Error('Bezier points must all be numbers or arrays of number.')\n if (firstPointType == null) {\n firstPointType = pType\n } else {\n if (firstPointType !== pType) {\n throw new Error('Bezier points must be either all numbers or all arrays of numbers of the same size.')\n }\n }\n })\n return firstPointType\n}\n\nconst getPermutations = function (c) {\n const permutations = []\n for (let i = 0; i <= c; i++) {\n permutations.push(factorial(c) / (factorial(i) * factorial(c - i)))\n }\n return permutations\n}\n\nconst factorial = function (b) {\n let out = 1\n for (let i = 2; i <= b; i++) {\n out *= i\n }\n return out\n}\n\nmodule.exports = create\n","/**\n * Represents a bezier easing function.\n * @see {@link bezier} for data structure information.\n * @module modeling/curves/bezier\n */\nmodule.exports = {\n create: require('./create'),\n valueAt: require('./valueAt'),\n tangentAt: require('./tangentAt'),\n lengths: require('./lengths'),\n length: require('./length'),\n arcLengthToT: require('./arcLengthToT')\n}\n","const lengths = require('./lengths')\n\n/**\n * Approximates the length of the bezier curve by sampling it at a sequence of points, then adding up all the distances.\n * This is equivalent to flattening the curve into lines and adding up all the line lengths.\n *\n * @example\n * const b = bezier.create([[0, 0], [0, 10]]);\n * console.log(length(100, b)) // output 10\n *\n * @param {Number} segments the number of segments to use when approximating the curve length.\n * @param {Object} bezier a bezier curve.\n * @returns an approximation of the curve's length.\n * @alias module:modeling/curves/bezier.length\n */\nconst length = (segments, bezier) => lengths(segments, bezier)[segments]\n\nmodule.exports = length\n","const valueAt = require('./valueAt')\n\n/**\n * Divides the bezier curve into line segments and returns the cumulative length of those segments as an array.\n * Utility function used to calculate the curve's approximate length and determine the equivalence between arc length and time.\n *\n * @example\n * const b = bezier.create([[0, 0], [0, 10]]);\n * const totalLength = lengths(100, b).pop(); // the last element of the array is the curve's approximate length\n *\n * @param {Number} segments the number of segments to use when approximating the curve length.\n * @param {Object} bezier a bezier curve.\n * @returns an array containing the cumulative length of the segments.\n */\nconst lengths = (segments, bezier) => {\n let sum = 0\n const lengths = [0]\n let previous = valueAt(0, bezier)\n for (let index = 1; index <= segments; index++) {\n const current = valueAt(index / segments, bezier)\n sum += distanceBetween(current, previous)\n lengths.push(sum)\n previous = current\n }\n return lengths\n}\n\n/**\n * Calculates the Euclidean distance between two n-dimensional points.\n *\n * @example\n * const distance = distanceBetween([0, 0], [0, 10]); // calculate distance between 2D points\n * console.log(distance); // output 10\n *\n * @param {Array} a - first operand.\n * @param {Array} b - second operand.\n * @returns {Number} - distance.\n */\nconst distanceBetween = (a, b) => {\n if (Number.isFinite(a) && Number.isFinite(b)) {\n return Math.abs(a - b)\n } else if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n throw new Error('The operands must have the same number of dimensions.')\n }\n let sum = 0\n for (let i = 0; i < a.length; i++) {\n sum += (b[i] - a[i]) * (b[i] - a[i])\n }\n return Math.sqrt(sum)\n } else {\n throw new Error('The operands must be of the same type, either number or array.')\n }\n}\n\nmodule.exports = lengths\n","/**\n * Calculates the tangent at a specific position along a bezier easing curve.\n * For multidimensional curves, the tangent is the slope of each dimension at that point.\n * See the example called extrudeAlongPath.js\n *\n * @example\n * const b = bezier.create([[0,0,0], [0,5,10], [10,0,-5], [10,10,10]]) // a cubic 3 dimensional easing curve that can generate position arrays for modelling\n * let tangent = bezier.tangentAt(t, b)\n *\n * @param {number} t : the position of which to calculate the bezier's tangent value; 0 < t < 1\n * @param {Object} bezier : an array with at least 2 elements of either all numbers, or all arrays of numbers that are the same size.\n * @return {array | number} the tangent at the requested position.\n * @alias module:modeling/curves/bezier.tangentAt\n */\nconst tangentAt = (t, bezier) => {\n if (t < 0 || t > 1) {\n throw new Error('Bezier tangentAt() input must be between 0 and 1')\n }\n if (bezier.pointType === 'float_single') {\n return bezierTangent(bezier, bezier.points, t)\n } else {\n const result = []\n for (let i = 0; i < bezier.dimensions; i++) {\n const singleDimensionPoints = []\n for (let j = 0; j < bezier.points.length; j++) {\n singleDimensionPoints.push(bezier.points[j][i])\n }\n result.push(bezierTangent(bezier, singleDimensionPoints, t))\n }\n return result\n }\n}\n\nconst bezierTangent = function (bezier, p, t) {\n // from https://pages.mtu.edu/~shene/COURSES/cs3621/NOTES/spline/Bezier/bezier-der.html\n const n = p.length - 1\n let result = 0\n for (let i = 0; i < n; i++) {\n const q = n * (p[i + 1] - p[i])\n result += bezier.tangentPermutations[i] * Math.pow(1 - t, n - 1 - i) * Math.pow(t, i) * q\n }\n return result\n}\n\nmodule.exports = tangentAt\n","/**\n * Calculates the value at a specific position along a bezier easing curve.\n * For multidimensional curves, the tangent is the slope of each dimension at that point.\n * See the example called extrudeAlongPath.js to see this in use.\n * Math and explanation comes from {@link https://www.freecodecamp.org/news/nerding-out-with-bezier-curves-6e3c0bc48e2f/}\n *\n * @example\n * const b = bezier.create([0,0,0], [0,5,10], [10,0,-5], [10,10,10]]) // a cubic 3 dimensional easing curve that can generate position arrays for modelling\n * let position = bezier.valueAt(t,b) // where 0 < t < 1\n *\n * @param {number} t : the position of which to calculate the value; 0 < t < 1\n * @param {Object} bezier : a bezier curve created with bezier.create().\n * @returns {array | number} the value at the requested position.\n * @alias module:modeling/curves/bezier.valueAt\n */\nconst valueAt = (t, bezier) => {\n if (t < 0 || t > 1) {\n throw new Error('Bezier valueAt() input must be between 0 and 1')\n }\n if (bezier.pointType === 'float_single') {\n return bezierFunction(bezier, bezier.points, t)\n } else {\n const result = []\n for (let i = 0; i < bezier.dimensions; i++) {\n const singleDimensionPoints = []\n for (let j = 0; j < bezier.points.length; j++) {\n singleDimensionPoints.push(bezier.points[j][i])\n }\n result.push(bezierFunction(bezier, singleDimensionPoints, t))\n }\n return result\n }\n}\n\nconst bezierFunction = function (bezier, p, t) {\n const n = p.length - 1\n let result = 0\n for (let i = 0; i <= n; i++) {\n result += bezier.permutations[i] * Math.pow(1 - t, n - i) * Math.pow(t, i) * p[i]\n }\n return result\n}\n\nmodule.exports = valueAt\n","/**\n * Curves are n-dimensional mathematical constructs that define a path from point 0 to point 1.\n * @module modeling/curves\n * @example\n * const { bezier } = require('@jscad/modeling').curves\n\n */\nmodule.exports = {\n bezier: require('./bezier')\n}\n","const mat4 = require('../../maths/mat4')\nconst vec2 = require('../../maths/vec2')\n\n/*\n * Apply the transforms of the given geometry.\n * NOTE: This function must be called BEFORE exposing any data. See toSides().\n * @param {geom2} geometry - the geometry to transform\n * @returns {geom2} the given geometry\n *\n * @example\n * geometry = applyTransforms(geometry)\n */\nconst applyTransforms = (geometry) => {\n if (mat4.isIdentity(geometry.transforms)) return geometry\n\n // apply transforms to each side\n geometry.sides = geometry.sides.map((side) => {\n const p0 = vec2.transform(vec2.create(), side[0], geometry.transforms)\n const p1 = vec2.transform(vec2.create(), side[1], geometry.transforms)\n return [p0, p1]\n })\n geometry.transforms = mat4.create()\n return geometry\n}\n\nmodule.exports = applyTransforms\n","/**\n * Performs a shallow clone of the given geometry.\n * @param {geom2} geometry - the geometry to clone\n * @returns {geom2} new geometry\n * @alias module:modeling/geometries/geom2.clone\n */\nconst clone = (geometry) => Object.assign({}, geometry)\n\nmodule.exports = clone\n","const mat4 = require('../../maths/mat4')\n\n/**\n * Represents a 2D geometry consisting of a list of sides.\n * @typedef {Object} geom2\n * @property {Array} sides - list of sides, each side containing two points\n * @property {mat4} transforms - transforms to apply to the sides, see transform()\n */\n\n/**\n * Create a new 2D geometry composed of unordered sides (two connected points).\n * @param {Array} [sides] - list of sides where each side is an array of two points\n * @returns {geom2} a new geometry\n * @alias module:modeling/geometries/geom2.create\n */\nconst create = (sides) => {\n if (sides === undefined) {\n sides = [] // empty contents\n }\n return {\n sides: sides,\n transforms: mat4.create()\n }\n}\n\nmodule.exports = create\n","const mat4 = require('../../maths/mat4')\nconst vec2 = require('../../maths/vec2')\n\nconst create = require('./create')\n\n/**\n * Create a new 2D geometry from the given compact binary data.\n * @param {Array} data - compact binary data\n * @returns {geom2} a new geometry\n * @alias module:modeling/geometries/geom2.fromCompactBinary\n */\nconst fromCompactBinary = (data) => {\n if (data[0] !== 0) throw new Error('invalid compact binary data')\n\n const created = create()\n\n created.transforms = mat4.clone(data.slice(1, 17))\n\n for (let i = 21; i < data.length; i += 4) {\n const point0 = vec2.fromValues(data[i + 0], data[i + 1])\n const point1 = vec2.fromValues(data[i + 2], data[i + 3])\n created.sides.push([point0, point1])\n }\n // transfer known properties, i.e. color\n if (data[17] >= 0) {\n created.color = [data[17], data[18], data[19], data[20]]\n }\n // TODO: how about custom properties or fields ?\n return created\n}\n\nmodule.exports = fromCompactBinary\n","const vec2 = require('../../maths/vec2')\n\nconst create = require('./create')\n\n/**\n * Create a new 2D geometry from the given points.\n * The direction (rotation) of the points is not relevant,\n * as the points can define a convex or a concave polygon.\n * The geometry must not self intersect, i.e. the sides cannot cross.\n * @param {Array} points - list of points in 2D space\n * @returns {geom2} a new geometry\n * @alias module:modeling/geometries/geom2.fromPoints\n */\nconst fromPoints = (points) => {\n if (!Array.isArray(points)) {\n throw new Error('the given points must be an array')\n }\n let length = points.length\n if (length < 3) {\n throw new Error('the given points must define a closed geometry with three or more points')\n }\n // adjust length if the given points are closed by the same point\n if (vec2.equals(points[0], points[length - 1])) --length\n\n const sides = []\n let prevpoint = points[length - 1]\n for (let i = 0; i < length; i++) {\n const point = points[i]\n sides.push([vec2.clone(prevpoint), vec2.clone(point)])\n prevpoint = point\n }\n return create(sides)\n}\n\nmodule.exports = fromPoints\n","/**\n * Represents a 2D geometry consisting of a list of sides.\n * @see {@link geom2} for data structure information.\n * @module modeling/geometries/geom2\n *\n * @example\n * colorize([0.5,0,1,1], square()) // purple square\n *\n * @example\n * {\n * \"sides\": [[[-1,1],[-1,-1]],[[-1,-1],[1,-1]],[[1,-1],[1,1]],[[1,1],[-1,1]]],\n * \"transforms\": [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],\n * \"color\": [0.5,0,1,1]\n * }\n */\nmodule.exports = {\n clone: require('./clone'),\n create: require('./create'),\n fromPoints: require('./fromPoints'),\n fromCompactBinary: require('./fromCompactBinary'),\n isA: require('./isA'),\n reverse: require('./reverse'),\n toOutlines: require('./toOutlines'),\n toPoints: require('./toPoints'),\n toSides: require('./toSides'),\n toString: require('./toString'),\n toCompactBinary: require('./toCompactBinary'),\n transform: require('./transform'),\n validate: require('./validate')\n}\n","/**\n * Determine if the given object is a 2D geometry.\n * @param {Object} object - the object to interrogate\n * @returns {Boolean} true, if the object matches a geom2 based object\n * @alias module:modeling/geometries/geom2.isA\n */\nconst isA = (object) => {\n if (object && typeof object === 'object') {\n if ('sides' in object && 'transforms' in object) {\n if (Array.isArray(object.sides) && 'length' in object.transforms) {\n return true\n }\n }\n }\n return false\n}\n\nmodule.exports = isA\n","const create = require('./create')\nconst toSides = require('./toSides')\n\n/**\n * Reverses the given geometry so that the sides are flipped in the opposite order.\n * This swaps the left (interior) and right (exterior) edges.\n * @param {geom2} geometry - the geometry to reverse\n * @returns {geom2} the new reversed geometry\n * @alias module:modeling/geometries/geom2.reverse\n *\n * @example\n * let newgeometry = reverse(geometry)\n */\nconst reverse = (geometry) => {\n const oldsides = toSides(geometry)\n\n const newsides = oldsides.map((side) => [side[1], side[0]])\n newsides.reverse() // is this required?\n return create(newsides)\n}\n\nmodule.exports = reverse\n","/**\n * Produces a compact binary representation from the given geometry.\n * @param {geom2} geometry - the geometry\n * @returns {TypedArray} compact binary representation\n * @alias module:modeling/geometries/geom2.toCompactBinary\n */\nconst toCompactBinary = (geometry) => {\n const sides = geometry.sides\n const transforms = geometry.transforms\n let color = [-1, -1, -1, -1]\n if (geometry.color) color = geometry.color\n\n // FIXME why Float32Array?\n const compacted = new Float32Array(1 + 16 + 4 + (sides.length * 4)) // type + transforms + color + sides data\n\n compacted[0] = 0 // type code: 0 => geom2, 1 => geom3 , 2 => path2\n\n compacted[1] = transforms[0]\n compacted[2] = transforms[1]\n compacted[3] = transforms[2]\n compacted[4] = transforms[3]\n compacted[5] = transforms[4]\n compacted[6] = transforms[5]\n compacted[7] = transforms[6]\n compacted[8] = transforms[7]\n compacted[9] = transforms[8]\n compacted[10] = transforms[9]\n compacted[11] = transforms[10]\n compacted[12] = transforms[11]\n compacted[13] = transforms[12]\n compacted[14] = transforms[13]\n compacted[15] = transforms[14]\n compacted[16] = transforms[15]\n\n compacted[17] = color[0]\n compacted[18] = color[1]\n compacted[19] = color[2]\n compacted[20] = color[3]\n\n for (let i = 0; i < sides.length; i++) {\n const ci = i * 4 + 21\n const point0 = sides[i][0]\n const point1 = sides[i][1]\n compacted[ci + 0] = point0[0]\n compacted[ci + 1] = point0[1]\n compacted[ci + 2] = point1[0]\n compacted[ci + 3] = point1[1]\n }\n // TODO: how about custom properties or fields ?\n return compacted\n}\n\nmodule.exports = toCompactBinary\n","const vec2 = require('../../maths/vec2')\n\nconst toSides = require('./toSides')\n\n/*\n * Create a list of edges which SHARE vertices.\n * This allows the edges to be traversed in order.\n */\nconst toSharedVertices = (sides) => {\n const unique = new Map() // {key: vertex}\n const getUniqueVertex = (vertex) => {\n const key = vertex.toString()\n if (unique.has(key)) {\n return unique.get(key)\n } else {\n unique.set(key, vertex)\n return vertex\n }\n }\n\n return sides.map((side) => side.map(getUniqueVertex))\n}\n\n/*\n * Convert a list of sides into a map from vertex to edges.\n */\nconst toVertexMap = (sides) => {\n const vertexMap = new Map()\n // first map to edges with shared vertices\n const edges = toSharedVertices(sides)\n // construct adjacent edges map\n edges.forEach((edge) => {\n if (vertexMap.has(edge[0])) {\n vertexMap.get(edge[0]).push(edge)\n } else {\n vertexMap.set(edge[0], [edge])\n }\n })\n return vertexMap\n}\n\n/**\n * Create the outline(s) of the given geometry.\n * @param {geom2} geometry - geometry to create outlines from\n * @returns {Array} an array of outlines, where each outline is an array of ordered points\n * @alias module:modeling/geometries/geom2.toOutlines\n *\n * @example\n * let geometry = subtract(rectangle({size: [5, 5]}), rectangle({size: [3, 3]}))\n * let outlines = toOutlines(geometry) // returns two outlines\n */\nconst toOutlines = (geometry) => {\n const vertexMap = toVertexMap(toSides(geometry)) // {vertex: [edges]}\n const outlines = []\n while (true) {\n let startSide\n for (const [vertex, edges] of vertexMap) {\n startSide = edges.shift()\n if (!startSide) {\n vertexMap.delete(vertex)\n continue\n }\n break\n }\n if (startSide === undefined) break // all starting sides have been visited\n\n const connectedVertexPoints = []\n const startVertex = startSide[0]\n while (true) {\n connectedVertexPoints.push(startSide[0])\n const nextVertex = startSide[1]\n if (nextVertex === startVertex) break // the outline has been closed\n const nextPossibleSides = vertexMap.get(nextVertex)\n if (!nextPossibleSides) {\n throw new Error(`geometry is not closed at vertex ${nextVertex}`)\n }\n const nextSide = popNextSide(startSide, nextPossibleSides)\n if (nextPossibleSides.length === 0) {\n vertexMap.delete(nextVertex)\n }\n startSide = nextSide\n } // inner loop\n\n // due to the logic of fromPoints()\n // move the first point to the last\n if (connectedVertexPoints.length > 0) {\n connectedVertexPoints.push(connectedVertexPoints.shift())\n }\n outlines.push(connectedVertexPoints)\n } // outer loop\n vertexMap.clear()\n return outlines\n}\n\n// find the first counter-clockwise edge from startSide and pop from nextSides\nconst popNextSide = (startSide, nextSides) => {\n if (nextSides.length === 1) {\n return nextSides.pop()\n }\n const v0 = vec2.create()\n const startAngle = vec2.angleDegrees(vec2.subtract(v0, startSide[1], startSide[0]))\n let bestAngle\n let bestIndex\n nextSides.forEach((nextSide, index) => {\n const nextAngle = vec2.angleDegrees(vec2.subtract(v0, nextSide[1], nextSide[0]))\n let angle = nextAngle - startAngle\n if (angle < -180) angle += 360\n if (angle >= 180) angle -= 360\n if (bestIndex === undefined || angle > bestAngle) {\n bestIndex = index\n bestAngle = angle\n }\n })\n const nextSide = nextSides[bestIndex]\n nextSides.splice(bestIndex, 1) // remove side from list\n return nextSide\n}\n\nmodule.exports = toOutlines\n","const toSides = require('./toSides')\n\n/**\n * Produces an array of points from the given geometry.\n * The returned array should not be modified as the points are shared with the geometry.\n * NOTE: The points returned do NOT define an order. Use toOutlines() for ordered points.\n * @param {geom2} geometry - the geometry\n * @returns {Array} an array of points\n * @alias module:modeling/geometries/geom2.toPoints\n *\n * @example\n * let sharedpoints = toPoints(geometry)\n */\nconst toPoints = (geometry) => {\n const sides = toSides(geometry)\n const points = sides.map((side) => side[0])\n // due to the logic of fromPoints()\n // move the first point to the last\n if (points.length > 0) {\n points.push(points.shift())\n }\n return points\n}\n\nmodule.exports = toPoints\n","const applyTransforms = require('./applyTransforms')\n\n/**\n * Produces an array of sides from the given geometry.\n * The returned array should not be modified as the data is shared with the geometry.\n * NOTE: The sides returned do NOT define an order. Use toOutlines() for ordered points.\n * @param {geom2} geometry - the geometry\n * @returns {Array} an array of sides\n * @alias module:modeling/geometries/geom2.toSides\n *\n * @example\n * let sharedsides = toSides(geometry)\n */\nconst toSides = (geometry) => applyTransforms(geometry).sides\n\nmodule.exports = toSides\n","const vec2 = require('../../maths/vec2')\n\nconst toSides = require('./toSides')\n\n/**\n * Create a string representing the contents of the given geometry.\n * @param {geom2} geometry - the geometry\n * @returns {String} a representative string\n * @alias module:modeling/geometries/geom2.toString\n *\n * @example\n * console.out(toString(geometry))\n */\nconst toString = (geometry) => {\n const sides = toSides(geometry)\n let result = 'geom2 (' + sides.length + ' sides):\\n[\\n'\n sides.forEach((side) => {\n result += ' [' + vec2.toString(side[0]) + ', ' + vec2.toString(side[1]) + ']\\n'\n })\n result += ']\\n'\n return result\n}\n\nmodule.exports = toString\n","const mat4 = require('../../maths/mat4')\n\n/**\n * Transform the given geometry using the given matrix.\n * This is a lazy transform of the sides, as this function only adjusts the transforms.\n * The transforms are applied when accessing the sides via toSides().\n * @param {mat4} matrix - the matrix to transform with\n * @param {geom2} geometry - the geometry to transform\n * @returns {geom2} a new geometry\n * @alias module:modeling/geometries/geom2.transform\n *\n * @example\n * let newgeometry = transform(fromZRotation(degToRad(90)), geometry)\n */\nconst transform = (matrix, geometry) => {\n const transforms = mat4.multiply(mat4.create(), matrix, geometry.transforms)\n return Object.assign({}, geometry, { transforms })\n}\n\nmodule.exports = transform\n","const vec2 = require('../../maths/vec2')\nconst isA = require('./isA')\nconst toOutlines = require('./toOutlines')\n\n/**\n * Determine if the given object is a valid geom2.\n * Checks for closedness, self-edges, and valid data points.\n *\n * **If the geometry is not valid, an exception will be thrown with details of the geometry error.**\n *\n * @param {Object} object - the object to interrogate\n * @throws {Error} error if the geometry is not valid\n * @alias module:modeling/geometries/geom2.validate\n */\nconst validate = (object) => {\n if (!isA(object)) {\n throw new Error('invalid geom2 structure')\n }\n\n // check for closedness\n toOutlines(object)\n\n // check for self-edges\n object.sides.forEach((side) => {\n if (vec2.equals(side[0], side[1])) {\n throw new Error(`geom2 self-edge ${side[0]}`)\n }\n })\n\n // check transforms\n if (!object.transforms.every(Number.isFinite)) {\n throw new Error(`geom2 invalid transforms ${object.transforms}`)\n }\n}\n\nmodule.exports = validate\n","const mat4 = require('../../maths/mat4')\n\nconst poly3 = require('../poly3')\n\n/*\n * Apply the transforms of the given geometry.\n * NOTE: This function must be called BEFORE exposing any data. See toPolygons.\n * @param {geom3} geometry - the geometry to transform\n * @returns {geom3} the given geometry\n * @example\n * geometry = applyTransforms(geometry)\n */\nconst applyTransforms = (geometry) => {\n if (mat4.isIdentity(geometry.transforms)) return geometry\n\n // apply transforms to each polygon\n geometry.polygons = geometry.polygons.map((polygon) => poly3.transform(geometry.transforms, polygon))\n // reset transforms\n geometry.transforms = mat4.create()\n return geometry\n}\n\nmodule.exports = applyTransforms\n","/**\n * Performs a shallow clone of the given geometry.\n * @param {geom3} geometry - the geometry to clone\n * @returns {geom3} a new geometry\n * @alias module:modeling/geometries/geom3.clone\n */\nconst clone = (geometry) => Object.assign({}, geometry)\n\nmodule.exports = clone\n","const mat4 = require('../../maths/mat4')\n\n/**\n * Represents a 3D geometry consisting of a list of polygons.\n * @typedef {Object} geom3\n * @property {Array} polygons - list of polygons, each polygon containing three or more points\n * @property {mat4} transforms - transforms to apply to the polygons, see transform()\n */\n\n/**\n * Create a new 3D geometry composed of the given polygons.\n * @param {Array} [polygons] - list of polygons, or undefined\n * @returns {geom3} a new geometry\n * @alias module:modeling/geometries/geom3.create\n */\nconst create = (polygons) => {\n if (polygons === undefined) {\n polygons = [] // empty contents\n }\n return {\n polygons,\n transforms: mat4.create()\n }\n}\n\nmodule.exports = create\n","const vec3 = require('../../maths/vec3')\nconst mat4 = require('../../maths/mat4')\n\nconst poly3 = require('../poly3')\n\nconst create = require('./create')\n\n/**\n * Construct a new 3D geometry from the given compact binary data.\n * @param {TypedArray} data - compact binary data\n * @returns {geom3} a new geometry\n * @alias module:modeling/geometries/geom3.fromCompactBinary\n */\nconst fromCompactBinary = (data) => {\n if (data[0] !== 1) throw new Error('invalid compact binary data')\n\n const created = create()\n\n created.transforms = mat4.clone(data.slice(1, 17))\n\n const numberOfVertices = data[21]\n let ci = 22\n let vi = data.length - (numberOfVertices * 3)\n while (vi < data.length) {\n const verticesPerPolygon = data[ci]\n ci++\n\n const vertices = []\n for (let i = 0; i < verticesPerPolygon; i++) {\n vertices.push(vec3.fromValues(data[vi], data[vi + 1], data[vi + 2]))\n vi += 3\n }\n created.polygons.push(poly3.create(vertices))\n }\n\n // transfer known properties, i.e. color\n if (data[17] >= 0) {\n created.color = [data[17], data[18], data[19], data[20]]\n }\n // TODO: how about custom properties or fields ?\n return created\n}\n\nmodule.exports = fromCompactBinary\n","const poly3 = require('../poly3')\n\nconst create = require('./create')\n\n/**\n * Construct a new 3D geometry from a list of points.\n * The list of points should contain sub-arrays, each defining a single polygon of points.\n * In addition, the points should follow the right-hand rule for rotation in order to\n * define an external facing polygon.\n * @param {Array} listofpoints - list of lists, where each list is a set of points to construct a polygon\n * @returns {geom3} a new geometry\n * @alias module:modeling/geometries/geom3.fromPoints\n */\nconst fromPoints = (listofpoints) => {\n if (!Array.isArray(listofpoints)) {\n throw new Error('the given points must be an array')\n }\n\n const polygons = listofpoints.map((points, index) => {\n // TODO catch the error, and rethrow with index\n const polygon = poly3.create(points)\n return polygon\n })\n const result = create(polygons)\n return result\n}\n\nmodule.exports = fromPoints\n","/**\n * Represents a 3D geometry consisting of a list of polygons.\n * @see {@link geom3} for data structure information.\n * @module modeling/geometries/geom3\n *\n * @example\n * colorize([0,0.5,1,0.6], cube()) // transparent ice cube\n *\n * @example\n * {\n * \"polygons\": [\n * {\"vertices\": [[-1,-1,-1], [-1,-1,1], [-1,1,1], [-1,1,-1]]},\n * {\"vertices\": [[1,-1,-1], [1,1,-1], [1,1,1], [1,-1,1]]},\n * {\"vertices\": [[-1,-1,-1], [1,-1,-1], [1,-1,1], [-1,-1,1]]},\n * {\"vertices\": [[-1,1,-1], [-1,1,1], [1,1,1], [1,1,-1]]},\n * {\"vertices\": [[-1,-1,-1], [-1,1,-1], [1,1,-1], [1,-1,-1]]},\n * {\"vertices\": [[-1,-1,1], [1,-1,1], [1,1,1], [-1,1,1]]}\n * ],\n * \"transforms\": [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],\n * \"color\": [0,0.5,1,0.6]\n * }\n */\nmodule.exports = {\n clone: require('./clone'),\n create: require('./create'),\n fromPoints: require('./fromPoints'),\n fromCompactBinary: require('./fromCompactBinary'),\n invert: require('./invert'),\n isA: require('./isA'),\n toPoints: require('./toPoints'),\n toPolygons: require('./toPolygons'),\n toString: require('./toString'),\n toCompactBinary: require('./toCompactBinary'),\n transform: require('./transform'),\n validate: require('./validate')\n}\n","const poly3 = require('../poly3')\n\nconst create = require('./create')\nconst toPolygons = require('./toPolygons')\n\n/**\n * Invert the given geometry, transposing solid and empty space.\n * @param {geom3} geometry - the geometry to invert\n * @return {geom3} a new geometry\n * @alias module:modeling/geometries/geom3.invert\n */\nconst invert = (geometry) => {\n const polygons = toPolygons(geometry)\n const newpolygons = polygons.map((polygon) => poly3.invert(polygon))\n return create(newpolygons)\n}\n\nmodule.exports = invert\n","/**\n * Determine if the given object is a 3D geometry.\n * @param {Object} object - the object to interrogate\n * @returns {Boolean} true if the object matches a geom3\n * @alias module:modeling/geometries/geom3.isA\n */\nconst isA = (object) => {\n if (object && typeof object === 'object') {\n if ('polygons' in object && 'transforms' in object) {\n if (Array.isArray(object.polygons) && 'length' in object.transforms) {\n return true\n }\n }\n }\n return false\n}\n\nmodule.exports = isA\n","const poly3 = require('../poly3')\n\n/**\n * Return the given geometry in compact binary representation.\n * @param {geom3} geometry - the geometry\n * @return {TypedArray} compact binary representation\n * @alias module:modeling/geometries/geom3.toCompactBinary\n */\nconst toCompactBinary = (geometry) => {\n const polygons = geometry.polygons\n const transforms = geometry.transforms\n\n const numberOfPolygons = polygons.length\n const numberOfVertices = polygons.reduce((count, polygon) => count + polygon.vertices.length, 0)\n let color = [-1, -1, -1, -1]\n if (geometry.color) color = geometry.color\n\n // FIXME why Float32Array?\n const compacted = new Float32Array(1 + 16 + 4 + 1 + numberOfPolygons + (numberOfVertices * 3))\n // type + transforms + color + numberOfPolygons + numberOfVerticesPerPolygon[] + vertices data[]\n\n compacted[0] = 1 // type code: 0 => geom2, 1 => geom3 , 2 => path2\n\n compacted[1] = transforms[0]\n compacted[2] = transforms[1]\n compacted[3] = transforms[2]\n compacted[4] = transforms[3]\n compacted[5] = transforms[4]\n compacted[6] = transforms[5]\n compacted[7] = transforms[6]\n compacted[8] = transforms[7]\n compacted[9] = transforms[8]\n compacted[10] = transforms[9]\n compacted[11] = transforms[10]\n compacted[12] = transforms[11]\n compacted[13] = transforms[12]\n compacted[14] = transforms[13]\n compacted[15] = transforms[14]\n compacted[16] = transforms[15]\n\n compacted[17] = color[0]\n compacted[18] = color[1]\n compacted[19] = color[2]\n compacted[20] = color[3]\n\n compacted[21] = numberOfVertices\n\n let ci = 22\n let vi = ci + numberOfPolygons\n polygons.forEach((polygon) => {\n const points = poly3.toPoints(polygon)\n // record the number of vertices per polygon\n compacted[ci] = points.length\n ci++\n // convert the vertices\n for (let i = 0; i < points.length; i++) {\n const point = points[i]\n compacted[vi + 0] = point[0]\n compacted[vi + 1] = point[1]\n compacted[vi + 2] = point[2]\n vi += 3\n }\n })\n // TODO: how about custom properties or fields ?\n return compacted\n}\n\nmodule.exports = toCompactBinary\n","const poly3 = require('../poly3')\n\nconst toPolygons = require('./toPolygons')\n\n/**\n * Return the given geometry as a list of points, after applying transforms.\n * The returned array should not be modified as the points are shared with the geometry.\n * @param {geom3} geometry - the geometry\n * @return {Array} list of points, where each sub-array represents a polygon\n * @alias module:modeling/geometries/geom3.toPoints\n */\nconst toPoints = (geometry) => {\n const polygons = toPolygons(geometry)\n const listofpoints = polygons.map((polygon) => poly3.toPoints(polygon))\n return listofpoints\n}\n\nmodule.exports = toPoints\n","const applyTransforms = require('./applyTransforms')\n\n/**\n * Produces an array of polygons from the given geometry, after applying transforms.\n * The returned array should not be modified as the polygons are shared with the geometry.\n * @param {geom3} geometry - the geometry\n * @returns {Array} an array of polygons\n * @alias module:modeling/geometries/geom3.toPolygons\n *\n * @example\n * let sharedpolygons = toPolygons(geometry)\n */\nconst toPolygons = (geometry) => applyTransforms(geometry).polygons\n\nmodule.exports = toPolygons\n","const poly3 = require('../poly3')\n\nconst toPolygons = require('./toPolygons')\n\n/**\n * Create a string representing the contents of the given geometry.\n * @param {geom3} geometry - the geometry\n * @returns {String} a representative string\n * @alias module:modeling/geometries/geom3.toString\n *\n * @example\n * console.out(toString(geometry))\n */\nconst toString = (geometry) => {\n const polygons = toPolygons(geometry)\n let result = 'geom3 (' + polygons.length + ' polygons):\\n'\n polygons.forEach((polygon) => {\n result += ' ' + poly3.toString(polygon) + '\\n'\n })\n return result\n}\n\nmodule.exports = toString\n","const mat4 = require('../../maths/mat4')\n\n/**\n * Transform the given geometry using the given matrix.\n * This is a lazy transform of the polygons, as this function only adjusts the transforms.\n * See applyTransforms() for the actual application of the transforms to the polygons.\n * @param {mat4} matrix - the matrix to transform with\n * @param {geom3} geometry - the geometry to transform\n * @returns {geom3} a new geometry\n * @alias module:modeling/geometries/geom3.transform\n *\n * @example\n * let newgeometry = transform(fromXRotation(degToRad(90)), geometry)\n */\nconst transform = (matrix, geometry) => {\n const transforms = mat4.multiply(mat4.create(), matrix, geometry.transforms)\n return Object.assign({}, geometry, { transforms })\n}\n\nmodule.exports = transform\n","const poly3 = require('../poly3')\nconst isA = require('./isA')\n\n/**\n * Determine if the given object is a valid 3D geometry.\n * Checks for valid data structure, convex polygon faces, and manifold edges.\n *\n * **If the geometry is not valid, an exception will be thrown with details of the geometry error.**\n *\n * @param {Object} object - the object to interrogate\n * @throws {Error} error if the geometry is not valid\n * @alias module:modeling/geometries/geom3.validate\n */\nconst validate = (object) => {\n if (!isA(object)) {\n throw new Error('invalid geom3 structure')\n }\n\n // check polygons\n object.polygons.forEach(poly3.validate)\n validateManifold(object)\n\n // check transforms\n if (!object.transforms.every(Number.isFinite)) {\n throw new Error(`geom3 invalid transforms ${object.transforms}`)\n }\n\n // TODO: check for self-intersecting\n}\n\n/*\n * Check manifold edge condition: Every edge is in exactly 2 faces\n */\nconst validateManifold = (object) => {\n // count of each edge\n const edgeCount = new Map()\n object.polygons.forEach(({ vertices }) => {\n vertices.forEach((v, i) => {\n const v1 = `${v}`\n const v2 = `${vertices[(i + 1) % vertices.length]}`\n // sort for undirected edge\n const edge = `${v1}/${v2}`\n const count = edgeCount.has(edge) ? edgeCount.get(edge) : 0\n edgeCount.set(edge, count + 1)\n })\n })\n\n // check that edges are always matched\n const nonManifold = []\n edgeCount.forEach((count, edge) => {\n const complementEdge = edge.split('/').reverse().join('/')\n const complementCount = edgeCount.get(complementEdge)\n if (count !== complementCount) {\n nonManifold.push(edge.replace('/', ' -> '))\n }\n })\n if (nonManifold.length > 0) {\n throw new Error(`non-manifold edges ${nonManifold.length}\\n${nonManifold.join('\\n')}`)\n }\n}\n\nmodule.exports = validate\n","/**\n * Geometries are objects that represent the contents of primitives or the results of operations.\n * Note: Geometries are considered immutable, so never change the contents directly.\n *\n * @see {@link geom2} - 2D geometry consisting of sides\n * @see {@link geom3} - 3D geometry consisting of polygons\n * @see {@link path2} - 2D geometry consisting of ordered points\n * @see {@link poly2} - 2D polygon consisting of ordered vertices\n * @see {@link poly3} - 3D polygon consisting of ordered vertices\n *\n * @module modeling/geometries\n * @example\n * const { geom2, geom3, path2, poly2, poly3 } = require('@jscad/modeling').geometries\n */\nmodule.exports = {\n geom2: require('./geom2'),\n geom3: require('./geom3'),\n path2: require('./path2'),\n poly2: require('./poly2'),\n poly3: require('./poly3')\n}\n","const { TAU } = require('../../maths/constants')\nconst vec2 = require('../../maths/vec2')\n\nconst fromPoints = require('./fromPoints')\nconst toPoints = require('./toPoints')\n\n/**\n * Append a series of points to the given geometry that represent an arc.\n * This implementation follows the SVG specifications.\n * @see http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\n * @param {Object} options - options for construction\n * @param {vec2} options.endpoint - end point of arc (REQUIRED)\n * @param {vec2} [options.radius=[0,0]] - radius of arc (X and Y)\n * @param {Number} [options.xaxisrotation=0] - rotation (RADIANS) of the X axis of the arc with respect to the X axis of the coordinate system\n * @param {Boolean} [options.clockwise=false] - draw an arc clockwise with respect to the center point\n * @param {Boolean} [options.large=false] - draw an arc longer than TAU / 2 radians\n * @param {Number} [options.segments=16] - number of segments per full rotation\n * @param {path2} geometry - the path of which to append the arc\n * @returns {path2} a new path with the appended points\n * @alias module:modeling/geometries/path2.appendArc\n *\n * @example\n * let p1 = path2.fromPoints({}, [[27.5,-22.96875]]);\n * p1 = path2.appendPoints([[27.5,-3.28125]], p1);\n * p1 = path2.appendArc({endpoint: [12.5, -22.96875], radius: [15, -19.6875]}, p1);\n */\nconst appendArc = (options, geometry) => {\n const defaults = {\n radius: [0, 0], // X and Y radius\n xaxisrotation: 0,\n clockwise: false,\n large: false,\n segments: 16\n }\n let { endpoint, radius, xaxisrotation, clockwise, large, segments } = Object.assign({}, defaults, options)\n\n // validate the given options\n if (!Array.isArray(endpoint)) throw new Error('endpoint must be an array of X and Y values')\n if (endpoint.length < 2) throw new Error('endpoint must contain X and Y values')\n endpoint = vec2.clone(endpoint)\n\n if (!Array.isArray(radius)) throw new Error('radius must be an array of X and Y values')\n if (radius.length < 2) throw new Error('radius must contain X and Y values')\n\n if (segments < 4) throw new Error('segments must be four or more')\n\n const decimals = 100000\n\n // validate the given geometry\n if (geometry.isClosed) {\n throw new Error('the given path cannot be closed')\n }\n\n const points = toPoints(geometry)\n if (points.length < 1) {\n throw new Error('the given path must contain one or more points (as the starting point for the arc)')\n }\n\n let xradius = radius[0]\n let yradius = radius[1]\n const startpoint = points[points.length - 1]\n\n // round to precision in order to have determinate calculations\n xradius = Math.round(xradius * decimals) / decimals\n yradius = Math.round(yradius * decimals) / decimals\n endpoint = vec2.fromValues(Math.round(endpoint[0] * decimals) / decimals, Math.round(endpoint[1] * decimals) / decimals)\n\n const sweepFlag = !clockwise\n let newpoints = []\n if ((xradius === 0) || (yradius === 0)) {\n // http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes:\n // If rx = 0 or ry = 0, then treat this as a straight line from (x1, y1) to (x2, y2) and stop\n newpoints.push(endpoint)\n } else {\n xradius = Math.abs(xradius)\n yradius = Math.abs(yradius)\n\n // see http://www.w3.org/TR/SVG/implnote.html#ArcImplementationNotes :\n const phi = xaxisrotation\n const cosphi = Math.cos(phi)\n const sinphi = Math.sin(phi)\n const minushalfdistance = vec2.subtract(vec2.create(), startpoint, endpoint)\n vec2.scale(minushalfdistance, minushalfdistance, 0.5)\n // F.6.5.1:\n // round to precision in order to have determinate calculations\n const x = Math.round((cosphi * minushalfdistance[0] + sinphi * minushalfdistance[1]) * decimals) / decimals\n const y = Math.round((-sinphi * minushalfdistance[0] + cosphi * minushalfdistance[1]) * decimals) / decimals\n const startTranslated = vec2.fromValues(x, y)\n // F.6.6.2:\n const biglambda = (startTranslated[0] * startTranslated[0]) / (xradius * xradius) + (startTranslated[1] * startTranslated[1]) / (yradius * yradius)\n if (biglambda > 1.0) {\n // F.6.6.3:\n const sqrtbiglambda = Math.sqrt(biglambda)\n xradius *= sqrtbiglambda\n yradius *= sqrtbiglambda\n // round to precision in order to have determinate calculations\n xradius = Math.round(xradius * decimals) / decimals\n yradius = Math.round(yradius * decimals) / decimals\n }\n // F.6.5.2:\n let multiplier1 = Math.sqrt((xradius * xradius * yradius * yradius - xradius * xradius * startTranslated[1] * startTranslated[1] - yradius * yradius * startTranslated[0] * startTranslated[0]) / (xradius * xradius * startTranslated[1] * startTranslated[1] + yradius * yradius * startTranslated[0] * startTranslated[0]))\n if (sweepFlag === large) multiplier1 = -multiplier1\n const centerTranslated = vec2.fromValues(xradius * startTranslated[1] / yradius, -yradius * startTranslated[0] / xradius)\n vec2.scale(centerTranslated, centerTranslated, multiplier1)\n // F.6.5.3:\n let center = vec2.fromValues(cosphi * centerTranslated[0] - sinphi * centerTranslated[1], sinphi * centerTranslated[0] + cosphi * centerTranslated[1])\n center = vec2.add(center, center, vec2.scale(vec2.create(), vec2.add(vec2.create(), startpoint, endpoint), 0.5))\n\n // F.6.5.5:\n const vector1 = vec2.fromValues((startTranslated[0] - centerTranslated[0]) / xradius, (startTranslated[1] - centerTranslated[1]) / yradius)\n const vector2 = vec2.fromValues((-startTranslated[0] - centerTranslated[0]) / xradius, (-startTranslated[1] - centerTranslated[1]) / yradius)\n const theta1 = vec2.angleRadians(vector1)\n const theta2 = vec2.angleRadians(vector2)\n let deltatheta = theta2 - theta1\n deltatheta = deltatheta % TAU\n if ((!sweepFlag) && (deltatheta > 0)) {\n deltatheta -= TAU\n } else if ((sweepFlag) && (deltatheta < 0)) {\n deltatheta += TAU\n }\n\n // Ok, we have the center point and angle range (from theta1, deltatheta radians) so we can create the ellipse\n let numsteps = Math.ceil(Math.abs(deltatheta) / TAU * segments) + 1\n if (numsteps < 1) numsteps = 1\n for (let step = 1; step < numsteps; step++) {\n const theta = theta1 + step / numsteps * deltatheta\n const costheta = Math.cos(theta)\n const sintheta = Math.sin(theta)\n // F.6.3.1:\n const point = vec2.fromValues(cosphi * xradius * costheta - sinphi * yradius * sintheta, sinphi * xradius * costheta + cosphi * yradius * sintheta)\n vec2.add(point, point, center)\n newpoints.push(point)\n }\n // ensure end point is precisely what user gave as parameter\n if (numsteps) newpoints.push(options.endpoint)\n }\n newpoints = points.concat(newpoints)\n const result = fromPoints({}, newpoints)\n return result\n}\n\nmodule.exports = appendArc\n","const { TAU } = require('../../maths/constants')\nconst vec2 = require('../../maths/vec2')\nconst vec3 = require('../../maths/vec2')\n\nconst appendPoints = require('./appendPoints')\nconst toPoints = require('./toPoints')\n\n/**\n * Append a series of points to the given geometry that represent a Bezier curve.\n * The Bézier curve starts at the last point in the given geometry, and ends at the last control point.\n * The other control points are intermediate control points to transition the curve from start to end points.\n * The first control point may be null to ensure a smooth transition occurs. In this case,\n * the second to last point of the given geometry is mirrored into the control points of the Bezier curve.\n * In other words, the trailing gradient of the geometry matches the new gradient of the curve.\n * @param {Object} options - options for construction\n * @param {Array} options.controlPoints - list of control points (2D) for the bezier curve\n * @param {Number} [options.segment=16] - number of segments per 360 rotation\n * @param {path2} geometry - the path of which to appended points\n * @returns {path2} a new path with the appended points\n * @alias module:modeling/geometries/path2.appendBezier\n *\n * @example\n * let p5 = path2.create({}, [[10,-20]])\n * p5 = path2.appendBezier({controlPoints: [[10,-10],[25,-10],[25,-20]]}, p5);\n * p5 = path2.appendBezier({controlPoints: [null, [25,-30],[40,-30],[40,-20]]}, p5)\n */\nconst appendBezier = (options, geometry) => {\n const defaults = {\n segments: 16\n }\n let { controlPoints, segments } = Object.assign({}, defaults, options)\n\n // validate the given options\n if (!Array.isArray(controlPoints)) throw new Error('controlPoints must be an array of one or more points')\n if (controlPoints.length < 1) throw new Error('controlPoints must be an array of one or more points')\n\n if (segments < 4) throw new Error('segments must be four or more')\n\n // validate the given geometry\n if (geometry.isClosed) {\n throw new Error('the given geometry cannot be closed')\n }\n\n const points = toPoints(geometry)\n if (points.length < 1) {\n throw new Error('the given path must contain one or more points (as the starting point for the bezier curve)')\n }\n\n // make a copy of the control points\n controlPoints = controlPoints.slice()\n\n // special handling of null control point (only first is allowed)\n const firstControlPoint = controlPoints[0]\n if (firstControlPoint === null) {\n if (controlPoints.length < 2) {\n throw new Error('a null control point must be passed with one more control points')\n }\n // special handling of a previous bezier curve\n let lastBezierControlPoint = points[points.length - 2]\n if ('lastBezierControlPoint' in geometry) {\n lastBezierControlPoint = geometry.lastBezierControlPoint\n }\n if (!Array.isArray(lastBezierControlPoint)) {\n throw new Error('the given path must contain TWO or more points if given a null control point')\n }\n // replace the first control point with the mirror of the last bezier control point\n const controlpoint = vec2.scale(vec2.create(), points[points.length - 1], 2)\n vec2.subtract(controlpoint, controlpoint, lastBezierControlPoint)\n\n controlPoints[0] = controlpoint\n }\n\n // add a control point for the previous end point\n controlPoints.unshift(points[points.length - 1])\n\n const bezierOrder = controlPoints.length - 1\n const factorials = []\n let fact = 1\n for (let i = 0; i <= bezierOrder; ++i) {\n if (i > 0) fact *= i\n factorials.push(fact)\n }\n\n const binomials = []\n for (let i = 0; i <= bezierOrder; ++i) {\n const binomial = factorials[bezierOrder] / (factorials[i] * factorials[bezierOrder - i])\n binomials.push(binomial)\n }\n\n const v0 = vec2.create()\n const v1 = vec2.create()\n const v3 = vec3.create()\n const getPointForT = (t) => {\n let tk = 1 // = pow(t,k)\n let oneMinusTNMinusK = Math.pow(1 - t, bezierOrder) // = pow( 1-t, bezierOrder - k)\n const invOneMinusT = (t !== 1) ? (1 / (1 - t)) : 1\n const point = vec2.create() // 0, 0, 0\n for (let k = 0; k <= bezierOrder; ++k) {\n if (k === bezierOrder) oneMinusTNMinusK = 1\n const bernsteinCoefficient = binomials[k] * tk * oneMinusTNMinusK\n const derivativePoint = vec2.scale(v0, controlPoints[k], bernsteinCoefficient)\n vec2.add(point, point, derivativePoint)\n tk *= t\n oneMinusTNMinusK *= invOneMinusT\n }\n return point\n }\n\n const newpoints = []\n const newpointsT = []\n const numsteps = bezierOrder + 1\n for (let i = 0; i < numsteps; ++i) {\n const t = i / (numsteps - 1)\n const point = getPointForT(t)\n newpoints.push(point)\n newpointsT.push(t)\n }\n\n // subdivide each segment until the angle at each vertex becomes small enough:\n let subdivideBase = 1\n const maxangle = TAU / segments\n const maxsinangle = Math.sin(maxangle)\n while (subdivideBase < newpoints.length - 1) {\n const dir1 = vec2.subtract(v0, newpoints[subdivideBase], newpoints[subdivideBase - 1])\n vec2.normalize(dir1, dir1)\n const dir2 = vec2.subtract(v1, newpoints[subdivideBase + 1], newpoints[subdivideBase])\n vec2.normalize(dir2, dir2)\n const sinangle = vec2.cross(v3, dir1, dir2) // the sine of the angle\n if (Math.abs(sinangle[2]) > maxsinangle) {\n // angle is too big, we need to subdivide\n const t0 = newpointsT[subdivideBase - 1]\n const t1 = newpointsT[subdivideBase + 1]\n const newt0 = t0 + (t1 - t0) * 1 / 3\n const newt1 = t0 + (t1 - t0) * 2 / 3\n const point0 = getPointForT(newt0)\n const point1 = getPointForT(newt1)\n // remove the point at subdivideBase and replace with 2 new points:\n newpoints.splice(subdivideBase, 1, point0, point1)\n newpointsT.splice(subdivideBase, 1, newt0, newt1)\n // re - evaluate the angles, starting at the previous junction since it has changed:\n subdivideBase--\n if (subdivideBase < 1) subdivideBase = 1\n } else {\n ++subdivideBase\n }\n }\n\n // append to the new points to the given path\n // but skip the first new point because it is identical to the last point in the given path\n newpoints.shift()\n const result = appendPoints(newpoints, geometry)\n result.lastBezierControlPoint = controlPoints[controlPoints.length - 2]\n return result\n}\n\nmodule.exports = appendBezier\n","const concat = require('./concat')\nconst create = require('./create')\n\n/**\n * Append the given list of points to the end of the given geometry.\n * @param {Array} points - the points (2D) to append to the given path\n * @param {path2} geometry - the given path\n * @returns {path2} a new path with the appended points\n * @alias module:modeling/geometries/path2.appendPoints\n * @example\n * let newpath = appendPoints([[3, 4], [4, 5]], oldpath)\n */\nconst appendPoints = (points, geometry) => concat(geometry, create(points))\n\nmodule.exports = appendPoints\n","const mat4 = require('../../maths/mat4')\nconst vec2 = require('../../maths/vec2')\n\n/*\n * Apply the transforms of the given geometry.\n * NOTE: This function must be called BEFORE exposing any data. See toPoints.\n * @param {path} geometry - the geometry to transform\n * @returns {path} the given geometry\n * @example\n * geometry = applyTransforms(geometry)\n */\nconst applyTransforms = (geometry) => {\n if (mat4.isIdentity(geometry.transforms)) return geometry\n\n geometry.points = geometry.points.map((point) => vec2.transform(vec2.create(), point, geometry.transforms))\n geometry.transforms = mat4.create()\n return geometry\n}\n\nmodule.exports = applyTransforms\n","/**\n * Performs a shallow clone of the give geometry.\n * @param {path2} geometry - the geometry to clone\n * @returns {path2} a new path\n * @alias module:modeling/geometries/path2.clone\n */\nconst clone = (geometry) => Object.assign({}, geometry)\n\nmodule.exports = clone\n","const { EPS } = require('../../maths/constants')\n\nconst vec2 = require('../../maths/vec2')\n\nconst clone = require('./clone')\n\n/**\n * Close the given geometry.\n * @param {path2} geometry - the path to close\n * @returns {path2} a new path\n * @alias module:modeling/geometries/path2.close\n */\nconst close = (geometry) => {\n if (geometry.isClosed) return geometry\n\n const cloned = clone(geometry)\n cloned.isClosed = true\n\n if (cloned.points.length > 1) {\n // make sure the paths are formed properly\n const points = cloned.points\n const p0 = points[0]\n let pn = points[points.length - 1]\n while (vec2.distance(p0, pn) < (EPS * EPS)) {\n points.pop()\n if (points.length === 1) break\n pn = points[points.length - 1]\n }\n }\n return cloned\n}\n\nmodule.exports = close\n","const fromPoints = require('./fromPoints')\nconst toPoints = require('./toPoints')\n\nconst { equals } = require('../../maths/vec2')\n\n/**\n * Concatenate the given paths.\n *\n * If both contain the same point at the junction, merge it into one.\n * A concatenation of zero paths is an empty, open path.\n * A concatenation of one closed path to a series of open paths produces a closed path.\n * A concatenation of a path to a closed path is an error.\n * @param {...path2} paths - the paths to concatenate\n * @returns {path2} a new path\n * @alias module:modeling/geometries/path2.concat\n *\n * @example\n * let newpath = concat(fromPoints({}, [[1, 2]]), fromPoints({}, [[3, 4]]))\n */\nconst concat = (...paths) => {\n // Only the last path can be closed, producing a closed path.\n let isClosed = false\n let newpoints = []\n paths.forEach((path, i) => {\n const tmp = toPoints(path).slice()\n if (newpoints.length > 0 && tmp.length > 0 && equals(tmp[0], newpoints[newpoints.length - 1])) tmp.shift()\n if (tmp.length > 0 && isClosed) {\n throw new Error(`Cannot concatenate to a closed path; check the ${i}th path`)\n }\n isClosed = path.isClosed\n newpoints = newpoints.concat(tmp)\n })\n return fromPoints({ closed: isClosed }, newpoints)\n}\n\nmodule.exports = concat\n","const mat4 = require('../../maths/mat4')\n\n/**\n * Represents a 2D geometry consisting of a list of ordered points.\n * @typedef {Object} path2\n * @property {Array} points - list of ordered points\n * @property {Boolean} isClosed - true if the path is closed where start and end points are the same\n * @property {mat4} transforms - transforms to apply to the points, see transform()\n */\n\n/**\n * Create an empty, open path.\n * @returns {path2} a new path\n * @alias module:modeling/geometries/path2.create\n *\n * @example\n * let newpath = create()\n */\nconst create = (points) => {\n if (points === undefined) {\n points = []\n }\n return {\n points: points,\n isClosed: false,\n transforms: mat4.create()\n }\n}\n\nmodule.exports = create\n","const vec2 = require('../../maths/vec2')\n\nconst toPoints = require('./toPoints')\n\n/**\n * Determine if the given paths are equal.\n * For closed paths, this includes equality under point order rotation.\n * @param {path2} a - the first path to compare\n * @param {path2} b - the second path to compare\n * @returns {Boolean}\n * @alias module:modeling/geometries/path2.equals\n */\nconst equals = (a, b) => {\n if (a.isClosed !== b.isClosed) {\n return false\n }\n if (a.points.length !== b.points.length) {\n return false\n }\n\n const apoints = toPoints(a)\n const bpoints = toPoints(b)\n\n // closed paths might be equal under graph rotation\n // so try comparison by rotating across all points\n const length = apoints.length\n let offset = 0\n do {\n let unequal = false\n for (let i = 0; i < length; i++) {\n if (!vec2.equals(apoints[i], bpoints[(i + offset) % length])) {\n unequal = true\n break\n }\n }\n if (unequal === false) {\n return true\n }\n // unequal open paths should only be compared once, never rotated\n if (!a.isClosed) {\n return false\n }\n } while (++offset < length)\n return false\n}\n\nmodule.exports = equals\n","const mat4 = require('../../maths/mat4')\nconst vec2 = require('../../maths/vec2')\n\nconst create = require('./create')\n\n/**\n * Create a new path from the given compact binary data.\n * @param {TypedArray} data - compact binary data\n * @returns {path2} a new path\n * @alias module:modeling/geometries/path2.fromCompactBinary\n */\nconst fromCompactBinary = (data) => {\n if (data[0] !== 2) throw new Error('invalid compact binary data')\n\n const created = create()\n\n created.transforms = mat4.clone(data.slice(1, 17))\n\n created.isClosed = !!data[17]\n\n for (let i = 22; i < data.length; i += 2) {\n const point = vec2.fromValues(data[i], data[i + 1])\n created.points.push(point)\n }\n // transfer known properties, i.e. color\n if (data[18] >= 0) {\n created.color = [data[18], data[19], data[20], data[21]]\n }\n // TODO: how about custom properties or fields ?\n return created\n}\n\nmodule.exports = fromCompactBinary\n","const { EPS } = require('../../maths/constants')\n\nconst vec2 = require('../../maths/vec2')\n\nconst close = require('./close')\nconst create = require('./create')\n\n/**\n * Create a new path from the given points.\n * The points must be provided an array of points,\n * where each point is an array of two numbers.\n * @param {Object} options - options for construction\n * @param {Boolean} [options.closed=false] - if the path should be open or closed\n * @param {Array} points - array of points (2D) from which to create the path\n * @returns {path2} a new path\n * @alias module:modeling/geometries/path2.fromPoints\n *\n * @example:\n * my newpath = fromPoints({closed: true}, [[10, 10], [-10, 10]])\n */\nconst fromPoints = (options, points) => {\n const defaults = { closed: false }\n let { closed } = Object.assign({}, defaults, options)\n\n let created = create()\n created.points = points.map((point) => vec2.clone(point))\n\n // check if first and last points are equal\n if (created.points.length > 1) {\n const p0 = created.points[0]\n const pn = created.points[created.points.length - 1]\n if (vec2.distance(p0, pn) < (EPS * EPS)) {\n // and close automatically\n closed = true\n }\n }\n if (closed === true) created = close(created)\n\n return created\n}\n\nmodule.exports = fromPoints\n","/**\n * Represents a 2D geometry consisting of a list of ordered points.\n * @see {@link path2} for data structure information.\n * @module modeling/geometries/path2\n *\n * @example\n * colorize([0,0,0,1], path2.fromPoints({ closed: true }, [[0,0], [4,0], [4,3]]))\n *\n * @example\n * {\n * \"points\": [[0,0], [4,0], [4,3]],\n * \"isClosed\": true,\n * \"transforms\": [1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],\n * \"color\": [0,0,0,1]\n * }\n */\nmodule.exports = {\n appendArc: require('./appendArc'),\n appendBezier: require('./appendBezier'),\n appendPoints: require('./appendPoints'),\n clone: require('./clone'),\n close: require('./close'),\n concat: require('./concat'),\n create: require('./create'),\n equals: require('./equals'),\n fromPoints: require('./fromPoints'),\n fromCompactBinary: require('./fromCompactBinary'),\n isA: require('./isA'),\n reverse: require('./reverse'),\n toPoints: require('./toPoints'),\n toString: require('./toString'),\n toCompactBinary: require('./toCompactBinary'),\n transform: require('./transform'),\n validate: require('./validate')\n}\n","/**\n * Determine if the given object is a path2 geometry.\n * @param {Object} object - the object to interrogate\n * @returns {Boolean} true if the object matches a path2\n * @alias module:modeling/geometries/path2.isA\n */\nconst isA = (object) => {\n if (object && typeof object === 'object') {\n // see create for the required attributes and types\n if ('points' in object && 'transforms' in object && 'isClosed' in object) {\n // NOTE: transforms should be a TypedArray, which has a read-only length\n if (Array.isArray(object.points) && 'length' in object.transforms) {\n return true\n }\n }\n }\n return false\n}\n\nmodule.exports = isA\n","const clone = require('./clone')\n\n/**\n * Reverses the path so that the points are in the opposite order.\n * This swaps the left (interior) and right (exterior) edges.\n * @param {path2} geometry - the path to reverse\n * @returns {path2} a new path\n * @alias module:modeling/geometries/path2.reverse\n *\n * @example\n * let newpath = reverse(mypath)\n */\nconst reverse = (geometry) => {\n // NOTE: this only updates the order of the points\n const cloned = clone(geometry)\n cloned.points = geometry.points.slice().reverse()\n return cloned\n}\n\nmodule.exports = reverse\n","/**\n * Produce a compact binary representation from the given path.\n * @param {path2} geometry - the path geometry\n * @returns {TypedArray} compact binary representation\n * @alias module:modeling/geometries/path2.toCompactBinary\n */\nconst toCompactBinary = (geometry) => {\n const points = geometry.points\n const transforms = geometry.transforms\n let color = [-1, -1, -1, -1]\n if (geometry.color) color = geometry.color\n\n // FIXME why Float32Array?\n const compacted = new Float32Array(1 + 16 + 1 + 4 + (points.length * 2)) // type + transforms + isClosed + color + points data\n\n compacted[0] = 2 // type code: 0 => geom2, 1 => geom3 , 2 => path2\n\n compacted[1] = transforms[0]\n compacted[2] = transforms[1]\n compacted[3] = transforms[2]\n compacted[4] = transforms[3]\n compacted[5] = transforms[4]\n compacted[6] = transforms[5]\n compacted[7] = transforms[6]\n compacted[8] = transforms[7]\n compacted[9] = transforms[8]\n compacted[10] = transforms[9]\n compacted[11] = transforms[10]\n compacted[12] = transforms[11]\n compacted[13] = transforms[12]\n compacted[14] = transforms[13]\n compacted[15] = transforms[14]\n compacted[16] = transforms[15]\n\n compacted[17] = geometry.isClosed ? 1 : 0\n\n compacted[18] = color[0]\n compacted[19] = color[1]\n compacted[20] = color[2]\n compacted[21] = color[3]\n\n for (let j = 0; j < points.length; j++) {\n const ci = j * 2 + 22\n const point = points[j]\n compacted[ci] = point[0]\n compacted[ci + 1] = point[1]\n }\n // TODO: how about custom properties or fields ?\n return compacted\n}\n\nmodule.exports = toCompactBinary\n","const applyTransforms = require('./applyTransforms')\n\n/**\n * Produces an array of points from the given geometry.\n * The returned array should not be modified as the data is shared with the geometry.\n * @param {path2} geometry - the geometry\n * @returns {Array} an array of points\n * @alias module:modeling/geometries/path2.toPoints\n *\n * @example\n * let sharedpoints = toPoints(geometry)\n */\nconst toPoints = (geometry) => applyTransforms(geometry).points\n\nmodule.exports = toPoints\n","const vec2 = require('../../maths/vec2')\n\nconst toPoints = require('./toPoints')\n\n/**\n * Create a string representing the contents of the given path.\n * @param {path2} geometry - the path\n * @returns {String} a representative string\n * @alias module:modeling/geometries/path2.toString\n *\n * @example\n * console.out(toString(path))\n */\nconst toString = (geometry) => {\n const points = toPoints(geometry)\n let result = 'path (' + points.length + ' points, ' + geometry.isClosed + '):\\n[\\n'\n points.forEach((point) => {\n result += ' ' + vec2.toString(point) + ',\\n'\n })\n result += ']\\n'\n return result\n}\n\nmodule.exports = toString\n","const mat4 = require('../../maths/mat4')\n\n/**\n * Transform the given geometry using the given matrix.\n * This is a lazy transform of the points, as this function only adjusts the transforms.\n * The transforms are applied when accessing the points via toPoints().\n * @param {mat4} matrix - the matrix to transform with\n * @param {path2} geometry - the geometry to transform\n * @returns {path2} a new path\n * @alias module:modeling/geometries/path2.transform\n *\n * @example\n * let newpath = transform(fromZRotation(TAU / 8), path)\n */\nconst transform = (matrix, geometry) => {\n const transforms = mat4.multiply(mat4.create(), matrix, geometry.transforms)\n return Object.assign({}, geometry, { transforms })\n}\n\nmodule.exports = transform\n","const vec2 = require('../../maths/vec2')\nconst isA = require('./isA')\n\n/**\n * Determine if the given object is a valid path2.\n * Checks for valid data points, and duplicate points.\n *\n * **If the geometry is not valid, an exception will be thrown with details of the geometry error.**\n *\n * @param {Object} object - the object to interrogate\n * @throws {Error} error if the geometry is not valid\n * @alias module:modeling/geometries/path2.validate\n */\nconst validate = (object) => {\n if (!isA(object)) {\n throw new Error('invalid path2 structure')\n }\n\n // check for duplicate points\n if (object.points.length > 1) {\n for (let i = 0; i < object.points.length; i++) {\n if (vec2.equals(object.points[i], object.points[(i + 1) % object.points.length])) {\n throw new Error(`path2 duplicate points ${object.points[i]}`)\n }\n }\n }\n\n // check for infinity, nan\n object.points.forEach((point) => {\n if (!point.every(Number.isFinite)) {\n throw new Error(`path2 invalid point ${point}`)\n }\n })\n\n // check transforms\n if (!object.transforms.every(Number.isFinite)) {\n throw new Error(`path2 invalid transforms ${object.transforms}`)\n }\n}\n\nmodule.exports = validate\n","const measureArea = require('./measureArea')\nconst flip = require('./flip')\n\n/**\n * Determine if the given points are inside the given polygon.\n *\n * @param {Array} points - a list of points, where each point is an array with X and Y values\n * @param {poly2} polygon - a 2D polygon\n * @return {Integer} 1 if all points are inside, 0 if some or none are inside\n * @alias module:modeling/geometries/poly2.arePointsInside\n */\nconst arePointsInside = (points, polygon) => {\n if (points.length === 0) return 0 // nothing to check\n\n const vertices = polygon.vertices\n if (vertices.length < 3) return 0 // nothing can be inside an empty polygon\n\n if (measureArea(polygon) < 0) {\n polygon = flip(polygon) // CCW is required\n }\n\n const sum = points.reduce((acc, point) => acc + isPointInside(point, vertices), 0)\n return sum === points.length ? 1 : 0\n}\n\n/*\n * Determine if the given point is inside the polygon.\n *\n * @see http://erich.realtimerendering.com/ptinpoly/ (Crossings Test)\n * @param {Array} point - an array with X and Y values\n * @param {Array} polygon - a list of points, where each point is an array with X and Y values\n * @return {Integer} 1 if the point is inside, 0 if outside\n */\nconst isPointInside = (point, polygon) => {\n const numverts = polygon.length\n\n const tx = point[0]\n const ty = point[1]\n\n let vtx0 = polygon[numverts - 1]\n let vtx1 = polygon[0]\n\n let yflag0 = (vtx0[1] > ty)\n\n let insideFlag = 0\n\n let i = 0\n for (let j = (numverts + 1); --j;) {\n /*\n * check if Y endpoints straddle (are on opposite sides) of point's Y\n * if so, +X ray could intersect this edge.\n */\n const yflag1 = (vtx1[1] > ty)\n if (yflag0 !== yflag1) {\n /*\n * check if X endpoints are on same side of the point's X\n * if so, it's easy to test if edge hits or misses.\n */\n const xflag0 = (vtx0[0] > tx)\n const xflag1 = (vtx1[0] > tx)\n if (xflag0 && xflag1) {\n /* if edge's X values are both right of the point, then the point must be inside */\n insideFlag = !insideFlag\n } else {\n /*\n * if X endpoints straddle the point, then\n * the compute intersection of polygon edge with +X ray\n * if intersection >= point's X then the +X ray hits it.\n */\n if ((vtx1[0] - (vtx1[1] - ty) * (vtx0[0] - vtx1[0]) / (vtx0[1] - vtx1[1])) >= tx) {\n insideFlag = !insideFlag\n }\n }\n }\n /* move to next pair of vertices, retaining info as possible */\n yflag0 = yflag1\n vtx0 = vtx1\n vtx1 = polygon[++i]\n }\n return insideFlag\n}\n\nmodule.exports = arePointsInside\n","/**\n * Represents a convex 2D polygon consisting of a list of ordered vertices.\n * @typedef {Object} poly2\n * @property {Array} vertices - list of ordered vertices (2D)\n */\n\n/**\n * Creates a new polygon with initial values.\n *\n * @param {Array} [vertices] - list of vertices (2D)\n * @returns {poly2} a new polygon\n * @alias module:modeling/geometries/poly2.create\n *\n * @example\n * let polygon = create()\n */\nconst create = (vertices) => {\n if (vertices === undefined || vertices.length < 3) {\n vertices = [] // empty contents\n }\n return { vertices: vertices }\n}\n\nmodule.exports = create\n","const create = require('./create')\n\n/**\n * Flip the give polygon, rotating the opposite direction.\n *\n * @param {poly2} polygon - the polygon to flip\n * @returns {poly2} a new polygon\n * @alias module:modeling/geometries/poly2.flip\n */\nconst flip = (polygon) => {\n const vertices = polygon.vertices.slice().reverse()\n return create(vertices)\n}\n\nmodule.exports = flip\n","/**\n * Represents a 2D polygon consisting of a list of ordered vertices.\n * @see {@link poly2} for data structure information.\n * @module modeling/geometries/poly2\n *\n * @example\n * poly2.create([[0,0], [4,0], [4,3]])\n *\n * @example\n * {\"vertices\": [[0,0], [4,0], [4,3]]}\n */\nmodule.exports = {\n arePointsInside: require('./arePointsInside'),\n create: require('./create'),\n flip: require('./flip'),\n measureArea: require('./measureArea')\n}\n","/**\n * Measure the area under the given polygon.\n *\n * @param {poly2} polygon - the polygon to measure\n * @return {Number} the area of the polygon\n * @alias module:modeling/geometries/poly2.measureArea\n */\nconst area = require('../../maths/utils/area')\n\nconst measureArea = (polygon) => area(polygon.vertices)\n\nmodule.exports = measureArea\n","const create = require('./create')\n\nconst vec3 = require('../../maths/vec3')\n\n/**\n * Create a deep clone of the given polygon\n *\n * @param {poly3} [out] - receiving polygon\n * @param {poly3} polygon - polygon to clone\n * @returns {poly3} a new polygon\n * @alias module:modeling/geometries/poly3.clone\n */\nconst clone = (...params) => {\n let out\n let poly3\n if (params.length === 1) {\n out = create()\n poly3 = params[0]\n } else {\n out = params[0]\n poly3 = params[1]\n }\n // deep clone of vertices\n out.vertices = poly3.vertices.map((vec) => vec3.clone(vec))\n return out\n}\n\nmodule.exports = clone\n","\n/**\n * Represents a convex 3D polygon. The vertices used to initialize a polygon must\n * be coplanar and form a convex shape. The vertices do not have to be `vec3`\n * instances but they must behave similarly.\n * @typedef {Object} poly3\n * @property {Array} vertices - list of ordered vertices (3D)\n */\n\n/**\n * Creates a new 3D polygon with initial values.\n *\n * @param {Array} [vertices] - a list of vertices (3D)\n * @returns {poly3} a new polygon\n * @alias module:modeling/geometries/poly3.create\n */\nconst create = (vertices) => {\n if (vertices === undefined || vertices.length < 3) {\n vertices = [] // empty contents\n }\n return { vertices }\n}\n\nmodule.exports = create\n","const vec3 = require('../../maths/vec3')\n\nconst create = require('./create')\n\n/**\n * Create a polygon from the given points.\n *\n * @param {Array} points - list of points (3D)\n * @returns {poly3} a new polygon\n * @alias module:modeling/geometries/poly3.fromPoints\n *\n * @example\n * const points = [\n * [0, 0, 0],\n * [0, 10, 0],\n * [0, 10, 10]\n * ]\n * const polygon = fromPoints(points)\n */\nconst fromPoints = (points) => {\n const vertices = points.map((point) => vec3.clone(point))\n return create(vertices)\n}\n\nmodule.exports = fromPoints\n","const create = require('./create')\n\n/**\n * Create a polygon from the given vertices and plane.\n * NOTE: No checks are performed on the parameters.\n * @param {Array} vertices - list of vertices (3D)\n * @param {plane} plane - plane of the polygon\n * @returns {poly3} a new polygon\n * @alias module:modeling/geometries/poly3.fromPointsAndPlane\n */\nconst fromPointsAndPlane = (vertices, plane) => {\n const poly = create(vertices)\n poly.plane = plane // retain the plane for later use\n return poly\n}\n\nmodule.exports = fromPointsAndPlane\n","/**\n * Represents a convex 3D polygon consisting of a list of ordered vertices.\n * @see {@link poly3} for data structure information.\n * @module modeling/geometries/poly3\n *\n * @example\n * poly3.create([[0,0,0], [4,0,0], [4,3,12]])\n *\n * @example\n * {\"vertices\": [[0,0,0], [4,0,0], [4,3,12]]}\n */\nmodule.exports = {\n clone: require('./clone'),\n create: require('./create'),\n fromPoints: require('./fromPoints'),\n fromPointsAndPlane: require('./fromPointsAndPlane'),\n invert: require('./invert'),\n isA: require('./isA'),\n isConvex: require('./isConvex'),\n measureArea: require('./measureArea'),\n measureBoundingBox: require('./measureBoundingBox'),\n measureBoundingSphere: require('./measureBoundingSphere'),\n measureSignedVolume: require('./measureSignedVolume'),\n plane: require('./plane'),\n toPoints: require('./toPoints'),\n toString: require('./toString'),\n transform: require('./transform'),\n validate: require('./validate')\n}\n","const plane = require('../../maths/plane')\nconst create = require('./create')\n\n/**\n * Invert the give polygon to face the opposite direction.\n *\n * @param {poly3} polygon - the polygon to invert\n * @returns {poly3} a new poly3\n * @alias module:modeling/geometries/poly3.invert\n */\nconst invert = (polygon) => {\n const vertices = polygon.vertices.slice().reverse()\n const inverted = create(vertices)\n if (polygon.plane) {\n // Flip existing plane to save recompute\n inverted.plane = plane.flip(plane.create(), polygon.plane)\n }\n return inverted\n}\n\nmodule.exports = invert\n","/**\n * Determine if the given object is a polygon.\n * @param {Object} object - the object to interrogate\n * @returns {Boolean} true if the object matches a poly3\n * @alias module:modeling/geometries/poly3.isA\n */\nconst isA = (object) => {\n if (object && typeof object === 'object') {\n if ('vertices' in object) {\n if (Array.isArray(object.vertices)) {\n return true\n }\n }\n }\n return false\n}\n\nmodule.exports = isA\n","const plane = require('../../maths/plane')\nconst vec3 = require('../../maths/vec3')\n\n/**\n * Check whether the given polygon is convex.\n * @param {poly3} polygon - the polygon to interrogate\n * @returns {Boolean} true if convex\n * @alias module:modeling/geometries/poly3.isConvex\n */\nconst isConvex = (polygon) => areVerticesConvex(polygon.vertices)\n\nconst areVerticesConvex = (vertices) => {\n const numvertices = vertices.length\n if (numvertices > 2) {\n // note: plane ~= normal point\n const normal = plane.fromPoints(plane.create(), ...vertices)\n let prevprevpos = vertices[numvertices - 2]\n let prevpos = vertices[numvertices - 1]\n for (let i = 0; i < numvertices; i++) {\n const pos = vertices[i]\n if (!isConvexPoint(prevprevpos, prevpos, pos, normal)) {\n return false\n }\n prevprevpos = prevpos\n prevpos = pos\n }\n }\n return true\n}\n\n// calculate whether three points form a convex corner\n// prevpoint, point, nextpoint: the 3 coordinates (Vector3D instances)\n// normal: the normal vector of the plane\nconst isConvexPoint = (prevpoint, point, nextpoint, normal) => {\n const crossproduct = vec3.cross(\n vec3.create(),\n vec3.subtract(vec3.create(), point, prevpoint),\n vec3.subtract(vec3.create(), nextpoint, point)\n )\n const crossdotnormal = vec3.dot(crossproduct, normal)\n return crossdotnormal >= 0\n}\n\nmodule.exports = isConvex\n","const plane = require('./plane')\n\n/**\n * Measure the area of the given polygon.\n * @see 2000 softSurfer http://geomalgorithms.com\n * @param {poly3} polygon - the polygon to measure\n * @return {Number} area of the polygon\n * @alias module:modeling/geometries/poly3.measureArea\n */\nconst measureArea = (polygon) => {\n const n = polygon.vertices.length\n if (n < 3) {\n return 0 // degenerate polygon\n }\n const vertices = polygon.vertices\n\n // calculate a normal vector\n const normal = plane(polygon)\n\n // determine direction of projection\n const ax = Math.abs(normal[0])\n const ay = Math.abs(normal[1])\n const az = Math.abs(normal[2])\n\n if (ax + ay + az === 0) {\n // normal does not exist\n return 0\n }\n\n let coord = 3 // ignore Z coordinates\n if ((ax > ay) && (ax > az)) {\n coord = 1 // ignore X coordinates\n } else\n if (ay > az) {\n coord = 2 // ignore Y coordinates\n }\n\n let area = 0\n let h = 0\n let i = 1\n let j = 2\n switch (coord) {\n case 1: // ignore X coordinates\n // compute area of 2D projection\n for (i = 1; i < n; i++) {\n h = i - 1\n j = (i + 1) % n\n area += (vertices[i][1] * (vertices[j][2] - vertices[h][2]))\n }\n area += (vertices[0][1] * (vertices[1][2] - vertices[n - 1][2]))\n // scale to get area\n area /= (2 * normal[0])\n break\n\n case 2: // ignore Y coordinates\n // compute area of 2D projection\n for (i = 1; i < n; i++) {\n h = i - 1\n j = (i + 1) % n\n area += (vertices[i][2] * (vertices[j][0] - vertices[h][0]))\n }\n area += (vertices[0][2] * (vertices[1][0] - vertices[n - 1][0]))\n // scale to get area\n area /= (2 * normal[1])\n break\n\n case 3: // ignore Z coordinates\n default:\n // compute area of 2D projection\n for (i = 1; i < n; i++) {\n h = i - 1\n j = (i + 1) % n\n area += (vertices[i][0] * (vertices[j][1] - vertices[h][1]))\n }\n area += (vertices[0][0] * (vertices[1][1] - vertices[n - 1][1]))\n // scale to get area\n area /= (2 * normal[2])\n break\n }\n return area\n}\n\nmodule.exports = measureArea\n","const vec3 = require('../../maths/vec3')\n\n/**\n * @param {poly3} polygon - the polygon to measure\n * @returns {Array} an array of two vectors (3D); minimum and maximum coordinates\n * @alias module:modeling/geometries/poly3.measureBoundingBox\n */\nconst measureBoundingBox = (polygon) => {\n const vertices = polygon.vertices\n const numvertices = vertices.length\n const min = numvertices === 0 ? vec3.create() : vec3.clone(vertices[0])\n const max = vec3.clone(min)\n for (let i = 1; i < numvertices; i++) {\n vec3.min(min, min, vertices[i])\n vec3.max(max, max, vertices[i])\n }\n return [min, max]\n}\n\nmodule.exports = measureBoundingBox\n","const vec4 = require('../../maths/vec4')\n\nconst cache = new WeakMap()\n\n/**\n * Measure the bounding sphere of the given polygon.\n * @param {poly3} polygon - the polygon to measure\n * @returns {vec4} the computed bounding sphere; center point (3D) and radius\n * @alias module:modeling/geometries/poly3.measureBoundingSphere\n */\nconst measureBoundingSphere = (polygon) => {\n const boundingSphere = cache.get(polygon)\n if (boundingSphere) return boundingSphere\n\n const vertices = polygon.vertices\n const out = vec4.create()\n\n if (vertices.length === 0) {\n out[0] = 0\n out[1] = 0\n out[2] = 0\n out[3] = 0\n return out\n }\n\n // keep a list of min/max vertices by axis\n let minx = vertices[0]\n let miny = minx\n let minz = minx\n let maxx = minx\n let maxy = minx\n let maxz = minx\n\n vertices.forEach((v) => {\n if (minx[0] > v[0]) minx = v\n if (miny[1] > v[1]) miny = v\n if (minz[2] > v[2]) minz = v\n if (maxx[0] < v[0]) maxx = v\n if (maxy[1] < v[1]) maxy = v\n if (maxz[2] < v[2]) maxz = v\n })\n\n out[0] = (minx[0] + maxx[0]) * 0.5 // center of sphere\n out[1] = (miny[1] + maxy[1]) * 0.5\n out[2] = (minz[2] + maxz[2]) * 0.5\n const x = out[0] - maxx[0]\n const y = out[1] - maxy[1]\n const z = out[2] - maxz[2]\n out[3] = Math.sqrt(x * x + y * y + z * z) // radius of sphere\n\n cache.set(polygon, out)\n\n return out\n}\n\nmodule.exports = measureBoundingSphere\n","const vec3 = require('../../maths/vec3')\n\n/**\n * Measure the signed volume of the given polygon, which must be convex.\n * The volume is that formed by the tetrahedron connected to the axis [0,0,0],\n * and will be positive or negative based on the rotation of the vertices.\n * @see http://chenlab.ece.cornell.edu/Publication/Cha/icip01_Cha.pdf\n * @param {poly3} polygon - the polygon to measure\n * @return {Number} volume of the polygon\n * @alias module:modeling/geometries/poly3.measureSignedVolume\n */\nconst measureSignedVolume = (polygon) => {\n let signedVolume = 0\n const vertices = polygon.vertices\n // calculate based on triangular polygons\n const cross = vec3.create()\n for (let i = 0; i < vertices.length - 2; i++) {\n vec3.cross(cross, vertices[i + 1], vertices[i + 2])\n signedVolume += vec3.dot(vertices[0], cross)\n }\n signedVolume /= 6\n return signedVolume\n}\n\nmodule.exports = measureSignedVolume\n","const mplane = require('../../maths/plane/')\n\nconst plane = (polygon) => {\n if (!polygon.plane) {\n polygon.plane = mplane.fromPoints(mplane.create(), ...polygon.vertices)\n }\n return polygon.plane\n}\n\nmodule.exports = plane\n","/**\n * Return the given polygon as a list of points.\n * NOTE: The returned array should not be modified as the points are shared with the geometry.\n * @param {poly3} polygon - the polygon\n * @return {Array} list of points (3D)\n * @alias module:modeling/geometries/poly3.toPoints\n */\nconst toPoints = (polygon) => polygon.vertices\n\nmodule.exports = toPoints\n","const vec3 = require('../../maths/vec3/')\n\n/**\n * @param {poly3} polygon - the polygon to measure\n * @return {String} the string representation\n * @alias module:modeling/geometries/poly3.toString\n */\nconst toString = (polygon) => {\n let result = 'poly3: vertices: ['\n polygon.vertices.forEach((vertex) => {\n result += `${vec3.toString(vertex)}, `\n })\n result += ']'\n return result\n}\n\nmodule.exports = toString\n","const mat4 = require('../../maths/mat4')\nconst vec3 = require('../../maths/vec3')\n\nconst create = require('./create')\n\n/**\n * Transform the given polygon using the given matrix.\n * @param {mat4} matrix - the matrix to transform with\n * @param {poly3} polygon - the polygon to transform\n * @returns {poly3} a new polygon\n * @alias module:modeling/geometries/poly3.transform\n */\nconst transform = (matrix, polygon) => {\n const vertices = polygon.vertices.map((vertex) => vec3.transform(vec3.create(), vertex, matrix))\n if (mat4.isMirroring(matrix)) {\n // reverse the order to preserve the orientation\n vertices.reverse()\n }\n return create(vertices)\n}\n\nmodule.exports = transform\n","const signedDistanceToPoint = require('../../maths/plane/signedDistanceToPoint')\nconst { NEPS } = require('../../maths/constants')\nconst vec3 = require('../../maths/vec3')\nconst isA = require('./isA')\nconst isConvex = require('./isConvex')\nconst measureArea = require('./measureArea')\nconst plane = require('./plane')\n\n/**\n * Determine if the given object is a valid polygon.\n * Checks for valid data structure, convex polygons, and duplicate points.\n *\n * **If the geometry is not valid, an exception will be thrown with details of the geometry error.**\n *\n * @param {Object} object - the object to interrogate\n * @throws {Error} error if the geometry is not valid\n * @alias module:modeling/geometries/poly3.validate\n */\nconst validate = (object) => {\n if (!isA(object)) {\n throw new Error('invalid poly3 structure')\n }\n\n // check for empty polygon\n if (object.vertices.length < 3) {\n throw new Error(`poly3 not enough vertices ${object.vertices.length}`)\n }\n // check area\n if (measureArea(object) <= 0) {\n throw new Error('poly3 area must be greater than zero')\n }\n\n // check for duplicate points\n for (let i = 0; i < object.vertices.length; i++) {\n if (vec3.equals(object.vertices[i], object.vertices[(i + 1) % object.vertices.length])) {\n throw new Error(`poly3 duplicate vertex ${object.vertices[i]}`)\n }\n }\n\n // check convexity\n if (!isConvex(object)) {\n throw new Error('poly3 must be convex')\n }\n\n // check for infinity, nan\n object.vertices.forEach((vertex) => {\n if (!vertex.every(Number.isFinite)) {\n throw new Error(`poly3 invalid vertex ${vertex}`)\n }\n })\n\n // check that points are co-planar\n if (object.vertices.length > 3) {\n const normal = plane(object)\n object.vertices.forEach((vertex) => {\n const dist = Math.abs(signedDistanceToPoint(normal, vertex))\n if (dist > NEPS) {\n throw new Error(`poly3 must be coplanar: vertex ${vertex} distance ${dist}`)\n }\n })\n }\n}\n\nmodule.exports = validate\n","module.exports = {\n colors: require('./colors'),\n curves: require('./curves'),\n geometries: require('./geometries'),\n maths: require('./maths'),\n measurements: require('./measurements'),\n primitives: require('./primitives'),\n text: require('./text'),\n utils: require('./utils'),\n\n booleans: require('./operations/booleans'),\n expansions: require('./operations/expansions'),\n extrusions: require('./operations/extrusions'),\n hulls: require('./operations/hulls'),\n modifiers: require('./operations/modifiers'),\n transforms: require('./operations/transforms')\n}\n","const mat4 = require('./mat4')\n\nconst vec2 = require('./vec2')\nconst vec3 = require('./vec3')\n\n/*\n * Class OrthoNormalBasis\n * Reprojects points on a 3D plane onto a 2D plane\n * or from a 2D plane back onto the 3D plane\n * @param {plane} plane\n * @param {vec3} rightvector\n */\nconst OrthoNormalBasis = function (plane, rightvector) {\n if (arguments.length < 2) {\n // choose an arbitrary right hand vector, making sure it is somewhat orthogonal to the plane normal:\n rightvector = vec3.orthogonal(vec3.create(), plane)\n }\n this.v = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), plane, rightvector))\n this.u = vec3.cross(vec3.create(), this.v, plane)\n this.plane = plane\n this.planeorigin = vec3.scale(vec3.create(), plane, plane[3])\n}\n\n// Get an orthonormal basis for the standard XYZ planes.\n// Parameters: the names of two 3D axes. The 2d x axis will map to the first given 3D axis, the 2d y\n// axis will map to the second.\n// Prepend the axis with a \"-\" to invert the direction of this axis.\n// For example: OrthoNormalBasis.GetCartesian(\"-Y\",\"Z\")\n// will return an orthonormal basis where the 2d X axis maps to the 3D inverted Y axis, and\n// the 2d Y axis maps to the 3D Z axis.\nOrthoNormalBasis.GetCartesian = function (xaxisid, yaxisid) {\n const axisid = xaxisid + '/' + yaxisid\n let planenormal, rightvector\n if (axisid === 'X/Y') {\n planenormal = [0, 0, 1]\n rightvector = [1, 0, 0]\n } else if (axisid === 'Y/-X') {\n planenormal = [0, 0, 1]\n rightvector = [0, 1, 0]\n } else if (axisid === '-X/-Y') {\n planenormal = [0, 0, 1]\n rightvector = [-1, 0, 0]\n } else if (axisid === '-Y/X') {\n planenormal = [0, 0, 1]\n rightvector = [0, -1, 0]\n } else if (axisid === '-X/Y') {\n planenormal = [0, 0, -1]\n rightvector = [-1, 0, 0]\n } else if (axisid === '-Y/-X') {\n planenormal = [0, 0, -1]\n rightvector = [0, -1, 0]\n } else if (axisid === 'X/-Y') {\n planenormal = [0, 0, -1]\n rightvector = [1, 0, 0]\n } else if (axisid === 'Y/X') {\n planenormal = [0, 0, -1]\n rightvector = [0, 1, 0]\n } else if (axisid === 'X/Z') {\n planenormal = [0, -1, 0]\n rightvector = [1, 0, 0]\n } else if (axisid === 'Z/-X') {\n planenormal = [0, -1, 0]\n rightvector = [0, 0, 1]\n } else if (axisid === '-X/-Z') {\n planenormal = [0, -1, 0]\n rightvector = [-1, 0, 0]\n } else if (axisid === '-Z/X') {\n planenormal = [0, -1, 0]\n rightvector = [0, 0, -1]\n } else if (axisid === '-X/Z') {\n planenormal = [0, 1, 0]\n rightvector = [-1, 0, 0]\n } else if (axisid === '-Z/-X') {\n planenormal = [0, 1, 0]\n rightvector = [0, 0, -1]\n } else if (axisid === 'X/-Z') {\n planenormal = [0, 1, 0]\n rightvector = [1, 0, 0]\n } else if (axisid === 'Z/X') {\n planenormal = [0, 1, 0]\n rightvector = [0, 0, 1]\n } else if (axisid === 'Y/Z') {\n planenormal = [1, 0, 0]\n rightvector = [0, 1, 0]\n } else if (axisid === 'Z/-Y') {\n planenormal = [1, 0, 0]\n rightvector = [0, 0, 1]\n } else if (axisid === '-Y/-Z') {\n planenormal = [1, 0, 0]\n rightvector = [0, -1, 0]\n } else if (axisid === '-Z/Y') {\n planenormal = [1, 0, 0]\n rightvector = [0, 0, -1]\n } else if (axisid === '-Y/Z') {\n planenormal = [-1, 0, 0]\n rightvector = [0, -1, 0]\n } else if (axisid === '-Z/-Y') {\n planenormal = [-1, 0, 0]\n rightvector = [0, 0, -1]\n } else if (axisid === 'Y/-Z') {\n planenormal = [-1, 0, 0]\n rightvector = [0, 1, 0]\n } else if (axisid === 'Z/Y') {\n planenormal = [-1, 0, 0]\n rightvector = [0, 0, 1]\n } else {\n throw new Error('OrthoNormalBasis.GetCartesian: invalid combination of axis identifiers. Should pass two string arguments from [X,Y,Z,-X,-Y,-Z], being two different axes.')\n }\n return new OrthoNormalBasis(new Plane(new Vector3D(planenormal), 0), new Vector3D(rightvector))\n}\n\n/*\n// test code for OrthoNormalBasis.GetCartesian()\nOrthoNormalBasis.GetCartesian_Test=function() {\n let axisnames=[\"X\",\"Y\",\"Z\",\"-X\",\"-Y\",\"-Z\"];\n let axisvectors=[[1,0,0], [0,1,0], [0,0,1], [-1,0,0], [0,-1,0], [0,0,-1]];\n for(let axis1=0; axis1 < 3; axis1++) {\n for(let axis1inverted=0; axis1inverted < 2; axis1inverted++) {\n let axis1name=axisnames[axis1+3*axis1inverted];\n let axis1vector=axisvectors[axis1+3*axis1inverted];\n for(let axis2=0; axis2 < 3; axis2++) {\n if(axis2 != axis1) {\n for(let axis2inverted=0; axis2inverted < 2; axis2inverted++) {\n let axis2name=axisnames[axis2+3*axis2inverted];\n let axis2vector=axisvectors[axis2+3*axis2inverted];\n let orthobasis=OrthoNormalBasis.GetCartesian(axis1name, axis2name);\n let test1=orthobasis.to3D(new Vector2D([1,0]));\n let test2=orthobasis.to3D(new Vector2D([0,1]));\n let expected1=new Vector3D(axis1vector);\n let expected2=new Vector3D(axis2vector);\n let d1=test1.distanceTo(expected1);\n let d2=test2.distanceTo(expected2);\n if( (d1 > 0.01) || (d2 > 0.01) ) {\n throw new Error(\"Wrong!\");\n }}}}}}\n throw new Error(\"OK\");\n};\n*/\n\n// The z=0 plane, with the 3D x and y vectors mapped to the 2D x and y vector\nOrthoNormalBasis.Z0Plane = function () {\n const plane = new Plane(new Vector3D([0, 0, 1]), 0)\n return new OrthoNormalBasis(plane, new Vector3D([1, 0, 0]))\n}\n\nOrthoNormalBasis.prototype = {\n\n getProjectionMatrix: function () {\n return mat4.fromValues(\n this.u[0], this.v[0], this.plane[0], 0,\n this.u[1], this.v[1], this.plane[1], 0,\n this.u[2], this.v[2], this.plane[2], 0,\n 0, 0, -this.plane[3], 1\n )\n },\n\n getInverseProjectionMatrix: function () {\n const p = vec3.scale(vec3.create(), this.plane, this.plane[3])\n return mat4.fromValues(\n this.u[0], this.u[1], this.u[2], 0,\n this.v[0], this.v[1], this.v[2], 0,\n this.plane[0], this.plane[1], this.plane[2], 0,\n p[0], p[1], p[2], 1\n )\n },\n\n to2D: function (point) {\n return vec2.fromValues(vec3.dot(point, this.u), vec3.dot(point, this.v))\n },\n\n to3D: function (point) {\n const v1 = vec3.scale(vec3.create(), this.u, point[0])\n const v2 = vec3.scale(vec3.create(), this.v, point[1])\n\n const v3 = vec3.add(v1, v1, this.planeorigin)\n const v4 = vec3.add(v2, v2, v3)\n return v4\n },\n\n line3Dto2D: function (line3d) {\n const a = line3d.point\n const b = line3d.direction.plus(a)\n const a2d = this.to2D(a)\n const b2d = this.to2D(b)\n return Line2D.fromPoints(a2d, b2d)\n },\n\n line2Dto3D: function (line2d) {\n const a = line2d.origin()\n const b = line2d.direction().plus(a)\n const a3d = this.to3D(a)\n const b3d = this.to3D(b)\n return Line3D.fromPoints(a3d, b3d)\n },\n\n transform: function (matrix4x4) {\n // todo: this may not work properly in case of mirroring\n const newplane = this.plane.transform(matrix4x4)\n const rightpointTransformed = this.u.transform(matrix4x4)\n const originTransformed = new Vector3D(0, 0, 0).transform(matrix4x4)\n const newrighthandvector = rightpointTransformed.minus(originTransformed)\n const newbasis = new OrthoNormalBasis(newplane, newrighthandvector)\n return newbasis\n }\n}\n\nmodule.exports = OrthoNormalBasis\n","/**\n * The resolution of space, currently one hundred nanometers.\n * This should be 1 / EPS.\n * @alias module:modeling/maths.spatialResolution\n * @default\n */\nconst spatialResolution = 1e5\n\n/**\n * Epsilon used during determination of near zero distances.\n * This should be 1 / spacialResolution.\n * @default\n * @alias module:modeling/maths.EPS\n */\nconst EPS = 1e-5\n\n/**\n * Smaller epsilon used for measuring near zero distances.\n * @default\n * @alias module:modeling/maths.NEPS\n */\nconst NEPS = 1e-13\n// NEPS is derived from a series of tests to determine the optimal precision\n// for comparing coplanar polygons, as provided by the sphere primitive at high\n// segmentation. NEPS is for 64 bit Number values.\n\n/**\n * The TAU property represents the ratio of the circumference of a circle to its radius.\n * Approximately 6.28318530717958647692\n * @default\n * @example\n * const { TAU } = require('@jscad/modeling').maths.constants\n */\nconst TAU = Math.PI * 2\n\nmodule.exports = {\n EPS,\n NEPS,\n TAU,\n spatialResolution\n}\n","/**\n * Maths are computational units for fundamental Euclidean geometry. All maths operate upon array data structures.\n * Note: Maths data structures are considered immutable, so never change the contents directly.\n * @see Most computations are based upon the glMatrix library (glmatrix.net)\n * @module modeling/maths\n * @example\n * const { constants, line2, mat4, vec2, vec3 } = require('@jscad/modeling').maths\n\n */\nmodule.exports = {\n constants: require('./constants'),\n line2: require('./line2'),\n line3: require('./line3'),\n mat4: require('./mat4'),\n plane: require('./plane'),\n utils: require('./utils'),\n vec2: require('./vec2'),\n vec3: require('./vec3'),\n vec4: require('./vec4')\n}\n","const create = require('./create')\n\n/**\n * Create a clone of the given line.\n *\n * @param {line2} line - line to clone\n * @returns {line2} a new unbounded line\n * @alias module:modeling/maths/line2.clone\n */\nconst clone = (line) => {\n const out = create()\n out[0] = line[0]\n out[1] = line[1]\n out[2] = line[2]\n return out\n}\n\nmodule.exports = clone\n","const vec2 = require('../vec2')\n\nconst direction = require('./direction')\nconst origin = require('./origin')\n\n/**\n * Determine the closest point on the given line to the given point.\n *\n * @param {line2} line - line of reference\n * @param {vec2} point - point of reference\n * @returns {vec2} closest point\n * @alias module:modeling/maths/line2.closestPoint\n */\nconst closestPoint = (line, point) => {\n const orig = origin(line)\n const dir = direction(line)\n\n const v = vec2.subtract(vec2.create(), point, orig)\n const dist = vec2.dot(v, dir)\n vec2.scale(v, dir, dist)\n vec2.add(v, v, orig)\n return v\n}\n\nmodule.exports = closestPoint\n","/**\n * Copy the given line to the receiving line.\n *\n * @param {line2} out - receiving line\n * @param {line2} line - line to copy\n * @returns {line2} out\n * @alias module:modeling/maths/line2.copy\n */\nconst copy = (out, line) => {\n out[0] = line[0]\n out[1] = line[1]\n out[2] = line[2]\n return out\n}\n\nmodule.exports = copy\n","/**\n * Represents a unbounded line in 2D space, positioned at a point of origin.\n * A line is parametrized by a normal vector (perpendicular to the line, rotated 90 degrees counter clockwise) and\n * distance from the origin.\n *\n * Equation: A Point (P) is on Line (L) if dot(L.normal, P) == L.distance\n *\n * The contents of the array are a normal [0,1] and a distance [2].\n * @typedef {Array} line2\n */\n\n/**\n * Create a line, positioned at 0,0, and running along the X axis.\n *\n * @returns {line2} a new unbounded line\n * @alias module:modeling/maths/line2.create\n */\nconst create = () => [0, 1, 0] // normal and distance\n\nmodule.exports = create\n","const vec2 = require('../vec2')\n\n/**\n * Return the direction of the given line.\n *\n * @param {line2} line - line of reference\n * @return {vec2} a vector in the direction of the line\n * @alias module:modeling/maths/line2.direction\n */\nconst direction = (line) => {\n const vector = vec2.normal(vec2.create(), line)\n vec2.negate(vector, vector)\n return vector\n}\n\nmodule.exports = direction\n","const vec2 = require('../vec2')\n\n/**\n * Calculate the distance (positive) between the given point and line.\n *\n * @param {line2} line - line of reference\n * @param {vec2} point - point of reference\n * @return {Number} distance between line and point\n * @alias module:modeling/maths/line2.distanceToPoint\n */\nconst distanceToPoint = (line, point) => {\n let distance = vec2.dot(point, line)\n distance = Math.abs(distance - line[2])\n return distance\n}\n\nmodule.exports = distanceToPoint\n","/**\n * Compare the given lines for equality.\n *\n * @param {line2} line1 - first line to compare\n * @param {line2} line2 - second line to compare\n * @return {Boolean} true if lines are equal\n * @alias module:modeling/maths/line2.equals\n */\nconst equals = (line1, line2) => (line1[0] === line2[0]) && (line1[1] === line2[1] && (line1[2] === line2[2]))\n\nmodule.exports = equals\n","const vec2 = require('../vec2')\n\n/**\n * Create a new line that passes through the given points.\n *\n * @param {line2} out - receiving line\n * @param {vec2} point1 - start point of the line\n * @param {vec2} point2 - end point of the line\n * @returns {line2} a new unbounded line\n * @alias module:modeling/maths/line2.fromPoints\n */\nconst fromPoints = (out, point1, point2) => {\n const vector = vec2.subtract(vec2.create(), point2, point1) // directional vector\n\n vec2.normal(vector, vector)\n vec2.normalize(vector, vector) // normalized\n\n const distance = vec2.dot(point1, vector)\n\n out[0] = vector[0]\n out[1] = vector[1]\n out[2] = distance\n return out\n}\n\nmodule.exports = fromPoints\n","const create = require('./create')\n\n/**\n * Creates a new line initialized with the given values.\n *\n * @param {Number} x - X coordinate of the unit normal\n * @param {Number} y - Y coordinate of the unit normal\n * @param {Number} d - distance of the line from [0,0]\n * @returns {line2} a new unbounded line\n * @alias module:modeling/maths/line2.fromValues\n */\nconst fromValues = (x, y, d) => {\n const out = create()\n out[0] = x\n out[1] = y\n out[2] = d\n return out\n}\n\nmodule.exports = fromValues\n","/**\n * Represents a unbounded line in 2D space, positioned at a point of origin.\n * @see {@link line2} for data structure information.\n * @module modeling/maths/line2\n */\nmodule.exports = {\n clone: require('./clone'),\n closestPoint: require('./closestPoint'),\n copy: require('./copy'),\n create: require('./create'),\n direction: require('./direction'),\n distanceToPoint: require('./distanceToPoint'),\n equals: require('./equals'),\n fromPoints: require('./fromPoints'),\n fromValues: require('./fromValues'),\n intersectPointOfLines: require('./intersectPointOfLines'),\n origin: require('./origin'),\n reverse: require('./reverse'),\n toString: require('./toString'),\n transform: require('./transform'),\n xAtY: require('./xAtY')\n}\n","const vec2 = require('../vec2')\nconst { solve2Linear } = require('../utils')\n\n/**\n * Return the point of intersection between the given lines.\n *\n * NOTES:\n * The point will have Infinity values if the lines are parallel.\n * The point will have NaN values if the lines are the same.\n *\n * @param {line2} line1 - line of reference\n * @param {line2} line2 - line of reference\n * @return {vec2} the point of intersection\n * @alias module:modeling/maths/line2.intersectPointOfLines\n */\nconst intersectToLine = (line1, line2) => {\n const point = solve2Linear(line1[0], line1[1], line2[0], line2[1], line1[2], line2[2])\n return vec2.clone(point)\n}\n\nmodule.exports = intersectToLine\n","const vec2 = require('../vec2')\n\n/**\n * Return the origin of the given line.\n * The origin is the point on the line which is closest to the origin [0, 0].\n *\n * @param {line2} line - line of reference\n * @return {vec2} the origin of the line\n * @alias module:modeling/maths/line2.origin\n */\nconst origin = (line) => vec2.scale(vec2.create(), line, line[2])\n\nmodule.exports = origin\n","const vec2 = require('../vec2')\n\nconst copy = require('./copy')\nconst fromValues = require('./fromValues')\n\n/**\n * Create a new line in the opposite direction as the given.\n *\n * @param {line2} out - receiving line\n * @param {line2} line - line to reverse\n * @returns {line2} out\n * @alias module:modeling/maths/line2.reverse\n */\nconst reverse = (out, line) => {\n const normal = vec2.negate(vec2.create(), line)\n const distance = -line[2]\n return copy(out, fromValues(normal[0], normal[1], distance))\n}\n\nmodule.exports = reverse\n","/**\n * Return a string representing the given line.\n *\n * @param {line2} line - line of reference\n * @returns {String} string representation\n * @alias module:modeling/maths/line2.toString\n */\nconst toString = (line) => `line2: (${line[0].toFixed(7)}, ${line[1].toFixed(7)}, ${line[2].toFixed(7)})`\n\nmodule.exports = toString\n","const vec2 = require('../vec2')\n\nconst fromPoints = require('./fromPoints')\nconst origin = require('./origin')\nconst direction = require('./direction')\n\n/**\n * Transforms the given line using the given matrix.\n *\n * @param {line2} out - receiving line\n * @param {line2} line - line to transform\n * @param {mat4} matrix - matrix to transform with\n * @returns {line2} out\n * @alias module:modeling/maths/line2.transform\n */\nconst transform = (out, line, matrix) => {\n const org = origin(line)\n const dir = direction(line)\n\n vec2.transform(org, org, matrix)\n vec2.transform(dir, dir, matrix)\n\n return fromPoints(out, org, dir)\n}\n\nmodule.exports = transform\n","const origin = require('./origin')\n\n/**\n * Determine the X coordinate of the given line at the Y coordinate.\n *\n * The X coordinate will be Infinity if the line is parallel to the X axis.\n *\n * @param {line2} line - line of reference\n * @param {Number} y - Y coordinate on the line\n * @return {Number} the X coordinate on the line\n * @alias module:modeling/maths/line2.xAtY\n */\nconst xAtY = (line, y) => {\n let x = (line[2] - (line[1] * y)) / line[0]\n if (Number.isNaN(x)) {\n const org = origin(line)\n x = org[0]\n }\n return x\n}\n\nmodule.exports = xAtY\n","const vec3 = require('../vec3')\n\nconst create = require('./create')\n\n/**\n * Create a clone of the given line.\n *\n * @param {line3} line - line to clone\n * @returns {line3} a new unbounded line\n * @alias module:modeling/maths/line3.clone\n */\nconst clone = (line) => {\n const out = create()\n vec3.copy(out[0], line[0])\n vec3.copy(out[1], line[1])\n return out\n}\n\nmodule.exports = clone\n","const vec3 = require('../vec3')\n\n/**\n * Determine the closest point on the given line to the given point.\n *\n * @param {line3} line - line of reference\n * @param {vec3} point - point of reference\n * @returns {vec3} a point\n * @alias module:modeling/maths/line3.closestPoint\n */\nconst closestPoint = (line, point) => {\n const lpoint = line[0]\n const ldirection = line[1]\n\n const a = vec3.dot(vec3.subtract(vec3.create(), point, lpoint), ldirection)\n const b = vec3.dot(ldirection, ldirection)\n const t = a / b\n\n const closestpoint = vec3.scale(vec3.create(), ldirection, t)\n vec3.add(closestpoint, closestpoint, lpoint)\n return closestpoint\n}\n\nmodule.exports = closestPoint\n","const vec3 = require('../vec3')\n\n/**\n * Copy the given line into the receiving line.\n *\n * @param {line3} out - receiving line\n * @param {line3} line - line to copy\n * @returns {line3} out\n * @alias module:modeling/maths/line3.copy\n */\nconst copy = (out, line) => {\n vec3.copy(out[0], line[0])\n vec3.copy(out[1], line[1])\n return out\n}\n\nmodule.exports = copy\n","const vec3 = require('../vec3')\n\n/**\n * Represents a unbounded line in 3D space, positioned at a point of origin.\n * A line is parametrized by a point of origin and a directional vector.\n *\n * The array contents are two 3D vectors; origin [0,0,0] and directional vector [0,0,1].\n * @see https://en.wikipedia.org/wiki/Hesse_normal_form\n * @typedef {Array} line3\n */\n\n/**\n * Create a line, positioned at 0,0,0 and lying on the X axis.\n *\n * @returns {line3} a new unbounded line\n * @alias module:modeling/maths/line3.create\n */\nconst create = () => [\n vec3.fromValues(0, 0, 0), // origin\n vec3.fromValues(0, 0, 1) // direction\n]\n\nmodule.exports = create\n","/**\n * Return the direction of the given line.\n *\n * @param {line3} line - line for reference\n * @return {vec3} the relative vector in the direction of the line\n * @alias module:modeling/maths/line3.direction\n */\nconst direction = (line) => line[1]\n\nmodule.exports = direction\n","const vec3 = require('../vec3')\n\nconst closestPoint = require('./closestPoint')\n\n/**\n * Calculate the distance (positive) between the given point and line.\n *\n * @param {line3} line - line of reference\n * @param {vec3} point - point of reference\n * @return {Number} distance between line and point\n * @alias module:modeling/maths/line3.distanceToPoint\n */\nconst distanceToPoint = (line, point) => {\n const closest = closestPoint(line, point)\n const distancevector = vec3.subtract(vec3.create(), point, closest)\n return vec3.length(distancevector)\n}\n\nmodule.exports = distanceToPoint\n","const vec3 = require('../vec3')\n\n/**\n * Compare the given lines for equality.\n *\n * @param {line3} line1 - first line to compare\n * @param {line3} line2 - second line to compare\n * @return {Boolean} true if lines are equal\n * @alias module:modeling/maths/line3.equals\n */\nconst equals = (line1, line2) => {\n // compare directions (unit vectors)\n if (!vec3.equals(line1[1], line2[1])) return false\n\n // compare points\n if (!vec3.equals(line1[0], line2[0])) return false\n\n // why would lines with the same slope (direction) and different points be equal?\n // let distance = distanceToPoint(line1, line2[0])\n // if (distance > EPS) return false\n\n return true\n}\n\nmodule.exports = equals\n","const vec3 = require('../vec3')\nconst { solve2Linear } = require('../utils')\n\nconst { EPS } = require('../constants')\n\nconst fromPointAndDirection = require('./fromPointAndDirection')\n\n/**\n * Create a line the intersection of the given planes.\n *\n * @param {line3} out - receiving line\n * @param {plane} plane1 - first plane of reference\n * @param {plane} plane2 - second plane of reference\n * @returns {line3} out\n * @alias module:modeling/maths/line3.fromPlanes\n */\nconst fromPlanes = (out, plane1, plane2) => {\n let direction = vec3.cross(vec3.create(), plane1, plane2)\n let length = vec3.length(direction)\n if (length < EPS) {\n throw new Error('parallel planes do not intersect')\n }\n length = (1.0 / length)\n direction = vec3.scale(direction, direction, length)\n\n const absx = Math.abs(direction[0])\n const absy = Math.abs(direction[1])\n const absz = Math.abs(direction[2])\n let origin\n let r\n if ((absx >= absy) && (absx >= absz)) {\n // find a point p for which x is zero\n r = solve2Linear(plane1[1], plane1[2], plane2[1], plane2[2], plane1[3], plane2[3])\n origin = vec3.fromValues(0, r[0], r[1])\n } else if ((absy >= absx) && (absy >= absz)) {\n // find a point p for which y is zero\n r = solve2Linear(plane1[0], plane1[2], plane2[0], plane2[2], plane1[3], plane2[3])\n origin = vec3.fromValues(r[0], 0, r[1])\n } else {\n // find a point p for which z is zero\n r = solve2Linear(plane1[0], plane1[1], plane2[0], plane2[1], plane1[3], plane2[3])\n origin = vec3.fromValues(r[0], r[1], 0)\n }\n return fromPointAndDirection(out, origin, direction)\n}\n\nmodule.exports = fromPlanes\n","const vec3 = require('../vec3')\n\n/**\n * Create a line from the given point (origin) and direction.\n *\n * The point can be any random point on the line.\n * The direction must be a vector with positive or negative distance from the point.\n *\n * See the logic of fromPoints() for appropriate values.\n *\n * @param {line3} out - receiving line\n * @param {vec3} point - start point of the line segment\n * @param {vec3} direction - direction of the line segment\n * @returns {line3} out\n * @alias module:modeling/maths/line3.fromPointAndDirection\n */\nconst fromPointAndDirection = (out, point, direction) => {\n const unit = vec3.normalize(vec3.create(), direction)\n\n vec3.copy(out[0], point)\n vec3.copy(out[1], unit)\n return out\n}\n\nmodule.exports = fromPointAndDirection\n","const vec3 = require('../vec3')\n\nconst fromPointAndDirection = require('./fromPointAndDirection')\n\n/**\n * Create a line that passes through the given points.\n *\n * @param {line3} out - receiving line\n * @param {vec3} point1 - start point of the line segment\n * @param {vec3} point2 - end point of the line segment\n * @returns {line3} out\n * @alias module:modeling/maths/line3.fromPoints\n */\nconst fromPoints = (out, point1, point2) => {\n const direction = vec3.subtract(vec3.create(), point2, point1)\n return fromPointAndDirection(out, point1, direction)\n}\n\nmodule.exports = fromPoints\n","/**\n * Represents a unbounded line in 3D space, positioned at a point of origin.\n * @see {@link line3} for data structure information.\n * @module modeling/maths/line3\n */\nmodule.exports = {\n clone: require('./clone'),\n closestPoint: require('./closestPoint'),\n copy: require('./copy'),\n create: require('./create'),\n direction: require('./direction'),\n distanceToPoint: require('./distanceToPoint'),\n equals: require('./equals'),\n fromPlanes: require('./fromPlanes'),\n fromPointAndDirection: require('./fromPointAndDirection'),\n fromPoints: require('./fromPoints'),\n intersectPointOfLineAndPlane: require('./intersectPointOfLineAndPlane'),\n origin: require('./origin'),\n reverse: require('./reverse'),\n toString: require('./toString'),\n transform: require('./transform')\n}\n","const vec3 = require('../vec3')\n\n/**\n * Determine the closest point on the given plane to the given line.\n *\n * NOTES:\n * The point of intersection will be invalid if the line is parallel to the plane, e.g. NaN.\n *\n * @param {line3} line - line of reference\n * @param {plane} plane - plane of reference\n * @returns {vec3} a point on the line\n * @alias module:modeling/maths/line3.intersectPointOfLineAndPlane\n */\nconst intersectToPlane = (line, plane) => {\n // plane: plane.normal * p = plane.w\n const pnormal = plane\n const pw = plane[3]\n\n const lpoint = line[0]\n const ldirection = line[1]\n\n // point: p = line.point + labda * line.direction\n const labda = (pw - vec3.dot(pnormal, lpoint)) / vec3.dot(pnormal, ldirection)\n\n const point = vec3.add(vec3.create(), lpoint, vec3.scale(vec3.create(), ldirection, labda))\n return point\n}\n\nmodule.exports = intersectToPlane\n","/**\n * Return the origin of the given line.\n *\n * @param {line3} line - line of reference\n * @return {vec3} the origin of the line\n * @alias module:modeling/maths/line3.origin\n */\nconst origin = (line) => line[0]\n\nmodule.exports = origin\n","const vec3 = require('../vec3')\n\nconst fromPointAndDirection = require('./fromPointAndDirection')\n\n/**\n * Create a line in the opposite direction as the given.\n *\n * @param {line3} out - receiving line\n * @param {line3} line - line to reverse\n * @returns {line3} out\n * @alias module:modeling/maths/line3.reverse\n */\nconst reverse = (out, line) => {\n const point = vec3.clone(line[0])\n const direction = vec3.negate(vec3.create(), line[1])\n return fromPointAndDirection(out, point, direction)\n}\n\nmodule.exports = reverse\n","/**\n * Return a string representing the given line.\n *\n * @param {line3} line - line of reference\n * @returns {String} string representation\n * @alias module:modeling/maths/line3.toString\n */\nconst toString = (line) => {\n const point = line[0]\n const direction = line[1]\n return `line3: point: (${point[0].toFixed(7)}, ${point[1].toFixed(7)}, ${point[2].toFixed(7)}) direction: (${direction[0].toFixed(7)}, ${direction[1].toFixed(7)}, ${direction[2].toFixed(7)})`\n}\n\nmodule.exports = toString\n","const vec3 = require('../vec3')\n\nconst fromPointAndDirection = require('./fromPointAndDirection')\n\n/**\n * Transforms the given line using the given matrix.\n *\n * @param {line3} out - line to update\n * @param {line3} line - line to transform\n * @param {mat4} matrix - matrix to transform with\n * @returns {line3} a new unbounded line\n * @alias module:modeling/maths/line3.transform\n */\nconst transform = (out, line, matrix) => {\n const point = line[0]\n const direction = line[1]\n const pointPlusDirection = vec3.add(vec3.create(), point, direction)\n\n const newpoint = vec3.transform(vec3.create(), point, matrix)\n const newPointPlusDirection = vec3.transform(pointPlusDirection, pointPlusDirection, matrix)\n const newdirection = vec3.subtract(newPointPlusDirection, newPointPlusDirection, newpoint)\n\n return fromPointAndDirection(out, newpoint, newdirection)\n}\n\nmodule.exports = transform\n","/**\n * Adds the two matrices (A+B).\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} a - first operand\n * @param {mat4} b - second operand\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.add\n */\nconst add = (out, a, b) => {\n out[0] = a[0] + b[0]\n out[1] = a[1] + b[1]\n out[2] = a[2] + b[2]\n out[3] = a[3] + b[3]\n out[4] = a[4] + b[4]\n out[5] = a[5] + b[5]\n out[6] = a[6] + b[6]\n out[7] = a[7] + b[7]\n out[8] = a[8] + b[8]\n out[9] = a[9] + b[9]\n out[10] = a[10] + b[10]\n out[11] = a[11] + b[11]\n out[12] = a[12] + b[12]\n out[13] = a[13] + b[13]\n out[14] = a[14] + b[14]\n out[15] = a[15] + b[15]\n return out\n}\n\nmodule.exports = add\n","const create = require('./create')\n\n/**\n * Creates a clone of the given matrix.\n *\n * @param {mat4} matrix - matrix to clone\n * @returns {mat4} a new matrix\n * @alias module:modeling/maths/mat4.clone\n */\nconst clone = (matrix) => {\n const out = create()\n out[0] = matrix[0]\n out[1] = matrix[1]\n out[2] = matrix[2]\n out[3] = matrix[3]\n out[4] = matrix[4]\n out[5] = matrix[5]\n out[6] = matrix[6]\n out[7] = matrix[7]\n out[8] = matrix[8]\n out[9] = matrix[9]\n out[10] = matrix[10]\n out[11] = matrix[11]\n out[12] = matrix[12]\n out[13] = matrix[13]\n out[14] = matrix[14]\n out[15] = matrix[15]\n return out\n}\n\nmodule.exports = clone\n","/**\n * Creates a copy of the given matrix.\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} matrix - matrix to copy\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.copy\n */\nconst copy = (out, matrix) => {\n out[0] = matrix[0]\n out[1] = matrix[1]\n out[2] = matrix[2]\n out[3] = matrix[3]\n out[4] = matrix[4]\n out[5] = matrix[5]\n out[6] = matrix[6]\n out[7] = matrix[7]\n out[8] = matrix[8]\n out[9] = matrix[9]\n out[10] = matrix[10]\n out[11] = matrix[11]\n out[12] = matrix[12]\n out[13] = matrix[13]\n out[14] = matrix[14]\n out[15] = matrix[15]\n return out\n}\n\nmodule.exports = copy\n","/**\n * Represents a 4x4 matrix which is column-major (when typed out it looks row-major).\n * See fromValues().\n * @typedef {Array} mat4\n */\n\n/**\n * Creates a new identity matrix.\n *\n * @returns {mat4} a new matrix\n * @alias module:modeling/maths/mat4.create\n */\nconst create = () => [\n 1, 0, 0, 0,\n 0, 1, 0, 0,\n 0, 0, 1, 0,\n 0, 0, 0, 1\n]\n\nmodule.exports = create\n","/**\n * Returns whether or not the matrices have exactly the same elements in the same position.\n *\n * @param {mat4} a - first matrix\n * @param {mat4} b - second matrix\n * @returns {Boolean} true if the matrices are equal\n * @alias module:modeling/maths/mat4.equals\n */\nconst equals = (a, b) => (\n a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3] &&\n a[4] === b[4] && a[5] === b[5] && a[6] === b[6] && a[7] === b[7] &&\n a[8] === b[8] && a[9] === b[9] && a[10] === b[10] && a[11] === b[11] &&\n a[12] === b[12] && a[13] === b[13] && a[14] === b[14] && a[15] === b[15]\n)\n\nmodule.exports = equals\n","const { EPS } = require('../constants')\n\nconst { sin, cos } = require('../utils/trigonometry')\n\nconst identity = require('./identity')\n\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.rotate(dest, dest, rad, axis)\n *\n * @param {mat4} out - receiving matrix\n * @param {Number} rad - angle to rotate the matrix by\n * @param {vec3} axis - axis of which to rotate around\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.fromRotation\n * @example\n * let matrix = fromRotation(create(), TAU / 4, [0, 0, 3])\n */\nconst fromRotation = (out, rad, axis) => {\n let [x, y, z] = axis\n const lengthSquared = x * x + y * y + z * z\n\n if (Math.abs(lengthSquared) < EPS) {\n // axis is 0,0,0 or almost\n return identity(out)\n }\n\n const len = 1 / Math.sqrt(lengthSquared)\n x *= len\n y *= len\n z *= len\n\n const s = sin(rad)\n const c = cos(rad)\n const t = 1 - c\n\n // Perform rotation-specific matrix multiplication\n out[0] = x * x * t + c\n out[1] = y * x * t + z * s\n out[2] = z * x * t - y * s\n out[3] = 0\n out[4] = x * y * t - z * s\n out[5] = y * y * t + c\n out[6] = z * y * t + x * s\n out[7] = 0\n out[8] = x * z * t + y * s\n out[9] = y * z * t - x * s\n out[10] = z * z * t + c\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n\nmodule.exports = fromRotation\n","/**\n * Creates a matrix from a vector scaling.\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.scale(dest, dest, vec)\n *\n * @param {mat4} out - receiving matrix\n * @param {vec3} vector - X, Y, Z factors by which to scale\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.fromScaling\n * @example\n * let matrix = fromScaling([1, 2, 0.5])\n */\nconst fromScaling = (out, vector) => {\n out[0] = vector[0]\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = vector[1]\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[10] = vector[2]\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n\nmodule.exports = fromScaling\n","const { sin, cos } = require('../utils/trigonometry')\n\n/**\n * Creates a matrix from the given Tait–Bryan angles.\n *\n * Tait-Bryan Euler angle convention using active, intrinsic rotations around the axes in the order z-y-x.\n * @see https://en.wikipedia.org/wiki/Euler_angles\n *\n * @param {mat4} out - receiving matrix\n * @param {Number} yaw - Z rotation in radians\n * @param {Number} pitch - Y rotation in radians\n * @param {Number} roll - X rotation in radians\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.fromTaitBryanRotation\n * @example\n * let matrix = fromTaitBryanRotation(create(), TAU / 4, 0, TAU / 2)\n */\nconst fromTaitBryanRotation = (out, yaw, pitch, roll) => {\n // precompute sines and cosines of Euler angles\n const sy = sin(yaw)\n const cy = cos(yaw)\n const sp = sin(pitch)\n const cp = cos(pitch)\n const sr = sin(roll)\n const cr = cos(roll)\n\n // create and populate rotation matrix\n // left-hand-rule rotation\n // const els = [\n // cp*cy, sr*sp*cy - cr*sy, sr*sy + cr*sp*cy, 0,\n // cp*sy, cr*cy + sr*sp*sy, cr*sp*sy - sr*cy, 0,\n // -sp, sr*cp, cr*cp, 0,\n // 0, 0, 0, 1\n // ]\n // right-hand-rule rotation\n out[0] = cp * cy\n out[1] = cp * sy\n out[2] = -sp\n out[3] = 0\n out[4] = sr * sp * cy - cr * sy\n out[5] = cr * cy + sr * sp * sy\n out[6] = sr * cp\n out[7] = 0\n out[8] = sr * sy + cr * sp * cy\n out[9] = cr * sp * sy - sr * cy\n out[10] = cr * cp\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n\nmodule.exports = fromTaitBryanRotation\n","/**\n * Creates a matrix from a vector translation.\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.translate(dest, dest, vec)\n *\n * @param {mat4} out - receiving matrix\n * @param {vec3} vector - offset (vector) of translation\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.fromTranslation\n * @example\n * let matrix = fromTranslation(create(), [1, 2, 3])\n */\nconst fromTranslation = (out, vector) => {\n out[0] = 1\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = 1\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[10] = 1\n out[11] = 0\n out[12] = vector[0]\n out[13] = vector[1]\n out[14] = vector[2]\n out[15] = 1\n return out\n}\n\nmodule.exports = fromTranslation\n","const create = require('./create')\n\n/**\n * Create a matrix with the given values.\n *\n * @param {Number} m00 Component in column 0, row 0 position (index 0)\n * @param {Number} m01 Component in column 0, row 1 position (index 1)\n * @param {Number} m02 Component in column 0, row 2 position (index 2)\n * @param {Number} m03 Component in column 0, row 3 position (index 3)\n * @param {Number} m10 Component in column 1, row 0 position (index 4)\n * @param {Number} m11 Component in column 1, row 1 position (index 5)\n * @param {Number} m12 Component in column 1, row 2 position (index 6)\n * @param {Number} m13 Component in column 1, row 3 position (index 7)\n * @param {Number} m20 Component in column 2, row 0 position (index 8)\n * @param {Number} m21 Component in column 2, row 1 position (index 9)\n * @param {Number} m22 Component in column 2, row 2 position (index 10)\n * @param {Number} m23 Component in column 2, row 3 position (index 11)\n * @param {Number} m30 Component in column 3, row 0 position (index 12)\n * @param {Number} m31 Component in column 3, row 1 position (index 13)\n * @param {Number} m32 Component in column 3, row 2 position (index 14)\n * @param {Number} m33 Component in column 3, row 3 position (index 15)\n * @returns {mat4} a new matrix\n * @alias module:modeling/maths/mat4.fromValues\n * @example\n * let matrix = fromValues(\n * 1, 0, 0, 1,\n * 0, 1, 0, 0,\n * 0, 0, 1, 0,\n * 0, 0, 0, 1\n * )\n */\nconst fromValues = (m00, m01, m02, m03, m10, m11, m12, m13, m20, m21, m22, m23, m30, m31, m32, m33) => {\n const out = create()\n out[0] = m00\n out[1] = m01\n out[2] = m02\n out[3] = m03\n out[4] = m10\n out[5] = m11\n out[6] = m12\n out[7] = m13\n out[8] = m20\n out[9] = m21\n out[10] = m22\n out[11] = m23\n out[12] = m30\n out[13] = m31\n out[14] = m32\n out[15] = m33\n return out\n}\n\nmodule.exports = fromValues\n","const vec3 = require('../vec3')\n\nconst fromRotation = require('./fromRotation')\n\n/**\n * Create a matrix that rotates the given source to the given target vector.\n *\n * Each vector must be a directional vector with a length greater than zero.\n * @see https://gist.github.com/kevinmoran/b45980723e53edeb8a5a43c49f134724\n * @param {mat4} out - receiving matrix\n * @param {vec3} source - source vector\n * @param {vec3} target - target vector\n * @returns {mat4} a new matrix\n * @alias module:modeling/maths/mat4.fromVectorRotation\n * @example\n * let matrix = fromVectorRotation(mat4.create(), [1, 2, 2], [-3, 3, 12])\n */\nconst fromVectorRotation = (out, source, target) => {\n const sourceNormal = vec3.normalize(vec3.create(), source)\n const targetNormal = vec3.normalize(vec3.create(), target)\n\n const axis = vec3.cross(vec3.create(), targetNormal, sourceNormal)\n const cosA = vec3.dot(targetNormal, sourceNormal)\n if (cosA === -1.0) return fromRotation(out, Math.PI, vec3.orthogonal(axis, sourceNormal))\n\n const k = 1 / (1 + cosA)\n out[0] = (axis[0] * axis[0] * k) + cosA\n out[1] = (axis[1] * axis[0] * k) - axis[2]\n out[2] = (axis[2] * axis[0] * k) + axis[1]\n out[3] = 0\n\n out[4] = (axis[0] * axis[1] * k) + axis[2]\n out[5] = (axis[1] * axis[1] * k) + cosA\n out[6] = (axis[2] * axis[1] * k) - axis[0]\n out[7] = 0\n\n out[8] = (axis[0] * axis[2] * k) - axis[1]\n out[9] = (axis[1] * axis[2] * k) + axis[0]\n out[10] = (axis[2] * axis[2] * k) + cosA\n out[11] = 0\n\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n\nmodule.exports = fromVectorRotation\n","const { sin, cos } = require('../utils/trigonometry')\n\n/**\n * Creates a matrix from the given angle around the X axis.\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.rotateX(dest, dest, radians)\n *\n * @param {mat4} out - receiving matrix\n * @param {Number} radians - angle to rotate the matrix by\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.fromXRotation\n * @example\n * let matrix = fromXRotation(create(), TAU / 4)\n */\nconst fromXRotation = (out, radians) => {\n const s = sin(radians)\n const c = cos(radians)\n\n // Perform axis-specific matrix multiplication\n out[0] = 1\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = c\n out[6] = s\n out[7] = 0\n out[8] = 0\n out[9] = -s\n out[10] = c\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n\nmodule.exports = fromXRotation\n","const { sin, cos } = require('../utils/trigonometry')\n\n/**\n * Creates a matrix from the given angle around the Y axis.\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.rotateY(dest, dest, radians)\n *\n * @param {mat4} out - receiving matrix\n * @param {Number} radians - angle to rotate the matrix by\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.fromYRotation\n * @example\n * let matrix = fromYRotation(create(), TAU / 4)\n */\nconst fromYRotation = (out, radians) => {\n const s = sin(radians)\n const c = cos(radians)\n\n // Perform axis-specific matrix multiplication\n out[0] = c\n out[1] = 0\n out[2] = -s\n out[3] = 0\n out[4] = 0\n out[5] = 1\n out[6] = 0\n out[7] = 0\n out[8] = s\n out[9] = 0\n out[10] = c\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n\nmodule.exports = fromYRotation\n","const { sin, cos } = require('../utils/trigonometry')\n\n/**\n * Creates a matrix from the given angle around the Z axis.\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.rotateZ(dest, dest, radians)\n *\n * @param {mat4} out - receiving matrix\n * @param {Number} radians - angle to rotate the matrix by\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.fromZRotation\n * @example\n * let matrix = fromZRotation(create(), TAU / 4)\n */\nconst fromZRotation = (out, radians) => {\n const s = sin(radians)\n const c = cos(radians)\n\n // Perform axis-specific matrix multiplication\n out[0] = c\n out[1] = s\n out[2] = 0\n out[3] = 0\n out[4] = -s\n out[5] = c\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[10] = 1\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n\nmodule.exports = fromZRotation\n","/**\n * Set a matrix to the identity transform.\n *\n * @param {mat4} out - receiving matrix\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.identity\n */\nconst identity = (out) => {\n out[0] = 1\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = 1\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[10] = 1\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n\nmodule.exports = identity\n","/**\n * Represents a 4x4 matrix which is column-major (when typed out it looks row-major).\n * @see {@link mat4} for data structure information.\n * @module modeling/maths/mat4\n */\nmodule.exports = {\n add: require('./add'),\n clone: require('./clone'),\n copy: require('./copy'),\n create: require('./create'),\n invert: require('./invert'),\n equals: require('./equals'),\n fromRotation: require('./fromRotation'),\n fromScaling: require('./fromScaling'),\n fromTaitBryanRotation: require('./fromTaitBryanRotation'),\n fromTranslation: require('./fromTranslation'),\n fromValues: require('./fromValues'),\n fromVectorRotation: require('./fromVectorRotation'),\n fromXRotation: require('./fromXRotation'),\n fromYRotation: require('./fromYRotation'),\n fromZRotation: require('./fromZRotation'),\n identity: require('./identity'),\n isIdentity: require('./isIdentity'),\n isOnlyTransformScale: require('./isOnlyTransformScale'),\n isMirroring: require('./isMirroring'),\n mirrorByPlane: require('./mirrorByPlane'),\n multiply: require('./multiply'),\n rotate: require('./rotate'),\n rotateX: require('./rotateX'),\n rotateY: require('./rotateY'),\n rotateZ: require('./rotateZ'),\n scale: require('./scale'),\n subtract: require('./subtract'),\n toString: require('./toString'),\n translate: require('./translate')\n}\n","/**\n * Creates a invert copy of the given matrix.\n * @author Julian Lloyd\n * code from https://github.com/jlmakes/rematrix/blob/master/src/index.js\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} matrix - matrix to invert\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.invert\n */\nconst invert = (out, matrix) => {\n const a00 = matrix[0]\n const a01 = matrix[1]\n const a02 = matrix[2]\n const a03 = matrix[3]\n const a10 = matrix[4]\n const a11 = matrix[5]\n const a12 = matrix[6]\n const a13 = matrix[7]\n const a20 = matrix[8]\n const a21 = matrix[9]\n const a22 = matrix[10]\n const a23 = matrix[11]\n const a30 = matrix[12]\n const a31 = matrix[13]\n const a32 = matrix[14]\n const a33 = matrix[15]\n\n const b00 = a00 * a11 - a01 * a10\n const b01 = a00 * a12 - a02 * a10\n const b02 = a00 * a13 - a03 * a10\n const b03 = a01 * a12 - a02 * a11\n const b04 = a01 * a13 - a03 * a11\n const b05 = a02 * a13 - a03 * a12\n const b06 = a20 * a31 - a21 * a30\n const b07 = a20 * a32 - a22 * a30\n const b08 = a20 * a33 - a23 * a30\n const b09 = a21 * a32 - a22 * a31\n const b10 = a21 * a33 - a23 * a31\n const b11 = a22 * a33 - a23 * a32\n\n // Calculate the determinant\n let det =\n b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06\n\n if (!det) {\n return null\n }\n det = 1.0 / det\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det\n\n return out\n}\n\nmodule.exports = invert\n","/**\n * Determine whether the given matrix is the identity transform.\n * This is equivalent to (but much faster than):\n *\n * mat4.equals(mat4.create(), matrix)\n *\n * @param {mat4} matrix - the matrix\n * @returns {Boolean} true if matrix is the identity transform\n * @alias module:modeling/maths/mat4.isIdentity\n * @example\n * if (mat4.isIdentity(mymatrix)) ...\n */\nconst isIdentity = (matrix) => (\n matrix[0] === 1 && matrix[1] === 0 && matrix[2] === 0 && matrix[3] === 0 &&\n matrix[4] === 0 && matrix[5] === 1 && matrix[6] === 0 && matrix[7] === 0 &&\n matrix[8] === 0 && matrix[9] === 0 && matrix[10] === 1 && matrix[11] === 0 &&\n matrix[12] === 0 && matrix[13] === 0 && matrix[14] === 0 && matrix[15] === 1\n)\n\nmodule.exports = isIdentity\n","/**\n * Determine whether the given matrix is a mirroring transformation.\n *\n * @param {mat4} matrix - matrix of reference\n * @returns {Boolean} true if matrix is a mirroring transformation\n * @alias module:modeling/maths/mat4.isMirroring\n */\nconst isMirroring = (matrix) => {\n // const xVector = [matrix[0], matrix[4], matrix[8]]\n // const yVector = [matrix[1], matrix[5], matrix[9]]\n // const zVector = [matrix[2], matrix[6], matrix[10]]\n\n // for a true orthogonal, non-mirrored base, xVector.cross(yVector) == zVector\n // If they have an opposite direction then we are mirroring\n // calcuate xVector.cross(yVector)\n const x = matrix[4] * matrix[9] - matrix[8] * matrix[5]\n const y = matrix[8] * matrix[1] - matrix[0] * matrix[9]\n const z = matrix[0] * matrix[5] - matrix[4] * matrix[1]\n // calcualte dot(cross, zVector)\n const d = x * matrix[2] + y * matrix[6] + z * matrix[10]\n return (d < 0)\n}\n\nmodule.exports = isMirroring\n","\n/**\n * Determine whether the given matrix is only translate and/or scale.\n * This code returns true for TAU / 2 rotation as it can be interpreted as scale.\n *\n * @param {mat4} matrix - the matrix\n * @returns {Boolean} true if matrix is for translate and/or scale\n * @alias module:modeling/maths/mat4.isOnlyTransformScale\n */\nconst isOnlyTransformScale = (matrix) => (\n\n // TODO check if it is worth the effort to add recognition of 90 deg rotations\n\n isZero(matrix[1]) && isZero(matrix[2]) && isZero(matrix[3]) &&\n isZero(matrix[4]) && isZero(matrix[6]) && isZero(matrix[7]) &&\n isZero(matrix[8]) && isZero(matrix[9]) && isZero(matrix[11]) &&\n matrix[15] === 1\n)\n\nconst isZero = (num) => Math.abs(num) < Number.EPSILON\n\nmodule.exports = isOnlyTransformScale\n","/**\n * Create a matrix for mirroring about the given plane.\n *\n * @param {mat4} out - receiving matrix\n * @param {vec4} plane - plane of which to mirror the matrix\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.mirrorByPlane\n */\nconst mirrorByPlane = (out, plane) => {\n const [nx, ny, nz, w] = plane\n\n out[0] = (1.0 - 2.0 * nx * nx)\n out[1] = (-2.0 * ny * nx)\n out[2] = (-2.0 * nz * nx)\n out[3] = 0\n out[4] = (-2.0 * nx * ny)\n out[5] = (1.0 - 2.0 * ny * ny)\n out[6] = (-2.0 * nz * ny)\n out[7] = 0\n out[8] = (-2.0 * nx * nz)\n out[9] = (-2.0 * ny * nz)\n out[10] = (1.0 - 2.0 * nz * nz)\n out[11] = 0\n out[12] = (2.0 * nx * w)\n out[13] = (2.0 * ny * w)\n out[14] = (2.0 * nz * w)\n out[15] = 1\n\n return out\n}\n\nmodule.exports = mirrorByPlane\n","/**\n * Multiplies the two matrices.\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} a - first operand\n * @param {mat4} b - second operand\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.multiply\n */\nconst multiply = (out, a, b) => {\n const a00 = a[0]\n const a01 = a[1]\n const a02 = a[2]\n const a03 = a[3]\n const a10 = a[4]\n const a11 = a[5]\n const a12 = a[6]\n const a13 = a[7]\n const a20 = a[8]\n const a21 = a[9]\n const a22 = a[10]\n const a23 = a[11]\n const a30 = a[12]\n const a31 = a[13]\n const a32 = a[14]\n const a33 = a[15]\n\n // Cache only the current line of the second matrix\n let b0 = b[0]\n let b1 = b[1]\n let b2 = b[2]\n let b3 = b[3]\n out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30\n out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31\n out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32\n out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33\n\n b0 = b[4]\n b1 = b[5]\n b2 = b[6]\n b3 = b[7]\n out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30\n out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31\n out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32\n out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33\n\n b0 = b[8]\n b1 = b[9]\n b2 = b[10]\n b3 = b[11]\n out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30\n out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31\n out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32\n out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33\n\n b0 = b[12]\n b1 = b[13]\n b2 = b[14]\n b3 = b[15]\n out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30\n out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31\n out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32\n out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33\n return out\n}\n\nmodule.exports = multiply\n","const { EPS } = require('../constants')\n\nconst { sin, cos } = require('../utils/trigonometry')\n\nconst copy = require('./copy')\n\n/**\n * Rotates a matrix by the given angle about the given axis.\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} matrix - matrix to rotate\n * @param {Number} radians - angle to rotate the matrix by\n * @param {vec3} axis - axis to rotate around\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.rotate\n */\nconst rotate = (out, matrix, radians, axis) => {\n let [x, y, z] = axis\n const lengthSquared = x * x + y * y + z * z\n\n if (Math.abs(lengthSquared) < EPS) {\n // axis is 0,0,0 or almost\n return copy(out, matrix)\n }\n\n const len = 1 / Math.sqrt(lengthSquared)\n x *= len\n y *= len\n z *= len\n\n const s = sin(radians)\n const c = cos(radians)\n const t = 1 - c\n\n const a00 = matrix[0]\n const a01 = matrix[1]\n const a02 = matrix[2]\n const a03 = matrix[3]\n const a10 = matrix[4]\n const a11 = matrix[5]\n const a12 = matrix[6]\n const a13 = matrix[7]\n const a20 = matrix[8]\n const a21 = matrix[9]\n const a22 = matrix[10]\n const a23 = matrix[11]\n\n // Construct the elements of the rotation matrix\n const b00 = x * x * t + c\n const b01 = y * x * t + z * s\n const b02 = z * x * t - y * s\n const b10 = x * y * t - z * s\n const b11 = y * y * t + c\n const b12 = z * y * t + x * s\n const b20 = x * z * t + y * s\n const b21 = y * z * t - x * s\n const b22 = z * z * t + c\n\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02\n out[1] = a01 * b00 + a11 * b01 + a21 * b02\n out[2] = a02 * b00 + a12 * b01 + a22 * b02\n out[3] = a03 * b00 + a13 * b01 + a23 * b02\n out[4] = a00 * b10 + a10 * b11 + a20 * b12\n out[5] = a01 * b10 + a11 * b11 + a21 * b12\n out[6] = a02 * b10 + a12 * b11 + a22 * b12\n out[7] = a03 * b10 + a13 * b11 + a23 * b12\n out[8] = a00 * b20 + a10 * b21 + a20 * b22\n out[9] = a01 * b20 + a11 * b21 + a21 * b22\n out[10] = a02 * b20 + a12 * b21 + a22 * b22\n out[11] = a03 * b20 + a13 * b21 + a23 * b22\n\n if (matrix !== out) { // If the source and destination differ, copy the unchanged last row\n out[12] = matrix[12]\n out[13] = matrix[13]\n out[14] = matrix[14]\n out[15] = matrix[15]\n }\n return out\n}\n\nmodule.exports = rotate\n","const { sin, cos } = require('../utils/trigonometry')\n\n/**\n * Rotates a matrix by the given angle around the X axis.\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} matrix - matrix to rotate\n * @param {Number} radians - angle to rotate the matrix by\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.rotateX\n */\nconst rotateX = (out, matrix, radians) => {\n const s = sin(radians)\n const c = cos(radians)\n const a10 = matrix[4]\n const a11 = matrix[5]\n const a12 = matrix[6]\n const a13 = matrix[7]\n const a20 = matrix[8]\n const a21 = matrix[9]\n const a22 = matrix[10]\n const a23 = matrix[11]\n\n if (matrix !== out) { // If the source and destination differ, copy the unchanged rows\n out[0] = matrix[0]\n out[1] = matrix[1]\n out[2] = matrix[2]\n out[3] = matrix[3]\n out[12] = matrix[12]\n out[13] = matrix[13]\n out[14] = matrix[14]\n out[15] = matrix[15]\n }\n\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s\n out[5] = a11 * c + a21 * s\n out[6] = a12 * c + a22 * s\n out[7] = a13 * c + a23 * s\n out[8] = a20 * c - a10 * s\n out[9] = a21 * c - a11 * s\n out[10] = a22 * c - a12 * s\n out[11] = a23 * c - a13 * s\n return out\n}\n\nmodule.exports = rotateX\n","const { sin, cos } = require('../utils/trigonometry')\n\n/**\n * Rotates a matrix by the given angle around the Y axis.\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} matrix - matrix to rotate\n * @param {Number} radians - angle to rotate the matrix by\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.rotateY\n */\nconst rotateY = (out, matrix, radians) => {\n const s = sin(radians)\n const c = cos(radians)\n const a00 = matrix[0]\n const a01 = matrix[1]\n const a02 = matrix[2]\n const a03 = matrix[3]\n const a20 = matrix[8]\n const a21 = matrix[9]\n const a22 = matrix[10]\n const a23 = matrix[11]\n\n if (matrix !== out) { // If the source and destination differ, copy the unchanged rows\n out[4] = matrix[4]\n out[5] = matrix[5]\n out[6] = matrix[6]\n out[7] = matrix[7]\n out[12] = matrix[12]\n out[13] = matrix[13]\n out[14] = matrix[14]\n out[15] = matrix[15]\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s\n out[1] = a01 * c - a21 * s\n out[2] = a02 * c - a22 * s\n out[3] = a03 * c - a23 * s\n out[8] = a00 * s + a20 * c\n out[9] = a01 * s + a21 * c\n out[10] = a02 * s + a22 * c\n out[11] = a03 * s + a23 * c\n return out\n}\n\nmodule.exports = rotateY\n","const { sin, cos } = require('../utils/trigonometry')\n\n/**\n * Rotates a matrix by the given angle around the Z axis.\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} matrix - matrix to rotate\n * @param {Number} radians - angle to rotate the matrix by\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.rotateZ\n */\nconst rotateZ = (out, matrix, radians) => {\n const s = sin(radians)\n const c = cos(radians)\n const a00 = matrix[0]\n const a01 = matrix[1]\n const a02 = matrix[2]\n const a03 = matrix[3]\n const a10 = matrix[4]\n const a11 = matrix[5]\n const a12 = matrix[6]\n const a13 = matrix[7]\n\n if (matrix !== out) { // If the source and destination differ, copy the unchanged last row\n out[8] = matrix[8]\n out[9] = matrix[9]\n out[10] = matrix[10]\n out[11] = matrix[11]\n out[12] = matrix[12]\n out[13] = matrix[13]\n out[14] = matrix[14]\n out[15] = matrix[15]\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s\n out[1] = a01 * c + a11 * s\n out[2] = a02 * c + a12 * s\n out[3] = a03 * c + a13 * s\n out[4] = a10 * c - a00 * s\n out[5] = a11 * c - a01 * s\n out[6] = a12 * c - a02 * s\n out[7] = a13 * c - a03 * s\n return out\n}\n\nmodule.exports = rotateZ\n","/**\n * Scales the matrix by the given dimensions.\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} matrix - matrix to scale\n * @param {vec3} dimensions - dimensions to scale the matrix by\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.scale\n */\nconst scale = (out, matrix, dimensions) => {\n const x = dimensions[0]\n const y = dimensions[1]\n const z = dimensions[2]\n\n out[0] = matrix[0] * x\n out[1] = matrix[1] * x\n out[2] = matrix[2] * x\n out[3] = matrix[3] * x\n out[4] = matrix[4] * y\n out[5] = matrix[5] * y\n out[6] = matrix[6] * y\n out[7] = matrix[7] * y\n out[8] = matrix[8] * z\n out[9] = matrix[9] * z\n out[10] = matrix[10] * z\n out[11] = matrix[11] * z\n out[12] = matrix[12]\n out[13] = matrix[13]\n out[14] = matrix[14]\n out[15] = matrix[15]\n return out\n}\n\nmodule.exports = scale\n","/**\n * Subtracts matrix b from matrix a. (A-B)\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} a - first operand\n * @param {mat4} b - second operand\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.subtract\n */\nconst subtract = (out, a, b) => {\n out[0] = a[0] - b[0]\n out[1] = a[1] - b[1]\n out[2] = a[2] - b[2]\n out[3] = a[3] - b[3]\n out[4] = a[4] - b[4]\n out[5] = a[5] - b[5]\n out[6] = a[6] - b[6]\n out[7] = a[7] - b[7]\n out[8] = a[8] - b[8]\n out[9] = a[9] - b[9]\n out[10] = a[10] - b[10]\n out[11] = a[11] - b[11]\n out[12] = a[12] - b[12]\n out[13] = a[13] - b[13]\n out[14] = a[14] - b[14]\n out[15] = a[15] - b[15]\n return out\n}\n\nmodule.exports = subtract\n","/**\n * Return a string representing the given matrix.\n *\n * @param {mat4} mat - matrix of reference\n * @returns {String} string representation\n * @alias module:modeling/maths/mat4.toString\n */\nconst toString = (mat) => mat.map((n) => n.toFixed(7)).toString()\n\nmodule.exports = toString\n","/**\n * Translate the matrix by the given offset vector.\n *\n * @param {mat4} out - receiving matrix\n * @param {mat4} matrix - matrix to translate\n * @param {vec3} offsets - offset vector to translate by\n * @returns {mat4} out\n * @alias module:modeling/maths/mat4.translate\n */\nconst translate = (out, matrix, offsets) => {\n const x = offsets[0]\n const y = offsets[1]\n const z = offsets[2]\n let a00\n let a01\n let a02\n let a03\n let a10\n let a11\n let a12\n let a13\n let a20\n let a21\n let a22\n let a23\n\n if (matrix === out) {\n // 0-11 assignments are unnecessary\n out[12] = matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]\n out[13] = matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]\n out[14] = matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]\n out[15] = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15]\n } else {\n a00 = matrix[0]; a01 = matrix[1]; a02 = matrix[2]; a03 = matrix[3]\n a10 = matrix[4]; a11 = matrix[5]; a12 = matrix[6]; a13 = matrix[7]\n a20 = matrix[8]; a21 = matrix[9]; a22 = matrix[10]; a23 = matrix[11]\n\n out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03\n out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13\n out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23\n\n out[12] = a00 * x + a10 * y + a20 * z + matrix[12]\n out[13] = a01 * x + a11 * y + a21 * z + matrix[13]\n out[14] = a02 * x + a12 * y + a22 * z + matrix[14]\n out[15] = a03 * x + a13 * y + a23 * z + matrix[15]\n }\n\n return out\n}\n\nmodule.exports = translate\n","/**\n * Flip the given plane.\n *\n * @param {plane} out - receiving plane\n * @param {plane} plane - plane to flip\n * @return {plane} out\n * @alias module:modeling/maths/plane.flip\n */\nconst flip = (out, plane) => {\n out[0] = -plane[0]\n out[1] = -plane[1]\n out[2] = -plane[2]\n out[3] = -plane[3]\n return out\n}\n\nmodule.exports = flip\n","const vec3 = require('../vec3')\n\n/**\n * Represents a plane in 3D coordinate space as determined by a normal (perpendicular to the plane)\n * and distance from 0,0,0.\n *\n * The contents of the array are a normal [0,1,2] and a distance [3].\n * @see https://en.wikipedia.org/wiki/Hesse_normal_form\n * @typedef {Array} plane\n */\n\n/**\n * Create a new plane from the given normal and point values.\n *\n * @param {plane} out - receiving plane\n * @param {vec3} normal - directional vector\n * @param {vec3} point - origin of plane\n * @returns {plane} out\n * @alias module:modeling/maths/plane.fromNormalAndPoint\n */\nconst fromNormalAndPoint = (out, normal, point) => {\n const u = vec3.normalize(vec3.create(), normal)\n const w = vec3.dot(point, u)\n\n out[0] = u[0]\n out[1] = u[1]\n out[2] = u[2]\n out[3] = w\n return out\n}\n\nmodule.exports = fromNormalAndPoint\n","const vec3 = require('../vec3')\n\n/**\n * Create a plane from the given points.\n *\n * @param {plane} out - receiving plane\n * @param {Array} vertices - points on the plane\n * @returns {plane} out\n * @alias module:modeling/maths/plane.fromPoints\n */\nconst fromPoints = (out, ...vertices) => {\n const len = vertices.length\n\n // Calculate normal vector for a single vertex\n // Inline to avoid allocations\n const ba = vec3.create()\n const ca = vec3.create()\n const vertexNormal = (index) => {\n const a = vertices[index]\n const b = vertices[(index + 1) % len]\n const c = vertices[(index + 2) % len]\n vec3.subtract(ba, b, a) // ba = b - a\n vec3.subtract(ca, c, a) // ca = c - a\n vec3.cross(ba, ba, ca) // ba = ba x ca\n vec3.normalize(ba, ba)\n return ba\n }\n\n out[0] = 0\n out[1] = 0\n out[2] = 0\n if (len === 3) {\n // optimization for triangles, which are always coplanar\n vec3.copy(out, vertexNormal(0))\n } else {\n // sum of vertex normals\n vertices.forEach((v, i) => {\n vec3.add(out, out, vertexNormal(i))\n })\n // renormalize normal vector\n vec3.normalize(out, out)\n }\n out[3] = vec3.dot(out, vertices[0])\n return out\n}\n\nmodule.exports = fromPoints\n","const { EPS } = require('../constants')\n\nconst vec3 = require('../vec3')\n\n/**\n * Create a new plane from the given points like fromPoints,\n * but allow the vectors to be on one point or one line.\n * In such a case, a random plane through the given points is constructed.\n *\n * @param {plane} out - receiving plane\n * @param {vec3} a - 3D point\n * @param {vec3} b - 3D point\n * @param {vec3} c - 3D point\n * @returns {plane} out\n * @alias module:modeling/maths/plane.fromPointsRandom\n */\nconst fromPointsRandom = (out, a, b, c) => {\n let ba = vec3.subtract(vec3.create(), b, a)\n let ca = vec3.subtract(vec3.create(), c, a)\n if (vec3.length(ba) < EPS) {\n ba = vec3.orthogonal(ba, ca)\n }\n if (vec3.length(ca) < EPS) {\n ca = vec3.orthogonal(ca, ba)\n }\n let normal = vec3.cross(vec3.create(), ba, ca)\n if (vec3.length(normal) < EPS) {\n // this would mean that ba == ca.negated()\n ca = vec3.orthogonal(ca, ba)\n normal = vec3.cross(normal, ba, ca)\n }\n normal = vec3.normalize(normal, normal)\n const w = vec3.dot(normal, a)\n\n out[0] = normal[0]\n out[1] = normal[1]\n out[2] = normal[2]\n out[3] = w\n return out\n}\n\nmodule.exports = fromPointsRandom\n","/**\n * Represents a plane in 3D coordinate space as determined by a normal (perpendicular to the plane)\n * and distance from 0,0,0.\n * @see {@link plane} for data structure information.\n * @module modeling/maths/plane\n */\nmodule.exports = {\n /**\n * @see [vec4.clone()]{@link module:modeling/maths/vec4.clone}\n * @function clone\n */\n clone: require('../vec4/clone'),\n /**\n * @see [vec4.copy()]{@link module:modeling/maths/vec4.copy}\n * @function copy\n */\n copy: require('../vec4/copy'),\n /**\n * @see [vec4.create()]{@link module:modeling/maths/vec4.create}\n * @function create\n */\n create: require('../vec4/create'),\n /**\n * @see [vec4.equals()]{@link module:modeling/maths/vec4.equals}\n * @function equals\n */\n equals: require('../vec4/equals'),\n flip: require('./flip'),\n fromNormalAndPoint: require('./fromNormalAndPoint'),\n /**\n * @see [vec4.fromValues()]{@link module:modeling/maths/vec4.fromValues}\n * @function fromValues\n */\n fromValues: require('../vec4/fromValues'),\n fromPoints: require('./fromPoints'),\n fromPointsRandom: require('./fromPointsRandom'),\n projectionOfPoint: require('./projectionOfPoint'),\n signedDistanceToPoint: require('./signedDistanceToPoint'),\n /**\n * @see [vec4.toString()]{@link module:modeling/maths/vec4.toString}\n * @function toString\n */\n toString: require('../vec4/toString'),\n transform: require('./transform')\n}\n","const vec3 = require('../vec3')\n\n/**\n * Project the given point on to the given plane.\n *\n * @param {plane} plane - plane of reference\n * @param {vec3} point - point of reference\n * @return {vec3} projected point on plane\n * @alias module:modeling/maths/plane.projectionOfPoint\n */\nconst projectionOfPoint = (plane, point) => {\n const a = point[0] * plane[0] + point[1] * plane[1] + point[2] * plane[2] - plane[3]\n const x = point[0] - a * plane[0]\n const y = point[1] - a * plane[1]\n const z = point[2] - a * plane[2]\n return vec3.fromValues(x, y, z)\n}\n\nmodule.exports = projectionOfPoint\n","const vec3 = require('../vec3')\n\n/**\n * Calculate the distance to the given point.\n *\n * @param {plane} plane - plane of reference\n * @param {vec3} point - point of reference\n * @return {Number} signed distance to point\n * @alias module:modeling/maths/plane.signedDistanceToPoint\n */\nconst signedDistanceToPoint = (plane, point) => vec3.dot(plane, point) - plane[3]\n\nmodule.exports = signedDistanceToPoint\n","const mat4 = require('../mat4')\nconst vec3 = require('../vec3')\n\nconst fromPoints = require('./fromPoints')\nconst flip = require('./flip')\n\n/**\n * Transform the given plane using the given matrix\n *\n * @param {plane} out - receiving plane\n * @param {plane} plane - plane to transform\n * @param {mat4} matrix - matrix to transform with\n * @return {plane} out\n * @alias module:modeling/maths/plane.transform\n */\nconst transform = (out, plane, matrix) => {\n const ismirror = mat4.isMirroring(matrix)\n // get two vectors in the plane:\n const r = vec3.orthogonal(vec3.create(), plane)\n const u = vec3.cross(r, plane, r)\n const v = vec3.cross(vec3.create(), plane, u)\n // get 3 points in the plane:\n let point1 = vec3.fromScalar(vec3.create(), plane[3])\n vec3.multiply(point1, point1, plane)\n let point2 = vec3.add(vec3.create(), point1, u)\n let point3 = vec3.add(vec3.create(), point1, v)\n // transform the points:\n point1 = vec3.transform(point1, point1, matrix)\n point2 = vec3.transform(point2, point2, matrix)\n point3 = vec3.transform(point3, point3, matrix)\n // and create a new plane from the transformed points:\n fromPoints(out, point1, point2, point3)\n if (ismirror) {\n // the transform is mirroring so flip the plane\n flip(out, out)\n }\n return out\n}\n\nmodule.exports = transform\n","const { NEPS } = require('../constants')\n\n/**\n * Compare two normals (unit vectors) for near equality.\n * @param {vec3} a - normal a\n * @param {vec3} b - normal b\n * @returns {Boolean} true if a and b are nearly equal\n * @alias module:modeling/maths/utils.aboutEqualNormals\n */\nconst aboutEqualNormals = (a, b) => (Math.abs(a[0] - b[0]) <= NEPS && Math.abs(a[1] - b[1]) <= NEPS && Math.abs(a[2] - b[2]) <= NEPS)\n\nmodule.exports = aboutEqualNormals\n","/**\n * Calculate the area under the given points.\n * @param {Array} points - list of 2D points\n * @return {Number} area under the given points\n * @alias module:modeling/maths/utils.area\n */\nconst area = (points) => {\n let area = 0\n for (let i = 0; i < points.length; i++) {\n const j = (i + 1) % points.length\n area += points[i][0] * points[j][1]\n area -= points[j][0] * points[i][1]\n }\n return (area / 2.0)\n}\n\nmodule.exports = area\n","/**\n * Utility functions for maths.\n * @module modeling/maths/utils\n * @example\n * const { area, solve2Linear } = require('@jscad/maths').utils\n */\nmodule.exports = {\n aboutEqualNormals: require('./aboutEqualNormals'),\n area: require('./area'),\n cos: require('./trigonometry').cos,\n interpolateBetween2DPointsForY: require('./interpolateBetween2DPointsForY'),\n intersect: require('./intersect'),\n sin: require('./trigonometry').sin,\n solve2Linear: require('./solve2Linear')\n}\n","/**\n * Get the X coordinate of a point with a certain Y coordinate, interpolated between two points.\n * Interpolation is robust even if the points have the same Y coordinate\n * @param {vec2} point1\n * @param {vec2} point2\n * @param {Number} y\n * @return {Array} X and Y of interpolated point\n * @alias module:modeling/maths/utils.interpolateBetween2DPointsForY\n */\nconst interpolateBetween2DPointsForY = (point1, point2, y) => {\n let f1 = y - point1[1]\n let f2 = point2[1] - point1[1]\n if (f2 < 0) {\n f1 = -f1\n f2 = -f2\n }\n let t\n if (f1 <= 0) {\n t = 0.0\n } else if (f1 >= f2) {\n t = 1.0\n } else if (f2 < 1e-10) { // FIXME Should this be EPS?\n t = 0.5\n } else {\n t = f1 / f2\n }\n const result = point1[0] + t * (point2[0] - point1[0])\n return result\n}\n\nmodule.exports = interpolateBetween2DPointsForY\n","/**\n * Calculate the intersect point of the two line segments (p1-p2 and p3-p4), end points included.\n * Note: If the line segments do NOT intersect then undefined is returned.\n * @see http://paulbourke.net/geometry/pointlineplane/\n * @param {vec2} p1 - first point of first line segment\n * @param {vec2} p2 - second point of first line segment\n * @param {vec2} p3 - first point of second line segment\n * @param {vec2} p4 - second point of second line segment\n * @returns {vec2} intersection point of the two line segments, or undefined\n * @alias module:modeling/maths/utils.intersect\n */\nconst intersect = (p1, p2, p3, p4) => {\n // Check if none of the lines are of length 0\n if ((p1[0] === p2[0] && p1[1] === p2[1]) || (p3[0] === p4[0] && p3[1] === p4[1])) {\n return undefined\n }\n\n const denominator = ((p4[1] - p3[1]) * (p2[0] - p1[0]) - (p4[0] - p3[0]) * (p2[1] - p1[1]))\n\n // Lines are parallel\n if (Math.abs(denominator) < Number.MIN_VALUE) {\n return undefined\n }\n\n const ua = ((p4[0] - p3[0]) * (p1[1] - p3[1]) - (p4[1] - p3[1]) * (p1[0] - p3[0])) / denominator\n const ub = ((p2[0] - p1[0]) * (p1[1] - p3[1]) - (p2[1] - p1[1]) * (p1[0] - p3[0])) / denominator\n\n // is the intersection along the segments\n if (ua < 0 || ua > 1 || ub < 0 || ub > 1) {\n return undefined\n }\n\n // Return the x and y coordinates of the intersection\n const x = p1[0] + ua * (p2[0] - p1[0])\n const y = p1[1] + ua * (p2[1] - p1[1])\n\n return [x, y]\n}\n\nmodule.exports = intersect\n","const solve2Linear = (a, b, c, d, u, v) => {\n const det = a * d - b * c\n const invdet = 1.0 / det\n let x = u * d - b * v\n let y = -u * c + a * v\n x *= invdet\n y *= invdet\n return [x, y]\n}\n\nmodule.exports = solve2Linear\n","const { NEPS } = require('../constants')\n\n/*\n * Returns zero if n is within epsilon of zero, otherwise return n\n */\nconst rezero = (n) => Math.abs(n) < NEPS ? 0 : n\n\n/**\n * Return Math.sin but accurate for TAU / 4 rotations.\n * Fixes rounding errors when sin should be 0.\n *\n * @param {Number} radians - angle in radians\n * @returns {Number} sine of the given angle\n * @alias module:modeling/utils.sin\n * @example\n * sin(TAU / 2) == 0\n * sin(TAU) == 0\n */\nconst sin = (radians) => rezero(Math.sin(radians))\n\n/**\n * Return Math.cos but accurate for TAU / 4 rotations.\n * Fixes rounding errors when cos should be 0.\n *\n * @param {Number} radians - angle in radians\n * @returns {Number} cosine of the given angle\n * @alias module:modeling/utils.cos\n * @example\n * cos(TAU * 0.25) == 0\n * cos(TAU * 0.75) == 0\n */\nconst cos = (radians) => rezero(Math.cos(radians))\n\nmodule.exports = { sin, cos }\n","/**\n * Calculates the absolute coordinates of the given vector.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - vector of reference\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.abs\n */\nconst abs = (out, vector) => {\n out[0] = Math.abs(vector[0])\n out[1] = Math.abs(vector[1])\n return out\n}\n\nmodule.exports = abs\n","/**\n * Adds the coordinates of two vectors (A+B).\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.add\n */\nconst add = (out, a, b) => {\n out[0] = a[0] + b[0]\n out[1] = a[1] + b[1]\n return out\n}\n\nmodule.exports = add\n","module.exports = require('./angleRadians')\n","const angleRadians = require('./angleRadians')\n\n/**\n * Calculate the angle of the given vector.\n *\n * @param {vec2} vector - vector of reference\n * @returns {Number} angle in degrees\n * @alias module:modeling/maths/vec2.angleDegrees\n */\nconst angleDegrees = (vector) => angleRadians(vector) * 57.29577951308232\n\nmodule.exports = angleDegrees\n","/**\n * Calculate the angle of the given vector.\n *\n * @param {vec2} vector - vector of reference\n * @returns {Number} angle in radians\n * @alias module:modeling/maths/vec2.angleRadians\n */\nconst angleRadians = (vector) => Math.atan2(vector[1], vector[0]) // y=sin, x=cos\n\nmodule.exports = angleRadians\n","const create = require('./create')\n\n/**\n * Create a clone of the given vector.\n *\n * @param {vec2} vector - vector to clone\n * @returns {vec2} a new vector\n * @alias module:modeling/maths/vec2.clone\n */\nconst clone = (vector) => {\n const out = create()\n out[0] = vector[0]\n out[1] = vector[1]\n return out\n}\n\nmodule.exports = clone\n","/**\n * Create a copy of the given vector.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - source vector\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.copy\n */\nconst copy = (out, vector) => {\n out[0] = vector[0]\n out[1] = vector[1]\n return out\n}\n\nmodule.exports = copy\n","/**\n * Represents a two dimensional vector.\n * See fromValues().\n * @typedef {Array} vec2\n */\n\n/**\n * Creates a new vector, initialized to [0,0].\n *\n * @returns {vec2} a new vector\n * @alias module:modeling/maths/vec2.create\n */\nconst create = () => [0, 0]\n\nmodule.exports = create\n","/**\n * Computes the cross product (3D) of two vectors.\n *\n * @param {vec3} out - receiving vector (3D)\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {vec3} out\n * @alias module:modeling/maths/vec2.cross\n */\nconst cross = (out, a, b) => {\n out[0] = 0\n out[1] = 0\n out[2] = a[0] * b[1] - a[1] * b[0]\n return out\n}\n\nmodule.exports = cross\n","/**\n * Calculates the distance between two vectors.\n *\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {Number} distance\n * @alias module:modeling/maths/vec2.distance\n */\nconst distance = (a, b) => {\n const x = b[0] - a[0]\n const y = b[1] - a[1]\n return Math.sqrt(x * x + y * y)\n}\n\nmodule.exports = distance\n","/**\n * Divides the coordinates of two vectors (A/B).\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.divide\n */\nconst divide = (out, a, b) => {\n out[0] = a[0] / b[0]\n out[1] = a[1] / b[1]\n return out\n}\n\nmodule.exports = divide\n","/**\n * Calculates the dot product of two vectors.\n *\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {Number} dot product\n * @alias module:modeling/maths/vec2.dot\n */\nconst dot = (a, b) => a[0] * b[0] + a[1] * b[1]\n\nmodule.exports = dot\n","/**\n * Compare the given vectors for equality.\n *\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {Boolean} true if a and b are equal\n * @alias module:modeling/maths/vec2.equals\n */\nconst equals = (a, b) => (a[0] === b[0]) && (a[1] === b[1])\n\nmodule.exports = equals\n","const fromAngleRadians = require('./fromAngleRadians')\n\n/**\n * Create a new vector in the direction of the given angle.\n *\n * @param {vec2} out - receiving vector\n * @param {Number} degrees - angle in degrees\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.fromAngleDegrees\n */\nconst fromAngleDegrees = (out, degrees) => fromAngleRadians(out, degrees * 0.017453292519943295)\n\nmodule.exports = fromAngleDegrees\n","const { sin, cos } = require('../utils/trigonometry')\n\n/**\n * Create a new vector in the direction of the given angle.\n *\n * @param {vec2} out - receiving vector\n * @param {Number} radians - angle in radians\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.fromAngleRadians\n */\nconst fromAngleRadians = (out, radians) => {\n out[0] = cos(radians)\n out[1] = sin(radians)\n return out\n}\n\nmodule.exports = fromAngleRadians\n","/**\n * Create a vector from a single scalar value.\n *\n * @param {vec2} out - receiving vector\n * @param {Number} scalar - the scalar value\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.fromScalar\n */\nconst fromScalar = (out, scalar) => {\n out[0] = scalar\n out[1] = scalar\n return out\n}\n\nmodule.exports = fromScalar\n","const create = require('./create')\n\n/**\n * Creates a new vector initialized with the given values.\n *\n * @param {Number} x - X coordinate\n * @param {Number} y - Y coordinate\n * @returns {vec2} a new vector\n * @alias module:modeling/maths/vec2.fromValues\n */\nconst fromValues = (x, y) => {\n const out = create()\n out[0] = x\n out[1] = y\n return out\n}\n\nmodule.exports = fromValues\n","/**\n * Represents a two dimensional vector.\n * @module modeling/maths/vec2\n */\nmodule.exports = {\n abs: require('./abs'),\n add: require('./add'),\n angle: require('./angle'),\n angleDegrees: require('./angleDegrees'),\n angleRadians: require('./angleRadians'),\n clone: require('./clone'),\n copy: require('./copy'),\n create: require('./create'),\n cross: require('./cross'),\n distance: require('./distance'),\n divide: require('./divide'),\n dot: require('./dot'),\n equals: require('./equals'),\n fromAngleDegrees: require('./fromAngleDegrees'),\n fromAngleRadians: require('./fromAngleRadians'),\n fromScalar: require('./fromScalar'),\n fromValues: require('./fromValues'),\n length: require('./length'),\n lerp: require('./lerp'),\n max: require('./max'),\n min: require('./min'),\n multiply: require('./multiply'),\n negate: require('./negate'),\n normal: require('./normal'),\n normalize: require('./normalize'),\n rotate: require('./rotate'),\n scale: require('./scale'),\n snap: require('./snap'),\n squaredDistance: require('./squaredDistance'),\n squaredLength: require('./squaredLength'),\n subtract: require('./subtract'),\n toString: require('./toString'),\n transform: require('./transform')\n}\n","/**\n * Calculates the length of the given vector.\n *\n * @param {vec2} vector - vector of reference\n * @returns {Number} length\n * @alias module:modeling/maths/vec2.length\n */\nconst length = (vector) => Math.sqrt(vector[0] * vector[0] + vector[1] * vector[1])\n\nmodule.exports = length\n","/**\n * Performs a linear interpolation between two vectors.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @param {Number} t - interpolation amount between the two vectors\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.lerp\n */\nconst lerp = (out, a, b, t) => {\n const ax = a[0]\n const ay = a[1]\n out[0] = ax + t * (b[0] - ax)\n out[1] = ay + t * (b[1] - ay)\n return out\n}\n\nmodule.exports = lerp\n","/**\n * Returns the maximum coordinates of two vectors.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.max\n */\nconst max = (out, a, b) => {\n out[0] = Math.max(a[0], b[0])\n out[1] = Math.max(a[1], b[1])\n return out\n}\n\nmodule.exports = max\n","/**\n * Returns the minimum coordinates of two vectors.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.min\n */\nconst min = (out, a, b) => {\n out[0] = Math.min(a[0], b[0])\n out[1] = Math.min(a[1], b[1])\n return out\n}\n\nmodule.exports = min\n","/**\n * Multiplies the coordinates of two vectors (A*B).\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.multiply\n */\nconst multiply = (out, a, b) => {\n out[0] = a[0] * b[0]\n out[1] = a[1] * b[1]\n return out\n}\n\nmodule.exports = multiply\n","/**\n * Negates the coordinates of the given vector.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - vector to negate\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.negate\n */\nconst negate = (out, vector) => {\n out[0] = -vector[0]\n out[1] = -vector[1]\n return out\n}\n\nmodule.exports = negate\n","const { TAU } = require('../constants')\n\nconst create = require('./create')\nconst rotate = require('./rotate')\n\n/**\n * Calculates the normal of the given vector.\n * The normal value is the given vector rotated 90 degrees.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - given value\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.normal\n */\nconst normal = (out, vector) => rotate(out, vector, create(), (TAU / 4))\n\nmodule.exports = normal\n","/**\n * Normalize the given vector.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - vector to normalize\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.normalize\n */\nconst normalize = (out, vector) => {\n const x = vector[0]\n const y = vector[1]\n let len = x * x + y * y\n if (len > 0) {\n len = 1 / Math.sqrt(len)\n }\n out[0] = x * len\n out[1] = y * len\n return out\n}\n\n// old this.dividedBy(this.length())\n\nmodule.exports = normalize\n","/**\n * Rotates the given vector by the given angle.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - vector to rotate\n * @param {vec2} origin - origin of the rotation\n * @param {Number} radians - angle of rotation (radians)\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.rotate\n */\nconst rotate = (out, vector, origin, radians) => {\n const x = vector[0] - origin[0]\n const y = vector[1] - origin[1]\n const c = Math.cos(radians)\n const s = Math.sin(radians)\n\n out[0] = x * c - y * s + origin[0]\n out[1] = x * s + y * c + origin[1]\n\n return out\n}\n\nmodule.exports = rotate\n","/**\n * Scales the coordinates of the given vector.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - vector to scale\n * @param {Number} amount - amount to scale\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.scale\n */\nconst scale = (out, vector, amount) => {\n out[0] = vector[0] * amount\n out[1] = vector[1] * amount\n return out\n}\n\nmodule.exports = scale\n","/**\n * Snaps the coordinates of the given vector to the given epsilon.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - vector to snap\n * @param {Number} epsilon - epsilon of precision, less than 0\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.snap\n */\nconst snap = (out, vector, epsilon) => {\n out[0] = Math.round(vector[0] / epsilon) * epsilon + 0\n out[1] = Math.round(vector[1] / epsilon) * epsilon + 0\n return out\n}\n\nmodule.exports = snap\n","/**\n * Calculates the squared distance between the given vectors.\n *\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {Number} squared distance\n * @alias module:modeling/maths/vec2.squaredDistance\n */\nconst squaredDistance = (a, b) => {\n const x = b[0] - a[0]\n const y = b[1] - a[1]\n return x * x + y * y\n}\n\nmodule.exports = squaredDistance\n","/**\n * Calculates the squared length of the given vector.\n *\n * @param {vec2} vector - vector of reference\n * @returns {Number} squared length\n * @alias module:modeling/maths/vec2.squaredLength\n */\nconst squaredLength = (vector) => {\n const x = vector[0]\n const y = vector[1]\n return x * x + y * y\n}\n\nmodule.exports = squaredLength\n","/**\n * Subtracts the coordinates of two vectors (A-B).\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} a - first operand\n * @param {vec2} b - second operand\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.subtract\n */\nconst subtract = (out, a, b) => {\n out[0] = a[0] - b[0]\n out[1] = a[1] - b[1]\n return out\n}\n\nmodule.exports = subtract\n","/**\n * Convert the given vector to a representative string.\n *\n * @param {vec2} vector - vector of reference\n * @returns {String} string representation\n * @alias module:modeling/maths/vec2.toString\n */\nconst toString = (vector) => `[${vector[0].toFixed(7)}, ${vector[1].toFixed(7)}]`\n\nmodule.exports = toString\n","/**\n * Transforms the given vector using the given matrix.\n *\n * @param {vec2} out - receiving vector\n * @param {vec2} vector - vector to transform\n * @param {mat4} matrix - matrix to transform with\n * @returns {vec2} out\n * @alias module:modeling/maths/vec2.transform\n */\nconst transform = (out, vector, matrix) => {\n const x = vector[0]\n const y = vector[1]\n out[0] = matrix[0] * x + matrix[4] * y + matrix[12]\n out[1] = matrix[1] * x + matrix[5] * y + matrix[13]\n return out\n}\n\nmodule.exports = transform\n","/**\n * Calculates the absolute coordinates of the give vector.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector of reference\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.abs\n */\nconst abs = (out, vector) => {\n out[0] = Math.abs(vector[0])\n out[1] = Math.abs(vector[1])\n out[2] = Math.abs(vector[2])\n return out\n}\n\nmodule.exports = abs\n","/**\n * Adds the coordinates of two vectors (A+B).\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.add\n */\nconst add = (out, a, b) => {\n out[0] = a[0] + b[0]\n out[1] = a[1] + b[1]\n out[2] = a[2] + b[2]\n return out\n}\n\nmodule.exports = add\n","const dot = require('./dot')\n\n/**\n * Calculate the angle between two vectors.\n *\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {Number} angle (radians)\n * @alias module:modeling/maths/vec3.angle\n */\nconst angle = (a, b) => {\n const ax = a[0]\n const ay = a[1]\n const az = a[2]\n const bx = b[0]\n const by = b[1]\n const bz = b[2]\n const mag1 = Math.sqrt(ax * ax + ay * ay + az * az)\n const mag2 = Math.sqrt(bx * bx + by * by + bz * bz)\n const mag = mag1 * mag2\n const cosine = mag && dot(a, b) / mag\n return Math.acos(Math.min(Math.max(cosine, -1), 1))\n}\n\nmodule.exports = angle\n","const create = require('./create')\n\n/**\n * Create a clone of the given vector.\n *\n * @param {vec3} vector - vector to clone\n * @returns {vec3} a new vector\n * @alias module:modeling/maths/vec3.clone\n */\nconst clone = (vector) => {\n const out = create()\n out[0] = vector[0]\n out[1] = vector[1]\n out[2] = vector[2]\n return out\n}\n\nmodule.exports = clone\n","/**\n * Create a copy of the given vector.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to copy\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.copy\n */\nconst copy = (out, vector) => {\n out[0] = vector[0]\n out[1] = vector[1]\n out[2] = vector[2]\n return out\n}\n\nmodule.exports = copy\n","/**\n * Represents a three dimensional vector.\n * See fromValues().\n * @typedef {Array} vec3\n */\n\n/**\n * Creates a new vector initialized to [0,0,0].\n *\n * @returns {vec3} a new vector\n * @alias module:modeling/maths/vec3.create\n */\nconst create = () => [0, 0, 0]\n\nmodule.exports = create\n","/**\n * Computes the cross product of the given vectors (AxB).\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.cross\n */\nconst cross = (out, a, b) => {\n const ax = a[0]\n const ay = a[1]\n const az = a[2]\n const bx = b[0]\n const by = b[1]\n const bz = b[2]\n\n out[0] = ay * bz - az * by\n out[1] = az * bx - ax * bz\n out[2] = ax * by - ay * bx\n return out\n}\n\nmodule.exports = cross\n","/**\n * Calculates the Euclidian distance between the given vectors.\n *\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {Number} distance\n * @alias module:modeling/maths/vec3.distance\n */\nconst distance = (a, b) => {\n const x = b[0] - a[0]\n const y = b[1] - a[1]\n const z = b[2] - a[2]\n return Math.sqrt(x * x + y * y + z * z)\n}\n\nmodule.exports = distance\n","/**\n * Divides the coordinates of two vectors (A/B).\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} a - dividend vector\n * @param {vec3} b - divisor vector\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.divide\n */\nconst divide = (out, a, b) => {\n out[0] = a[0] / b[0]\n out[1] = a[1] / b[1]\n out[2] = a[2] / b[2]\n return out\n}\n\nmodule.exports = divide\n","/**\n * Calculates the dot product of two vectors.\n *\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {Number} dot product\n * @alias module:modeling/maths/vec3.dot\n */\nconst dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2]\n\nmodule.exports = dot\n","/**\n * Compare the given vectors for equality.\n *\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {Boolean} true if a and b are equal\n * @alias module:modeling/maths/vec3.equals\n */\nconst equals = (a, b) => (a[0] === b[0]) && (a[1] === b[1]) && (a[2] === b[2])\n\nmodule.exports = equals\n","/**\n * Creates a vector from a single scalar value.\n * All components of the resulting vector have the given value.\n *\n * @param {vec3} out - receiving vector\n * @param {Number} scalar\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.fromScalar\n */\nconst fromScalar = (out, scalar) => {\n out[0] = scalar\n out[1] = scalar\n out[2] = scalar\n return out\n}\n\nmodule.exports = fromScalar\n","const create = require('./create')\n\n/**\n * Creates a new vector initialized with the given values.\n *\n * @param {Number} x - X component\n * @param {Number} y - Y component\n * @param {Number} z - Z component\n * @returns {vec3} a new vector\n * @alias module:modeling/maths/vec3.fromValues\n */\nconst fromValues = (x, y, z) => {\n const out = create()\n out[0] = x\n out[1] = y\n out[2] = z\n return out\n}\n\nmodule.exports = fromValues\n","/**\n * Create a new vector by extending a 2D vector with a Z value.\n *\n * @param {vec3} out - receiving vector\n * @param {Array} vector - 2D vector of values\n * @param {Number} [z=0] - Z value\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.fromVec2\n */\nconst fromVector2 = (out, vector, z = 0) => {\n out[0] = vector[0]\n out[1] = vector[1]\n out[2] = z\n return out\n}\n\nmodule.exports = fromVector2\n","/**\n * Represents a three dimensional vector.\n * @see {@link vec3} for data structure information.\n * @module modeling/maths/vec3\n */\nmodule.exports = {\n abs: require('./abs'),\n add: require('./add'),\n angle: require('./angle'),\n clone: require('./clone'),\n copy: require('./copy'),\n create: require('./create'),\n cross: require('./cross'),\n distance: require('./distance'),\n divide: require('./divide'),\n dot: require('./dot'),\n equals: require('./equals'),\n fromScalar: require('./fromScalar'),\n fromValues: require('./fromValues'),\n fromVec2: require('./fromVec2'),\n length: require('./length'),\n lerp: require('./lerp'),\n max: require('./max'),\n min: require('./min'),\n multiply: require('./multiply'),\n negate: require('./negate'),\n normalize: require('./normalize'),\n orthogonal: require('./orthogonal'),\n rotateX: require('./rotateX'),\n rotateY: require('./rotateY'),\n rotateZ: require('./rotateZ'),\n scale: require('./scale'),\n snap: require('./snap'),\n squaredDistance: require('./squaredDistance'),\n squaredLength: require('./squaredLength'),\n subtract: require('./subtract'),\n toString: require('./toString'),\n transform: require('./transform')\n}\n","/**\n * Calculates the length of a vector.\n *\n * @param {vec3} vector - vector to calculate length of\n * @returns {Number} length\n * @alias module:modeling/maths/vec3.length\n */\nconst length = (vector) => {\n const x = vector[0]\n const y = vector[1]\n const z = vector[2]\n return Math.sqrt(x * x + y * y + z * z)\n}\n\nmodule.exports = length\n","/**\n * Performs a linear interpolation between two vectors.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @param {Number} t - interpolant (0.0 to 1.0) applied between the two inputs\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.lerp\n */\nconst lerp = (out, a, b, t) => {\n out[0] = a[0] + t * (b[0] - a[0])\n out[1] = a[1] + t * (b[1] - a[1])\n out[2] = a[2] + t * (b[2] - a[2])\n return out\n}\n\nmodule.exports = lerp\n","/**\n * Returns the maximum coordinates of the given vectors.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.max\n */\nconst max = (out, a, b) => {\n out[0] = Math.max(a[0], b[0])\n out[1] = Math.max(a[1], b[1])\n out[2] = Math.max(a[2], b[2])\n return out\n}\n\nmodule.exports = max\n","/**\n * Returns the minimum coordinates of the given vectors.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.min\n */\nconst min = (out, a, b) => {\n out[0] = Math.min(a[0], b[0])\n out[1] = Math.min(a[1], b[1])\n out[2] = Math.min(a[2], b[2])\n return out\n}\n\nmodule.exports = min\n","/**\n * Multiply the coordinates of the given vectors (A*B).\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.multiply\n */\nconst multiply = (out, a, b) => {\n out[0] = a[0] * b[0]\n out[1] = a[1] * b[1]\n out[2] = a[2] * b[2]\n return out\n}\n\nmodule.exports = multiply\n","/**\n * Negates the coordinates of the given vector.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to negate\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.negate\n */\nconst negate = (out, vector) => {\n out[0] = -vector[0]\n out[1] = -vector[1]\n out[2] = -vector[2]\n return out\n}\n\nmodule.exports = negate\n","/**\n * Normalize the given vector.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to normalize\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.normalize\n */\nconst normalize = (out, vector) => {\n const x = vector[0]\n const y = vector[1]\n const z = vector[2]\n let len = x * x + y * y + z * z\n if (len > 0) {\n len = 1 / Math.sqrt(len)\n }\n out[0] = x * len\n out[1] = y * len\n out[2] = z * len\n return out\n}\n\nmodule.exports = normalize\n","const abs = require('./abs')\nconst create = require('./create')\nconst cross = require('./cross')\n\n/**\n * Create a new vector that is orthogonal to the given vector.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector of reference\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.orthogonal\n */\nconst orthogonal = (out, vector) => {\n const bV = abs(create(), vector)\n const b0 = 0 + ((bV[0] < bV[1]) && (bV[0] < bV[2]))\n const b1 = 0 + ((bV[1] <= bV[0]) && (bV[1] < bV[2]))\n const b2 = 0 + ((bV[2] <= bV[0]) && (bV[2] <= bV[1]))\n\n return cross(out, vector, [b0, b1, b2])\n}\n\nmodule.exports = orthogonal\n","/**\n * Rotate the given vector around the given origin, X axis only.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to rotate\n * @param {vec3} origin - origin of the rotation\n * @param {Number} radians - angle of rotation\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.rotateX\n */\nconst rotateX = (out, vector, origin, radians) => {\n const p = []\n const r = []\n\n // translate point to the origin\n p[0] = vector[0] - origin[0]\n p[1] = vector[1] - origin[1]\n p[2] = vector[2] - origin[2]\n\n // perform rotation\n r[0] = p[0]\n r[1] = p[1] * Math.cos(radians) - p[2] * Math.sin(radians)\n r[2] = p[1] * Math.sin(radians) + p[2] * Math.cos(radians)\n\n // translate to correct position\n out[0] = r[0] + origin[0]\n out[1] = r[1] + origin[1]\n out[2] = r[2] + origin[2]\n\n return out\n}\n\nmodule.exports = rotateX\n","/**\n * Rotate the given vector around the given origin, Y axis only.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to rotate\n * @param {vec3} origin - origin of the rotation\n * @param {Number} radians - angle of rotation\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.rotateY\n */\nconst rotateY = (out, vector, origin, radians) => {\n const p = []\n const r = []\n\n // translate point to the origin\n p[0] = vector[0] - origin[0]\n p[1] = vector[1] - origin[1]\n p[2] = vector[2] - origin[2]\n\n // perform rotation\n r[0] = p[2] * Math.sin(radians) + p[0] * Math.cos(radians)\n r[1] = p[1]\n r[2] = p[2] * Math.cos(radians) - p[0] * Math.sin(radians)\n\n // translate to correct position\n out[0] = r[0] + origin[0]\n out[1] = r[1] + origin[1]\n out[2] = r[2] + origin[2]\n\n return out\n}\n\nmodule.exports = rotateY\n","/**\n * Rotate the given vector around the given origin, Z axis only.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to rotate\n * @param {vec3} origin - origin of the rotation\n * @param {Number} radians - angle of rotation in radians\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.rotateZ\n */\nconst rotateZ = (out, vector, origin, radians) => {\n const p = []\n const r = []\n // Translate point to the origin\n p[0] = vector[0] - origin[0]\n p[1] = vector[1] - origin[1]\n\n // perform rotation\n r[0] = (p[0] * Math.cos(radians)) - (p[1] * Math.sin(radians))\n r[1] = (p[0] * Math.sin(radians)) + (p[1] * Math.cos(radians))\n\n // translate to correct position\n out[0] = r[0] + origin[0]\n out[1] = r[1] + origin[1]\n out[2] = vector[2]\n\n return out\n}\n\nmodule.exports = rotateZ\n","/**\n * Scales the coordinates of the given vector by a scalar number.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to scale\n * @param {Number} amount - amount to scale the vector by\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.scale\n */\nconst scale = (out, vector, amount) => {\n out[0] = vector[0] * amount\n out[1] = vector[1] * amount\n out[2] = vector[2] * amount\n return out\n}\n\nmodule.exports = scale\n","/**\n * Snaps the coordinates of the given vector to the given epsilon.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to snap\n * @param {Number} epsilon - epsilon of precision, less than 0\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.snap\n */\nconst snap = (out, vector, epsilon) => {\n out[0] = Math.round(vector[0] / epsilon) * epsilon + 0\n out[1] = Math.round(vector[1] / epsilon) * epsilon + 0\n out[2] = Math.round(vector[2] / epsilon) * epsilon + 0\n return out\n}\n\nmodule.exports = snap\n","/**\n * Calculates the squared distance between two vectors.\n *\n * @param {vec3} a - first operand\n * @param {vec3} b - second operand\n * @returns {Number} squared distance\n * @alias module:modeling/maths/vec3.squaredDistance\n */\nconst squaredDistance = (a, b) => {\n const x = b[0] - a[0]\n const y = b[1] - a[1]\n const z = b[2] - a[2]\n return x * x + y * y + z * z\n}\n\nmodule.exports = squaredDistance\n","/**\n * Calculates the squared length of the given vector.\n *\n * @param {vec3} vector - vector to calculate squared length of\n * @returns {Number} squared length\n * @alias module:modeling/maths/vec3.squaredLength\n */\nconst squaredLength = (vector) => {\n const x = vector[0]\n const y = vector[1]\n const z = vector[2]\n return x * x + y * y + z * z\n}\n\nmodule.exports = squaredLength\n","/**\n * Subtracts the coordinates of two vectors (A-B).\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} a - minuend vector\n * @param {vec3} b - subtrahend vector\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.subtract\n */\nconst subtract = (out, a, b) => {\n out[0] = a[0] - b[0]\n out[1] = a[1] - b[1]\n out[2] = a[2] - b[2]\n return out\n}\n\nmodule.exports = subtract\n","/**\n * Convert the given vector to a representative string.\n * @param {vec3} vec - vector of reference\n * @returns {String} string representation\n * @alias module:modeling/maths/vec3.toString\n */\nconst toString = (vec) => `[${vec[0].toFixed(7)}, ${vec[1].toFixed(7)}, ${vec[2].toFixed(7)}]`\n\nmodule.exports = toString\n","/**\n * Transforms the given vector using the given matrix.\n *\n * @param {vec3} out - receiving vector\n * @param {vec3} vector - vector to transform\n * @param {mat4} matrix - transform matrix\n * @returns {vec3} out\n * @alias module:modeling/maths/vec3.transform\n */\nconst transform = (out, vector, matrix) => {\n const x = vector[0]\n const y = vector[1]\n const z = vector[2]\n let w = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15]\n w = w || 1.0\n out[0] = (matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12]) / w\n out[1] = (matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13]) / w\n out[2] = (matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14]) / w\n return out\n}\n\nmodule.exports = transform\n","const create = require('./create')\n\n/**\n * Create a clone of the given vector.\n *\n * @param {vec4} vector - source vector\n * @returns {vec4} a new vector\n * @alias module:modeling/maths/vec4.clone\n */\nconst clone = (vector) => {\n const out = create()\n out[0] = vector[0]\n out[1] = vector[1]\n out[2] = vector[2]\n out[3] = vector[3]\n return out\n}\n\nmodule.exports = clone\n","/**\n * Create a copy of the given vector.\n *\n * @param {vec4} out - receiving vector\n * @param {vec4} vector - source vector\n * @returns {vec4} out\n * @alias module:modeling/maths/vec4.copy\n */\nconst copy = (out, vector) => {\n out[0] = vector[0]\n out[1] = vector[1]\n out[2] = vector[2]\n out[3] = vector[3]\n return out\n}\n\nmodule.exports = copy\n","/**\n * Represents a four dimensional vector.\n * See fromValues().\n * @typedef {Array} vec4\n */\n\n/**\n * Creates a new vector initialized to [0,0,0,0].\n *\n * @returns {vec4} a new vector\n * @alias module:modeling/maths/vec4.create\n */\nconst create = () => [0, 0, 0, 0]\n\nmodule.exports = create\n","/**\n * Calculates the dot product of the given vectors.\n *\n * @param {vec4} a - first vector\n * @param {vec4} b - second vector\n * @returns {Number} dot product\n * @alias module:modeling/maths/vec4.dot\n */\nconst dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]\n\nmodule.exports = dot\n","/**\n * Compare the given vectors for equality.\n *\n * @param {vec4} a - first vector\n * @param {vec4} b - second vector\n * @return {Boolean} true if vectors are equal\n * @alias module:modeling/maths/vec4.equals\n */\nconst equals = (a, b) => ((a[0] === b[0]) && (a[1] === b[1]) && (a[2] === b[2]) && (a[3] === b[3]))\n\nmodule.exports = equals\n","/**\n * Create a new vector from the given scalar value.\n *\n * @param {vec4} out - receiving vector\n * @param {Number} scalar\n * @returns {vec4} out\n * @alias module:modeling/maths/vec4.fromScalar\n */\nconst fromScalar = (out, scalar) => {\n out[0] = scalar\n out[1] = scalar\n out[2] = scalar\n out[3] = scalar\n return out\n}\n\nmodule.exports = fromScalar\n","const create = require('./create')\n\n/**\n * Creates a new vector with the given values.\n *\n * @param {Number} x - X component\n * @param {Number} y - Y component\n * @param {Number} z - Z component\n * @param {Number} w - W component\n * @returns {vec4} a new vector\n * @alias module:modeling/maths/vec4.fromValues\n */\nconst fromValues = (x, y, z, w) => {\n const out = create()\n out[0] = x\n out[1] = y\n out[2] = z\n out[3] = w\n return out\n}\n\nmodule.exports = fromValues\n","/**\n * Represents a four dimensional vector.\n * @see {@link vec4} for data structure information.\n * @module modeling/maths/vec4\n */\nmodule.exports = {\n clone: require('./clone'),\n copy: require('./copy'),\n create: require('./create'),\n dot: require('./dot'),\n equals: require('./equals'),\n fromScalar: require('./fromScalar'),\n fromValues: require('./fromValues'),\n toString: require('./toString'),\n transform: require('./transform')\n}\n","/**\n * Convert the given vector to a representative string.\n *\n * @param {vec4} vec - vector to convert\n * @returns {String} representative string\n * @alias module:modeling/maths/vec4.toString\n */\nconst toString = (vec) => `(${vec[0].toFixed(9)}, ${vec[1].toFixed(9)}, ${vec[2].toFixed(9)}, ${vec[3].toFixed(9)})`\n\nmodule.exports = toString\n","/**\n * Transform the given vector using the given matrix.\n *\n * @param {vec4} out - receiving vector\n * @param {vec4} vector - vector to transform\n * @param {mat4} matrix - matrix to transform with\n * @returns {vec4} out\n * @alias module:modeling/maths/vec4.transform\n */\nconst transform = (out, vector, matrix) => {\n const [x, y, z, w] = vector\n\n out[0] = matrix[0] * x + matrix[4] * y + matrix[8] * z + matrix[12] * w\n out[1] = matrix[1] * x + matrix[5] * y + matrix[9] * z + matrix[13] * w\n out[2] = matrix[2] * x + matrix[6] * y + matrix[10] * z + matrix[14] * w\n out[3] = matrix[3] * x + matrix[7] * y + matrix[11] * z + matrix[15] * w\n return out\n}\n\nmodule.exports = transform\n","const { EPS } = require('../maths/constants')\n\nconst calculateEpsilonFromBounds = (bounds, dimensions) => {\n let total = 0\n for (let i = 0; i < dimensions; i++) {\n total += bounds[1][i] - bounds[0][i]\n }\n return EPS * total / dimensions\n}\n\nmodule.exports = calculateEpsilonFromBounds\n","/**\n * All shapes (primitives or the results of operations) can be measured, e.g. calculate volume, etc.\n * @module modeling/measurements\n * @example\n * const { measureArea, measureBoundingBox, measureVolume } = require('@jscad/modeling').measurements\n */\nmodule.exports = {\n measureAggregateArea: require('./measureAggregateArea'),\n measureAggregateBoundingBox: require('./measureAggregateBoundingBox'),\n measureAggregateEpsilon: require('./measureAggregateEpsilon'),\n measureAggregateVolume: require('./measureAggregateVolume'),\n measureArea: require('./measureArea'),\n measureBoundingBox: require('./measureBoundingBox'),\n measureBoundingSphere: require('./measureBoundingSphere'),\n measureCenter: require('./measureCenter'),\n measureCenterOfMass: require('./measureCenterOfMass'),\n measureDimensions: require('./measureDimensions'),\n measureEpsilon: require('./measureEpsilon'),\n measureVolume: require('./measureVolume')\n}\n","const flatten = require('../utils/flatten')\n\nconst measureArea = require('./measureArea')\n\n/**\n * Measure the total (aggregate) area for the given geometries.\n * Note: This measurement will not account for overlapping geometry\n * @param {...Object} geometries - the geometries to measure.\n * @return {Number} the total surface area for the group of geometry.\n * @alias module:modeling/measurements.measureAggregateArea\n *\n * @example\n * let totalArea = measureAggregateArea(sphere(),cube())\n */\nconst measureAggregateArea = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('measureAggregateArea: no geometries supplied')\n const areas = measureArea(geometries)\n if (geometries.length === 1) {\n return areas\n }\n const result = 0\n return areas.reduce((result, area) => result + area, result)\n}\n\nmodule.exports = measureAggregateArea\n","const flatten = require('../utils/flatten')\nconst vec3min = require('../maths/vec3/min')\nconst vec3max = require('../maths/vec3/max')\n\nconst measureBoundingBox = require('./measureBoundingBox')\n\n/**\n * Measure the aggregated minimum and maximum bounds for the given geometries.\n * @param {...Object} geometries - the geometries to measure\n * @return {Array} the min and max bounds for the group of geometry, i.e. [[x,y,z],[X,Y,Z]]\n * @alias module:modeling/measurements.measureAggregateBoundingBox\n *\n * @example\n * let bounds = measureAggregateBoundingBox(sphere(),cube())\n */\nconst measureAggregateBoundingBox = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('measureAggregateBoundingBox: no geometries supplied')\n const bounds = measureBoundingBox(geometries)\n if (geometries.length === 1) {\n return bounds\n }\n const result = [[Number.MAX_VALUE, Number.MAX_VALUE, Number.MAX_VALUE], [-Number.MAX_VALUE, -Number.MAX_VALUE, -Number.MAX_VALUE]]\n return bounds.reduce((result, item) => {\n result = [vec3min(result[0], result[0], item[0]), vec3max(result[1], result[1], item[1])]\n return result\n }, result)\n}\n\nmodule.exports = measureAggregateBoundingBox\n","const flatten = require('../utils/flatten')\nconst measureAggregateBoundingBox = require('./measureAggregateBoundingBox')\nconst calculateEpsilonFromBounds = require('./calculateEpsilonFromBounds')\nconst { geom2, geom3, path2 } = require('../geometries')\n\n/**\n * Measure the aggregated Epsilon for the given geometries.\n * @param {...Object} geometries - the geometries to measure\n * @return {Number} the aggregated Epsilon for the whole group of geometries\n * @alias module:modeling/measurements.measureAggregateEpsilon\n *\n * @example\n * let groupEpsilon = measureAggregateEpsilon(sphere(),cube())\n */\nconst measureAggregateEpsilon = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('measureAggregateEpsilon: no geometries supplied')\n const bounds = measureAggregateBoundingBox(geometries)\n\n let dimensions = 0\n dimensions = geometries.reduce((dimensions, geometry) => {\n if (path2.isA(geometry) || geom2.isA(geometry)) return Math.max(dimensions, 2)\n if (geom3.isA(geometry)) return Math.max(dimensions, 3)\n return 0\n }, dimensions)\n return calculateEpsilonFromBounds(bounds, dimensions)\n}\n\nmodule.exports = measureAggregateEpsilon\n","const flatten = require('../utils/flatten')\n\nconst measureVolume = require('./measureVolume')\n\n/**\n * Measure the total (aggregate) volume for the given geometries.\n * Note: This measurement will not account for overlapping geometry\n * @param {...Object} geometries - the geometries to measure.\n * @return {Number} the volume for the group of geometry.\n * @alias module:modeling/measurements.measureAggregateVolume\n *\n * @example\n * let totalVolume = measureAggregateVolume(sphere(),cube())\n */\nconst measureAggregateVolume = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('measureAggregateVolume: no geometries supplied')\n const volumes = measureVolume(geometries)\n if (geometries.length === 1) {\n return volumes\n }\n const result = 0\n return volumes.reduce((result, volume) => result + volume, result)\n}\n\nmodule.exports = measureAggregateVolume\n","const flatten = require('../utils/flatten')\n\nconst geom2 = require('../geometries/geom2')\nconst geom3 = require('../geometries/geom3')\nconst path2 = require('../geometries/path2')\nconst poly3 = require('../geometries/poly3')\n\nconst cache = new WeakMap()\n\n/*\n * Measure the area of the given geometry.\n * NOTE: paths are infinitely narrow and do not have an area\n *\n * @param {path2} geometry - geometry to measure\n * @returns {Number} area of the geometry\n */\nconst measureAreaOfPath2 = () => 0\n\n/*\n * Measure the area of the given geometry.\n * For a counter clockwise rotating geometry (about Z) the area is positive, otherwise negative.\n *\n * @see http://paulbourke.net/geometry/polygonmesh/\n * @param {geom2} geometry - 2D geometry to measure\n * @returns {Number} area of the geometry\n */\nconst measureAreaOfGeom2 = (geometry) => {\n let area = cache.get(geometry)\n if (area) return area\n\n const sides = geom2.toSides(geometry)\n area = sides.reduce((area, side) => area + (side[0][0] * side[1][1] - side[0][1] * side[1][0]), 0)\n area *= 0.5\n\n cache.set(geometry, area)\n\n return area\n}\n\n/*\n * Measure the area of the given geometry.\n *\n * @param {geom3} geometry - 3D geometry to measure\n * @returns {Number} area of the geometry\n */\nconst measureAreaOfGeom3 = (geometry) => {\n let area = cache.get(geometry)\n if (area) return area\n\n const polygons = geom3.toPolygons(geometry)\n area = polygons.reduce((area, polygon) => area + poly3.measureArea(polygon), 0)\n\n cache.set(geometry, area)\n\n return area\n}\n\n/**\n * Measure the area of the given geometries.\n * @param {...Objects} geometries - the geometries to measure\n * @return {Number|Array} the area, or a list of areas for each geometry\n * @alias module:modeling/measurements.measureArea\n *\n * @example\n * let area = measureArea(sphere())\n */\nconst measureArea = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n const results = geometries.map((geometry) => {\n if (path2.isA(geometry)) return measureAreaOfPath2(geometry)\n if (geom2.isA(geometry)) return measureAreaOfGeom2(geometry)\n if (geom3.isA(geometry)) return measureAreaOfGeom3(geometry)\n return 0\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = measureArea\n","const flatten = require('../utils/flatten')\n\nconst vec2 = require('../maths/vec2')\nconst vec3 = require('../maths/vec3')\n\nconst geom2 = require('../geometries/geom2')\nconst geom3 = require('../geometries/geom3')\nconst path2 = require('../geometries/path2')\nconst poly3 = require('../geometries/poly3')\n\nconst cache = new WeakMap()\n\n/*\n * Measure the min and max bounds of the given (path2) geometry.\n * @return {Array[]} the min and max bounds for the geometry\n */\nconst measureBoundingBoxOfPath2 = (geometry) => {\n let boundingBox = cache.get(geometry)\n if (boundingBox) return boundingBox\n\n const points = path2.toPoints(geometry)\n\n let minpoint\n if (points.length === 0) {\n minpoint = vec2.create()\n } else {\n minpoint = vec2.clone(points[0])\n }\n let maxpoint = vec2.clone(minpoint)\n\n points.forEach((point) => {\n vec2.min(minpoint, minpoint, point)\n vec2.max(maxpoint, maxpoint, point)\n })\n minpoint = [minpoint[0], minpoint[1], 0]\n maxpoint = [maxpoint[0], maxpoint[1], 0]\n\n boundingBox = [minpoint, maxpoint]\n\n cache.set(geometry, boundingBox)\n\n return boundingBox\n}\n\n/*\n * Measure the min and max bounds of the given (geom2) geometry.\n * @return {Array[]} the min and max bounds for the geometry\n */\nconst measureBoundingBoxOfGeom2 = (geometry) => {\n let boundingBox = cache.get(geometry)\n if (boundingBox) return boundingBox\n\n const points = geom2.toPoints(geometry)\n\n let minpoint\n if (points.length === 0) {\n minpoint = vec2.create()\n } else {\n minpoint = vec2.clone(points[0])\n }\n let maxpoint = vec2.clone(minpoint)\n\n points.forEach((point) => {\n vec2.min(minpoint, minpoint, point)\n vec2.max(maxpoint, maxpoint, point)\n })\n\n minpoint = [minpoint[0], minpoint[1], 0]\n maxpoint = [maxpoint[0], maxpoint[1], 0]\n\n boundingBox = [minpoint, maxpoint]\n\n cache.set(geometry, boundingBox)\n\n return boundingBox\n}\n\n/*\n * Measure the min and max bounds of the given (geom3) geometry.\n * @return {Array[]} the min and max bounds for the geometry\n */\nconst measureBoundingBoxOfGeom3 = (geometry) => {\n let boundingBox = cache.get(geometry)\n if (boundingBox) return boundingBox\n\n const polygons = geom3.toPolygons(geometry)\n\n let minpoint = vec3.create()\n if (polygons.length > 0) {\n const points = poly3.toPoints(polygons[0])\n vec3.copy(minpoint, points[0])\n }\n let maxpoint = vec3.clone(minpoint)\n\n polygons.forEach((polygon) => {\n poly3.toPoints(polygon).forEach((point) => {\n vec3.min(minpoint, minpoint, point)\n vec3.max(maxpoint, maxpoint, point)\n })\n })\n\n minpoint = [minpoint[0], minpoint[1], minpoint[2]]\n maxpoint = [maxpoint[0], maxpoint[1], maxpoint[2]]\n\n boundingBox = [minpoint, maxpoint]\n\n cache.set(geometry, boundingBox)\n\n return boundingBox\n}\n\n/**\n * Measure the min and max bounds of the given geometries.\n * @param {...Object} geometries - the geometries to measure\n * @return {Array} the min and max bounds, or a list of bounds for each geometry\n * @alias module:modeling/measurements.measureBoundingBox\n *\n * @example\n * let bounds = measureBoundingBox(sphere())\n */\nconst measureBoundingBox = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n const results = geometries.map((geometry) => {\n if (path2.isA(geometry)) return measureBoundingBoxOfPath2(geometry)\n if (geom2.isA(geometry)) return measureBoundingBoxOfGeom2(geometry)\n if (geom3.isA(geometry)) return measureBoundingBoxOfGeom3(geometry)\n return [[0, 0, 0], [0, 0, 0]]\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = measureBoundingBox\n","const flatten = require('../utils/flatten')\n\nconst vec2 = require('../maths/vec2')\nconst vec3 = require('../maths/vec3')\n\nconst geom2 = require('../geometries/geom2')\nconst geom3 = require('../geometries/geom3')\nconst path2 = require('../geometries/path2')\nconst poly3 = require('../geometries/poly3')\n\nconst cacheOfBoundingSpheres = new WeakMap()\n\n/*\n * Measure the bounding sphere of the given (path2) geometry.\n * @return {[[x, y, z], radius]} the bounding sphere for the geometry\n */\nconst measureBoundingSphereOfPath2 = (geometry) => {\n let boundingSphere = cacheOfBoundingSpheres.get(geometry)\n if (boundingSphere !== undefined) return boundingSphere\n\n const centroid = vec3.create()\n let radius = 0\n\n const points = path2.toPoints(geometry)\n\n if (points.length > 0) {\n // calculate the centroid of the geometry\n let numPoints = 0\n const temp = vec3.create()\n points.forEach((point) => {\n vec3.add(centroid, centroid, vec3.fromVec2(temp, point, 0))\n numPoints++\n })\n vec3.scale(centroid, centroid, 1 / numPoints)\n\n // find the farthest point from the centroid\n points.forEach((point) => {\n radius = Math.max(radius, vec2.squaredDistance(centroid, point))\n })\n radius = Math.sqrt(radius)\n }\n\n boundingSphere = [centroid, radius]\n cacheOfBoundingSpheres.set(geometry, boundingSphere)\n\n return boundingSphere\n}\n\n/*\n * Measure the bounding sphere of the given (geom2) geometry.\n * @return {[[x, y, z], radius]} the bounding sphere for the geometry\n */\nconst measureBoundingSphereOfGeom2 = (geometry) => {\n let boundingSphere = cacheOfBoundingSpheres.get(geometry)\n if (boundingSphere !== undefined) return boundingSphere\n\n const centroid = vec3.create()\n let radius = 0\n\n const sides = geom2.toSides(geometry)\n\n if (sides.length > 0) {\n // calculate the centroid of the geometry\n let numPoints = 0\n const temp = vec3.create()\n sides.forEach((side) => {\n vec3.add(centroid, centroid, vec3.fromVec2(temp, side[0], 0))\n numPoints++\n })\n vec3.scale(centroid, centroid, 1 / numPoints)\n\n // find the farthest point from the centroid\n sides.forEach((side) => {\n radius = Math.max(radius, vec2.squaredDistance(centroid, side[0]))\n })\n radius = Math.sqrt(radius)\n }\n\n boundingSphere = [centroid, radius]\n cacheOfBoundingSpheres.set(geometry, boundingSphere)\n\n return boundingSphere\n}\n\n/*\n * Measure the bounding sphere of the given (geom3) geometry.\n * @return {[[x, y, z], radius]} the bounding sphere for the geometry\n */\nconst measureBoundingSphereOfGeom3 = (geometry) => {\n let boundingSphere = cacheOfBoundingSpheres.get(geometry)\n if (boundingSphere !== undefined) return boundingSphere\n\n const centroid = vec3.create()\n let radius = 0\n\n const polygons = geom3.toPolygons(geometry)\n\n if (polygons.length > 0) {\n // calculate the centroid of the geometry\n let numPoints = 0\n polygons.forEach((polygon) => {\n poly3.toPoints(polygon).forEach((point) => {\n vec3.add(centroid, centroid, point)\n numPoints++\n })\n })\n vec3.scale(centroid, centroid, 1 / numPoints)\n\n // find the farthest point from the centroid\n polygons.forEach((polygon) => {\n poly3.toPoints(polygon).forEach((point) => {\n radius = Math.max(radius, vec3.squaredDistance(centroid, point))\n })\n })\n radius = Math.sqrt(radius)\n }\n\n boundingSphere = [centroid, radius]\n cacheOfBoundingSpheres.set(geometry, boundingSphere)\n\n return boundingSphere\n}\n\n/**\n * Measure the (approximate) bounding sphere of the given geometries.\n * @see https://en.wikipedia.org/wiki/Bounding_sphere\n * @param {...Object} geometries - the geometries to measure\n * @return {Array} the bounding sphere for each geometry, i.e. [centroid, radius]\n * @alias module:modeling/measurements.measureBoundingSphere\n *\n * @example\n * let bounds = measureBoundingSphere(cube())\n */\nconst measureBoundingSphere = (...geometries) => {\n geometries = flatten(geometries)\n\n const results = geometries.map((geometry) => {\n if (path2.isA(geometry)) return measureBoundingSphereOfPath2(geometry)\n if (geom2.isA(geometry)) return measureBoundingSphereOfGeom2(geometry)\n if (geom3.isA(geometry)) return measureBoundingSphereOfGeom3(geometry)\n return [[0, 0, 0], 0]\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = measureBoundingSphere\n","const flatten = require('../utils/flatten')\n\nconst measureBoundingBox = require('./measureBoundingBox')\n\n/**\n * Measure the center of the given geometries.\n * @param {...Object} geometries - the geometries to measure\n * @return {Array} the center point for each geometry, i.e. [X, Y, Z]\n * @alias module:modeling/measurements.measureCenter\n *\n * @example\n * let center = measureCenter(sphere())\n */\nconst measureCenter = (...geometries) => {\n geometries = flatten(geometries)\n\n const results = geometries.map((geometry) => {\n const bounds = measureBoundingBox(geometry)\n return [\n (bounds[0][0] + ((bounds[1][0] - bounds[0][0]) / 2)),\n (bounds[0][1] + ((bounds[1][1] - bounds[0][1]) / 2)),\n (bounds[0][2] + ((bounds[1][2] - bounds[0][2]) / 2))\n ]\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = measureCenter\n","const flatten = require('../utils/flatten')\n\nconst vec3 = require('../maths/vec3')\n\nconst geom2 = require('../geometries/geom2')\nconst geom3 = require('../geometries/geom3')\n\nconst cacheOfCenterOfMass = new WeakMap()\n\n/*\n * Measure the center of mass for the given geometry.\n *\n * @see http://paulbourke.net/geometry/polygonmesh/\n * @return {Array} the center of mass for the geometry\n */\nconst measureCenterOfMassGeom2 = (geometry) => {\n let centerOfMass = cacheOfCenterOfMass.get(geometry)\n if (centerOfMass !== undefined) return centerOfMass\n\n const sides = geom2.toSides(geometry)\n\n let area = 0\n let x = 0\n let y = 0\n if (sides.length > 0) {\n for (let i = 0; i < sides.length; i++) {\n const p1 = sides[i][0]\n const p2 = sides[i][1]\n\n const a = p1[0] * p2[1] - p1[1] * p2[0]\n area += a\n x += (p1[0] + p2[0]) * a\n y += (p1[1] + p2[1]) * a\n }\n area /= 2\n\n const f = 1 / (area * 6)\n x *= f\n y *= f\n }\n\n centerOfMass = vec3.fromValues(x, y, 0)\n\n cacheOfCenterOfMass.set(geometry, centerOfMass)\n return centerOfMass\n}\n\n/*\n * Measure the center of mass for the given geometry.\n * @return {Array} the center of mass for the geometry\n */\nconst measureCenterOfMassGeom3 = (geometry) => {\n let centerOfMass = cacheOfCenterOfMass.get(geometry)\n if (centerOfMass !== undefined) return centerOfMass\n\n centerOfMass = vec3.create() // 0, 0, 0\n\n const polygons = geom3.toPolygons(geometry)\n if (polygons.length === 0) return centerOfMass\n\n let totalVolume = 0\n const vector = vec3.create() // for speed\n polygons.forEach((polygon) => {\n // calculate volume and center of each tetrahedron\n const vertices = polygon.vertices\n for (let i = 0; i < vertices.length - 2; i++) {\n vec3.cross(vector, vertices[i + 1], vertices[i + 2])\n const volume = vec3.dot(vertices[0], vector) / 6\n\n totalVolume += volume\n\n vec3.add(vector, vertices[0], vertices[i + 1])\n vec3.add(vector, vector, vertices[i + 2])\n const weightedCenter = vec3.scale(vector, vector, 1 / 4 * volume)\n\n vec3.add(centerOfMass, centerOfMass, weightedCenter)\n }\n })\n vec3.scale(centerOfMass, centerOfMass, 1 / totalVolume)\n\n cacheOfCenterOfMass.set(geometry, centerOfMass)\n return centerOfMass\n}\n\n/**\n * Measure the center of mass for the given geometries.\n * @param {...Object} geometries - the geometries to measure\n * @return {Array} the center of mass for each geometry, i.e. [X, Y, Z]\n * @alias module:modeling/measurements.measureCenterOfMass\n *\n * @example\n * let center = measureCenterOfMass(sphere())\n */\nconst measureCenterOfMass = (...geometries) => {\n geometries = flatten(geometries)\n\n const results = geometries.map((geometry) => {\n // NOTE: center of mass for geometry path2 is not possible\n if (geom2.isA(geometry)) return measureCenterOfMassGeom2(geometry)\n if (geom3.isA(geometry)) return measureCenterOfMassGeom3(geometry)\n return [0, 0, 0]\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = measureCenterOfMass\n","const flatten = require('../utils/flatten')\n\nconst measureBoundingBox = require('./measureBoundingBox')\n\n/**\n * Measure the dimensions of the given geometries.\n * @param {...Object} geometries - the geometries to measure\n * @return {Array} the dimensions for each geometry, i.e. [width, depth, height]\n * @alias module:modeling/measurements.measureDimensions\n *\n * @example\n * let dimensions = measureDimensions(sphere())\n */\nconst measureDimensions = (...geometries) => {\n geometries = flatten(geometries)\n\n const results = geometries.map((geometry) => {\n const boundingBox = measureBoundingBox(geometry)\n return [\n boundingBox[1][0] - boundingBox[0][0],\n boundingBox[1][1] - boundingBox[0][1],\n boundingBox[1][2] - boundingBox[0][2]\n ]\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = measureDimensions\n","const flatten = require('../utils/flatten')\nconst { geom2, geom3, path2 } = require('../geometries')\n\nconst calculateEpsilonFromBounds = require('./calculateEpsilonFromBounds')\nconst measureBoundingBox = require('./measureBoundingBox')\n\n/*\n * Measure the epsilon of the given (path2) geometry.\n * @return {Number} the epsilon (precision) of the geometry\n */\nconst measureEpsilonOfPath2 = (geometry) => calculateEpsilonFromBounds(measureBoundingBox(geometry), 2)\n\n/*\n * Measure the epsilon of the given (geom2) geometry.\n * @return {Number} the epsilon (precision) of the geometry\n */\nconst measureEpsilonOfGeom2 = (geometry) => calculateEpsilonFromBounds(measureBoundingBox(geometry), 2)\n\n/*\n * Measure the epsilon of the given (geom3) geometry.\n * @return {Float} the epsilon (precision) of the geometry\n */\nconst measureEpsilonOfGeom3 = (geometry) => calculateEpsilonFromBounds(measureBoundingBox(geometry), 3)\n\n/**\n * Measure the epsilon of the given geometries.\n * Epsilon values are used in various functions to determine minimum distances between points, planes, etc.\n * @param {...Object} geometries - the geometries to measure\n * @return {Number|Array} the epsilon, or a list of epsilons for each geometry\n * @alias module:modeling/measurements.measureEpsilon\n *\n * @example\n * let epsilon = measureEpsilon(sphere())\n */\nconst measureEpsilon = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n const results = geometries.map((geometry) => {\n if (path2.isA(geometry)) return measureEpsilonOfPath2(geometry)\n if (geom2.isA(geometry)) return measureEpsilonOfGeom2(geometry)\n if (geom3.isA(geometry)) return measureEpsilonOfGeom3(geometry)\n return 0\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = measureEpsilon\n","const flatten = require('../utils/flatten')\n\nconst geom2 = require('../geometries/geom2')\nconst geom3 = require('../geometries/geom3')\nconst path2 = require('../geometries/path2')\nconst poly3 = require('../geometries/poly3')\n\nconst cache = new WeakMap()\n\n/*\n * Measure the volume of the given geometry.\n * NOTE: paths are infinitely narrow and do not have an volume\n *\n * @param {Path2} geometry - geometry to measure\n * @returns {Number} volume of the geometry\n */\nconst measureVolumeOfPath2 = () => 0\n\n/*\n * Measure the volume of the given geometry.\n * NOTE: 2D geometry are infinitely thin and do not have an volume\n *\n * @param {Geom2} geometry - 2D geometry to measure\n * @returns {Number} volume of the geometry\n */\nconst measureVolumeOfGeom2 = () => 0\n\n/*\n * Measure the volume of the given geometry.\n *\n * @param {Geom3} geometry - 3D geometry to measure\n * @returns {Number} volume of the geometry\n */\nconst measureVolumeOfGeom3 = (geometry) => {\n let volume = cache.get(geometry)\n if (volume) return volume\n\n const polygons = geom3.toPolygons(geometry)\n volume = polygons.reduce((volume, polygon) => volume + poly3.measureSignedVolume(polygon), 0)\n\n cache.set(geometry, volume)\n\n return volume\n}\n\n/**\n * Measure the volume of the given geometries.\n * @param {...Object} geometries - the geometries to measure\n * @return {Number|Array} the volume, or a list of volumes for each geometry\n * @alias module:modeling/measurements.measureVolume\n *\n * @example\n * let volume = measureVolume(sphere())\n */\nconst measureVolume = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n const results = geometries.map((geometry) => {\n if (path2.isA(geometry)) return measureVolumeOfPath2(geometry)\n if (geom2.isA(geometry)) return measureVolumeOfGeom2(geometry)\n if (geom3.isA(geometry)) return measureVolumeOfGeom3(geometry)\n return 0\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = measureVolume\n","const vec2 = require('../../maths/vec2')\n\nconst geom2 = require('../../geometries/geom2')\n\nconst fromFakePolygon = (epsilon, polygon) => {\n // this can happen based on union, seems to be residuals -\n // return null and handle in caller\n if (polygon.vertices.length < 4) {\n return null\n }\n const vert1Indices = []\n const points3D = polygon.vertices.filter((vertex, i) => {\n if (vertex[2] > 0) {\n vert1Indices.push(i)\n return true\n }\n return false\n })\n\n if (points3D.length !== 2) {\n throw new Error('Assertion failed: fromFakePolygon: not enough points found') // TBD remove later\n }\n\n const points2D = points3D.map((v3) => {\n const x = Math.round(v3[0] / epsilon) * epsilon + 0 // no more -0\n const y = Math.round(v3[1] / epsilon) * epsilon + 0 // no more -0\n return vec2.fromValues(x, y)\n })\n\n if (vec2.equals(points2D[0], points2D[1])) return null\n\n const d = vert1Indices[1] - vert1Indices[0]\n if (d === 1 || d === 3) {\n if (d === 1) {\n points2D.reverse()\n }\n } else {\n throw new Error('Assertion failed: fromFakePolygon: unknown index ordering')\n }\n return points2D\n}\n\n/*\n * Convert the given polygons to a list of sides.\n * The polygons must have only z coordinates +1 and -1, as constructed by to3DWalls().\n */\nconst fromFakePolygons = (epsilon, polygons) => {\n const sides = polygons.map((polygon) => fromFakePolygon(epsilon, polygon)).filter((polygon) => (polygon !== null))\n return geom2.create(sides)\n}\n\nmodule.exports = fromFakePolygons\n","/**\n * All shapes (primitives or the results of operations) can be passed to boolean functions\n * to perform logical operations, e.g. remove a hole from a board.\n * In all cases, the function returns the results, and never changes the original shapes.\n * @module modeling/booleans\n * @example\n * const { intersect, subtract, union } = require('@jscad/modeling').booleans\n */\nmodule.exports = {\n intersect: require('./intersect'),\n scission: require('./scission'),\n subtract: require('./subtract'),\n union: require('./union')\n}\n","const flatten = require('../../utils/flatten')\nconst areAllShapesTheSameType = require('../../utils/areAllShapesTheSameType')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\n\nconst intersectGeom2 = require('./intersectGeom2')\nconst intersectGeom3 = require('./intersectGeom3')\n\n/**\n * Return a new geometry representing space in both the first geometry and\n * all subsequent geometries.\n * The given geometries should be of the same type, either geom2 or geom3.\n *\n * @param {...Object} geometries - list of geometries\n * @returns {geom2|geom3} a new geometry\n * @alias module:modeling/booleans.intersect\n *\n * @example\n * let myshape = intersect(cube({size: [5,5,5]}), cube({size: [5,5,5], center: [5,5,5]}))\n *\n * @example\n * +-------+\n * | |\n * | A |\n * | +--+----+ = +--+\n * +----+--+ | +--+\n * | B |\n * | |\n * +-------+\n */\nconst intersect = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n if (!areAllShapesTheSameType(geometries)) {\n throw new Error('only intersect of the types are supported')\n }\n\n const geometry = geometries[0]\n // if (path.isA(geometry)) return pathintersect(matrix, geometries)\n if (geom2.isA(geometry)) return intersectGeom2(geometries)\n if (geom3.isA(geometry)) return intersectGeom3(geometries)\n return geometry\n}\n\nmodule.exports = intersect\n","const flatten = require('../../utils/flatten')\n\nconst geom3 = require('../../geometries/geom3')\n\nconst measureEpsilon = require('../../measurements/measureEpsilon')\n\nconst fromFakePolygons = require('./fromFakePolygons')\nconst to3DWalls = require('./to3DWalls')\nconst intersectGeom3 = require('./intersectGeom3')\n\n/*\n * Return a new 2D geometry representing space in both the first geometry and\n * in the subsequent geometries. None of the given geometries are modified.\n * @param {...geom2} geometries - list of 2D geometries\n * @returns {geom2} new 2D geometry\n */\nconst intersect = (...geometries) => {\n geometries = flatten(geometries)\n const newgeometries = geometries.map((geometry) => to3DWalls({ z0: -1, z1: 1 }, geometry))\n\n const newgeom3 = intersectGeom3(newgeometries)\n const epsilon = measureEpsilon(newgeom3)\n\n return fromFakePolygons(epsilon, geom3.toPolygons(newgeom3))\n}\n\nmodule.exports = intersect\n","const flatten = require('../../utils/flatten')\n\nconst retessellate = require('../modifiers/retessellate')\n\nconst intersectSub = require('./intersectGeom3Sub')\n\n/*\n * Return a new 3D geometry representing space in both the first geometry and\n * in the subsequent geometries. None of the given geometries are modified.\n * @param {...geom3} geometries - list of 3D geometries\n * @returns {geom3} new 3D geometry\n */\nconst intersect = (...geometries) => {\n geometries = flatten(geometries)\n\n let newgeometry = geometries.shift()\n geometries.forEach((geometry) => {\n newgeometry = intersectSub(newgeometry, geometry)\n })\n\n newgeometry = retessellate(newgeometry)\n return newgeometry\n}\n\nmodule.exports = intersect\n","const geom3 = require('../../geometries/geom3')\n\nconst mayOverlap = require('./mayOverlap')\nconst { Tree } = require('./trees')\n\n/*\n * Return a new 3D geometry representing the space in both the first geometry and\n * the second geometry. None of the given geometries are modified.\n * @param {geom3} geometry1 - a geometry\n * @param {geom3} geometry2 - a geometry\n * @returns {geom3} new 3D geometry\n */\nconst intersectGeom3Sub = (geometry1, geometry2) => {\n if (!mayOverlap(geometry1, geometry2)) {\n return geom3.create() // empty geometry\n }\n\n const a = new Tree(geom3.toPolygons(geometry1))\n const b = new Tree(geom3.toPolygons(geometry2))\n\n a.invert()\n b.clipTo(a)\n b.invert()\n a.clipTo(b)\n b.clipTo(a)\n a.addPolygons(b.allPolygons())\n a.invert()\n\n const newpolygons = a.allPolygons()\n return geom3.create(newpolygons)\n}\n\nmodule.exports = intersectGeom3Sub\n","const { EPS } = require('../../maths/constants')\n\nconst measureBoundingBox = require('../../measurements/measureBoundingBox')\n\n/*\n * Determine if the given geometries overlap by comparing min and max bounds.\n * NOTE: This is used in union for performance gains.\n * @param {geom3} geometry1 - geometry for comparison\n * @param {geom3} geometry2 - geometry for comparison\n * @returns {boolean} true if the geometries overlap\n */\nconst mayOverlap = (geometry1, geometry2) => {\n // FIXME accessing the data structure of the geometry should not be allowed\n if ((geometry1.polygons.length === 0) || (geometry2.polygons.length === 0)) {\n return false\n }\n\n const bounds1 = measureBoundingBox(geometry1)\n const min1 = bounds1[0]\n const max1 = bounds1[1]\n\n const bounds2 = measureBoundingBox(geometry2)\n const min2 = bounds2[0]\n const max2 = bounds2[1]\n\n if ((min2[0] - max1[0]) > EPS) return false\n if ((min1[0] - max2[0]) > EPS) return false\n if ((min2[1] - max1[1]) > EPS) return false\n if ((min1[1] - max2[1]) > EPS) return false\n if ((min2[2] - max1[2]) > EPS) return false\n if ((min1[2] - max2[2]) > EPS) return false\n return true\n}\n\nmodule.exports = mayOverlap\n","const flatten = require('../../utils/flatten')\n\n// const geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\n\n// const scissionGeom2 = require('./scissionGeom2')\nconst scissionGeom3 = require('./scissionGeom3')\n\n/**\n * Scission (divide) the given geometry into the component pieces.\n *\n * @param {...Object} objects - list of geometries\n * @returns {Array} list of pieces from each geometry\n * @alias module:modeling/booleans.scission\n *\n * @example\n * let figure = require('./my.stl')\n * let pieces = scission(figure)\n *\n * @example\n * +-------+ +-------+\n * | | | |\n * | +---+ | A +---+\n * | | +---+ = | | +---+\n * +---+ | | +---+ | |\n * +---+ | +---+ |\n * | | | B |\n * +-------+ +-------+\n */\nconst scission = (...objects) => {\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n const results = objects.map((object) => {\n // if (path2.isA(object)) return path2.transform(matrix, object)\n // if (geom2.isA(object)) return geom2.transform(matrix, object)\n if (geom3.isA(object)) return scissionGeom3(object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = scission\n","const vec3 = require('../../maths/vec3')\nconst measureEpsilon = require('../../measurements/measureEpsilon')\n\nconst geom3 = require('../../geometries/geom3')\n\n// returns array numerically sorted and duplicates removed\nconst sortNb = (array) => array.sort((a, b) => a - b).filter((item, pos, ary) => !pos || item !== ary[pos - 1])\n\nconst insertMapping = (map, point, index) => {\n const key = `${point}`\n const mapping = map.get(key)\n if (mapping === undefined) {\n map.set(key, [index])\n } else {\n mapping.push(index)\n }\n}\n\nconst findMapping = (map, point) => {\n const key = `${point}`\n return map.get(key)\n}\n\nconst scissionGeom3 = (geometry) => {\n // construit table de correspondance entre polygones\n // build polygons lookup table\n const eps = measureEpsilon(geometry)\n const polygons = geom3.toPolygons(geometry)\n const pl = polygons.length\n\n const indexesPerPoint = new Map()\n const temp = vec3.create()\n polygons.forEach((polygon, index) => {\n polygon.vertices.forEach((point) => {\n insertMapping(indexesPerPoint, vec3.snap(temp, point, eps), index)\n })\n })\n\n const indexesPerPolygon = polygons.map((polygon) => {\n let indexes = []\n polygon.vertices.forEach((point) => {\n indexes = indexes.concat(findMapping(indexesPerPoint, vec3.snap(temp, point, eps)))\n })\n return { e: 1, d: sortNb(indexes) } // for each polygon, push the list of indexes\n })\n\n indexesPerPoint.clear()\n\n // regroupe les correspondances des polygones se touchant\n // boucle ne s'arrêtant que quand deux passages retournent le même nb de polygones\n // merge lookup data from linked polygons as long as possible\n let merges = 0\n const ippl = indexesPerPolygon.length\n for (let i = 0; i < ippl; i++) {\n const mapi = indexesPerPolygon[i]\n // merge mappings if necessary\n if (mapi.e > 0) {\n const indexes = new Array(pl)\n indexes[i] = true // include ourself\n do {\n merges = 0\n // loop through the known indexes\n indexes.forEach((e, j) => {\n const mapj = indexesPerPolygon[j]\n // merge this mapping if necessary\n if (mapj.e > 0) {\n mapj.e = -1 // merged\n for (let d = 0; d < mapj.d.length; d++) {\n indexes[mapj.d[d]] = true\n }\n merges++\n }\n })\n } while (merges > 0)\n mapi.indexes = indexes\n }\n }\n\n // construit le tableau des geometry à retourner\n // build array of geometry to return\n const newgeometries = []\n for (let i = 0; i < ippl; i++) {\n if (indexesPerPolygon[i].indexes) {\n const newpolygons = []\n indexesPerPolygon[i].indexes.forEach((e, p) => newpolygons.push(polygons[p]))\n newgeometries.push(geom3.create(newpolygons))\n }\n }\n\n return newgeometries\n}\n\nmodule.exports = scissionGeom3\n","const flatten = require('../../utils/flatten')\nconst areAllShapesTheSameType = require('../../utils/areAllShapesTheSameType')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\n\nconst subtractGeom2 = require('./subtractGeom2')\nconst subtractGeom3 = require('./subtractGeom3')\n\n/**\n * Return a new geometry representing space in the first geometry but\n * not in all subsequent geometries.\n * The given geometries should be of the same type, either geom2 or geom3.\n *\n * @param {...Object} geometries - list of geometries\n * @returns {geom2|geom3} a new geometry\n * @alias module:modeling/booleans.subtract\n *\n * @example\n * let myshape = subtract(cuboid({size: [5,5,5]}), cuboid({size: [5,5,5], center: [5,5,5]}))\n *\n * @example\n * +-------+ +-------+\n * | | | |\n * | A | | |\n * | +--+----+ = | +--+\n * +----+--+ | +----+\n * | B |\n * | |\n * +-------+\n */\nconst subtract = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n if (!areAllShapesTheSameType(geometries)) {\n throw new Error('only subtract of the types are supported')\n }\n\n const geometry = geometries[0]\n // if (path.isA(geometry)) return pathsubtract(matrix, geometries)\n if (geom2.isA(geometry)) return subtractGeom2(geometries)\n if (geom3.isA(geometry)) return subtractGeom3(geometries)\n return geometry\n}\n\nmodule.exports = subtract\n","const flatten = require('../../utils/flatten')\n\nconst geom3 = require('../../geometries/geom3')\n\nconst measureEpsilon = require('../../measurements/measureEpsilon')\n\nconst fromFakePolygons = require('./fromFakePolygons')\nconst to3DWalls = require('./to3DWalls')\nconst subtractGeom3 = require('./subtractGeom3')\n\n/*\n * Return a new 2D geometry representing space in the first geometry but\n * not in the subsequent geometries. None of the given geometries are modified.\n * @param {...geom2} geometries - list of geometries\n * @returns {geom2} new 2D geometry\n */\nconst subtract = (...geometries) => {\n geometries = flatten(geometries)\n const newgeometries = geometries.map((geometry) => to3DWalls({ z0: -1, z1: 1 }, geometry))\n\n const newgeom3 = subtractGeom3(newgeometries)\n const epsilon = measureEpsilon(newgeom3)\n\n return fromFakePolygons(epsilon, geom3.toPolygons(newgeom3))\n}\n\nmodule.exports = subtract\n","const flatten = require('../../utils/flatten')\n\nconst retessellate = require('../modifiers/retessellate')\n\nconst subtractSub = require('./subtractGeom3Sub')\n\n/*\n * Return a new 3D geometry representing space in this geometry but not in the given geometries.\n * Neither this geometry nor the given geometries are modified.\n * @param {...geom3} geometries - list of geometries\n * @returns {geom3} new 3D geometry\n */\nconst subtract = (...geometries) => {\n geometries = flatten(geometries)\n\n let newgeometry = geometries.shift()\n geometries.forEach((geometry) => {\n newgeometry = subtractSub(newgeometry, geometry)\n })\n\n newgeometry = retessellate(newgeometry)\n return newgeometry\n}\n\nmodule.exports = subtract\n","const geom3 = require('../../geometries/geom3')\n\nconst mayOverlap = require('./mayOverlap')\nconst { Tree } = require('./trees')\n\n/*\n * Return a new 3D geometry representing the space in the first geometry but not\n * in the second geometry. None of the given geometries are modified.\n * @param {geom3} geometry1 - a geometry\n * @param {geom3} geometry2 - a geometry\n * @returns {geom3} new 3D geometry\n */\nconst subtractGeom3Sub = (geometry1, geometry2) => {\n if (!mayOverlap(geometry1, geometry2)) {\n return geom3.clone(geometry1)\n }\n\n const a = new Tree(geom3.toPolygons(geometry1))\n const b = new Tree(geom3.toPolygons(geometry2))\n\n a.invert()\n a.clipTo(b)\n b.clipTo(a, true)\n a.addPolygons(b.allPolygons())\n a.invert()\n\n const newpolygons = a.allPolygons()\n return geom3.create(newpolygons)\n}\n\nmodule.exports = subtractGeom3Sub\n","const vec3 = require('../../maths/vec3')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst poly3 = require('../../geometries/poly3')\n\n/*\n * Create a polygon (wall) from the given Z values and side.\n */\nconst to3DWall = (z0, z1, side) => {\n const points = [\n vec3.fromVec2(vec3.create(), side[0], z0),\n vec3.fromVec2(vec3.create(), side[1], z0),\n vec3.fromVec2(vec3.create(), side[1], z1),\n vec3.fromVec2(vec3.create(), side[0], z1)\n ]\n return poly3.create(points)\n}\n\n/*\n * Create a 3D geometry with walls, as constructed from the given options and geometry.\n *\n * @param {Object} options - options with Z offsets\n * @param {geom2} geometry - geometry used as base of walls\n * @return {geom3} the new geometry\n */\nconst to3DWalls = (options, geometry) => {\n const sides = geom2.toSides(geometry)\n\n const polygons = sides.map((side) => to3DWall(options.z0, options.z1, side))\n\n const result = geom3.create(polygons)\n return result\n}\n\nmodule.exports = to3DWalls\n","const plane = require('../../../maths/plane')\nconst poly3 = require('../../../geometries/poly3')\n\n// # class Node\n// Holds a node in a BSP tree.\n// A BSP tree is built from a collection of polygons by picking a polygon to split along.\n// Polygons are not stored directly in the tree, but in PolygonTreeNodes, stored in this.polygontreenodes.\n// Those PolygonTreeNodes are children of the owning Tree.polygonTree.\n// This is not a leafy BSP tree since there is no distinction between internal and leaf nodes.\nclass Node {\n constructor (parent) {\n this.plane = null\n this.front = null\n this.back = null\n this.polygontreenodes = []\n this.parent = parent\n }\n\n // Convert solid space to empty space and empty space to solid space.\n invert () {\n const queue = [this]\n let node\n for (let i = 0; i < queue.length; i++) {\n node = queue[i]\n if (node.plane) node.plane = plane.flip(plane.create(), node.plane)\n if (node.front) queue.push(node.front)\n if (node.back) queue.push(node.back)\n const temp = node.front\n node.front = node.back\n node.back = temp\n }\n }\n\n // clip polygontreenodes to our plane\n // calls remove() for all clipped PolygonTreeNodes\n clipPolygons (polygontreenodes, alsoRemovecoplanarFront) {\n let current = { node: this, polygontreenodes: polygontreenodes }\n let node\n const stack = []\n\n do {\n node = current.node\n polygontreenodes = current.polygontreenodes\n\n if (node.plane) {\n const plane = node.plane\n\n const backnodes = []\n const frontnodes = []\n const coplanarfrontnodes = alsoRemovecoplanarFront ? backnodes : frontnodes\n const numpolygontreenodes = polygontreenodes.length\n for (let i = 0; i < numpolygontreenodes; i++) {\n const treenode = polygontreenodes[i]\n if (!treenode.isRemoved()) {\n // split this polygon tree node using the plane\n // NOTE: children are added to the tree if there are spanning polygons\n treenode.splitByPlane(plane, coplanarfrontnodes, backnodes, frontnodes, backnodes)\n }\n }\n\n if (node.front && (frontnodes.length > 0)) {\n // add front node for further splitting\n stack.push({ node: node.front, polygontreenodes: frontnodes })\n }\n const numbacknodes = backnodes.length\n if (node.back && (numbacknodes > 0)) {\n // add back node for further splitting\n stack.push({ node: node.back, polygontreenodes: backnodes })\n } else {\n // remove all back nodes from processing\n for (let i = 0; i < numbacknodes; i++) {\n backnodes[i].remove()\n }\n }\n }\n current = stack.pop()\n } while (current !== undefined)\n }\n\n // Remove all polygons in this BSP tree that are inside the other BSP tree\n // `tree`.\n clipTo (tree, alsoRemovecoplanarFront) {\n let node = this\n const stack = []\n do {\n if (node.polygontreenodes.length > 0) {\n tree.rootnode.clipPolygons(node.polygontreenodes, alsoRemovecoplanarFront)\n }\n if (node.front) stack.push(node.front)\n if (node.back) stack.push(node.back)\n node = stack.pop()\n } while (node !== undefined)\n }\n\n addPolygonTreeNodes (newpolygontreenodes) {\n let current = { node: this, polygontreenodes: newpolygontreenodes }\n const stack = []\n do {\n const node = current.node\n const polygontreenodes = current.polygontreenodes\n\n if (polygontreenodes.length === 0) {\n current = stack.pop()\n continue\n }\n if (!node.plane) {\n let index = 0 // default\n index = Math.floor(polygontreenodes.length / 2)\n // index = polygontreenodes.length >> 1\n // index = Math.floor(Math.random()*polygontreenodes.length)\n const bestpoly = polygontreenodes[index].getPolygon()\n node.plane = poly3.plane(bestpoly)\n }\n const frontnodes = []\n const backnodes = []\n const n = polygontreenodes.length\n for (let i = 0; i < n; ++i) {\n polygontreenodes[i].splitByPlane(node.plane, node.polygontreenodes, backnodes, frontnodes, backnodes)\n }\n\n if (frontnodes.length > 0) {\n if (!node.front) node.front = new Node(node)\n\n // unable to split by any of the current nodes\n const stopCondition = n === frontnodes.length && backnodes.length === 0\n if (stopCondition) node.front.polygontreenodes = frontnodes\n else stack.push({ node: node.front, polygontreenodes: frontnodes })\n }\n if (backnodes.length > 0) {\n if (!node.back) node.back = new Node(node)\n\n // unable to split by any of the current nodes\n const stopCondition = n === backnodes.length && frontnodes.length === 0\n\n if (stopCondition) node.back.polygontreenodes = backnodes\n else stack.push({ node: node.back, polygontreenodes: backnodes })\n }\n\n current = stack.pop()\n } while (current !== undefined)\n }\n}\n\nmodule.exports = Node\n","const { EPS } = require('../../../maths/constants')\n\nconst vec3 = require('../../../maths/vec3')\n\nconst poly3 = require('../../../geometries/poly3')\n\nconst splitPolygonByPlane = require('./splitPolygonByPlane')\n\n// # class PolygonTreeNode\n// This class manages hierarchical splits of polygons.\n// At the top is a root node which does not hold a polygon, only child PolygonTreeNodes.\n// Below that are zero or more 'top' nodes; each holds a polygon.\n// The polygons can be in different planes.\n// splitByPlane() splits a node by a plane. If the plane intersects the polygon, two new child nodes\n// are created holding the splitted polygon.\n// getPolygons() retrieves the polygons from the tree. If for PolygonTreeNode the polygon is split but\n// the two split parts (child nodes) are still intact, then the unsplit polygon is returned.\n// This ensures that we can safely split a polygon into many fragments. If the fragments are untouched,\n// getPolygons() will return the original unsplit polygon instead of the fragments.\n// remove() removes a polygon from the tree. Once a polygon is removed, the parent polygons are invalidated\n// since they are no longer intact.\nclass PolygonTreeNode {\n // constructor creates the root node\n constructor (parent, polygon) {\n this.parent = parent\n this.children = []\n this.polygon = polygon\n this.removed = false // state of branch or leaf\n }\n\n // fill the tree with polygons. Should be called on the root node only; child nodes must\n // always be a derivate (split) of the parent node.\n addPolygons (polygons) {\n // new polygons can only be added to root node; children can only be splitted polygons\n if (!this.isRootNode()) {\n throw new Error('Assertion failed')\n }\n const _this = this\n polygons.forEach((polygon) => {\n _this.addChild(polygon)\n })\n }\n\n // remove a node\n // - the siblings become toplevel nodes\n // - the parent is removed recursively\n remove () {\n if (!this.removed) {\n this.removed = true\n this.polygon = null\n\n // remove ourselves from the parent's children list:\n const parentschildren = this.parent.children\n const i = parentschildren.indexOf(this)\n if (i < 0) throw new Error('Assertion failed')\n parentschildren.splice(i, 1)\n\n // invalidate the parent's polygon, and of all parents above it:\n this.parent.recursivelyInvalidatePolygon()\n }\n }\n\n isRemoved () {\n return this.removed\n }\n\n isRootNode () {\n return !this.parent\n }\n\n // invert all polygons in the tree. Call on the root node\n invert () {\n if (!this.isRootNode()) throw new Error('Assertion failed') // can only call this on the root node\n this.invertSub()\n }\n\n getPolygon () {\n if (!this.polygon) throw new Error('Assertion failed') // doesn't have a polygon, which means that it has been broken down\n return this.polygon\n }\n\n getPolygons (result) {\n let children = [this]\n const queue = [children]\n let i, j, l, node\n for (i = 0; i < queue.length; ++i) { // queue size can change in loop, don't cache length\n children = queue[i]\n for (j = 0, l = children.length; j < l; j++) { // ok to cache length\n node = children[j]\n if (node.polygon) {\n // the polygon hasn't been broken yet. We can ignore the children and return our polygon:\n result.push(node.polygon)\n } else {\n // our polygon has been split up and broken, so gather all subpolygons from the children\n if (node.children.length > 0) queue.push(node.children)\n }\n }\n }\n }\n\n // split the node by a plane; add the resulting nodes to the frontnodes and backnodes array\n // If the plane doesn't intersect the polygon, the 'this' object is added to one of the arrays\n // If the plane does intersect the polygon, two new child nodes are created for the front and back fragments,\n // and added to both arrays.\n splitByPlane (plane, coplanarfrontnodes, coplanarbacknodes, frontnodes, backnodes) {\n if (this.children.length) {\n const queue = [this.children]\n let i\n let j\n let l\n let node\n let nodes\n for (i = 0; i < queue.length; i++) { // queue.length can increase, do not cache\n nodes = queue[i]\n for (j = 0, l = nodes.length; j < l; j++) { // ok to cache length\n node = nodes[j]\n if (node.children.length > 0) {\n queue.push(node.children)\n } else {\n // no children. Split the polygon:\n node._splitByPlane(plane, coplanarfrontnodes, coplanarbacknodes, frontnodes, backnodes)\n }\n }\n }\n } else {\n this._splitByPlane(plane, coplanarfrontnodes, coplanarbacknodes, frontnodes, backnodes)\n }\n }\n\n // only to be called for nodes with no children\n _splitByPlane (splane, coplanarfrontnodes, coplanarbacknodes, frontnodes, backnodes) {\n const polygon = this.polygon\n if (polygon) {\n const bound = poly3.measureBoundingSphere(polygon)\n const sphereradius = bound[3] + EPS // ensure radius is LARGER then polygon\n const spherecenter = bound\n const d = vec3.dot(splane, spherecenter) - splane[3]\n if (d > sphereradius) {\n frontnodes.push(this)\n } else if (d < -sphereradius) {\n backnodes.push(this)\n } else {\n const splitresult = splitPolygonByPlane(splane, polygon)\n switch (splitresult.type) {\n case 0:\n // coplanar front:\n coplanarfrontnodes.push(this)\n break\n\n case 1:\n // coplanar back:\n coplanarbacknodes.push(this)\n break\n\n case 2:\n // front:\n frontnodes.push(this)\n break\n\n case 3:\n // back:\n backnodes.push(this)\n break\n\n case 4:\n // spanning:\n if (splitresult.front) {\n const frontnode = this.addChild(splitresult.front)\n frontnodes.push(frontnode)\n }\n if (splitresult.back) {\n const backnode = this.addChild(splitresult.back)\n backnodes.push(backnode)\n }\n break\n }\n }\n }\n }\n\n // PRIVATE methods from here:\n // add child to a node\n // this should be called whenever the polygon is split\n // a child should be created for every fragment of the split polygon\n // returns the newly created child\n addChild (polygon) {\n const newchild = new PolygonTreeNode(this, polygon)\n this.children.push(newchild)\n return newchild\n }\n\n invertSub () {\n let children = [this]\n const queue = [children]\n let i, j, l, node\n for (i = 0; i < queue.length; i++) {\n children = queue[i]\n for (j = 0, l = children.length; j < l; j++) {\n node = children[j]\n if (node.polygon) {\n node.polygon = poly3.invert(node.polygon)\n }\n if (node.children.length > 0) queue.push(node.children)\n }\n }\n }\n\n // private method\n // remove the polygon from the node, and all parent nodes above it\n // called to invalidate parents of removed nodes\n recursivelyInvalidatePolygon () {\n this.polygon = null\n if (this.parent) {\n this.parent.recursivelyInvalidatePolygon()\n }\n }\n\n clear () {\n let children = [this]\n const queue = [children]\n for (let i = 0; i < queue.length; ++i) { // queue size can change in loop, don't cache length\n children = queue[i]\n const l = children.length\n for (let j = 0; j < l; j++) {\n const node = children[j]\n if (node.polygon) {\n node.polygon = null\n }\n if (node.parent) {\n node.parent = null\n }\n if (node.children.length > 0) queue.push(node.children)\n node.children = []\n }\n }\n }\n\n toString () {\n let result = ''\n let children = [this]\n const queue = [children]\n let i, j, l, node\n for (i = 0; i < queue.length; ++i) { // queue size can change in loop, don't cache length\n children = queue[i]\n const prefix = ' '.repeat(i)\n for (j = 0, l = children.length; j < l; j++) { // ok to cache length\n node = children[j]\n result += `${prefix}PolygonTreeNode (${node.isRootNode()}): ${node.children.length}`\n if (node.polygon) {\n result += `\\n ${prefix}polygon: ${node.polygon.vertices}\\n`\n } else {\n result += '\\n'\n }\n if (node.children.length > 0) queue.push(node.children)\n }\n }\n return result\n }\n}\n\nmodule.exports = PolygonTreeNode\n","const Node = require('./Node')\nconst PolygonTreeNode = require('./PolygonTreeNode')\n\n// # class Tree\n// This is the root of a BSP tree.\n// This separate class for the root of the tree in order to hold the PolygonTreeNode root.\n// The actual tree is kept in this.rootnode\nclass Tree {\n constructor (polygons) {\n this.polygonTree = new PolygonTreeNode()\n this.rootnode = new Node(null)\n if (polygons) this.addPolygons(polygons)\n }\n\n invert () {\n this.polygonTree.invert()\n this.rootnode.invert()\n }\n\n // Remove all polygons in this BSP tree that are inside the other BSP tree\n // `tree`.\n clipTo (tree, alsoRemovecoplanarFront = false) {\n this.rootnode.clipTo(tree, alsoRemovecoplanarFront)\n }\n\n allPolygons () {\n const result = []\n this.polygonTree.getPolygons(result)\n return result\n }\n\n addPolygons (polygons) {\n const polygontreenodes = new Array(polygons.length)\n for (let i = 0; i < polygons.length; i++) {\n polygontreenodes[i] = this.polygonTree.addChild(polygons[i])\n }\n this.rootnode.addPolygonTreeNodes(polygontreenodes)\n }\n\n clear () {\n this.polygonTree.clear()\n }\n\n toString () {\n const result = 'Tree: ' + this.polygonTree.toString('')\n return result\n }\n}\n\nmodule.exports = Tree\n","module.exports = {\n Tree: require('./Tree')\n}\n","const vec3 = require('../../../maths/vec3')\n\nconst splitLineSegmentByPlane = (plane, p1, p2) => {\n const direction = vec3.subtract(vec3.create(), p2, p1)\n let lambda = (plane[3] - vec3.dot(plane, p1)) / vec3.dot(plane, direction)\n if (Number.isNaN(lambda)) lambda = 0\n if (lambda > 1) lambda = 1\n if (lambda < 0) lambda = 0\n\n vec3.scale(direction, direction, lambda)\n vec3.add(direction, p1, direction)\n return direction\n}\n\nmodule.exports = splitLineSegmentByPlane\n","const { EPS } = require('../../../maths/constants')\n\nconst plane = require('../../../maths/plane')\nconst vec3 = require('../../../maths/vec3')\n\nconst poly3 = require('../../../geometries/poly3')\n\nconst splitLineSegmentByPlane = require('./splitLineSegmentByPlane')\n\n// Returns object:\n// .type:\n// 0: coplanar-front\n// 1: coplanar-back\n// 2: front\n// 3: back\n// 4: spanning\n// In case the polygon is spanning, returns:\n// .front: a Polygon3 of the front part\n// .back: a Polygon3 of the back part\nconst splitPolygonByPlane = (splane, polygon) => {\n const result = {\n type: null,\n front: null,\n back: null\n }\n // cache in local lets (speedup):\n const vertices = polygon.vertices\n const numvertices = vertices.length\n const pplane = poly3.plane(polygon)\n if (plane.equals(pplane, splane)) {\n result.type = 0\n } else {\n let hasfront = false\n let hasback = false\n const vertexIsBack = []\n const MINEPS = -EPS\n for (let i = 0; i < numvertices; i++) {\n const t = vec3.dot(splane, vertices[i]) - splane[3]\n const isback = (t < MINEPS)\n vertexIsBack.push(isback)\n if (t > EPS) hasfront = true\n if (t < MINEPS) hasback = true\n }\n if ((!hasfront) && (!hasback)) {\n // all points coplanar\n const t = vec3.dot(splane, pplane)\n result.type = (t >= 0) ? 0 : 1\n } else if (!hasback) {\n result.type = 2\n } else if (!hasfront) {\n result.type = 3\n } else {\n // spanning\n result.type = 4\n const frontvertices = []\n const backvertices = []\n let isback = vertexIsBack[0]\n for (let vertexindex = 0; vertexindex < numvertices; vertexindex++) {\n const vertex = vertices[vertexindex]\n let nextvertexindex = vertexindex + 1\n if (nextvertexindex >= numvertices) nextvertexindex = 0\n const nextisback = vertexIsBack[nextvertexindex]\n if (isback === nextisback) {\n // line segment is on one side of the plane:\n if (isback) {\n backvertices.push(vertex)\n } else {\n frontvertices.push(vertex)\n }\n } else {\n // line segment intersects plane:\n const nextpoint = vertices[nextvertexindex]\n const intersectionpoint = splitLineSegmentByPlane(splane, vertex, nextpoint)\n if (isback) {\n backvertices.push(vertex)\n backvertices.push(intersectionpoint)\n frontvertices.push(intersectionpoint)\n } else {\n frontvertices.push(vertex)\n frontvertices.push(intersectionpoint)\n backvertices.push(intersectionpoint)\n }\n }\n isback = nextisback\n } // for vertexindex\n // remove duplicate vertices:\n const EPS_SQUARED = EPS * EPS\n if (backvertices.length >= 3) {\n let prevvertex = backvertices[backvertices.length - 1]\n for (let vertexindex = 0; vertexindex < backvertices.length; vertexindex++) {\n const vertex = backvertices[vertexindex]\n if (vec3.squaredDistance(vertex, prevvertex) < EPS_SQUARED) {\n backvertices.splice(vertexindex, 1)\n vertexindex--\n }\n prevvertex = vertex\n }\n }\n if (frontvertices.length >= 3) {\n let prevvertex = frontvertices[frontvertices.length - 1]\n for (let vertexindex = 0; vertexindex < frontvertices.length; vertexindex++) {\n const vertex = frontvertices[vertexindex]\n if (vec3.squaredDistance(vertex, prevvertex) < EPS_SQUARED) {\n frontvertices.splice(vertexindex, 1)\n vertexindex--\n }\n prevvertex = vertex\n }\n }\n if (frontvertices.length >= 3) {\n result.front = poly3.fromPointsAndPlane(frontvertices, pplane)\n }\n if (backvertices.length >= 3) {\n result.back = poly3.fromPointsAndPlane(backvertices, pplane)\n }\n }\n }\n return result\n}\n\nmodule.exports = splitPolygonByPlane\n","const flatten = require('../../utils/flatten')\nconst areAllShapesTheSameType = require('../../utils/areAllShapesTheSameType')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\n\nconst unionGeom2 = require('./unionGeom2')\nconst unionGeom3 = require('./unionGeom3')\n\n/**\n * Return a new geometry representing the total space in the given geometries.\n * The given geometries should be of the same type, either geom2 or geom3.\n *\n * @param {...Object} geometries - list of geometries\n * @returns {geom2|geom3} a new geometry\n * @alias module:modeling/booleans.union\n *\n * @example\n * let myshape = union(cube({size: [5,5,5]}), cube({size: [5,5,5], center: [5,5,5]}))\n *\n * @example\n * +-------+ +-------+\n * | | | |\n * | A | | |\n * | +--+----+ = | +----+\n * +----+--+ | +----+ |\n * | B | | |\n * | | | |\n * +-------+ +-------+\n */\nconst union = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n if (!areAllShapesTheSameType(geometries)) {\n throw new Error('only unions of the same type are supported')\n }\n\n const geometry = geometries[0]\n // if (path.isA(geometry)) return pathunion(matrix, geometries)\n if (geom2.isA(geometry)) return unionGeom2(geometries)\n if (geom3.isA(geometry)) return unionGeom3(geometries)\n return geometry\n}\n\nmodule.exports = union\n","const flatten = require('../../utils/flatten')\n\nconst geom3 = require('../../geometries/geom3')\n\nconst measureEpsilon = require('../../measurements/measureEpsilon')\n\nconst fromFakePolygons = require('./fromFakePolygons')\nconst to3DWalls = require('./to3DWalls')\nconst unionGeom3 = require('./unionGeom3')\n\n/*\n * Return a new 2D geometry representing the total space in the given 2D geometries.\n * @param {...geom2} geometries - list of 2D geometries to union\n * @returns {geom2} new 2D geometry\n */\nconst union = (...geometries) => {\n geometries = flatten(geometries)\n const newgeometries = geometries.map((geometry) => to3DWalls({ z0: -1, z1: 1 }, geometry))\n\n const newgeom3 = unionGeom3(newgeometries)\n const epsilon = measureEpsilon(newgeom3)\n\n return fromFakePolygons(epsilon, geom3.toPolygons(newgeom3))\n}\n\nmodule.exports = union\n","const flatten = require('../../utils/flatten')\n\nconst retessellate = require('../modifiers/retessellate')\n\nconst unionSub = require('./unionGeom3Sub')\n\n/*\n * Return a new 3D geometry representing the space in the given 3D geometries.\n * @param {...objects} geometries - list of geometries to union\n * @returns {geom3} new 3D geometry\n */\nconst union = (...geometries) => {\n geometries = flatten(geometries)\n\n // combine geometries in a way that forms a balanced binary tree pattern\n let i\n for (i = 1; i < geometries.length; i += 2) {\n geometries.push(unionSub(geometries[i - 1], geometries[i]))\n }\n let newgeometry = geometries[i - 1]\n newgeometry = retessellate(newgeometry)\n return newgeometry\n}\n\nmodule.exports = union\n","const geom3 = require('../../geometries/geom3')\n\nconst mayOverlap = require('./mayOverlap')\nconst { Tree } = require('./trees')\n\n/*\n * Return a new 3D geometry representing the space in the given geometries.\n * @param {geom3} geometry1 - geometry to union\n * @param {geom3} geometry2 - geometry to union\n * @returns {geom3} new 3D geometry\n */\nconst unionSub = (geometry1, geometry2) => {\n if (!mayOverlap(geometry1, geometry2)) {\n return unionForNonIntersecting(geometry1, geometry2)\n }\n\n const a = new Tree(geom3.toPolygons(geometry1))\n const b = new Tree(geom3.toPolygons(geometry2))\n\n a.clipTo(b, false)\n // b.clipTo(a, true); // ERROR: doesn't work\n b.clipTo(a)\n b.invert()\n b.clipTo(a)\n b.invert()\n\n const newpolygons = a.allPolygons().concat(b.allPolygons())\n const result = geom3.create(newpolygons)\n return result\n}\n\n// Like union, but when we know that the two solids are not intersecting\n// Do not use if you are not completely sure that the solids do not intersect!\nconst unionForNonIntersecting = (geometry1, geometry2) => {\n let newpolygons = geom3.toPolygons(geometry1)\n newpolygons = newpolygons.concat(geom3.toPolygons(geometry2))\n return geom3.create(newpolygons)\n}\n\nmodule.exports = unionSub\n","const flatten = require('../../utils/flatten')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\nconst expandGeom2 = require('./expandGeom2')\nconst expandGeom3 = require('./expandGeom3')\nconst expandPath2 = require('./expandPath2')\n\n/**\n * Expand the given geometry using the given options.\n * Both internal and external space is expanded for 2D and 3D shapes.\n *\n * Note: Contract is expand using a negative delta.\n * @param {Object} options - options for expand\n * @param {Number} [options.delta=1] - delta (+/-) of expansion\n * @param {String} [options.corners='edge'] - type of corner to create after expanding; edge, chamfer, round\n * @param {Integer} [options.segments=16] - number of segments when creating round corners\n * @param {...Objects} objects - the geometries to expand\n * @return {Object|Array} new geometry, or list of new geometries\n * @alias module:modeling/expansions.expand\n *\n * @example\n * let newarc = expand({delta: 5, corners: 'edge'}, arc({}))\n * let newsquare = expand({delta: 5, corners: 'chamfer'}, square({size: 30}))\n * let newsphere = expand({delta: 2, corners: 'round'}, cuboid({size: [20, 25, 5]}))\n */\nconst expand = (options, ...objects) => {\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return expandPath2(options, object)\n if (geom2.isA(object)) return expandGeom2(options, object)\n if (geom3.isA(object)) return expandGeom3(options, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = expand\n","const geom2 = require('../../geometries/geom2')\n\nconst offsetFromPoints = require('./offsetFromPoints')\n\n/*\n * Expand the given geometry (geom2) using the given options (if any).\n * @param {Object} options - options for expand\n * @param {Number} [options.delta=1] - delta (+/-) of expansion\n * @param {String} [options.corners='edge'] - type corner to create during of expansion; edge, chamfer, round\n * @param {Integer} [options.segments=16] - number of segments when creating round corners\n * @param {geom2} geometry - the geometry to expand\n * @returns {geom2} expanded geometry\n */\nconst expandGeom2 = (options, geometry) => {\n const defaults = {\n delta: 1,\n corners: 'edge',\n segments: 16\n }\n const { delta, corners, segments } = Object.assign({ }, defaults, options)\n\n if (!(corners === 'edge' || corners === 'chamfer' || corners === 'round')) {\n throw new Error('corners must be \"edge\", \"chamfer\", or \"round\"')\n }\n\n // convert the geometry to outlines, and generate offsets from each\n const outlines = geom2.toOutlines(geometry)\n const newoutlines = outlines.map((outline) => {\n options = {\n delta,\n corners,\n closed: true,\n segments\n }\n return offsetFromPoints(options, outline)\n })\n\n // create a composite geometry from the new outlines\n const allsides = newoutlines.reduce((sides, newoutline) => sides.concat(geom2.toSides(geom2.fromPoints(newoutline))), [])\n return geom2.create(allsides)\n}\n\nmodule.exports = expandGeom2\n","const geom3 = require('../../geometries/geom3')\n\nconst union = require('../booleans/union')\n\nconst expandShell = require('./expandShell')\n\n/*\n * Expand the given geometry (geom3) using the given options (if any).\n * @param {Object} options - options for expand\n * @param {Number} [options.delta=1] - delta (+/-) of expansion\n * @param {String} [options.corners='round'] - type corner to create during of expansion; round\n * @param {Integer} [options.segments=12] - number of segments when creating round corners\n * @param {geom3} geometry - the geometry to expand\n * @returns {geom3} expanded geometry\n */\nconst expandGeom3 = (options, geometry) => {\n const defaults = {\n delta: 1,\n corners: 'round',\n segments: 12\n }\n const { delta, corners, segments } = Object.assign({ }, defaults, options)\n\n if (!(corners === 'round')) {\n throw new Error('corners must be \"round\" for 3D geometries')\n }\n\n const polygons = geom3.toPolygons(geometry)\n if (polygons.length === 0) throw new Error('the given geometry cannot be empty')\n\n options = { delta, corners, segments }\n const expanded = expandShell(options, geometry)\n return union(geometry, expanded)\n}\n\nmodule.exports = expandGeom3\n","const area = require('../../maths/utils/area')\n\nconst vec2 = require('../../maths/vec2')\n\nconst geom2 = require('../../geometries/geom2')\nconst path2 = require('../../geometries/path2')\n\nconst offsetFromPoints = require('./offsetFromPoints')\n\nconst createGeometryFromClosedOffsets = (paths) => {\n let { external, internal } = paths\n if (area(external) < 0) {\n external = external.reverse()\n } else {\n internal = internal.reverse()\n }\n // NOTE: creating path2 from the points ensures proper closure\n const externalPath = path2.fromPoints({ closed: true }, external)\n const internalPath = path2.fromPoints({ closed: true }, internal)\n const externalSides = geom2.toSides(geom2.fromPoints(path2.toPoints(externalPath)))\n const internalSides = geom2.toSides(geom2.fromPoints(path2.toPoints(internalPath)))\n externalSides.push(...internalSides)\n return geom2.create(externalSides)\n}\n\nconst createGeometryFromExpandedOpenPath = (paths, segments, corners, delta) => {\n const { points, external, internal } = paths\n const capSegments = Math.floor(segments / 2) // rotation is 180 degrees\n const e2iCap = []\n const i2eCap = []\n if (corners === 'round' && capSegments > 0) {\n // added round caps to the geometry\n const step = Math.PI / capSegments\n const eCorner = points[points.length - 1]\n const e2iStart = vec2.angle(vec2.subtract(vec2.create(), external[external.length - 1], eCorner))\n const iCorner = points[0]\n const i2eStart = vec2.angle(vec2.subtract(vec2.create(), internal[0], iCorner))\n for (let i = 1; i < capSegments; i++) {\n let radians = e2iStart + (step * i)\n let point = vec2.fromAngleRadians(vec2.create(), radians)\n vec2.scale(point, point, delta)\n vec2.add(point, point, eCorner)\n e2iCap.push(point)\n\n radians = i2eStart + (step * i)\n point = vec2.fromAngleRadians(vec2.create(), radians)\n vec2.scale(point, point, delta)\n vec2.add(point, point, iCorner)\n i2eCap.push(point)\n }\n }\n const allPoints = []\n allPoints.push(...external, ...e2iCap, ...internal.reverse(), ...i2eCap)\n return geom2.fromPoints(allPoints)\n}\n\n/*\n * Expand the given geometry (path2) using the given options (if any).\n * @param {Object} options - options for expand\n * @param {Number} [options.delta=1] - delta (+) of expansion\n * @param {String} [options.corners='edge'] - type corner to create during of expansion; edge, chamfer, round\n * @param {Integer} [options.segments=16] - number of segments when creating round corners\n * @param {path2} geometry - the geometry to expand\n * @returns {geom2} expanded geometry\n */\nconst expandPath2 = (options, geometry) => {\n const defaults = {\n delta: 1,\n corners: 'edge',\n segments: 16\n }\n\n options = Object.assign({ }, defaults, options)\n const { delta, corners, segments } = options\n\n if (delta <= 0) throw new Error('the given delta must be positive for paths')\n\n if (!(corners === 'edge' || corners === 'chamfer' || corners === 'round')) {\n throw new Error('corners must be \"edge\", \"chamfer\", or \"round\"')\n }\n\n const closed = geometry.isClosed\n const points = path2.toPoints(geometry)\n if (points.length === 0) throw new Error('the given geometry cannot be empty')\n\n const paths = {\n points: points,\n external: offsetFromPoints({ delta, corners, segments, closed }, points),\n internal: offsetFromPoints({ delta: -delta, corners, segments, closed }, points)\n }\n\n if (geometry.isClosed) {\n return createGeometryFromClosedOffsets(paths)\n } else {\n return createGeometryFromExpandedOpenPath(paths, segments, corners, delta)\n }\n}\n\nmodule.exports = expandPath2\n","const { EPS, TAU } = require('../../maths/constants')\n\nconst mat4 = require('../../maths/mat4')\nconst vec3 = require('../../maths/vec3')\n\nconst fnNumberSort = require('../../utils/fnNumberSort')\n\nconst geom3 = require('../../geometries/geom3')\nconst poly3 = require('../../geometries/poly3')\n\nconst sphere = require('../../primitives/sphere')\n\nconst retessellate = require('../modifiers/retessellate')\n\nconst unionGeom3Sub = require('../booleans/unionGeom3Sub')\n\nconst extrudePolygon = require('./extrudePolygon')\n\n/*\n * Collect all planes adjacent to each vertex\n */\nconst mapPlaneToVertex = (map, vertex, plane) => {\n const key = vertex.toString()\n if (!map.has(key)) {\n const entry = [vertex, [plane]]\n map.set(key, entry)\n } else {\n const planes = map.get(key)[1]\n planes.push(plane)\n }\n}\n\n/*\n * Collect all planes adjacent to each edge.\n * Combine undirected edges, no need for duplicate cylinders.\n */\nconst mapPlaneToEdge = (map, edge, plane) => {\n const key0 = edge[0].toString()\n const key1 = edge[1].toString()\n // Sort keys to make edges undirected\n const key = key0 < key1 ? `${key0},${key1}` : `${key1},${key0}`\n if (!map.has(key)) {\n const entry = [edge, [plane]]\n map.set(key, entry)\n } else {\n const planes = map.get(key)[1]\n planes.push(plane)\n }\n}\n\nconst addUniqueAngle = (map, angle) => {\n const i = map.findIndex((item) => item === angle)\n if (i < 0) {\n map.push(angle)\n }\n}\n\n/*\n * Create the expanded shell of the solid:\n * All faces are extruded to 2 times delta\n * Cylinders are constructed around every side\n * Spheres are placed on every vertex\n * the result is a true expansion of the solid\n * @param {Number} delta\n * @param {Integer} segments\n */\nconst expandShell = (options, geometry) => {\n const defaults = {\n delta: 1,\n segments: 12\n }\n const { delta, segments } = Object.assign({ }, defaults, options)\n\n let result = geom3.create()\n const vertices2planes = new Map() // {vertex: [vertex, [plane, ...]]}\n const edges2planes = new Map() // {edge: [[vertex, vertex], [plane, ...]]}\n\n const v1 = vec3.create()\n const v2 = vec3.create()\n\n // loop through the polygons\n // - extruded the polygon, and add to the composite result\n // - add the plane to the unique vertice map\n // - add the plane to the unique edge map\n const polygons = geom3.toPolygons(geometry)\n polygons.forEach((polygon, index) => {\n const extrudevector = vec3.scale(vec3.create(), poly3.plane(polygon), 2 * delta)\n const translatedpolygon = poly3.transform(mat4.fromTranslation(mat4.create(), vec3.scale(vec3.create(), extrudevector, -0.5)), polygon)\n const extrudedface = extrudePolygon(extrudevector, translatedpolygon)\n result = unionGeom3Sub(result, extrudedface)\n\n const vertices = polygon.vertices\n for (let i = 0; i < vertices.length; i++) {\n mapPlaneToVertex(vertices2planes, vertices[i], poly3.plane(polygon))\n const j = (i + 1) % vertices.length\n const edge = [vertices[i], vertices[j]]\n mapPlaneToEdge(edges2planes, edge, poly3.plane(polygon))\n }\n })\n\n // now construct a cylinder on every side\n // The cylinder is always an approximation of a true cylinder, having polygons\n // around the sides. We will make sure though that the cylinder will have an edge at every\n // face that touches this side. This ensures that we will get a smooth fill even\n // if two edges are at, say, 10 degrees and the segments is low.\n edges2planes.forEach((item) => {\n const edge = item[0]\n const planes = item[1]\n const startpoint = edge[0]\n const endpoint = edge[1]\n\n // our x,y and z vectors:\n const zbase = vec3.subtract(vec3.create(), endpoint, startpoint)\n vec3.normalize(zbase, zbase)\n const xbase = planes[0]\n const ybase = vec3.cross(vec3.create(), xbase, zbase)\n\n // make a list of angles that the cylinder should traverse:\n let angles = []\n\n // first of all equally spaced around the cylinder:\n for (let i = 0; i < segments; i++) {\n addUniqueAngle(angles, (i * TAU / segments))\n }\n\n // and also at every normal of all touching planes:\n for (let i = 0, iMax = planes.length; i < iMax; i++) {\n const planenormal = planes[i]\n const si = vec3.dot(ybase, planenormal)\n const co = vec3.dot(xbase, planenormal)\n let angle = Math.atan2(si, co)\n\n if (angle < 0) angle += TAU\n addUniqueAngle(angles, angle)\n angle = Math.atan2(-si, -co)\n if (angle < 0) angle += TAU\n addUniqueAngle(angles, angle)\n }\n\n // this will result in some duplicate angles but we will get rid of those later.\n angles = angles.sort(fnNumberSort)\n\n // Now construct the cylinder by traversing all angles:\n const numangles = angles.length\n let prevp1\n let prevp2\n const startfacevertices = []\n const endfacevertices = []\n const polygons = []\n for (let i = -1; i < numangles; i++) {\n const angle = angles[(i < 0) ? (i + numangles) : i]\n const si = Math.sin(angle)\n const co = Math.cos(angle)\n vec3.scale(v1, xbase, co * delta)\n vec3.scale(v2, ybase, si * delta)\n vec3.add(v1, v1, v2)\n const p1 = vec3.add(vec3.create(), startpoint, v1)\n const p2 = vec3.add(vec3.create(), endpoint, v1)\n let skip = false\n if (i >= 0) {\n if (vec3.distance(p1, prevp1) < EPS) {\n skip = true\n }\n }\n if (!skip) {\n if (i >= 0) {\n startfacevertices.push(p1)\n endfacevertices.push(p2)\n const points = [prevp2, p2, p1, prevp1]\n const polygon = poly3.create(points)\n polygons.push(polygon)\n }\n prevp1 = p1\n prevp2 = p2\n }\n }\n endfacevertices.reverse()\n polygons.push(poly3.create(startfacevertices))\n polygons.push(poly3.create(endfacevertices))\n\n const cylinder = geom3.create(polygons)\n result = unionGeom3Sub(result, cylinder)\n })\n\n // build spheres at each unique vertex\n // We will try to set the x and z axis to the normals of 2 planes\n // This will ensure that our sphere tesselation somewhat matches 2 planes\n vertices2planes.forEach((item) => {\n const vertex = item[0]\n const planes = item[1]\n // use the first normal to be the x axis of our sphere:\n const xaxis = planes[0]\n // and find a suitable z axis. We will use the normal which is most perpendicular to the x axis:\n let bestzaxis = null\n let bestzaxisorthogonality = 0\n for (let i = 1; i < planes.length; i++) {\n const normal = planes[i]\n const cross = vec3.cross(v1, xaxis, normal)\n const crosslength = vec3.length(cross)\n if (crosslength > 0.05) { // FIXME why 0.05?\n if (crosslength > bestzaxisorthogonality) {\n bestzaxisorthogonality = crosslength\n bestzaxis = normal\n }\n }\n }\n if (!bestzaxis) {\n bestzaxis = vec3.orthogonal(v1, xaxis)\n }\n const yaxis = vec3.cross(v1, xaxis, bestzaxis)\n vec3.normalize(yaxis, yaxis)\n const zaxis = vec3.cross(v2, yaxis, xaxis)\n const corner = sphere({\n center: [vertex[0], vertex[1], vertex[2]],\n radius: delta,\n segments: segments,\n axes: [xaxis, yaxis, zaxis]\n })\n result = unionGeom3Sub(result, corner)\n })\n return retessellate(result)\n}\n\nmodule.exports = expandShell\n","const mat4 = require('../../maths/mat4')\nconst vec3 = require('../../maths/vec3')\n\nconst geom3 = require('../../geometries/geom3')\nconst poly3 = require('../../geometries/poly3')\n\n// Extrude a polygon in the direction of the offsetvector.\n// Returns (geom3) a new geometry\nconst extrudePolygon = (offsetvector, polygon1) => {\n const direction = vec3.dot(poly3.plane(polygon1), offsetvector)\n if (direction > 0) {\n polygon1 = poly3.invert(polygon1)\n }\n\n const newpolygons = [polygon1]\n\n const polygon2 = poly3.transform(mat4.fromTranslation(mat4.create(), offsetvector), polygon1)\n const numvertices = polygon1.vertices.length\n for (let i = 0; i < numvertices; i++) {\n const nexti = (i < (numvertices - 1)) ? i + 1 : 0\n const sideFacePolygon = poly3.create([\n polygon1.vertices[i],\n polygon2.vertices[i],\n polygon2.vertices[nexti],\n polygon1.vertices[nexti]\n ])\n newpolygons.push(sideFacePolygon)\n }\n newpolygons.push(poly3.invert(polygon2))\n\n return geom3.create(newpolygons)\n}\n\nmodule.exports = extrudePolygon\n","/**\n * All shapes (primitives or the results of operations) can be expanded (or contracted.)\n * In all cases, the function returns the results, and never changes the original shapes.\n * @module modeling/expansions\n * @example\n * const { expand, offset } = require('@jscad/modeling').expansions\n */\nmodule.exports = {\n expand: require('./expand'),\n offset: require('./offset')\n}\n","const flatten = require('../../utils/flatten')\n\nconst geom2 = require('../../geometries/geom2')\nconst path2 = require('../../geometries/path2')\n\nconst offsetGeom2 = require('./offsetGeom2')\nconst offsetPath2 = require('./offsetPath2')\n\n/**\n * Create offset geometry from the given geometry using the given options.\n * Offsets from internal and external space are created.\n * @param {Object} options - options for offset\n * @param {Float} [options.delta=1] - delta of offset (+ to exterior, - from interior)\n * @param {String} [options.corners='edge'] - type of corner to create after offseting; edge, chamfer, round\n * @param {Integer} [options.segments=16] - number of segments when creating round corners\n * @param {...Object} objects - the geometries to offset\n * @return {Object|Array} new geometry, or list of new geometries\n * @alias module:modeling/expansions.offset\n *\n * @example\n * let small = offset({ delta: -4, corners: 'chamfer' }, square({size: 40})) // contract\n */\nconst offset = (options, ...objects) => {\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return offsetPath2(options, object)\n if (geom2.isA(object)) return offsetGeom2(options, object)\n // if (geom3.isA(object)) return geom3.transform(matrix, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = offset\n","const { EPS, TAU } = require('../../maths/constants')\n\nconst intersect = require('../../maths/utils/intersect')\nconst line2 = require('../../maths/line2')\nconst vec2 = require('../../maths/vec2')\nconst area = require('../../maths/utils/area')\n\n/*\n * Create a set of offset points from the given points using the given options (if any).\n * @param {Object} options - options for offset\n * @param {Float} [options.delta=1] - delta of offset (+ to exterior, - from interior)\n * @param {String} [options.corners='edge'] - type corner to create during of expansion; edge, chamfer, round\n * @param {Integer} [options.segments=16] - number of segments when creating round corners\n * @param {Integer} [options.closed=false] - is the last point connected back to the first point?\n * @param {Array} points - array of 2D points\n * @returns {Array} new set of offset points, plus points for each rounded corner\n */\nconst offsetFromPoints = (options, points) => {\n const defaults = {\n delta: 1,\n corners: 'edge',\n closed: false,\n segments: 16\n }\n let { delta, corners, closed, segments } = Object.assign({ }, defaults, options)\n\n if (Math.abs(delta) < EPS) return points\n\n let rotation = options.closed ? area(points) : 1.0 // + counter clockwise, - clockwise\n if (rotation === 0) rotation = 1.0\n\n // use right hand normal?\n const orientation = ((rotation > 0) && (delta >= 0)) || ((rotation < 0) && (delta < 0))\n delta = Math.abs(delta) // sign is no longer required\n\n let previousSegment = null\n let newPoints = []\n const newCorners = []\n const of = vec2.create()\n const n = points.length\n for (let i = 0; i < n; i++) {\n const j = (i + 1) % n\n const p0 = points[i]\n const p1 = points[j]\n // calculate the unit normal\n orientation ? vec2.subtract(of, p0, p1) : vec2.subtract(of, p1, p0)\n vec2.normal(of, of)\n vec2.normalize(of, of)\n // calculate the offset vector\n vec2.scale(of, of, delta)\n // calculate the new points (edge)\n const n0 = vec2.add(vec2.create(), p0, of)\n const n1 = vec2.add(vec2.create(), p1, of)\n\n const currentSegment = [n0, n1]\n if (previousSegment != null) {\n if (closed || (!closed && j !== 0)) {\n // check for intersection of new line segments\n const ip = intersect(previousSegment[0], previousSegment[1], currentSegment[0], currentSegment[1])\n if (ip) {\n // adjust the previous points\n newPoints.pop()\n // adjust current points\n currentSegment[0] = ip\n } else {\n newCorners.push({ c: p0, s0: previousSegment, s1: currentSegment })\n }\n }\n }\n previousSegment = [n0, n1]\n\n if (j === 0 && !closed) continue\n\n newPoints.push(currentSegment[0])\n newPoints.push(currentSegment[1])\n }\n // complete the closure if required\n if (closed && previousSegment != null) {\n // check for intersection of closing line segments\n const n0 = newPoints[0]\n const n1 = newPoints[1]\n const ip = intersect(previousSegment[0], previousSegment[1], n0, n1)\n if (ip) {\n // adjust the previous points\n newPoints[0] = ip\n newPoints.pop()\n } else {\n const p0 = points[0]\n const cursegment = [n0, n1]\n newCorners.push({ c: p0, s0: previousSegment, s1: cursegment })\n }\n }\n\n // generate corners if necessary\n\n if (corners === 'edge') {\n // map for fast point index lookup\n const pointIndex = new Map() // {point: index}\n newPoints.forEach((point, index) => pointIndex.set(point, index))\n\n // create edge corners\n const line0 = line2.create()\n const line1 = line2.create()\n newCorners.forEach((corner) => {\n line2.fromPoints(line0, corner.s0[0], corner.s0[1])\n line2.fromPoints(line1, corner.s1[0], corner.s1[1])\n const ip = line2.intersectPointOfLines(line0, line1)\n if (Number.isFinite(ip[0]) && Number.isFinite(ip[1])) {\n const p0 = corner.s0[1]\n const i = pointIndex.get(p0)\n newPoints[i] = ip\n newPoints[(i + 1) % newPoints.length] = undefined\n } else {\n // paralell segments, drop one\n const p0 = corner.s1[0]\n const i = pointIndex.get(p0)\n newPoints[i] = undefined\n }\n })\n newPoints = newPoints.filter((p) => p !== undefined)\n }\n\n if (corners === 'round') {\n // create rounded corners\n let cornersegments = Math.floor(segments / 4)\n const v0 = vec2.create()\n newCorners.forEach((corner) => {\n // calculate angle of rotation\n let rotation = vec2.angle(vec2.subtract(v0, corner.s1[0], corner.c))\n rotation -= vec2.angle(vec2.subtract(v0, corner.s0[1], corner.c))\n if (orientation && rotation < 0) {\n rotation = rotation + Math.PI\n if (rotation < 0) rotation = rotation + Math.PI\n }\n if ((!orientation) && rotation > 0) {\n rotation = rotation - Math.PI\n if (rotation > 0) rotation = rotation - Math.PI\n }\n\n if (rotation !== 0.0) {\n // generate the segments\n cornersegments = Math.floor(segments * (Math.abs(rotation) / TAU))\n const step = rotation / cornersegments\n const start = vec2.angle(vec2.subtract(v0, corner.s0[1], corner.c))\n const cornerpoints = []\n for (let i = 1; i < cornersegments; i++) {\n const radians = start + (step * i)\n const point = vec2.fromAngleRadians(vec2.create(), radians)\n vec2.scale(point, point, delta)\n vec2.add(point, point, corner.c)\n cornerpoints.push(point)\n }\n if (cornerpoints.length > 0) {\n const p0 = corner.s0[1]\n let i = newPoints.findIndex((point) => vec2.equals(p0, point))\n i = (i + 1) % newPoints.length\n newPoints.splice(i, 0, ...cornerpoints)\n }\n } else {\n // paralell segments, drop one\n const p0 = corner.s1[0]\n const i = newPoints.findIndex((point) => vec2.equals(p0, point))\n newPoints.splice(i, 1)\n }\n })\n }\n return newPoints\n}\n\nmodule.exports = offsetFromPoints\n","const geom2 = require('../../geometries/geom2')\nconst poly2 = require('../../geometries/poly2')\n\nconst offsetFromPoints = require('./offsetFromPoints')\n\n/*\n * Create a offset geometry from the given geom2 using the given options (if any).\n * @param {Object} options - options for offset\n * @param {Float} [options.delta=1] - delta of offset (+ to exterior, - from interior)\n * @param {String} [options.corners='edge'] - type corner to create during of expansion; edge, chamfer, round\n * @param {Integer} [options.segments=16] - number of segments when creating round corners\n * @param {geom2} geometry - geometry from which to create the offset\n * @returns {geom2} offset geometry, plus rounded corners\n */\nconst offsetGeom2 = (options, geometry) => {\n const defaults = {\n delta: 1,\n corners: 'edge',\n segments: 0\n }\n const { delta, corners, segments } = Object.assign({ }, defaults, options)\n\n if (!(corners === 'edge' || corners === 'chamfer' || corners === 'round')) {\n throw new Error('corners must be \"edge\", \"chamfer\", or \"round\"')\n }\n\n // convert the geometry to outlines, and generate offsets from each\n const outlines = geom2.toOutlines(geometry)\n const newoutlines = outlines.map((outline) => {\n const level = outlines.reduce((acc, polygon) => acc + poly2.arePointsInside(outline, poly2.create(polygon)), 0)\n const outside = (level % 2) === 0\n\n options = {\n delta: outside ? delta : -delta,\n corners,\n closed: true,\n segments\n }\n return offsetFromPoints(options, outline)\n })\n\n // create a composite geometry from the new outlines\n const allsides = newoutlines.reduce((sides, newoutline) => sides.concat(geom2.toSides(geom2.fromPoints(newoutline))), [])\n return geom2.create(allsides)\n}\n\nmodule.exports = offsetGeom2\n","const path2 = require('../../geometries/path2')\n\nconst offsetFromPoints = require('./offsetFromPoints')\n\n/*\n * Create a offset geometry from the given path using the given options (if any).\n * @param {Object} options - options for offset\n * @param {Float} [options.delta=1] - delta of offset (+ to exterior, - from interior)\n * @param {String} [options.corners='edge'] - type corner to create during of expansion; edge, chamfer, round\n * @param {Integer} [options.segments=16] - number of segments when creating round corners\n * @param {path2} geometry - geometry from which to create the offset\n * @returns {path2} offset geometry, plus rounded corners\n */\nconst offsetPath2 = (options, geometry) => {\n const defaults = {\n delta: 1,\n corners: 'edge',\n closed: geometry.isClosed,\n segments: 16\n }\n const { delta, corners, closed, segments } = Object.assign({ }, defaults, options)\n\n if (!(corners === 'edge' || corners === 'chamfer' || corners === 'round')) {\n throw new Error('corners must be \"edge\", \"chamfer\", or \"round\"')\n }\n\n options = { delta, corners, closed, segments }\n const newpoints = offsetFromPoints(options, path2.toPoints(geometry))\n return path2.fromPoints({ closed: closed }, newpoints)\n}\n\nmodule.exports = offsetPath2\n","const { area } = require('../../../maths/utils')\nconst { toOutlines } = require('../../../geometries/geom2')\nconst { arePointsInside } = require('../../../geometries/poly2')\n\n/*\n * Constructs a polygon hierarchy of solids and holes.\n * The hierarchy is represented as a forest of trees. All trees shall be depth at most 2.\n * If a solid exists inside the hole of another solid, it will be split out as its own root.\n *\n * @param {geom2} geometry\n * @returns {Array} an array of polygons with associated holes\n * @alias module:modeling/geometries/geom2.toTree\n *\n * @example\n * const geometry = subtract(rectangle({size: [5, 5]}), rectangle({size: [3, 3]}))\n * console.log(assignHoles(geometry))\n * [{\n * \"solid\": [[-2.5,-2.5],[2.5,-2.5],[2.5,2.5],[-2.5,2.5]],\n * \"holes\": [[[-1.5,1.5],[1.5,1.5],[1.5,-1.5],[-1.5,-1.5]]]\n * }]\n */\nconst assignHoles = (geometry) => {\n const outlines = toOutlines(geometry)\n const solids = [] // solid indices\n const holes = [] // hole indices\n outlines.forEach((outline, i) => {\n const a = area(outline)\n if (a < 0) {\n holes.push(i)\n } else if (a > 0) {\n solids.push(i)\n }\n })\n\n // for each hole, determine what solids it is inside of\n const children = [] // child holes of solid[i]\n const parents = [] // parent solids of hole[i]\n solids.forEach((s, i) => {\n const solid = outlines[s]\n children[i] = []\n holes.forEach((h, j) => {\n const hole = outlines[h]\n // check if a point of hole j is inside solid i\n if (arePointsInside([hole[0]], { vertices: solid })) {\n children[i].push(h)\n if (!parents[j]) parents[j] = []\n parents[j].push(i)\n }\n })\n })\n\n // check if holes have multiple parents and choose one with fewest children\n holes.forEach((h, j) => {\n // ensure at least one parent exists\n if (parents[j] && parents[j].length > 1) {\n // the solid directly containing this hole\n const directParent = minIndex(parents[j], (p) => children[p].length)\n parents[j].forEach((p, i) => {\n if (i !== directParent) {\n // Remove hole from skip level parents\n children[p] = children[p].filter((c) => c !== h)\n }\n })\n }\n })\n\n // map indices back to points\n return children.map((holes, i) => ({\n solid: outlines[solids[i]],\n holes: holes.map((h) => outlines[h])\n }))\n}\n\n/*\n * Find the item in the list with smallest score(item).\n * If the list is empty, return undefined.\n */\nconst minIndex = (list, score) => {\n let bestIndex\n let best\n list.forEach((item, index) => {\n const value = score(item)\n if (best === undefined || value < best) {\n bestIndex = index\n best = value\n }\n })\n return bestIndex\n}\n\nmodule.exports = assignHoles\n","const { filterPoints, linkedPolygon, locallyInside, splitPolygon } = require('./linkedPolygon')\nconst { area, pointInTriangle } = require('./triangle')\n\n/*\n * link every hole into the outer loop, producing a single-ring polygon without holes\n *\n * Original source from https://github.com/mapbox/earcut\n * Copyright (c) 2016 Mapbox\n */\nconst eliminateHoles = (data, holeIndices, outerNode, dim) => {\n const queue = []\n\n for (let i = 0, len = holeIndices.length; i < len; i++) {\n const start = holeIndices[i] * dim\n const end = i < len - 1 ? holeIndices[i + 1] * dim : data.length\n const list = linkedPolygon(data, start, end, dim, false)\n if (list === list.next) list.steiner = true\n queue.push(getLeftmost(list))\n }\n\n queue.sort((a, b) => a.x - b.x) // compare X\n\n // process holes from left to right\n for (let i = 0; i < queue.length; i++) {\n outerNode = eliminateHole(queue[i], outerNode)\n outerNode = filterPoints(outerNode, outerNode.next)\n }\n\n return outerNode\n}\n\n/*\n * find a bridge between vertices that connects hole with an outer ring and link it\n */\nconst eliminateHole = (hole, outerNode) => {\n const bridge = findHoleBridge(hole, outerNode)\n if (!bridge) {\n return outerNode\n }\n\n const bridgeReverse = splitPolygon(bridge, hole)\n\n // filter colinear points around the cuts\n const filteredBridge = filterPoints(bridge, bridge.next)\n filterPoints(bridgeReverse, bridgeReverse.next)\n\n // Check if input node was removed by the filtering\n return outerNode === bridge ? filteredBridge : outerNode\n}\n\n/*\n * David Eberly's algorithm for finding a bridge between hole and outer polygon\n */\nconst findHoleBridge = (hole, outerNode) => {\n let p = outerNode\n const hx = hole.x\n const hy = hole.y\n let qx = -Infinity\n let m\n\n // find a segment intersected by a ray from the hole's leftmost point to the left\n // segment's endpoint with lesser x will be potential connection point\n do {\n if (hy <= p.y && hy >= p.next.y && p.next.y !== p.y) {\n const x = p.x + (hy - p.y) * (p.next.x - p.x) / (p.next.y - p.y)\n if (x <= hx && x > qx) {\n qx = x\n if (x === hx) {\n if (hy === p.y) return p\n if (hy === p.next.y) return p.next\n }\n\n m = p.x < p.next.x ? p : p.next\n }\n }\n\n p = p.next\n } while (p !== outerNode)\n\n if (!m) return null\n\n if (hx === qx) return m // hole touches outer segment; pick leftmost endpoint\n\n // look for points inside the triangle of hole point, segment intersection and endpoint\n // if there are no points found, we have a valid connection\n // otherwise choose the point of the minimum angle with the ray as connection point\n\n const stop = m\n const mx = m.x\n const my = m.y\n let tanMin = Infinity\n\n p = m\n\n do {\n if (hx >= p.x && p.x >= mx && hx !== p.x &&\n pointInTriangle(hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y)) {\n const tan = Math.abs(hy - p.y) / (hx - p.x) // tangential\n\n if (locallyInside(p, hole) && (tan < tanMin || (tan === tanMin && (p.x > m.x || (p.x === m.x && sectorContainsSector(m, p)))))) {\n m = p\n tanMin = tan\n }\n }\n\n p = p.next\n } while (p !== stop)\n\n return m\n}\n\n/*\n * whether sector in vertex m contains sector in vertex p in the same coordinates\n */\nconst sectorContainsSector = (m, p) => area(m.prev, m, p.prev) < 0 && area(p.next, m, m.next) < 0\n\n/*\n * find the leftmost node of a polygon ring\n */\nconst getLeftmost = (start) => {\n let p = start\n let leftmost = start\n do {\n if (p.x < leftmost.x || (p.x === leftmost.x && p.y < leftmost.y)) leftmost = p\n p = p.next\n } while (p !== start)\n\n return leftmost\n}\n\nmodule.exports = eliminateHoles\n","const eliminateHoles = require('./eliminateHoles')\nconst { removeNode, sortLinked } = require('./linkedList')\nconst { cureLocalIntersections, filterPoints, isValidDiagonal, linkedPolygon, splitPolygon } = require('./linkedPolygon')\nconst { area, pointInTriangle } = require('./triangle')\n\n/*\n * An implementation of the earcut polygon triangulation algorithm.\n *\n * Original source from https://github.com/mapbox/earcut\n * Copyright (c) 2016 Mapbox\n *\n * @param {data} A flat array of vertex coordinates.\n * @param {holeIndices} An array of hole indices if any.\n * @param {dim} The number of coordinates per vertex in the input array.\n */\nconst triangulate = (data, holeIndices, dim = 2) => {\n const hasHoles = holeIndices && holeIndices.length\n const outerLen = hasHoles ? holeIndices[0] * dim : data.length\n let outerNode = linkedPolygon(data, 0, outerLen, dim, true)\n const triangles = []\n\n if (!outerNode || outerNode.next === outerNode.prev) return triangles\n\n let minX, minY, maxX, maxY, invSize\n\n if (hasHoles) outerNode = eliminateHoles(data, holeIndices, outerNode, dim)\n\n // if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n if (data.length > 80 * dim) {\n minX = maxX = data[0]\n minY = maxY = data[1]\n\n for (let i = dim; i < outerLen; i += dim) {\n const x = data[i]\n const y = data[i + 1]\n if (x < minX) minX = x\n if (y < minY) minY = y\n if (x > maxX) maxX = x\n if (y > maxY) maxY = y\n }\n\n // minX, minY and invSize are later used to transform coords into integers for z-order calculation\n invSize = Math.max(maxX - minX, maxY - minY)\n invSize = invSize !== 0 ? 1 / invSize : 0\n }\n\n earcutLinked(outerNode, triangles, dim, minX, minY, invSize)\n\n return triangles\n}\n\n/*\n * main ear slicing loop which triangulates a polygon (given as a linked list)\n */\nconst earcutLinked = (ear, triangles, dim, minX, minY, invSize, pass) => {\n if (!ear) return\n\n // interlink polygon nodes in z-order\n if (!pass && invSize) indexCurve(ear, minX, minY, invSize)\n\n let stop = ear\n let prev\n let next\n\n // iterate through ears, slicing them one by one\n while (ear.prev !== ear.next) {\n prev = ear.prev\n next = ear.next\n\n if (invSize ? isEarHashed(ear, minX, minY, invSize) : isEar(ear)) {\n // cut off the triangle\n triangles.push(prev.i / dim)\n triangles.push(ear.i / dim)\n triangles.push(next.i / dim)\n\n removeNode(ear)\n\n // skipping the next vertex leads to less sliver triangles\n ear = next.next\n stop = next.next\n\n continue\n }\n\n ear = next\n\n // if we looped through the whole remaining polygon and can't find any more ears\n if (ear === stop) {\n // try filtering points and slicing again\n if (!pass) {\n earcutLinked(filterPoints(ear), triangles, dim, minX, minY, invSize, 1)\n\n // if this didn't work, try curing all small self-intersections locally\n } else if (pass === 1) {\n ear = cureLocalIntersections(filterPoints(ear), triangles, dim)\n earcutLinked(ear, triangles, dim, minX, minY, invSize, 2)\n\n // as a last resort, try splitting the remaining polygon into two\n } else if (pass === 2) {\n splitEarcut(ear, triangles, dim, minX, minY, invSize)\n }\n\n break\n }\n }\n}\n\n/*\n * check whether a polygon node forms a valid ear with adjacent nodes\n */\nconst isEar = (ear) => {\n const a = ear.prev\n const b = ear\n const c = ear.next\n\n if (area(a, b, c) >= 0) return false // reflex, can't be an ear\n\n // now make sure we don't have other points inside the potential ear\n let p = ear.next.next\n\n while (p !== ear.prev) {\n if (pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) && area(p.prev, p, p.next) >= 0) {\n return false\n }\n p = p.next\n }\n\n return true\n}\n\nconst isEarHashed = (ear, minX, minY, invSize) => {\n const a = ear.prev\n const b = ear\n const c = ear.next\n\n if (area(a, b, c) >= 0) return false // reflex, can't be an ear\n\n // triangle bbox; min & max are calculated like this for speed\n const minTX = a.x < b.x ? (a.x < c.x ? a.x : c.x) : (b.x < c.x ? b.x : c.x)\n const minTY = a.y < b.y ? (a.y < c.y ? a.y : c.y) : (b.y < c.y ? b.y : c.y)\n const maxTX = a.x > b.x ? (a.x > c.x ? a.x : c.x) : (b.x > c.x ? b.x : c.x)\n const maxTY = a.y > b.y ? (a.y > c.y ? a.y : c.y) : (b.y > c.y ? b.y : c.y)\n\n // z-order range for the current triangle bbox\n const minZ = zOrder(minTX, minTY, minX, minY, invSize)\n const maxZ = zOrder(maxTX, maxTY, minX, minY, invSize)\n\n let p = ear.prevZ\n let n = ear.nextZ\n\n // look for points inside the triangle in both directions\n while (p && p.z >= minZ && n && n.z <= maxZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false\n p = p.prevZ\n\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false\n n = n.nextZ\n }\n\n // look for remaining points in decreasing z-order\n while (p && p.z >= minZ) {\n if (p !== ear.prev && p !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y) &&\n area(p.prev, p, p.next) >= 0) return false\n p = p.prevZ\n }\n\n // look for remaining points in increasing z-order\n while (n && n.z <= maxZ) {\n if (n !== ear.prev && n !== ear.next &&\n pointInTriangle(a.x, a.y, b.x, b.y, c.x, c.y, n.x, n.y) &&\n area(n.prev, n, n.next) >= 0) return false\n n = n.nextZ\n }\n\n return true\n}\n\n/*\n * try splitting polygon into two and triangulate them independently\n */\nconst splitEarcut = (start, triangles, dim, minX, minY, invSize) => {\n // look for a valid diagonal that divides the polygon into two\n let a = start\n do {\n let b = a.next.next\n while (b !== a.prev) {\n if (a.i !== b.i && isValidDiagonal(a, b)) {\n // split the polygon in two by the diagonal\n let c = splitPolygon(a, b)\n\n // filter colinear points around the cuts\n a = filterPoints(a, a.next)\n c = filterPoints(c, c.next)\n\n // run earcut on each half\n earcutLinked(a, triangles, dim, minX, minY, invSize)\n earcutLinked(c, triangles, dim, minX, minY, invSize)\n return\n }\n\n b = b.next\n }\n\n a = a.next\n } while (a !== start)\n}\n\n/*\n * interlink polygon nodes in z-order\n */\nconst indexCurve = (start, minX, minY, invSize) => {\n let p = start\n do {\n if (p.z === null) p.z = zOrder(p.x, p.y, minX, minY, invSize)\n p.prevZ = p.prev\n p.nextZ = p.next\n p = p.next\n } while (p !== start)\n\n p.prevZ.nextZ = null\n p.prevZ = null\n\n sortLinked(p, (p) => p.z)\n}\n\n/*\n * z-order of a point given coords and inverse of the longer side of data bbox\n */\nconst zOrder = (x, y, minX, minY, invSize) => {\n // coords are transformed into non-negative 15-bit integer range\n x = 32767 * (x - minX) * invSize\n y = 32767 * (y - minY) * invSize\n\n x = (x | (x << 8)) & 0x00FF00FF\n x = (x | (x << 4)) & 0x0F0F0F0F\n x = (x | (x << 2)) & 0x33333333\n x = (x | (x << 1)) & 0x55555555\n\n y = (y | (y << 8)) & 0x00FF00FF\n y = (y | (y << 4)) & 0x0F0F0F0F\n y = (y | (y << 2)) & 0x33333333\n y = (y | (y << 1)) & 0x55555555\n\n return x | (y << 1)\n}\n\nmodule.exports = triangulate\n","const sortLinked = require('./linkedListSort')\n\nclass Node {\n constructor (i, x, y) {\n // vertex index in coordinates array\n this.i = i\n\n // vertex coordinates\n this.x = x\n this.y = y\n\n // previous and next vertex nodes in a polygon ring\n this.prev = null\n this.next = null\n\n // z-order curve value\n this.z = null\n\n // previous and next nodes in z-order\n this.prevZ = null\n this.nextZ = null\n\n // indicates whether this is a steiner point\n this.steiner = false\n }\n}\n\n/*\n * create a node and optionally link it with previous one (in a circular doubly linked list)\n */\nconst insertNode = (i, x, y, last) => {\n const p = new Node(i, x, y)\n\n if (!last) {\n p.prev = p\n p.next = p\n } else {\n p.next = last.next\n p.prev = last\n last.next.prev = p\n last.next = p\n }\n\n return p\n}\n\n/*\n * remove a node and join prev with next nodes\n */\nconst removeNode = (p) => {\n p.next.prev = p.prev\n p.prev.next = p.next\n\n if (p.prevZ) p.prevZ.nextZ = p.nextZ\n if (p.nextZ) p.nextZ.prevZ = p.prevZ\n}\n\nmodule.exports = { Node, insertNode, removeNode, sortLinked }\n","\n// Simon Tatham's linked list merge sort algorithm\n// https://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\nconst sortLinked = (list, fn) => {\n let i, p, q, e, numMerges\n let inSize = 1\n\n do {\n p = list\n list = null\n let tail = null\n numMerges = 0\n\n while (p) {\n numMerges++\n q = p\n let pSize = 0\n for (i = 0; i < inSize; i++) {\n pSize++\n q = q.nextZ\n if (!q) break\n }\n\n let qSize = inSize\n\n while (pSize > 0 || (qSize > 0 && q)) {\n if (pSize !== 0 && (qSize === 0 || !q || fn(p) <= fn(q))) {\n e = p\n p = p.nextZ\n pSize--\n } else {\n e = q\n q = q.nextZ\n qSize--\n }\n\n if (tail) tail.nextZ = e\n else list = e\n\n e.prevZ = tail\n tail = e\n }\n\n p = q\n }\n\n tail.nextZ = null\n inSize *= 2\n } while (numMerges > 1)\n\n return list\n}\n\nmodule.exports = sortLinked\n","const { Node, insertNode, removeNode } = require('./linkedList')\nconst { area } = require('./triangle')\n\n/*\n * create a circular doubly linked list from polygon points in the specified winding order\n */\nconst linkedPolygon = (data, start, end, dim, clockwise) => {\n let last\n\n if (clockwise === (signedArea(data, start, end, dim) > 0)) {\n for (let i = start; i < end; i += dim) {\n last = insertNode(i, data[i], data[i + 1], last)\n }\n } else {\n for (let i = end - dim; i >= start; i -= dim) {\n last = insertNode(i, data[i], data[i + 1], last)\n }\n }\n\n if (last && equals(last, last.next)) {\n removeNode(last)\n last = last.next\n }\n\n return last\n}\n\n/*\n * eliminate colinear or duplicate points\n */\nconst filterPoints = (start, end) => {\n if (!start) return start\n if (!end) end = start\n\n let p = start\n let again\n do {\n again = false\n\n if (!p.steiner && (equals(p, p.next) || area(p.prev, p, p.next) === 0)) {\n removeNode(p)\n p = end = p.prev\n if (p === p.next) break\n again = true\n } else {\n p = p.next\n }\n } while (again || p !== end)\n\n return end\n}\n\n/*\n * go through all polygon nodes and cure small local self-intersections\n */\nconst cureLocalIntersections = (start, triangles, dim) => {\n let p = start\n do {\n const a = p.prev\n const b = p.next.next\n\n if (!equals(a, b) && intersects(a, p, p.next, b) && locallyInside(a, b) && locallyInside(b, a)) {\n triangles.push(a.i / dim)\n triangles.push(p.i / dim)\n triangles.push(b.i / dim)\n\n // remove two nodes involved\n removeNode(p)\n removeNode(p.next)\n\n p = start = b\n }\n\n p = p.next\n } while (p !== start)\n\n return filterPoints(p)\n}\n\n/*\n * check if a polygon diagonal intersects any polygon segments\n */\nconst intersectsPolygon = (a, b) => {\n let p = a\n do {\n if (p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n intersects(p, p.next, a, b)) return true\n p = p.next\n } while (p !== a)\n\n return false\n}\n\n/*\n * check if a polygon diagonal is locally inside the polygon\n */\nconst locallyInside = (a, b) => area(a.prev, a, a.next) < 0\n ? area(a, b, a.next) >= 0 && area(a, a.prev, b) >= 0\n : area(a, b, a.prev) < 0 || area(a, a.next, b) < 0\n\n/*\n * check if the middle point of a polygon diagonal is inside the polygon\n */\nconst middleInside = (a, b) => {\n let p = a\n let inside = false\n const px = (a.x + b.x) / 2\n const py = (a.y + b.y) / 2\n do {\n if (((p.y > py) !== (p.next.y > py)) && p.next.y !== p.y &&\n (px < (p.next.x - p.x) * (py - p.y) / (p.next.y - p.y) + p.x)) { inside = !inside }\n p = p.next\n } while (p !== a)\n\n return inside\n}\n\n/*\n * link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two\n * if one belongs to the outer ring and another to a hole, it merges it into a single ring\n */\nconst splitPolygon = (a, b) => {\n const a2 = new Node(a.i, a.x, a.y)\n const b2 = new Node(b.i, b.x, b.y)\n const an = a.next\n const bp = b.prev\n\n a.next = b\n b.prev = a\n\n a2.next = an\n an.prev = a2\n\n b2.next = a2\n a2.prev = b2\n\n bp.next = b2\n b2.prev = bp\n\n return b2\n}\n\n/*\n * check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n */\nconst isValidDiagonal = (a, b) => a.next.i !== b.i &&\n a.prev.i !== b.i &&\n !intersectsPolygon(a, b) && // doesn't intersect other edges\n (\n locallyInside(a, b) && locallyInside(b, a) && middleInside(a, b) && // locally visible\n (area(a.prev, a, b.prev) || area(a, b.prev, b)) || // does not create opposite-facing sectors\n equals(a, b) && area(a.prev, a, a.next) > 0 && area(b.prev, b, b.next) > 0\n )\n\n/*\n * check if two segments intersect\n */\nconst intersects = (p1, q1, p2, q2) => {\n const o1 = Math.sign(area(p1, q1, p2))\n const o2 = Math.sign(area(p1, q1, q2))\n const o3 = Math.sign(area(p2, q2, p1))\n const o4 = Math.sign(area(p2, q2, q1))\n\n if (o1 !== o2 && o3 !== o4) return true // general case\n\n if (o1 === 0 && onSegment(p1, p2, q1)) return true // p1, q1 and p2 are colinear and p2 lies on p1q1\n if (o2 === 0 && onSegment(p1, q2, q1)) return true // p1, q1 and q2 are colinear and q2 lies on p1q1\n if (o3 === 0 && onSegment(p2, p1, q2)) return true // p2, q2 and p1 are colinear and p1 lies on p2q2\n if (o4 === 0 && onSegment(p2, q1, q2)) return true // p2, q2 and q1 are colinear and q1 lies on p2q2\n\n return false\n}\n\n/*\n * for colinear points p, q, r, check if point q lies on segment pr\n */\nconst onSegment = (p, q, r) => q.x <= Math.max(p.x, r.x) &&\n q.x >= Math.min(p.x, r.x) &&\n q.y <= Math.max(p.y, r.y) &&\n q.y >= Math.min(p.y, r.y)\n\nconst signedArea = (data, start, end, dim) => {\n let sum = 0\n for (let i = start, j = end - dim; i < end; i += dim) {\n sum += (data[j] - data[i]) * (data[i + 1] + data[j + 1])\n j = i\n }\n\n return sum\n}\n\n/*\n * check if two points are equal\n */\nconst equals = (p1, p2) => p1.x === p2.x && p1.y === p2.y\n\nmodule.exports = { cureLocalIntersections, filterPoints, isValidDiagonal, linkedPolygon, locallyInside, splitPolygon }\n","const geom2 = require('../../../geometries/geom2')\nconst plane = require('../../../maths/plane')\nconst vec2 = require('../../../maths/vec2')\nconst vec3 = require('../../../maths/vec3')\nconst calculatePlane = require('../slice/calculatePlane')\nconst assignHoles = require('./assignHoles')\n\n/*\n * Constructs a polygon hierarchy which associates holes with their outer solids.\n * This class maps a 3D polygon onto a 2D space using an orthonormal basis.\n * It tracks the mapping so that points can be reversed back to 3D losslessly.\n */\nclass PolygonHierarchy {\n constructor (slice) {\n this.plane = calculatePlane(slice)\n\n // create an orthonormal basis\n // choose an arbitrary right hand vector, making sure it is somewhat orthogonal to the plane normal\n const rightvector = vec3.orthogonal(vec3.create(), this.plane)\n const perp = vec3.cross(vec3.create(), this.plane, rightvector)\n this.v = vec3.normalize(perp, perp)\n this.u = vec3.cross(vec3.create(), this.v, this.plane)\n\n // map from 2D to original 3D points\n this.basisMap = new Map()\n\n // project slice onto 2D plane\n const projected = slice.edges.map((e) => e.map((v) => this.to2D(v)))\n\n // compute polygon hierarchies, assign holes to solids\n const geometry = geom2.create(projected)\n this.roots = assignHoles(geometry)\n }\n\n /*\n * project a 3D point onto the 2D plane\n */\n to2D (vector3) {\n const vector2 = vec2.fromValues(vec3.dot(vector3, this.u), vec3.dot(vector3, this.v))\n this.basisMap.set(vector2, vector3)\n return vector2\n }\n\n /*\n * un-project a 2D point back into 3D\n */\n to3D (vector2) {\n // use a map to get the original 3D, no floating point error\n const original = this.basisMap.get(vector2)\n if (original) {\n return original\n } else {\n console.log('Warning: point not in original slice')\n const v1 = vec3.scale(vec3.create(), this.u, vector2[0])\n const v2 = vec3.scale(vec3.create(), this.v, vector2[1])\n\n const planeOrigin = vec3.scale(vec3.create(), plane, plane[3])\n const v3 = vec3.add(v1, v1, planeOrigin)\n return vec3.add(v2, v2, v3)\n }\n }\n}\n\nmodule.exports = PolygonHierarchy\n","\n/*\n * check if a point lies within a convex triangle\n */\nconst pointInTriangle = (ax, ay, bx, by, cx, cy, px, py) => (\n (cx - px) * (ay - py) - (ax - px) * (cy - py) >= 0 &&\n (ax - px) * (by - py) - (bx - px) * (ay - py) >= 0 &&\n (bx - px) * (cy - py) - (cx - px) * (by - py) >= 0\n)\n\n/*\n * signed area of a triangle\n */\nconst area = (p, q, r) => (q.y - p.y) * (r.x - q.x) - (q.x - p.x) * (r.y - q.y)\n\nmodule.exports = { area, pointInTriangle }\n","const mat4 = require('../../maths/mat4')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst poly3 = require('../../geometries/poly3')\n\nconst slice = require('./slice')\nconst repairSlice = require('./slice/repair')\n\nconst extrudeWalls = require('./extrudeWalls')\n\nconst defaultCallback = (progress, index, base) => {\n let baseSlice = null\n if (geom2.isA(base)) baseSlice = slice.fromSides(geom2.toSides(base))\n if (poly3.isA(base)) baseSlice = slice.fromPoints(poly3.toPoints(base))\n\n return progress === 0 || progress === 1 ? slice.transform(mat4.fromTranslation(mat4.create(), [0, 0, progress]), baseSlice) : null\n}\n\n/**\n * Extrude a solid from the slices as returned by the callback function.\n * @see slice\n *\n * @param {Object} options - options for extrude\n * @param {Integer} [options.numberOfSlices=2] the number of slices to be generated by the callback\n * @param {Boolean} [options.capStart=true] the solid should have a cap at the start\n * @param {Boolean} [options.capEnd=true] the solid should have a cap at the end\n * @param {Boolean} [options.close=false] the solid should have a closing section between start and end\n * @param {Boolean} [options.repair=true] - repair gaps in the geometry\n * @param {Function} [options.callback] the callback function that generates each slice\n * @param {Object} base - the base object which is used to create slices (see the example for callback information)\n * @return {geom3} the extruded shape\n * @alias module:modeling/extrusions.extrudeFromSlices\n *\n * @example\n * // Parameters:\n * // progress : the percent complete [0..1]\n * // index : the index of the current slice [0..numberOfSlices - 1]\n * // base : the base object as given\n * // Return Value:\n * // slice or null (to skip)\n * const callback = (progress, index, base) => {\n * ...\n * return slice\n * }\n */\nconst extrudeFromSlices = (options, base) => {\n const defaults = {\n numberOfSlices: 2,\n capStart: true,\n capEnd: true,\n close: false,\n repair: true,\n callback: defaultCallback\n }\n const { numberOfSlices, capStart, capEnd, close, repair, callback: generate } = Object.assign({ }, defaults, options)\n\n if (numberOfSlices < 2) throw new Error('numberOfSlices must be 2 or more')\n\n // Repair gaps in the base slice\n if (repair) {\n // note: base must be a slice, if base is geom2 this doesn't repair\n base = repairSlice(base)\n }\n\n const sMax = numberOfSlices - 1\n\n let startSlice = null\n let endSlice = null\n let prevSlice = null\n let polygons = []\n for (let s = 0; s < numberOfSlices; s++) {\n // invoke the callback function to get the next slice\n // NOTE: callback can return null to skip the slice\n const currentSlice = generate(s / sMax, s, base)\n\n if (currentSlice) {\n if (!slice.isA(currentSlice)) throw new Error('the callback function must return slice objects')\n\n const edges = slice.toEdges(currentSlice)\n if (edges.length === 0) throw new Error('the callback function must return slices with one or more edges')\n\n if (prevSlice) {\n polygons = polygons.concat(extrudeWalls(prevSlice, currentSlice))\n }\n\n // save start and end slices for caps if necessary\n if (s === 0) startSlice = currentSlice\n if (s === (numberOfSlices - 1)) endSlice = currentSlice\n\n prevSlice = currentSlice\n }\n }\n\n if (capEnd) {\n // create a cap at the end\n const endPolygons = slice.toPolygons(endSlice)\n polygons = polygons.concat(endPolygons)\n }\n if (capStart) {\n // create a cap at the start\n const startPolygons = slice.toPolygons(startSlice).map(poly3.invert)\n polygons = polygons.concat(startPolygons)\n }\n if (!capStart && !capEnd) {\n // create walls between end and start slices\n if (close && !slice.equals(endSlice, startSlice)) {\n polygons = polygons.concat(extrudeWalls(endSlice, startSlice))\n }\n }\n return geom3.create(polygons)\n}\n\nmodule.exports = extrudeFromSlices\n","const { TAU } = require('../../maths/constants')\nconst slice = require('./slice')\nconst mat4 = require('../../maths/mat4')\nconst extrudeFromSlices = require('./extrudeFromSlices')\nconst geom2 = require('../../geometries/geom2')\n\n/**\n * Perform a helical extrude of the geometry, using the given options.\n *\n * @param {Object} options - options for extrusion\n * @param {Number} [options.angle=TAU] - angle of the extrusion (RADIANS) positive for right-hand rotation, negative for left-hand\n * @param {Number} [options.startAngle=0] - start angle of the extrusion (RADIANS)\n * @param {Number} [options.pitch=10] - elevation gain for each turn\n * @param {Number} [options.height] - total height of the helix path. Ignored if pitch is set.\n * @param {Number} [options.endOffset=0] - offset the final radius of the extrusion, allowing for tapered helix, and or spiral\n * @param {Number} [options.segmentsPerRotation=32] - number of segments per full rotation of the extrusion\n * @param {geom2} geometry - the geometry to extrude\n * @returns {geom3} the extruded geometry\n * @alias module:modeling/extrusions.extrudeHelical\n *\n * @example\n * const myshape = extrudeHelical(\n * {\n * angle: Math.PI * 4,\n * pitch: 10,\n * segmentsPerRotation: 64\n * },\n * circle({size: 3, center: [10, 0]})\n * )\n */\nconst extrudeHelical = (options, geometry) => {\n const defaults = {\n angle: TAU,\n startAngle: 0,\n pitch: 10,\n endOffset: 0,\n segmentsPerRotation: 32\n }\n const { angle, endOffset, segmentsPerRotation, startAngle } = Object.assign({}, defaults, options)\n\n let pitch\n // ignore height if pitch is set\n if (!options.pitch && options.height) {\n pitch = options.height / (angle / TAU)\n } else {\n pitch = options.pitch ? options.pitch : defaults.pitch\n }\n\n // needs at least 3 segments for each revolution\n const minNumberOfSegments = 3\n\n if (segmentsPerRotation < minNumberOfSegments) { throw new Error('The number of segments per rotation needs to be at least 3.') }\n\n const shapeSides = geom2.toSides(geometry)\n if (shapeSides.length === 0) throw new Error('the given geometry cannot be empty')\n\n // const pointsWithNegativeX = shapeSides.filter((s) => (s[0][0] < 0))\n const pointsWithPositiveX = shapeSides.filter((s) => (s[0][0] >= 0))\n\n let baseSlice = slice.fromSides(shapeSides)\n\n if (pointsWithPositiveX.length === 0) {\n // only points in negative x plane, reverse\n baseSlice = slice.reverse(baseSlice)\n }\n\n const calculatedSegments = Math.round(segmentsPerRotation / TAU * Math.abs(angle))\n const segments = calculatedSegments >= 2 ? calculatedSegments : 2\n // define transform matrix variables for performance increase\n const step1 = mat4.create()\n let matrix\n const sliceCallback = (progress, index, base) => {\n const zRotation = startAngle + angle / segments * index\n const xOffset = endOffset / segments * index\n const zOffset = (zRotation - startAngle) / TAU * pitch\n\n // TODO: check for valid geometry after translations\n // ie all the points have to be either x > -xOffset or x < -xOffset\n // this would have to be checked for every transform, and handled\n //\n // not implementing, as this currently doesn't break anything,\n // only creates inside-out polygons\n\n // create transformation matrix\n mat4.multiply(\n step1,\n // then apply offsets\n mat4.fromTranslation(mat4.create(), [xOffset, 0, zOffset * Math.sign(angle)]),\n // first rotate \"flat\" 2D shape from XY to XZ plane\n mat4.fromXRotation(mat4.create(), -TAU / 4 * Math.sign(angle)) // rotate the slice correctly to not create inside-out polygon\n )\n\n matrix = mat4.create()\n mat4.multiply(\n matrix,\n // finally rotate around Z axis\n mat4.fromZRotation(mat4.create(), zRotation),\n step1\n )\n return slice.transform(matrix, base)\n }\n\n return extrudeFromSlices(\n {\n // \"base\" slice is counted as segment, so add one for complete final rotation\n numberOfSlices: segments + 1,\n callback: sliceCallback\n },\n baseSlice\n )\n}\n\nmodule.exports = extrudeHelical\n","const flatten = require('../../utils/flatten')\n\nconst geom2 = require('../../geometries/geom2')\nconst path2 = require('../../geometries/path2')\n\nconst extrudeLinearGeom2 = require('./extrudeLinearGeom2')\nconst extrudeLinearPath2 = require('./extrudeLinearPath2')\n\n/**\n * Extrude the given geometry in an upward linear direction using the given options.\n * Accepts path2 or geom2 objects as input. Paths must be closed.\n *\n * @param {Object} options - options for extrude\n * @param {Number} [options.height=1] the height of the extrusion\n * @param {Number} [options.twistAngle=0] the final rotation (RADIANS) about the origin of the shape (if any)\n * @param {Integer} [options.twistSteps=1] the resolution of the twist about the axis (if any)\n * @param {...Object} objects - the geometries to extrude\n * @return {Object|Array} the extruded geometry, or a list of extruded geometry\n * @alias module:modeling/extrusions.extrudeLinear\n *\n * @example\n * let myshape = extrudeLinear({height: 10}, rectangle({size: [20, 25]}))\n */\nconst extrudeLinear = (options, ...objects) => {\n const defaults = {\n height: 1,\n twistAngle: 0,\n twistSteps: 1,\n repair: true\n }\n const { height, twistAngle, twistSteps, repair } = Object.assign({ }, defaults, options)\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n options = { offset: [0, 0, height], twistAngle, twistSteps, repair }\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return extrudeLinearPath2(options, object)\n if (geom2.isA(object)) return extrudeLinearGeom2(options, object)\n // if (geom3.isA(object)) return geom3.extrude(options, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = extrudeLinear\n","const mat4 = require('../../maths/mat4')\nconst vec3 = require('../../maths/vec3')\n\nconst geom2 = require('../../geometries/geom2')\n\nconst slice = require('./slice')\n\nconst extrudeFromSlices = require('./extrudeFromSlices')\n\n/*\n * Extrude the given geometry using the given options.\n *\n * @param {Object} [options] - options for extrude\n * @param {Array} [options.offset] - the direction of the extrusion as a 3D vector\n * @param {Number} [options.twistAngle] - the final rotation (RADIANS) about the origin\n * @param {Integer} [options.twistSteps] - the number of steps created to produce the twist (if any)\n * @param {Boolean} [options.repair] - repair gaps in the geometry\n * @param {geom2} geometry - the geometry to extrude\n * @returns {geom3} the extruded 3D geometry\n*/\nconst extrudeGeom2 = (options, geometry) => {\n const defaults = {\n offset: [0, 0, 1],\n twistAngle: 0,\n twistSteps: 12,\n repair: true\n }\n let { offset, twistAngle, twistSteps, repair } = Object.assign({ }, defaults, options)\n\n if (twistSteps < 1) throw new Error('twistSteps must be 1 or more')\n\n if (twistAngle === 0) {\n twistSteps = 1\n }\n\n // convert to vector in order to perform transforms\n const offsetv = vec3.clone(offset)\n\n const baseSides = geom2.toSides(geometry)\n if (baseSides.length === 0) throw new Error('the given geometry cannot be empty')\n\n const baseSlice = slice.fromSides(baseSides)\n if (offsetv[2] < 0) slice.reverse(baseSlice, baseSlice)\n\n const matrix = mat4.create()\n const createTwist = (progress, index, base) => {\n const Zrotation = index / twistSteps * twistAngle\n const Zoffset = vec3.scale(vec3.create(), offsetv, index / twistSteps)\n mat4.multiply(matrix, mat4.fromZRotation(matrix, Zrotation), mat4.fromTranslation(mat4.create(), Zoffset))\n\n return slice.transform(matrix, base)\n }\n\n options = {\n numberOfSlices: twistSteps + 1,\n capStart: true,\n capEnd: true,\n repair,\n callback: createTwist\n }\n return extrudeFromSlices(options, baseSlice)\n}\n\nmodule.exports = extrudeGeom2\n","const geom2 = require('../../geometries/geom2')\nconst path2 = require('../../geometries/path2')\n\nconst extrudeLinearGeom2 = require('./extrudeLinearGeom2')\n\n/*\n * Extrude the given geometry using the given options.\n *\n * @param {Object} [options] - options for extrude\n * @param {Array} [options.offset] - the direction of the extrusion as a 3D vector\n * @param {Number} [options.twistAngle] - the final rotation (RADIANS) about the origin\n * @param {Integer} [options.twistSteps] - the number of steps created to produce the twist (if any)\n * @param {path2} geometry - the geometry to extrude\n * @returns {geom3} the extruded 3D geometry\n*/\nconst extrudePath2 = (options, geometry) => {\n if (!geometry.isClosed) throw new Error('extruded path must be closed')\n // Convert path2 to geom2\n const points = path2.toPoints(geometry)\n const geometry2 = geom2.fromPoints(points)\n return extrudeLinearGeom2(options, geometry2)\n}\n\nmodule.exports = extrudePath2\n","const flatten = require('../../utils/flatten')\n\nconst geom2 = require('../../geometries/geom2')\nconst path2 = require('../../geometries/path2')\n\nconst extrudeRectangularPath2 = require('./extrudeRectangularPath2')\nconst extrudeRectangularGeom2 = require('./extrudeRectangularGeom2')\n\n/**\n * Extrude the given geometry by following the outline(s) with a rectangle.\n * @See expand for addition options\n * @param {Object} options - options for extrusion, if any\n * @param {Number} [options.size=1] - size of the rectangle\n * @param {Number} [options.height=1] - height of the extrusion\n * @param {...Object} objects - the geometries to extrude\n * @return {Object|Array} the extruded object, or a list of extruded objects\n * @alias module:modeling/extrusions.extrudeRectangular\n *\n * @example\n * let mywalls = extrudeRectangular({size: 1, height: 3}, square({size: 20}))\n * let mywalls = extrudeRectangular({size: 1, height: 300, twistAngle: TAU / 2}, square({size: 20}))\n */\nconst extrudeRectangular = (options, ...objects) => {\n const defaults = {\n size: 1,\n height: 1\n }\n const { size, height } = Object.assign({}, defaults, options)\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n if (size <= 0) throw new Error('size must be positive')\n if (height <= 0) throw new Error('height must be positive')\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return extrudeRectangularPath2(options, object)\n if (geom2.isA(object)) return extrudeRectangularGeom2(options, object)\n // if (geom3.isA(object)) return geom3.transform(matrix, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = extrudeRectangular\n","const { area } = require('../../maths/utils')\n\nconst geom2 = require('../../geometries/geom2')\nconst path2 = require('../../geometries/path2')\n\nconst expand = require('../expansions/expand')\n\nconst extrudeLinearGeom2 = require('./extrudeLinearGeom2')\n\n/*\n * Expand and extrude the given geometry (geom2).\n * @see expand for additional options\n * @param {Object} options - options for extrusion, if any\n * @param {Number} [options.size=1] - size of the rectangle\n * @param {Number} [options.height=1] - height of the extrusion\n * @param {geom2} geometry - the geometry to extrude\n * @return {geom3} the extruded geometry\n */\nconst extrudeRectangularGeom2 = (options, geometry) => {\n const defaults = {\n size: 1,\n height: 1\n }\n const { size, height } = Object.assign({ }, defaults, options)\n\n options.delta = size\n options.offset = [0, 0, height]\n\n // convert the geometry to outlines\n const outlines = geom2.toOutlines(geometry)\n if (outlines.length === 0) throw new Error('the given geometry cannot be empty')\n\n // expand the outlines\n const newparts = outlines.map((outline) => {\n if (area(outline) < 0) outline.reverse() // all outlines must wind counter clockwise\n return expand(options, path2.fromPoints({ closed: true }, outline))\n })\n\n // create a composite geometry\n const allsides = newparts.reduce((sides, part) => sides.concat(geom2.toSides(part)), [])\n const newgeometry = geom2.create(allsides)\n\n return extrudeLinearGeom2(options, newgeometry)\n}\n\nmodule.exports = extrudeRectangularGeom2\n","const path2 = require('../../geometries/path2')\n\nconst expand = require('../expansions/expand')\n\nconst extrudeLinearGeom2 = require('./extrudeLinearGeom2')\n\n/*\n * Expand and extrude the given geometry (path2).\n * @See expand for addition options\n * @param {Object} options - options for extrusion, if any\n * @param {Number} [options.size=1] - size of the rectangle\n * @param {Number} [options.height=1] - height of the extrusion\n * @param {path2} geometry - the geometry to extrude\n * @return {geom3} the extruded geometry\n */\nconst extrudeRectangularPath2 = (options, geometry) => {\n const defaults = {\n size: 1,\n height: 1\n }\n const { size, height } = Object.assign({ }, defaults, options)\n\n options.delta = size\n options.offset = [0, 0, height]\n\n const points = path2.toPoints(geometry)\n if (points.length === 0) throw new Error('the given geometry cannot be empty')\n\n const newgeometry = expand(options, geometry)\n return extrudeLinearGeom2(options, newgeometry)\n}\n\nmodule.exports = extrudeRectangularPath2\n","const { TAU } = require('../../maths/constants')\nconst mat4 = require('../../maths/mat4')\n\nconst { mirrorX } = require('../transforms/mirror')\n\nconst geom2 = require('../../geometries/geom2')\n\nconst slice = require('./slice')\n\nconst extrudeFromSlices = require('./extrudeFromSlices')\n\n/**\n * Rotate extrude the given geometry using the given options.\n *\n * @param {Object} options - options for extrusion\n * @param {Number} [options.angle=TAU] - angle of the extrusion (RADIANS)\n * @param {Number} [options.startAngle=0] - start angle of the extrusion (RADIANS)\n * @param {String} [options.overflow='cap'] - what to do with points outside of bounds (+ / - x) :\n * defaults to capping those points to 0 (only supported behaviour for now)\n * @param {Number} [options.segments=12] - number of segments of the extrusion\n * @param {geom2} geometry - the geometry to extrude\n * @returns {geom3} the extruded geometry\n * @alias module:modeling/extrusions.extrudeRotate\n *\n * @example\n * const myshape = extrudeRotate({segments: 8, angle: TAU / 2}, circle({size: 3, center: [4, 0]}))\n */\nconst extrudeRotate = (options, geometry) => {\n const defaults = {\n segments: 12,\n startAngle: 0,\n angle: TAU,\n overflow: 'cap'\n }\n let { segments, startAngle, angle, overflow } = Object.assign({}, defaults, options)\n\n if (segments < 3) throw new Error('segments must be greater then 3')\n\n startAngle = Math.abs(startAngle) > TAU ? startAngle % TAU : startAngle\n angle = Math.abs(angle) > TAU ? angle % TAU : angle\n\n let endAngle = startAngle + angle\n endAngle = Math.abs(endAngle) > TAU ? endAngle % TAU : endAngle\n\n if (endAngle < startAngle) {\n const x = startAngle\n startAngle = endAngle\n endAngle = x\n }\n let totalRotation = endAngle - startAngle\n if (totalRotation <= 0.0) totalRotation = TAU\n\n if (Math.abs(totalRotation) < TAU) {\n // adjust the segments to achieve the total rotation requested\n const anglePerSegment = TAU / segments\n segments = Math.floor(Math.abs(totalRotation) / anglePerSegment)\n if (Math.abs(totalRotation) > (segments * anglePerSegment)) segments++\n }\n\n // console.log('startAngle: '+startAngle)\n // console.log('endAngle: '+endAngle)\n // console.log(totalRotation)\n // console.log(segments)\n\n // convert geometry to an array of sides, easier to deal with\n let shapeSides = geom2.toSides(geometry)\n if (shapeSides.length === 0) throw new Error('the given geometry cannot be empty')\n\n // determine if the rotate extrude can be computed in the first place\n // ie all the points have to be either x > 0 or x < 0\n\n // generic solution to always have a valid solid, even if points go beyond x/ -x\n // 1. split points up between all those on the 'left' side of the axis (x<0) & those on the 'righ' (x>0)\n // 2. for each set of points do the extrusion operation IN OPOSITE DIRECTIONS\n // 3. union the two resulting solids\n\n // 1. alt : OR : just cap of points at the axis ?\n\n const pointsWithNegativeX = shapeSides.filter((s) => (s[0][0] < 0))\n const pointsWithPositiveX = shapeSides.filter((s) => (s[0][0] >= 0))\n const arePointsWithNegAndPosX = pointsWithNegativeX.length > 0 && pointsWithPositiveX.length > 0\n\n // FIXME actually there are cases where setting X=0 will change the basic shape\n // - Alternative #1 : don't allow shapes with both negative and positive X values\n // - Alternative #2 : remove one half of the shape (costly)\n if (arePointsWithNegAndPosX && overflow === 'cap') {\n if (pointsWithNegativeX.length > pointsWithPositiveX.length) {\n shapeSides = shapeSides.map((side) => {\n let point0 = side[0]\n let point1 = side[1]\n point0 = [Math.min(point0[0], 0), point0[1]]\n point1 = [Math.min(point1[0], 0), point1[1]]\n return [point0, point1]\n })\n // recreate the geometry from the (-) capped points\n geometry = geom2.reverse(geom2.create(shapeSides))\n geometry = mirrorX(geometry)\n } else if (pointsWithPositiveX.length >= pointsWithNegativeX.length) {\n shapeSides = shapeSides.map((side) => {\n let point0 = side[0]\n let point1 = side[1]\n point0 = [Math.max(point0[0], 0), point0[1]]\n point1 = [Math.max(point1[0], 0), point1[1]]\n return [point0, point1]\n })\n // recreate the geometry from the (+) capped points\n geometry = geom2.create(shapeSides)\n }\n }\n\n const rotationPerSlice = totalRotation / segments\n const isCapped = Math.abs(totalRotation) < TAU\n const baseSlice = slice.fromSides(geom2.toSides(geometry))\n slice.reverse(baseSlice, baseSlice)\n\n const matrix = mat4.create()\n const createSlice = (progress, index, base) => {\n let Zrotation = rotationPerSlice * index + startAngle\n // fix rounding error when rotating TAU radians\n if (totalRotation === TAU && index === segments) {\n Zrotation = startAngle\n }\n mat4.multiply(matrix, mat4.fromZRotation(matrix, Zrotation), mat4.fromXRotation(mat4.create(), TAU / 4))\n\n return slice.transform(matrix, base)\n }\n\n options = {\n numberOfSlices: segments + 1,\n capStart: isCapped,\n capEnd: isCapped,\n close: !isCapped,\n callback: createSlice\n }\n return extrudeFromSlices(options, baseSlice)\n}\n\nmodule.exports = extrudeRotate\n","const { EPS } = require('../../maths/constants')\nconst vec3 = require('../../maths/vec3')\n\nconst poly3 = require('../../geometries/poly3')\n\nconst slice = require('./slice')\n\n// https://en.wikipedia.org/wiki/Greatest_common_divisor#Using_Euclid's_algorithm\nconst gcd = (a, b) => {\n if (a === b) { return a }\n if (a < b) { return gcd(b, a) }\n if (b === 1) { return 1 }\n if (b === 0) { return a }\n return gcd(b, a % b)\n}\n\nconst lcm = (a, b) => (a * b) / gcd(a, b)\n\n// Return a set of edges that encloses the same area by splitting\n// the given edges to have newlength total edges.\nconst repartitionEdges = (newlength, edges) => {\n // NOTE: This implementation splits each edge evenly.\n const multiple = newlength / edges.length\n if (multiple === 1) {\n return edges\n }\n\n const divisor = vec3.fromValues(multiple, multiple, multiple)\n\n const newEdges = []\n edges.forEach((edge) => {\n const increment = vec3.subtract(vec3.create(), edge[1], edge[0])\n vec3.divide(increment, increment, divisor)\n\n // repartition the edge\n let prev = edge[0]\n for (let i = 1; i <= multiple; ++i) {\n const next = vec3.add(vec3.create(), prev, increment)\n newEdges.push([prev, next])\n prev = next\n }\n })\n return newEdges\n}\n\nconst EPSAREA = (EPS * EPS / 2) * Math.sin(Math.PI / 3)\n\n/*\n * Extrude (build) walls between the given slices.\n * Each wall consists of two triangles, which may be invalid if slices are overlapping.\n */\nconst extrudeWalls = (slice0, slice1) => {\n let edges0 = slice.toEdges(slice0)\n let edges1 = slice.toEdges(slice1)\n\n if (edges0.length !== edges1.length) {\n // different shapes, so adjust one or both to the same number of edges\n const newlength = lcm(edges0.length, edges1.length)\n if (newlength !== edges0.length) edges0 = repartitionEdges(newlength, edges0)\n if (newlength !== edges1.length) edges1 = repartitionEdges(newlength, edges1)\n }\n\n const walls = []\n edges0.forEach((edge0, i) => {\n const edge1 = edges1[i]\n\n const poly0 = poly3.create([edge0[0], edge0[1], edge1[1]])\n const poly0area = poly3.measureArea(poly0)\n if (Number.isFinite(poly0area) && poly0area > EPSAREA) walls.push(poly0)\n\n const poly1 = poly3.create([edge0[0], edge1[1], edge1[0]])\n const poly1area = poly3.measureArea(poly1)\n if (Number.isFinite(poly1area) && poly1area > EPSAREA) walls.push(poly1)\n })\n return walls\n}\n\nmodule.exports = extrudeWalls\n","/**\n * All 2D shapes (primitives or the results of operations) can be extruded in various ways.\n * In all cases, the function returns the results, and never changes the original shapes.\n * @module modeling/extrusions\n * @example\n * const { extrudeLinear, extrudeRectangular, extrudeRotate } = require('@jscad/modeling').extrusions\n */\nmodule.exports = {\n extrudeFromSlices: require('./extrudeFromSlices'),\n extrudeLinear: require('./extrudeLinear'),\n extrudeRectangular: require('./extrudeRectangular'),\n extrudeRotate: require('./extrudeRotate'),\n extrudeHelical: require('./extrudeHelical'),\n project: require('./project'),\n slice: require('./slice')\n}\n","const flatten = require('../../utils/flatten')\n\nconst aboutEqualNormals = require('../../maths/utils/aboutEqualNormals')\nconst plane = require('../../maths/plane')\nconst mat4 = require('../../maths/mat4')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst poly3 = require('../../geometries/poly3')\n\nconst measureEpsilon = require('../../measurements/measureEpsilon')\n\nconst unionGeom2 = require('../booleans/unionGeom2')\n\nconst projectGeom3 = (options, geometry) => {\n // create a plane from the options, and verify\n const projplane = plane.fromNormalAndPoint(plane.create(), options.axis, options.origin)\n if (Number.isNaN(projplane[0]) || Number.isNaN(projplane[1]) || Number.isNaN(projplane[2]) || Number.isNaN(projplane[3])) {\n throw new Error('project: invalid axis or origin')\n }\n\n const epsilon = measureEpsilon(geometry)\n const epsilonArea = (epsilon * epsilon * Math.sqrt(3) / 4)\n\n if (epsilon === 0) return geom2.create()\n\n // project the polygons to the plane\n const polygons = geom3.toPolygons(geometry)\n let projpolys = []\n for (let i = 0; i < polygons.length; i++) {\n const newpoints = polygons[i].vertices.map((v) => plane.projectionOfPoint(projplane, v))\n const newpoly = poly3.create(newpoints)\n // only keep projections that face the same direction as the plane\n const newplane = poly3.plane(newpoly)\n if (!aboutEqualNormals(projplane, newplane)) continue\n // only keep projections that have a measurable area\n if (poly3.measureArea(newpoly) < epsilonArea) continue\n projpolys.push(newpoly)\n }\n\n // rotate the polygons to lay on X/Y axes if necessary\n if (!aboutEqualNormals(projplane, [0, 0, 1])) {\n const rotation = mat4.fromVectorRotation(mat4.create(), projplane, [0, 0, 1])\n projpolys = projpolys.map((p) => poly3.transform(rotation, p))\n }\n\n // sort the polygons to allow the union to ignore small pieces efficiently\n projpolys = projpolys.sort((a, b) => poly3.measureArea(b) - poly3.measureArea(a))\n\n // convert polygons to geometry, and union all pieces into a single geometry\n const projgeoms = projpolys.map((p) => geom2.fromPoints(p.vertices))\n return unionGeom2(projgeoms)\n}\n\n/**\n * Project the given 3D geometry on to the given plane.\n * @param {Object} options - options for project\n * @param {Array} [options.axis=[0,0,1]] the axis of the plane (default is Z axis)\n * @param {Array} [options.origin=[0,0,0]] the origin of the plane\n * @param {...Object} objects - the list of 3D geometry to project\n * @return {geom2|Array} the projected 2D geometry, or a list of 2D projected geometry\n * @alias module:modeling/extrusions.project\n *\n * @example\n * let myshape = project({}, sphere({radius: 20, segments: 5}))\n */\nconst project = (options, ...objects) => {\n const defaults = {\n axis: [0, 0, 1], // Z axis\n origin: [0, 0, 0]\n }\n const { axis, origin } = Object.assign({ }, defaults, options)\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n options = { axis, origin }\n\n const results = objects.map((object) => {\n // if (path.isA(object)) return project(options, object)\n // if (geom2.isA(object)) return project(options, object)\n if (geom3.isA(object)) return projectGeom3(options, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = project\n","const plane = require('../../../maths/plane')\nconst vec3 = require('../../../maths/vec3')\n\n/**\n * Calculate the plane of the given slice.\n * NOTE: The slice (and all points) are assumed to be planar from the beginning.\n * @param {slice} slice - the slice\n * @returns {plane} the plane of the slice\n * @alias module:modeling/extrusions/slice.calculatePlane\n *\n * @example\n * let myplane = calculatePlane(slice)\n */\nconst calculatePlane = (slice) => {\n const edges = slice.edges\n if (edges.length < 3) throw new Error('slices must have 3 or more edges to calculate a plane')\n\n // find the midpoint of the slice, which will lie on the plane by definition\n const midpoint = edges.reduce((point, edge) => vec3.add(vec3.create(), point, edge[0]), vec3.create())\n vec3.scale(midpoint, midpoint, 1 / edges.length)\n\n // find the farthest edge from the midpoint, which will be on an outside edge\n let farthestEdge\n let distance = 0\n edges.forEach((edge) => {\n // Make sure that the farthest edge is not a self-edge\n if (!vec3.equals(edge[0], edge[1])) {\n const d = vec3.squaredDistance(midpoint, edge[0])\n if (d > distance) {\n farthestEdge = edge\n distance = d\n }\n }\n })\n // find the before edge\n const beforeEdge = edges.find((edge) => vec3.equals(edge[1], farthestEdge[0]))\n\n return plane.fromPoints(plane.create(), beforeEdge[0], farthestEdge[0], farthestEdge[1])\n}\n\nmodule.exports = calculatePlane\n","const create = require('./create')\n\nconst vec3 = require('../../../maths/vec3')\n\n/**\n * Create a deep clone of the given slice.\n *\n * @param {slice} [out] - receiving slice\n * @param {slice} slice - slice to clone\n * @returns {slice} a new slice\n * @alias module:modeling/extrusions/slice.clone\n */\nconst clone = (...params) => {\n let out\n let slice\n if (params.length === 1) {\n out = create()\n slice = params[0]\n } else {\n out = params[0]\n slice = params[1]\n }\n // deep clone of edges\n out.edges = slice.edges.map((edge) => [vec3.clone(edge[0]), vec3.clone(edge[1])])\n return out\n}\n\nmodule.exports = clone\n","/**\n * Represents a 3D geometry consisting of a list of edges.\n * @typedef {Object} slice\n * @property {Array} edges - list of edges, each edge containing two points (3D)\n */\n\n/**\n * Creates a new empty slice.\n *\n * @returns {slice} a new slice\n * @alias module:modeling/extrusions/slice.create\n */\nconst create = (edges) => {\n if (!edges) {\n edges = []\n }\n return { edges }\n}\n\nmodule.exports = create\n","const vec3 = require('../../../maths/vec3')\n\n/**\n * Determine if the given slices have the same edges.\n * @param {slice} a - the first slice to compare\n * @param {slice} b - the second slice to compare\n * @returns {Boolean} true if the slices are equal\n * @alias module:modeling/extrusions/slice.equals\n */\nconst equals = (a, b) => {\n const aedges = a.edges\n const bedges = b.edges\n\n if (aedges.length !== bedges.length) {\n return false\n }\n\n const isEqual = aedges.reduce((acc, aedge, i) => {\n const bedge = bedges[i]\n const d = vec3.squaredDistance(aedge[0], bedge[0])\n return acc && (d < Number.EPSILON)\n }, true)\n\n return isEqual\n}\n\nmodule.exports = equals\n","const vec3 = require('../../../maths/vec3')\n\nconst create = require('./create')\n\n/**\n * Create a slice from the given points.\n *\n * @param {Array} points - list of points, where each point is either 2D or 3D\n * @returns {slice} a new slice\n * @alias module:modeling/extrusions/slice.fromPoints\n *\n * @example\n * const points = [\n * [0, 0],\n * [0, 10],\n * [0, 10]\n * ]\n * const slice = fromPoints(points)\n */\nconst fromPoints = (points) => {\n if (!Array.isArray(points)) throw new Error('the given points must be an array')\n if (points.length < 3) throw new Error('the given points must contain THREE or more points')\n\n // create a list of edges from the points\n const edges = []\n let prevpoint = points[points.length - 1]\n points.forEach((point) => {\n if (point.length === 2) edges.push([vec3.fromVec2(vec3.create(), prevpoint), vec3.fromVec2(vec3.create(), point)])\n if (point.length === 3) edges.push([prevpoint, point])\n prevpoint = point\n })\n return create(edges)\n}\n\nmodule.exports = fromPoints\n","const vec3 = require('../../../maths/vec3')\n\nconst create = require('./create')\n\n/**\n * Create a slice from the given sides (see geom2).\n *\n * @param {Array} sides - list of sides from geom2\n * @returns {slice} a new slice\n * @alias module:modeling/extrusions/slice.fromSides\n *\n * @example\n * const myshape = circle({radius: 10})\n * const slice = fromSides(geom2.toSides(myshape))\n */\nconst fromSides = (sides) => {\n if (!Array.isArray(sides)) throw new Error('the given sides must be an array')\n\n // create a list of edges from the sides\n const edges = []\n sides.forEach((side) => {\n edges.push([vec3.fromVec2(vec3.create(), side[0]), vec3.fromVec2(vec3.create(), side[1])])\n })\n return create(edges)\n}\n\nmodule.exports = fromSides\n","/**\n * Represents a 3D geometry consisting of a list of edges.\n * @see {@link slice} for data structure information.\n * @module modeling/extrusions/slice\n */\nmodule.exports = {\n calculatePlane: require('./calculatePlane'),\n clone: require('./clone'),\n create: require('./create'),\n equals: require('./equals'),\n fromPoints: require('./fromPoints'),\n fromSides: require('./fromSides'),\n isA: require('./isA'),\n reverse: require('./reverse'),\n toEdges: require('./toEdges'),\n toPolygons: require('./toPolygons'),\n toString: require('./toString'),\n transform: require('./transform')\n}\n","/**\n * Determine if the given object is a slice.\n * @param {slice} object - the object to interrogate\n * @returns {Boolean} true if the object matches a slice\n * @alias module:modeling/extrusions/slice.isA\n */\nconst isA = (object) => {\n if (object && typeof object === 'object') {\n if ('edges' in object) {\n if (Array.isArray(object.edges)) {\n return true\n }\n }\n }\n return false\n}\n\nmodule.exports = isA\n","const vec3 = require('../../../maths/vec3')\nconst create = require('./create')\n\n/*\n * Mend gaps in a 2D slice to make it a closed polygon\n */\nconst repair = (slice) => {\n if (!slice.edges) return slice\n let edges = slice.edges\n const vertexMap = new Map() // string key to vertex map\n const edgeCount = new Map() // count of (in - out) edges\n\n // Remove self-edges\n edges = edges.filter((e) => !vec3.equals(e[0], e[1]))\n\n // build vertex and edge count maps\n edges.forEach((edge) => {\n const inKey = edge[0].toString()\n const outKey = edge[1].toString()\n vertexMap.set(inKey, edge[0])\n vertexMap.set(outKey, edge[1])\n edgeCount.set(inKey, (edgeCount.get(inKey) || 0) + 1) // in\n edgeCount.set(outKey, (edgeCount.get(outKey) || 0) - 1) // out\n })\n\n // find vertices which are missing in or out edges\n const missingIn = []\n const missingOut = []\n edgeCount.forEach((count, vertex) => {\n if (count < 0) missingIn.push(vertex)\n if (count > 0) missingOut.push(vertex)\n })\n\n // pairwise distance of bad vertices\n missingIn.forEach((key1) => {\n const v1 = vertexMap.get(key1)\n\n // find the closest vertex that is missing an out edge\n let bestDistance = Infinity\n let bestReplacement\n missingOut.forEach((key2) => {\n const v2 = vertexMap.get(key2)\n const distance = vec3.distance(v1, v2)\n if (distance < bestDistance) {\n bestDistance = distance\n bestReplacement = v2\n }\n })\n console.warn(`slice.repair: repairing vertex gap ${v1} to ${bestReplacement} distance ${bestDistance}`)\n\n // merge broken vertices\n edges = edges.map((edge) => {\n if (edge[0].toString() === key1) return [bestReplacement, edge[1]]\n if (edge[1].toString() === key1) return [edge[0], bestReplacement]\n return edge\n })\n })\n\n return create(edges)\n}\n\nmodule.exports = repair\n","const create = require('./create')\n\n/**\n * Reverse the edges of the given slice.\n *\n * @param {slice} [out] - receiving slice\n * @param {slice} slice - slice to reverse\n * @returns {slice} reverse of the slice\n * @alias module:modeling/extrusions/slice.reverse\n */\nconst reverse = (...params) => {\n let out\n let slice\n if (params.length === 1) {\n out = create()\n slice = params[0]\n } else {\n out = params[0]\n slice = params[1]\n }\n // reverse the edges\n out.edges = slice.edges.map((edge) => [edge[1], edge[0]])\n return out\n}\n\nmodule.exports = reverse\n","/**\n * Produces an array of edges from the given slice.\n * The returned array should not be modified as the data is shared with the slice.\n * @param {slice} slice - the slice\n * @returns {Array} an array of edges, each edge contains an array of two points (3D)\n * @alias module:modeling/extrusions/slice.toEdges\n *\n * @example\n * let sharededges = toEdges(slice)\n */\nconst toEdges = (slice) => slice.edges\n\nmodule.exports = toEdges\n","const poly3 = require('../../../geometries/poly3')\nconst earcut = require('../earcut')\nconst PolygonHierarchy = require('../earcut/polygonHierarchy')\n\n/**\n * Return a list of polygons which are enclosed by the slice.\n * @param {slice} slice - the slice\n * @return {Array} a list of polygons (3D)\n * @alias module:modeling/extrusions/slice.toPolygons\n */\nconst toPolygons = (slice) => {\n const hierarchy = new PolygonHierarchy(slice)\n\n const polygons = []\n hierarchy.roots.forEach(({ solid, holes }) => {\n // hole indices\n let index = solid.length\n const holesIndex = []\n holes.forEach((hole, i) => {\n holesIndex.push(index)\n index += hole.length\n })\n\n // compute earcut triangulation for each solid\n const vertices = [solid, ...holes].flat()\n const data = vertices.flat()\n // Get original 3D vertex by index\n const getVertex = (i) => hierarchy.to3D(vertices[i])\n const indices = earcut(data, holesIndex)\n for (let i = 0; i < indices.length; i += 3) {\n // Map back to original vertices\n const tri = indices.slice(i, i + 3).map(getVertex)\n polygons.push(poly3.fromPointsAndPlane(tri, hierarchy.plane))\n }\n })\n\n return polygons\n}\n\nmodule.exports = toPolygons\n","const vec3 = require('../../../maths/vec3')\n\nconst edgesToString = (edges) =>\n edges.reduce((result, edge) => (\n result += `[${vec3.toString(edge[0])}, ${vec3.toString(edge[1])}], `\n ), '')\n\n/**\n * @param {slice} slice - the slice\n * @return {String} the string representation\n * @alias module:modeling/extrusions/slice.toString\n */\nconst toString = (slice) => `[${edgesToString(slice.edges)}]`\n\nmodule.exports = toString\n","const vec3 = require('../../../maths/vec3')\n\nconst create = require('./create')\n\n/**\n * Transform the given slice using the given matrix.\n * @param {mat4} matrix - transform matrix\n * @param {slice} slice - slice to transform\n * @returns {slice} the transformed slice\n * @alias module:modeling/extrusions/slice.transform\n *\n * @example\n * let matrix = mat4.fromTranslation([1, 2, 3])\n * let newslice = transform(matrix, oldslice)\n */\nconst transform = (matrix, slice) => {\n const edges = slice.edges.map((edge) => [vec3.transform(vec3.create(), edge[0], matrix), vec3.transform(vec3.create(), edge[1], matrix)])\n return create(edges)\n}\n\nmodule.exports = transform\n","const flatten = require('../../utils/flatten')\nconst areAllShapesTheSameType = require('../../utils/areAllShapesTheSameType')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\nconst hullPath2 = require('./hullPath2')\nconst hullGeom2 = require('./hullGeom2')\nconst hullGeom3 = require('./hullGeom3')\n\n/**\n * Create a convex hull of the given geometries.\n * The given geometries should be of the same type, either geom2 or geom3 or path2.\n * @param {...Objects} geometries - list of geometries from which to create a hull\n * @returns {geom2|geom3} new geometry\n * @alias module:modeling/hulls.hull\n *\n * @example\n * let myshape = hull(rectangle({center: [-5,-5]}), ellipse({center: [5,5]}))\n *\n * @example\n * +-------+ +-------+\n * | | | \\\n * | A | | \\\n * | | | \\\n * +-------+ + \\\n * = \\ \\\n * +-------+ \\ +\n * | | \\ |\n * | B | \\ |\n * | | \\ |\n * +-------+ +-------+\n */\nconst hull = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n if (!areAllShapesTheSameType(geometries)) {\n throw new Error('only hulls of the same type are supported')\n }\n\n const geometry = geometries[0]\n if (path2.isA(geometry)) return hullPath2(geometries)\n if (geom2.isA(geometry)) return hullGeom2(geometries)\n if (geom3.isA(geometry)) return hullGeom3(geometries)\n\n // FIXME should this throw an error for unknown geometries?\n return geometry\n}\n\nmodule.exports = hull\n","const flatten = require('../../utils/flatten')\n\nconst union = require('../booleans/union')\n\nconst hull = require('./hull')\n\n/**\n * Create a chain of hulled geometries from the given geometries.\n * Essentially hull A+B, B+C, C+D, etc., then union the results.\n * The given geometries should be of the same type, either geom2 or geom3 or path2.\n *\n * @param {...Objects} geometries - list of geometries from which to create a hull\n * @returns {geom2|geom3} new geometry\n * @alias module:modeling/hulls.hullChain\n *\n * @example\n * let newshape = hullChain(rectangle({center: [-5,-5]}), circle({center: [0,0]}), rectangle({center: [5,5]}))\n *\n * @example\n * +-------+ +-------+ +-------+ +------+\n * | | | | | \\ / |\n * | A | | C | | | |\n * | | | | | |\n * +-------+ +-------+ + +\n * = \\ /\n * +-------+ \\ /\n * | | \\ /\n * | B | \\ /\n * | | \\ /\n * +-------+ +-------+\n */\nconst hullChain = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length < 2) throw new Error('wrong number of arguments')\n\n const hulls = []\n for (let i = 1; i < geometries.length; i++) {\n hulls.push(hull(geometries[i - 1], geometries[i]))\n }\n return union(hulls)\n}\n\nmodule.exports = hullChain\n","const flatten = require('../../utils/flatten')\n\nconst geom2 = require('../../geometries/geom2')\n\nconst hullPoints2 = require('./hullPoints2')\nconst toUniquePoints = require('./toUniquePoints')\n\n/*\n * Create a convex hull of the given geom2 geometries.\n * @param {...geometries} geometries - list of geom2 geometries\n * @returns {geom2} new geometry\n */\nconst hullGeom2 = (...geometries) => {\n geometries = flatten(geometries)\n\n // extract the unique points from the geometries\n const unique = toUniquePoints(geometries)\n\n const hullPoints = hullPoints2(unique)\n\n // NOTE: more than three points are required to create a new geometry\n if (hullPoints.length < 3) return geom2.create()\n\n // assemble a new geometry from the list of points\n return geom2.fromPoints(hullPoints)\n}\n\nmodule.exports = hullGeom2\n","const flatten = require('../../utils/flatten')\n\nconst geom3 = require('../../geometries/geom3')\nconst poly3 = require('../../geometries/poly3')\n\nconst quickhull = require('./quickhull')\nconst toUniquePoints = require('./toUniquePoints')\n\n/*\n * Create a convex hull of the given geometries (geom3).\n * @param {...geometries} geometries - list of geom3 geometries\n * @returns {geom3} new geometry\n */\nconst hullGeom3 = (...geometries) => {\n geometries = flatten(geometries)\n\n if (geometries.length === 1) return geometries[0]\n\n // extract the unique vertices from the geometries\n const unique = toUniquePoints(geometries)\n\n const faces = quickhull(unique, { skipTriangulation: true })\n\n const polygons = faces.map((face) => {\n const vertices = face.map((index) => unique[index])\n return poly3.create(vertices)\n })\n\n return geom3.create(polygons)\n}\n\nmodule.exports = hullGeom3\n","const flatten = require('../../utils/flatten')\n\nconst path2 = require('../../geometries/path2')\n\nconst hullPoints2 = require('./hullPoints2')\nconst toUniquePoints = require('./toUniquePoints')\n\n/*\n * Create a convex hull of the given geometries (path2).\n * @param {...geometries} geometries - list of path2 geometries\n * @returns {path2} new geometry\n */\nconst hullPath2 = (...geometries) => {\n geometries = flatten(geometries)\n\n // extract the unique points from the geometries\n const unique = toUniquePoints(geometries)\n\n const hullPoints = hullPoints2(unique)\n\n // assemble a new geometry from the list of points\n return path2.fromPoints({ closed: true }, hullPoints)\n}\n\nmodule.exports = hullPath2\n","const vec2 = require('../../maths/vec2')\n\n/*\n * Create a convex hull of the given set of points, where each point is an array of [x,y].\n * Uses https://en.wikipedia.org/wiki/Graham_scan\n * @param {Array} uniquePoints - list of UNIQUE points from which to create a hull\n * @returns {Array} a list of points that form the hull\n */\nconst hullPoints2 = (uniquePoints) => {\n // find min point\n let min = vec2.fromValues(Infinity, Infinity)\n uniquePoints.forEach((point) => {\n if (point[1] < min[1] || (point[1] === min[1] && point[0] < min[0])) {\n min = point\n }\n })\n\n // gather information for sorting by polar coordinates (point, angle, distSq)\n const points = []\n uniquePoints.forEach((point) => {\n // use faster fakeAtan2 instead of Math.atan2\n const angle = fakeAtan2(point[1] - min[1], point[0] - min[0])\n const distSq = vec2.squaredDistance(point, min)\n points.push({ point, angle, distSq })\n })\n\n // sort by polar coordinates\n points.sort((pt1, pt2) => pt1.angle !== pt2.angle\n ? pt1.angle - pt2.angle\n : pt1.distSq - pt2.distSq)\n\n const stack = [] // start with empty stack\n points.forEach((point) => {\n let cnt = stack.length\n while (cnt > 1 && ccw(stack[cnt - 2], stack[cnt - 1], point.point) <= Number.EPSILON) {\n stack.pop() // get rid of colinear and interior (clockwise) points\n cnt = stack.length\n }\n stack.push(point.point)\n })\n\n return stack\n}\n\n// returns: < 0 clockwise, 0 colinear, > 0 counter-clockwise\nconst ccw = (v1, v2, v3) => (v2[0] - v1[0]) * (v3[1] - v1[1]) - (v2[1] - v1[1]) * (v3[0] - v1[0])\n\n// Returned \"angle\" is really 1/tan (inverse of slope) made negative to increase with angle.\n// This function is strictly for sorting in this algorithm.\nconst fakeAtan2 = (y, x) => {\n // The \"if\" is a special case for when the minimum vector found in loop above is present.\n // We need to ensure that it sorts as the minimum point. Otherwise, this becomes NaN.\n if (y === 0 && x === 0) {\n return -Infinity\n } else {\n return -x / y\n }\n}\n\nmodule.exports = hullPoints2\n","/**\n * All shapes (primitives or the results of operations) can be passed to hull functions\n * to determine the convex hull of all points.\n * In all cases, the function returns the results, and never changes the original shapes.\n * @module modeling/hulls\n * @example\n * const { hull, hullChain } = require('@jscad/modeling').hulls\n */\nmodule.exports = {\n hull: require('./hull'),\n hullChain: require('./hullChain')\n}\n","const add = require('../../../maths/vec3/add')\nconst copy = require('../../../maths/vec3/copy')\nconst cross = require('../../../maths/vec3/cross')\nconst dot = require('../../../maths/vec3/dot')\nconst length = require('../../../maths/vec3/length')\nconst normalize = require('../../../maths/vec3/normalize')\nconst scale = require('../../../maths/vec3/scale')\nconst subtract = require('../../../maths/vec3/subtract')\n\n/*\n * Original source from quickhull3d (https://github.com/mauriciopoppe/quickhull3d)\n * Copyright (c) 2015 Mauricio Poppe\n *\n * Adapted to JSCAD by Jeff Gay\n */\n\nconst HalfEdge = require('./HalfEdge')\n\nconst VISIBLE = 0\nconst NON_CONVEX = 1\nconst DELETED = 2\n\nclass Face {\n constructor () {\n this.normal = []\n this.centroid = []\n // signed distance from face to the origin\n this.offset = 0\n // pointer to the a vertex in a double linked list this face can see\n this.outside = null\n this.mark = VISIBLE\n this.edge = null\n this.nVertices = 0\n }\n\n getEdge (i) {\n if (typeof i !== 'number') {\n throw Error('requires a number')\n }\n let it = this.edge\n while (i > 0) {\n it = it.next\n i -= 1\n }\n while (i < 0) {\n it = it.prev\n i += 1\n }\n return it\n }\n\n computeNormal () {\n const e0 = this.edge\n const e1 = e0.next\n let e2 = e1.next\n const v2 = subtract([], e1.head().point, e0.head().point)\n const t = []\n const v1 = []\n\n this.nVertices = 2\n this.normal = [0, 0, 0]\n while (e2 !== e0) {\n copy(v1, v2)\n subtract(v2, e2.head().point, e0.head().point)\n add(this.normal, this.normal, cross(t, v1, v2))\n e2 = e2.next\n this.nVertices += 1\n }\n this.area = length(this.normal)\n // normalize the vector, since we've already calculated the area\n // it's cheaper to scale the vector using this quantity instead of\n // doing the same operation again\n this.normal = scale(this.normal, this.normal, 1 / this.area)\n }\n\n computeNormalMinArea (minArea) {\n this.computeNormal()\n if (this.area < minArea) {\n // compute the normal without the longest edge\n let maxEdge\n let maxSquaredLength = 0\n let edge = this.edge\n\n // find the longest edge (in length) in the chain of edges\n do {\n const lengthSquared = edge.lengthSquared()\n if (lengthSquared > maxSquaredLength) {\n maxEdge = edge\n maxSquaredLength = lengthSquared\n }\n edge = edge.next\n } while (edge !== this.edge)\n\n const p1 = maxEdge.tail().point\n const p2 = maxEdge.head().point\n const maxVector = subtract([], p2, p1)\n const maxLength = Math.sqrt(maxSquaredLength)\n // maxVector is normalized after this operation\n scale(maxVector, maxVector, 1 / maxLength)\n // compute the projection of maxVector over this face normal\n const maxProjection = dot(this.normal, maxVector)\n // subtract the quantity maxEdge adds on the normal\n scale(maxVector, maxVector, -maxProjection)\n add(this.normal, this.normal, maxVector)\n // renormalize `this.normal`\n normalize(this.normal, this.normal)\n }\n }\n\n computeCentroid () {\n this.centroid = [0, 0, 0]\n let edge = this.edge\n do {\n add(this.centroid, this.centroid, edge.head().point)\n edge = edge.next\n } while (edge !== this.edge)\n scale(this.centroid, this.centroid, 1 / this.nVertices)\n }\n\n computeNormalAndCentroid (minArea) {\n if (typeof minArea !== 'undefined') {\n this.computeNormalMinArea(minArea)\n } else {\n this.computeNormal()\n }\n this.computeCentroid()\n this.offset = dot(this.normal, this.centroid)\n }\n\n distanceToPlane (point) {\n return dot(this.normal, point) - this.offset\n }\n\n /**\n * @private\n *\n * Connects two edges assuming that prev.head().point === next.tail().point\n *\n * @param {HalfEdge} prev\n * @param {HalfEdge} next\n */\n connectHalfEdges (prev, next) {\n let discardedFace\n if (prev.opposite.face === next.opposite.face) {\n // `prev` is remove a redundant edge\n const oppositeFace = next.opposite.face\n let oppositeEdge\n if (prev === this.edge) {\n this.edge = next\n }\n if (oppositeFace.nVertices === 3) {\n // case:\n // remove the face on the right\n //\n // /|\\\n // / | \\ the face on the right\n // / | \\ --> opposite edge\n // / a | \\\n // *----*----*\n // / b | \\\n // ▾\n // redundant edge\n //\n // Note: the opposite edge is actually in the face to the right\n // of the face to be destroyed\n oppositeEdge = next.opposite.prev.opposite\n oppositeFace.mark = DELETED\n discardedFace = oppositeFace\n } else {\n // case:\n // t\n // *----\n // /| <- right face's redundant edge\n // / | opposite edge\n // / | ▴ /\n // / a | | /\n // *----*----*\n // / b | \\\n // ▾\n // redundant edge\n oppositeEdge = next.opposite.next\n // make sure that the link `oppositeFace.edge` points correctly even\n // after the right face redundant edge is removed\n if (oppositeFace.edge === oppositeEdge.prev) {\n oppositeFace.edge = oppositeEdge\n }\n\n // /| /\n // / | t/opposite edge\n // / | / ▴ /\n // / a |/ | /\n // *----*----*\n // / b \\\n oppositeEdge.prev = oppositeEdge.prev.prev\n oppositeEdge.prev.next = oppositeEdge\n }\n // /|\n // / |\n // / |\n // / a |\n // *----*----*\n // / b ▴ \\\n // |\n // redundant edge\n next.prev = prev.prev\n next.prev.next = next\n\n // / \\ \\\n // / \\->\\\n // / \\<-\\ opposite edge\n // / a \\ \\\n // *----*----*\n // / b ^ \\\n next.setOpposite(oppositeEdge)\n\n oppositeFace.computeNormalAndCentroid()\n } else {\n // trivial case\n // *\n // /|\\\n // / | \\\n // / |--> next\n // / a | \\\n // *----*----*\n // \\ b | /\n // \\ |--> prev\n // \\ | /\n // \\|/\n // *\n prev.next = next\n next.prev = prev\n }\n return discardedFace\n }\n\n mergeAdjacentFaces (adjacentEdge, discardedFaces) {\n const oppositeEdge = adjacentEdge.opposite\n const oppositeFace = oppositeEdge.face\n\n discardedFaces.push(oppositeFace)\n oppositeFace.mark = DELETED\n\n // find the chain of edges whose opposite face is `oppositeFace`\n //\n // ===>\n // \\ face /\n // * ---- * ---- * ---- *\n // / opposite face \\\n // <===\n //\n let adjacentEdgePrev = adjacentEdge.prev\n let adjacentEdgeNext = adjacentEdge.next\n let oppositeEdgePrev = oppositeEdge.prev\n let oppositeEdgeNext = oppositeEdge.next\n\n // left edge\n while (adjacentEdgePrev.opposite.face === oppositeFace) {\n adjacentEdgePrev = adjacentEdgePrev.prev\n oppositeEdgeNext = oppositeEdgeNext.next\n }\n // right edge\n while (adjacentEdgeNext.opposite.face === oppositeFace) {\n adjacentEdgeNext = adjacentEdgeNext.next\n oppositeEdgePrev = oppositeEdgePrev.prev\n }\n // adjacentEdgePrev \\ face / adjacentEdgeNext\n // * ---- * ---- * ---- *\n // oppositeEdgeNext / opposite face \\ oppositeEdgePrev\n\n // fix the face reference of all the opposite edges that are not part of\n // the edges whose opposite face is not `face` i.e. all the edges that\n // `face` and `oppositeFace` do not have in common\n let edge\n for (edge = oppositeEdgeNext; edge !== oppositeEdgePrev.next; edge = edge.next) {\n edge.face = this\n }\n\n // make sure that `face.edge` is not one of the edges to be destroyed\n // Note: it's important for it to be a `next` edge since `prev` edges\n // might be destroyed on `connectHalfEdges`\n this.edge = adjacentEdgeNext\n\n // connect the extremes\n // Note: it might be possible that after connecting the edges a triangular\n // face might be redundant\n let discardedFace\n discardedFace = this.connectHalfEdges(oppositeEdgePrev, adjacentEdgeNext)\n if (discardedFace) {\n discardedFaces.push(discardedFace)\n }\n discardedFace = this.connectHalfEdges(adjacentEdgePrev, oppositeEdgeNext)\n if (discardedFace) {\n discardedFaces.push(discardedFace)\n }\n\n this.computeNormalAndCentroid()\n // TODO: additional consistency checks\n return discardedFaces\n }\n\n collectIndices () {\n const indices = []\n let edge = this.edge\n do {\n indices.push(edge.head().index)\n edge = edge.next\n } while (edge !== this.edge)\n return indices\n }\n\n static createTriangle (v0, v1, v2, minArea = 0) {\n const face = new Face()\n const e0 = new HalfEdge(v0, face)\n const e1 = new HalfEdge(v1, face)\n const e2 = new HalfEdge(v2, face)\n\n // join edges\n e0.next = e2.prev = e1\n e1.next = e0.prev = e2\n e2.next = e1.prev = e0\n\n // main half edge reference\n face.edge = e0\n face.computeNormalAndCentroid(minArea)\n return face\n }\n}\n\nmodule.exports = {\n VISIBLE,\n NON_CONVEX,\n DELETED,\n Face\n}\n","const distance = require('../../../maths/vec3/distance')\nconst squaredDistance = require('../../../maths/vec3/squaredDistance')\n\n/*\n * Original source from quickhull3d (https://github.com/mauriciopoppe/quickhull3d)\n * Copyright (c) 2015 Mauricio Poppe\n *\n * Adapted to JSCAD by Jeff Gay\n */\n\nclass HalfEdge {\n constructor (vertex, face) {\n this.vertex = vertex\n this.face = face\n this.next = null\n this.prev = null\n this.opposite = null\n }\n\n head () {\n return this.vertex\n }\n\n tail () {\n return this.prev\n ? this.prev.vertex\n : null\n }\n\n length () {\n if (this.tail()) {\n return distance(\n this.tail().point,\n this.head().point\n )\n }\n return -1\n }\n\n lengthSquared () {\n if (this.tail()) {\n return squaredDistance(\n this.tail().point,\n this.head().point\n )\n }\n return -1\n }\n\n setOpposite (edge) {\n this.opposite = edge\n edge.opposite = this\n }\n}\n\nmodule.exports = HalfEdge\n","const dot = require('../../../maths/vec3/dot')\n\nconst pointLineDistance = require('./point-line-distance')\nconst getPlaneNormal = require('./get-plane-normal')\n\nconst VertexList = require('./VertexList')\nconst Vertex = require('./Vertex')\nconst { Face, VISIBLE, NON_CONVEX, DELETED } = require('./Face')\n\n/*\n * Original source from quickhull3d (https://github.com/mauriciopoppe/quickhull3d)\n * Copyright (c) 2015 Mauricio Poppe\n *\n * Adapted to JSCAD by Jeff Gay\n */\n\n// merge types\n// non convex with respect to the large face\nconst MERGE_NON_CONVEX_WRT_LARGER_FACE = 1\nconst MERGE_NON_CONVEX = 2\n\nclass QuickHull {\n constructor (points) {\n if (!Array.isArray(points)) {\n throw TypeError('input is not a valid array')\n }\n if (points.length < 4) {\n throw Error('cannot build a simplex out of <4 points')\n }\n\n this.tolerance = -1\n\n // buffers\n this.nFaces = 0\n this.nPoints = points.length\n\n this.faces = []\n this.newFaces = []\n // helpers\n //\n // let `a`, `b` be `Face` instances\n // let `v` be points wrapped as instance of `Vertex`\n //\n // [v, v, ..., v, v, v, ...]\n // ^ ^\n // | |\n // a.outside b.outside\n //\n this.claimed = new VertexList()\n this.unclaimed = new VertexList()\n\n // vertices of the hull(internal representation of points)\n this.vertices = []\n for (let i = 0; i < points.length; i += 1) {\n this.vertices.push(new Vertex(points[i], i))\n }\n this.discardedFaces = []\n this.vertexPointIndices = []\n }\n\n addVertexToFace (vertex, face) {\n vertex.face = face\n if (!face.outside) {\n this.claimed.add(vertex)\n } else {\n this.claimed.insertBefore(face.outside, vertex)\n }\n face.outside = vertex\n }\n\n /**\n * Removes `vertex` for the `claimed` list of vertices, it also makes sure\n * that the link from `face` to the first vertex it sees in `claimed` is\n * linked correctly after the removal\n *\n * @param {Vertex} vertex\n * @param {Face} face\n */\n removeVertexFromFace (vertex, face) {\n if (vertex === face.outside) {\n // fix face.outside link\n if (vertex.next && vertex.next.face === face) {\n // face has at least 2 outside vertices, move the `outside` reference\n face.outside = vertex.next\n } else {\n // vertex was the only outside vertex that face had\n face.outside = null\n }\n }\n this.claimed.remove(vertex)\n }\n\n /**\n * Removes all the visible vertices that `face` is able to see which are\n * stored in the `claimed` vertext list\n *\n * @param {Face} face\n * @return {Vertex|undefined} If face had visible vertices returns\n * `face.outside`, otherwise undefined\n */\n removeAllVerticesFromFace (face) {\n if (face.outside) {\n // pointer to the last vertex of this face\n // [..., outside, ..., end, outside, ...]\n // | | |\n // a a b\n let end = face.outside\n while (end.next && end.next.face === face) {\n end = end.next\n }\n this.claimed.removeChain(face.outside, end)\n // b\n // [ outside, ...]\n // | removes this link\n // [ outside, ..., end ] -┘\n // | |\n // a a\n end.next = null\n return face.outside\n }\n }\n\n /**\n * Removes all the visible vertices that `face` is able to see, additionally\n * checking the following:\n *\n * If `absorbingFace` doesn't exist then all the removed vertices will be\n * added to the `unclaimed` vertex list\n *\n * If `absorbingFace` exists then this method will assign all the vertices of\n * `face` that can see `absorbingFace`, if a vertex cannot see `absorbingFace`\n * it's added to the `unclaimed` vertex list\n *\n * @param {Face} face\n * @param {Face} [absorbingFace]\n */\n deleteFaceVertices (face, absorbingFace) {\n const faceVertices = this.removeAllVerticesFromFace(face)\n if (faceVertices) {\n if (!absorbingFace) {\n // mark the vertices to be reassigned to some other face\n this.unclaimed.addAll(faceVertices)\n } else {\n // if there's an absorbing face try to assign as many vertices\n // as possible to it\n\n // the reference `vertex.next` might be destroyed on\n // `this.addVertexToFace` (see VertexList#add), nextVertex is a\n // reference to it\n let nextVertex\n for (let vertex = faceVertices; vertex; vertex = nextVertex) {\n nextVertex = vertex.next\n const distance = absorbingFace.distanceToPlane(vertex.point)\n\n // check if `vertex` is able to see `absorbingFace`\n if (distance > this.tolerance) {\n this.addVertexToFace(vertex, absorbingFace)\n } else {\n this.unclaimed.add(vertex)\n }\n }\n }\n }\n }\n\n /**\n * Reassigns as many vertices as possible from the unclaimed list to the new\n * faces\n *\n * @param {Faces[]} newFaces\n */\n resolveUnclaimedPoints (newFaces) {\n // cache next vertex so that if `vertex.next` is destroyed it's still\n // recoverable\n let vertexNext = this.unclaimed.first()\n for (let vertex = vertexNext; vertex; vertex = vertexNext) {\n vertexNext = vertex.next\n let maxDistance = this.tolerance\n let maxFace\n for (let i = 0; i < newFaces.length; i += 1) {\n const face = newFaces[i]\n if (face.mark === VISIBLE) {\n const dist = face.distanceToPlane(vertex.point)\n if (dist > maxDistance) {\n maxDistance = dist\n maxFace = face\n }\n if (maxDistance > 1000 * this.tolerance) {\n break\n }\n }\n }\n\n if (maxFace) {\n this.addVertexToFace(vertex, maxFace)\n }\n }\n }\n\n /**\n * Computes the extremes of a tetrahedron which will be the initial hull\n *\n * @return {number[]} The min/max vertices in the x,y,z directions\n */\n computeExtremes () {\n const min = []\n const max = []\n\n // min vertex on the x,y,z directions\n const minVertices = []\n // max vertex on the x,y,z directions\n const maxVertices = []\n\n let i, j\n\n // initially assume that the first vertex is the min/max\n for (i = 0; i < 3; i += 1) {\n minVertices[i] = maxVertices[i] = this.vertices[0]\n }\n // copy the coordinates of the first vertex to min/max\n for (i = 0; i < 3; i += 1) {\n min[i] = max[i] = this.vertices[0].point[i]\n }\n\n // compute the min/max vertex on all 6 directions\n for (i = 1; i < this.vertices.length; i += 1) {\n const vertex = this.vertices[i]\n const point = vertex.point\n // update the min coordinates\n for (j = 0; j < 3; j += 1) {\n if (point[j] < min[j]) {\n min[j] = point[j]\n minVertices[j] = vertex\n }\n }\n // update the max coordinates\n for (j = 0; j < 3; j += 1) {\n if (point[j] > max[j]) {\n max[j] = point[j]\n maxVertices[j] = vertex\n }\n }\n }\n\n // compute epsilon\n this.tolerance = 3 * Number.EPSILON * (\n Math.max(Math.abs(min[0]), Math.abs(max[0])) +\n Math.max(Math.abs(min[1]), Math.abs(max[1])) +\n Math.max(Math.abs(min[2]), Math.abs(max[2]))\n )\n return [minVertices, maxVertices]\n }\n\n /**\n * Compues the initial tetrahedron assigning to its faces all the points that\n * are candidates to form part of the hull\n */\n createInitialSimplex () {\n const vertices = this.vertices\n const [min, max] = this.computeExtremes()\n let v2, v3\n let i, j\n\n // Find the two vertices with the greatest 1d separation\n // (max.x - min.x)\n // (max.y - min.y)\n // (max.z - min.z)\n let maxDistance = 0\n let indexMax = 0\n for (i = 0; i < 3; i += 1) {\n const distance = max[i].point[i] - min[i].point[i]\n if (distance > maxDistance) {\n maxDistance = distance\n indexMax = i\n }\n }\n const v0 = min[indexMax]\n const v1 = max[indexMax]\n\n // the next vertex is the one farthest to the line formed by `v0` and `v1`\n maxDistance = 0\n for (i = 0; i < this.vertices.length; i += 1) {\n const vertex = this.vertices[i]\n if (vertex !== v0 && vertex !== v1) {\n const distance = pointLineDistance(\n vertex.point, v0.point, v1.point\n )\n if (distance > maxDistance) {\n maxDistance = distance\n v2 = vertex\n }\n }\n }\n\n // the next vertes is the one farthest to the plane `v0`, `v1`, `v2`\n // normalize((v2 - v1) x (v0 - v1))\n const normal = getPlaneNormal([], v0.point, v1.point, v2.point)\n // distance from the origin to the plane\n const distPO = dot(v0.point, normal)\n maxDistance = -1\n for (i = 0; i < this.vertices.length; i += 1) {\n const vertex = this.vertices[i]\n if (vertex !== v0 && vertex !== v1 && vertex !== v2) {\n const distance = Math.abs(dot(normal, vertex.point) - distPO)\n if (distance > maxDistance) {\n maxDistance = distance\n v3 = vertex\n }\n }\n }\n\n // initial simplex\n // Taken from http://everything2.com/title/How+to+paint+a+tetrahedron\n //\n // v2\n // ,|,\n // ,7``\\'VA,\n // ,7` |, `'VA,\n // ,7` `\\ `'VA,\n // ,7` |, `'VA,\n // ,7` `\\ `'VA,\n // ,7` |, `'VA,\n // ,7` `\\ ,..ooOOTK` v3\n // ,7` |,.ooOOT''` AV\n // ,7` ,..ooOOT`\\` /7\n // ,7` ,..ooOOT''` |, AV\n // ,T,..ooOOT''` `\\ /7\n // v0 `'TTs., |, AV\n // `'TTs., `\\ /7\n // `'TTs., |, AV\n // `'TTs., `\\ /7\n // `'TTs., |, AV\n // `'TTs.,\\/7\n // `'T`\n // v1\n //\n const faces = []\n if (dot(v3.point, normal) - distPO < 0) {\n // the face is not able to see the point so `planeNormal`\n // is pointing outside the tetrahedron\n faces.push(\n Face.createTriangle(v0, v1, v2),\n Face.createTriangle(v3, v1, v0),\n Face.createTriangle(v3, v2, v1),\n Face.createTriangle(v3, v0, v2)\n )\n\n // set the opposite edge\n for (i = 0; i < 3; i += 1) {\n const j = (i + 1) % 3\n // join face[i] i > 0, with the first face\n faces[i + 1].getEdge(2).setOpposite(faces[0].getEdge(j))\n // join face[i] with face[i + 1], 1 <= i <= 3\n faces[i + 1].getEdge(1).setOpposite(faces[j + 1].getEdge(0))\n }\n } else {\n // the face is able to see the point so `planeNormal`\n // is pointing inside the tetrahedron\n faces.push(\n Face.createTriangle(v0, v2, v1),\n Face.createTriangle(v3, v0, v1),\n Face.createTriangle(v3, v1, v2),\n Face.createTriangle(v3, v2, v0)\n )\n\n // set the opposite edge\n for (i = 0; i < 3; i += 1) {\n const j = (i + 1) % 3\n // join face[i] i > 0, with the first face\n faces[i + 1].getEdge(2).setOpposite(faces[0].getEdge((3 - i) % 3))\n // join face[i] with face[i + 1]\n faces[i + 1].getEdge(0).setOpposite(faces[j + 1].getEdge(1))\n }\n }\n\n // the initial hull is the tetrahedron\n for (i = 0; i < 4; i += 1) {\n this.faces.push(faces[i])\n }\n\n // initial assignment of vertices to the faces of the tetrahedron\n for (i = 0; i < vertices.length; i += 1) {\n const vertex = vertices[i]\n if (vertex !== v0 && vertex !== v1 && vertex !== v2 && vertex !== v3) {\n maxDistance = this.tolerance\n let maxFace\n for (j = 0; j < 4; j += 1) {\n const distance = faces[j].distanceToPlane(vertex.point)\n if (distance > maxDistance) {\n maxDistance = distance\n maxFace = faces[j]\n }\n }\n\n if (maxFace) {\n this.addVertexToFace(vertex, maxFace)\n }\n }\n }\n }\n\n reindexFaceAndVertices () {\n // remove inactive faces\n const activeFaces = []\n for (let i = 0; i < this.faces.length; i += 1) {\n const face = this.faces[i]\n if (face.mark === VISIBLE) {\n activeFaces.push(face)\n }\n }\n this.faces = activeFaces\n }\n\n collectFaces (skipTriangulation) {\n const faceIndices = []\n for (let i = 0; i < this.faces.length; i += 1) {\n if (this.faces[i].mark !== VISIBLE) {\n throw Error('attempt to include a destroyed face in the hull')\n }\n const indices = this.faces[i].collectIndices()\n if (skipTriangulation) {\n faceIndices.push(indices)\n } else {\n for (let j = 0; j < indices.length - 2; j += 1) {\n faceIndices.push(\n [indices[0], indices[j + 1], indices[j + 2]]\n )\n }\n }\n }\n return faceIndices\n }\n\n /**\n * Finds the next vertex to make faces with the current hull\n *\n * - let `face` be the first face existing in the `claimed` vertex list\n * - if `face` doesn't exist then return since there're no vertices left\n * - otherwise for each `vertex` that face sees find the one furthest away\n * from `face`\n *\n * @return {Vertex|undefined} Returns undefined when there're no more\n * visible vertices\n */\n nextVertexToAdd () {\n if (!this.claimed.isEmpty()) {\n let eyeVertex, vertex\n let maxDistance = 0\n const eyeFace = this.claimed.first().face\n for (vertex = eyeFace.outside; vertex && vertex.face === eyeFace; vertex = vertex.next) {\n const distance = eyeFace.distanceToPlane(vertex.point)\n if (distance > maxDistance) {\n maxDistance = distance\n eyeVertex = vertex\n }\n }\n return eyeVertex\n }\n }\n\n /**\n * Computes a chain of half edges in ccw order called the `horizon`, for an\n * edge to be part of the horizon it must join a face that can see\n * `eyePoint` and a face that cannot see `eyePoint`\n *\n * @param {number[]} eyePoint - The coordinates of a point\n * @param {HalfEdge} crossEdge - The edge used to jump to the current `face`\n * @param {Face} face - The current face being tested\n * @param {HalfEdge[]} horizon - The edges that form part of the horizon in\n * ccw order\n */\n computeHorizon (eyePoint, crossEdge, face, horizon) {\n // moves face's vertices to the `unclaimed` vertex list\n this.deleteFaceVertices(face)\n\n face.mark = DELETED\n\n let edge\n if (!crossEdge) {\n edge = crossEdge = face.getEdge(0)\n } else {\n // start from the next edge since `crossEdge` was already analyzed\n // (actually `crossEdge.opposite` was the face who called this method\n // recursively)\n edge = crossEdge.next\n }\n\n // All the faces that are able to see `eyeVertex` are defined as follows\n //\n // v /\n // / <== visible face\n // /\n // |\n // | <== not visible face\n //\n // dot(v, visible face normal) - visible face offset > this.tolerance\n //\n do {\n const oppositeEdge = edge.opposite\n const oppositeFace = oppositeEdge.face\n if (oppositeFace.mark === VISIBLE) {\n if (oppositeFace.distanceToPlane(eyePoint) > this.tolerance) {\n this.computeHorizon(eyePoint, oppositeEdge, oppositeFace, horizon)\n } else {\n horizon.push(edge)\n }\n }\n edge = edge.next\n } while (edge !== crossEdge)\n }\n\n /**\n * Creates a face with the points `eyeVertex.point`, `horizonEdge.tail` and\n * `horizonEdge.tail` in ccw order\n *\n * @param {Vertex} eyeVertex\n * @param {HalfEdge} horizonEdge\n * @return {HalfEdge} The half edge whose vertex is the eyeVertex\n */\n addAdjoiningFace (eyeVertex, horizonEdge) {\n // all the half edges are created in ccw order thus the face is always\n // pointing outside the hull\n // edges:\n //\n // eyeVertex.point\n // / \\\n // / \\\n // 1 / \\ 0\n // / \\\n // / \\\n // / \\\n // horizon.tail --- horizon.head\n // 2\n //\n const face = Face.createTriangle(\n eyeVertex,\n horizonEdge.tail(),\n horizonEdge.head()\n )\n this.faces.push(face)\n // join face.getEdge(-1) with the horizon's opposite edge\n // face.getEdge(-1) = face.getEdge(2)\n face.getEdge(-1).setOpposite(horizonEdge.opposite)\n return face.getEdge(0)\n }\n\n /**\n * Adds horizon.length faces to the hull, each face will be 'linked' with the\n * horizon opposite face and the face on the left/right\n *\n * @param {Vertex} eyeVertex\n * @param {HalfEdge[]} horizon - A chain of half edges in ccw order\n */\n addNewFaces (eyeVertex, horizon) {\n this.newFaces = []\n let firstSideEdge, previousSideEdge\n for (let i = 0; i < horizon.length; i += 1) {\n const horizonEdge = horizon[i]\n // returns the right side edge\n const sideEdge = this.addAdjoiningFace(eyeVertex, horizonEdge)\n if (!firstSideEdge) {\n firstSideEdge = sideEdge\n } else {\n // joins face.getEdge(1) with previousFace.getEdge(0)\n sideEdge.next.setOpposite(previousSideEdge)\n }\n this.newFaces.push(sideEdge.face)\n previousSideEdge = sideEdge\n }\n firstSideEdge.next.setOpposite(previousSideEdge)\n }\n\n /**\n * Computes the distance from `edge` opposite face's centroid to\n * `edge.face`\n *\n * @param {HalfEdge} edge\n * @return {number}\n * - A positive number when the centroid of the opposite face is above the\n * face i.e. when the faces are concave\n * - A negative number when the centroid of the opposite face is below the\n * face i.e. when the faces are convex\n */\n oppositeFaceDistance (edge) {\n return edge.face.distanceToPlane(edge.opposite.face.centroid)\n }\n\n /**\n * Merges a face with none/any/all its neighbors according to the strategy\n * used\n *\n * if `mergeType` is MERGE_NON_CONVEX_WRT_LARGER_FACE then the merge will be\n * decided based on the face with the larger area, the centroid of the face\n * with the smaller area will be checked against the one with the larger area\n * to see if it's in the merge range [tolerance, -tolerance] i.e.\n *\n * dot(centroid smaller face, larger face normal) - larger face offset > -tolerance\n *\n * Note that the first check (with +tolerance) was done on `computeHorizon`\n *\n * If the above is not true then the check is done with respect to the smaller\n * face i.e.\n *\n * dot(centroid larger face, smaller face normal) - smaller face offset > -tolerance\n *\n * If true then it means that two faces are non convex (concave), even if the\n * dot(...) - offset value is > 0 (that's the point of doing the merge in the\n * first place)\n *\n * If two faces are concave then the check must also be done on the other face\n * but this is done in another merge pass, for this to happen the face is\n * marked in a temporal NON_CONVEX state\n *\n * if `mergeType` is MERGE_NON_CONVEX then two faces will be merged only if\n * they pass the following conditions\n *\n * dot(centroid smaller face, larger face normal) - larger face offset > -tolerance\n * dot(centroid larger face, smaller face normal) - smaller face offset > -tolerance\n *\n * @param {Face} face\n * @param {number} mergeType - Either MERGE_NON_CONVEX_WRT_LARGER_FACE or\n * MERGE_NON_CONVEX\n */\n doAdjacentMerge (face, mergeType) {\n let edge = face.edge\n let convex = true\n let it = 0\n do {\n if (it >= face.nVertices) {\n throw Error('merge recursion limit exceeded')\n }\n const oppositeFace = edge.opposite.face\n let merge = false\n\n // Important notes about the algorithm to merge faces\n //\n // - Given a vertex `eyeVertex` that will be added to the hull\n // all the faces that cannot see `eyeVertex` are defined as follows\n //\n // dot(v, not visible face normal) - not visible offset < tolerance\n //\n // - Two faces can be merged when the centroid of one of these faces\n // projected to the normal of the other face minus the other face offset\n // is in the range [tolerance, -tolerance]\n // - Since `face` (given in the input for this method) has passed the\n // check above we only have to check the lower bound e.g.\n //\n // dot(v, not visible face normal) - not visible offset > -tolerance\n //\n if (mergeType === MERGE_NON_CONVEX) {\n if (this.oppositeFaceDistance(edge) > -this.tolerance ||\n this.oppositeFaceDistance(edge.opposite) > -this.tolerance) {\n merge = true\n }\n } else {\n if (face.area > oppositeFace.area) {\n if (this.oppositeFaceDistance(edge) > -this.tolerance) {\n merge = true\n } else if (this.oppositeFaceDistance(edge.opposite) > -this.tolerance) {\n convex = false\n }\n } else {\n if (this.oppositeFaceDistance(edge.opposite) > -this.tolerance) {\n merge = true\n } else if (this.oppositeFaceDistance(edge) > -this.tolerance) {\n convex = false\n }\n }\n }\n\n if (merge) {\n // when two faces are merged it might be possible that redundant faces\n // are destroyed, in that case move all the visible vertices from the\n // destroyed faces to the `unclaimed` vertex list\n const discardedFaces = face.mergeAdjacentFaces(edge, [])\n for (let i = 0; i < discardedFaces.length; i += 1) {\n this.deleteFaceVertices(discardedFaces[i], face)\n }\n return true\n }\n\n edge = edge.next\n it += 1\n } while (edge !== face.edge)\n if (!convex) {\n face.mark = NON_CONVEX\n }\n return false\n }\n\n /**\n * Adds a vertex to the hull with the following algorithm\n *\n * - Compute the `horizon` which is a chain of half edges, for an edge to\n * belong to this group it must be the edge connecting a face that can\n * see `eyeVertex` and a face which cannot see `eyeVertex`\n * - All the faces that can see `eyeVertex` have its visible vertices removed\n * from the claimed VertexList\n * - A new set of faces is created with each edge of the `horizon` and\n * `eyeVertex`, each face is connected with the opposite horizon face and\n * the face on the left/right\n * - The new faces are merged if possible with the opposite horizon face first\n * and then the faces on the right/left\n * - The vertices removed from all the visible faces are assigned to the new\n * faces if possible\n *\n * @param {Vertex} eyeVertex\n */\n addVertexToHull (eyeVertex) {\n const horizon = []\n\n this.unclaimed.clear()\n\n // remove `eyeVertex` from `eyeVertex.face` so that it can't be added to the\n // `unclaimed` vertex list\n this.removeVertexFromFace(eyeVertex, eyeVertex.face)\n this.computeHorizon(eyeVertex.point, null, eyeVertex.face, horizon)\n this.addNewFaces(eyeVertex, horizon)\n\n // first merge pass\n // Do the merge with respect to the larger face\n for (let i = 0; i < this.newFaces.length; i += 1) {\n const face = this.newFaces[i]\n if (face.mark === VISIBLE) {\n while (this.doAdjacentMerge(face, MERGE_NON_CONVEX_WRT_LARGER_FACE)) {} // eslint-disable-line no-empty\n }\n }\n\n // second merge pass\n // Do the merge on non convex faces (a face is marked as non convex in the\n // first pass)\n for (let i = 0; i < this.newFaces.length; i += 1) {\n const face = this.newFaces[i]\n if (face.mark === NON_CONVEX) {\n face.mark = VISIBLE\n while (this.doAdjacentMerge(face, MERGE_NON_CONVEX)) {} // eslint-disable-line no-empty\n }\n }\n\n // reassign `unclaimed` vertices to the new faces\n this.resolveUnclaimedPoints(this.newFaces)\n }\n\n build () {\n let eyeVertex\n this.createInitialSimplex()\n while ((eyeVertex = this.nextVertexToAdd())) {\n this.addVertexToHull(eyeVertex)\n }\n this.reindexFaceAndVertices()\n }\n}\n\nmodule.exports = QuickHull\n","/*\n * Original source from quickhull3d (https://github.com/mauriciopoppe/quickhull3d)\n * Copyright (c) 2015 Mauricio Poppe\n *\n * Adapted to JSCAD by Jeff Gay\n */\n\nclass Vertex {\n constructor (point, index) {\n this.point = point\n // index in the input array\n this.index = index\n // vertex is a double linked list node\n this.next = null\n this.prev = null\n // the face that is able to see this point\n this.face = null\n }\n}\n\nmodule.exports = Vertex\n","/*\n * Original source from quickhull3d (https://github.com/mauriciopoppe/quickhull3d)\n * Copyright (c) 2015 Mauricio Poppe\n *\n * Adapted to JSCAD by Jeff Gay\n */\n\nclass VertexList {\n constructor () {\n this.head = null\n this.tail = null\n }\n\n clear () {\n this.head = this.tail = null\n }\n\n /**\n * Inserts a `node` before `target`, it's assumed that\n * `target` belongs to this doubly linked list\n *\n * @param {*} target\n * @param {*} node\n */\n insertBefore (target, node) {\n node.prev = target.prev\n node.next = target\n if (!node.prev) {\n this.head = node\n } else {\n node.prev.next = node\n }\n target.prev = node\n }\n\n /**\n * Inserts a `node` after `target`, it's assumed that\n * `target` belongs to this doubly linked list\n *\n * @param {Vertex} target\n * @param {Vertex} node\n */\n insertAfter (target, node) {\n node.prev = target\n node.next = target.next\n if (!node.next) {\n this.tail = node\n } else {\n node.next.prev = node\n }\n target.next = node\n }\n\n /**\n * Appends a `node` to the end of this doubly linked list\n * Note: `node.next` will be unlinked from `node`\n * Note: if `node` is part of another linked list call `addAll` instead\n *\n * @param {*} node\n */\n add (node) {\n if (!this.head) {\n this.head = node\n } else {\n this.tail.next = node\n }\n node.prev = this.tail\n // since node is the new end it doesn't have a next node\n node.next = null\n this.tail = node\n }\n\n /**\n * Appends a chain of nodes where `node` is the head,\n * the difference with `add` is that it correctly sets the position\n * of the node list `tail` property\n *\n * @param {*} node\n */\n addAll (node) {\n if (!this.head) {\n this.head = node\n } else {\n this.tail.next = node\n }\n node.prev = this.tail\n\n // find the end of the list\n while (node.next) {\n node = node.next\n }\n this.tail = node\n }\n\n /**\n * Deletes a `node` from this linked list, it's assumed that `node` is a\n * member of this linked list\n *\n * @param {*} node\n */\n remove (node) {\n if (!node.prev) {\n this.head = node.next\n } else {\n node.prev.next = node.next\n }\n\n if (!node.next) {\n this.tail = node.prev\n } else {\n node.next.prev = node.prev\n }\n }\n\n /**\n * Removes a chain of nodes whose head is `a` and whose tail is `b`,\n * it's assumed that `a` and `b` belong to this list and also that `a`\n * comes before `b` in the linked list\n *\n * @param {*} a\n * @param {*} b\n */\n removeChain (a, b) {\n if (!a.prev) {\n this.head = b.next\n } else {\n a.prev.next = b.next\n }\n\n if (!b.next) {\n this.tail = a.prev\n } else {\n b.next.prev = a.prev\n }\n }\n\n first () {\n return this.head\n }\n\n isEmpty () {\n return !this.head\n }\n}\n\nmodule.exports = VertexList\n","const cross = require('../../../maths/vec3/cross')\nconst normalize = require('../../../maths/vec3/normalize')\nconst subtract = require('../../../maths/vec3/subtract')\n\n/*\n * Original source from quickhull3d (https://github.com/mauriciopoppe/quickhull3d)\n * Copyright (c) 2015 Mauricio Poppe\n *\n * Adapted to JSCAD by Jeff Gay\n */\n\nconst planeNormal = (out, point1, point2, point3) => {\n const tmp = [0, 0, 0]\n subtract(out, point1, point2)\n subtract(tmp, point2, point3)\n cross(out, out, tmp)\n return normalize(out, out)\n}\n\nmodule.exports = planeNormal\n","const QuickHull = require('./QuickHull')\n\n/*\n * Original source from quickhull3d (https://github.com/mauriciopoppe/quickhull3d)\n * Copyright (c) 2015 Mauricio Poppe\n *\n * Adapted to JSCAD by Jeff Gay\n */\n\nconst runner = (points, options = {}) => {\n const instance = new QuickHull(points)\n instance.build()\n return instance.collectFaces(options.skipTriangulation)\n}\n\nmodule.exports = runner\n","const cross = require('../../../maths/vec3/cross')\nconst subtract = require('../../../maths/vec3/subtract')\nconst squaredLength = require('../../../maths/vec3/squaredLength')\n\n/*\n * Original source from quickhull3d (https://github.com/mauriciopoppe/quickhull3d)\n * Copyright (c) 2015 Mauricio Poppe\n *\n * Adapted to JSCAD by Jeff Gay\n */\n\nconst distanceSquared = (p, a, b) => {\n // == parallelogram solution\n //\n // s\n // __a________b__\n // / | /\n // / h| /\n // /_____|__/\n // p\n //\n // s = b - a\n // area = s * h\n // |ap x s| = s * h\n // h = |ap x s| / s\n //\n const ab = []\n const ap = []\n const cr = []\n subtract(ab, b, a)\n subtract(ap, p, a)\n const area = squaredLength(cross(cr, ap, ab))\n const s = squaredLength(ab)\n if (s === 0) {\n throw Error('a and b are the same point')\n }\n return area / s\n}\n\nconst pointLineDistance = (point, a, b) => Math.sqrt(distanceSquared(point, a, b))\n\nmodule.exports = pointLineDistance\n","const geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\n/*\n * Return the unique vertices of a geometry\n */\nconst toUniquePoints = (geometries) => {\n const found = new Set()\n const uniquePoints = []\n\n const addPoint = (point) => {\n const key = point.toString()\n if (!found.has(key)) {\n uniquePoints.push(point)\n found.add(key)\n }\n }\n\n geometries.forEach((geometry) => {\n if (geom2.isA(geometry)) {\n geom2.toPoints(geometry).forEach(addPoint)\n } else if (geom3.isA(geometry)) {\n // points are grouped by polygon\n geom3.toPoints(geometry).forEach((points) => points.forEach(addPoint))\n } else if (path2.isA(geometry)) {\n path2.toPoints(geometry).forEach(addPoint)\n }\n })\n\n return uniquePoints\n}\n\nmodule.exports = toUniquePoints\n","const flatten = require('../../utils/flatten')\n\nconst measureEpsilon = require('../../measurements/measureEpsilon')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\nconst snapPolygons = require('./snapPolygons')\nconst mergePolygons = require('./mergePolygons')\nconst insertTjunctions = require('./insertTjunctions')\nconst triangulatePolygons = require('./triangulatePolygons')\n\n/*\n */\nconst generalizePath2 = (options, geometry) => geometry\n\n/*\n */\nconst generalizeGeom2 = (options, geometry) => geometry\n\n/*\n */\nconst generalizeGeom3 = (options, geometry) => {\n const defaults = {\n snap: false,\n simplify: false,\n triangulate: false\n }\n const { snap, simplify, triangulate } = Object.assign({}, defaults, options)\n\n const epsilon = measureEpsilon(geometry)\n let polygons = geom3.toPolygons(geometry)\n\n // snap the given geometry if requested\n if (snap) {\n polygons = snapPolygons(epsilon, polygons)\n }\n\n // simplify the polygons if requested\n if (simplify) {\n // TODO implement some mesh decimations\n polygons = mergePolygons(epsilon, polygons)\n }\n\n // triangulate the polygons if requested\n if (triangulate) {\n polygons = insertTjunctions(polygons)\n polygons = triangulatePolygons(epsilon, polygons)\n }\n\n // FIXME replace with geom3.cloneShallow() when available\n const clone = Object.assign({}, geometry)\n clone.polygons = polygons\n\n return clone\n}\n\n/**\n * Apply various modifications in proper order to produce a generalized geometry.\n * @param {Object} options - options for modifications\n * @param {Boolean} [options.snap=false] the geometries should be snapped to epsilons\n * @param {Boolean} [options.simplify=false] the geometries should be simplified\n * @param {Boolean} [options.triangulate=false] the geometries should be triangulated\n * @param {...Object} geometries - the geometries to generalize\n * @return {Object|Array} the modified geometry, or a list of modified geometries\n * @alias module:modeling/modifiers.generalize\n */\nconst generalize = (options, ...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n const results = geometries.map((geometry) => {\n if (path2.isA(geometry)) return generalizePath2(options, geometry)\n if (geom2.isA(geometry)) return generalizeGeom2(options, geometry)\n if (geom3.isA(geometry)) return generalizeGeom3(options, geometry)\n throw new Error('invalid geometry')\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = generalize\n","/**\n * All shapes (primitives or the results of operations) can be modified to correct issues, etc.\n * In all cases, these functions returns the results, and never changes the original geometry.\n * @module modeling/modifiers\n * @example\n * const { snap } = require('@jscad/modeling').modifiers\n */\nmodule.exports = {\n generalize: require('./generalize'),\n snap: require('./snap'),\n retessellate: require('./retessellate')\n}\n","const constants = require('../../maths/constants')\nconst vec3 = require('../../maths/vec3')\nconst poly3 = require('../../geometries/poly3')\n\nconst assert = false\n\nconst getTag = (vertex) => `${vertex}`\n\nconst addSide = (sidemap, vertextag2sidestart, vertextag2sideend, vertex0, vertex1, polygonindex) => {\n const starttag = getTag(vertex0)\n const endtag = getTag(vertex1)\n if (assert && starttag === endtag) throw new Error('assert failed')\n const newsidetag = `${starttag}/${endtag}`\n const reversesidetag = `${endtag}/${starttag}`\n if (sidemap.has(reversesidetag)) {\n // remove the opposing side from mappings\n deleteSide(sidemap, vertextag2sidestart, vertextag2sideend, vertex1, vertex0, null)\n return null\n }\n // add the side to the mappings\n const newsideobj = {\n vertex0: vertex0,\n vertex1: vertex1,\n polygonindex: polygonindex\n }\n if (!(sidemap.has(newsidetag))) {\n sidemap.set(newsidetag, [newsideobj])\n } else {\n sidemap.get(newsidetag).push(newsideobj)\n }\n if (vertextag2sidestart.has(starttag)) {\n vertextag2sidestart.get(starttag).push(newsidetag)\n } else {\n vertextag2sidestart.set(starttag, [newsidetag])\n }\n if (vertextag2sideend.has(endtag)) {\n vertextag2sideend.get(endtag).push(newsidetag)\n } else {\n vertextag2sideend.set(endtag, [newsidetag])\n }\n return newsidetag\n}\n\nconst deleteSide = (sidemap, vertextag2sidestart, vertextag2sideend, vertex0, vertex1, polygonindex) => {\n const starttag = getTag(vertex0)\n const endtag = getTag(vertex1)\n const sidetag = `${starttag}/${endtag}`\n if (assert && !(sidemap.has(sidetag))) throw new Error('assert failed')\n let idx = -1\n const sideobjs = sidemap.get(sidetag)\n for (let i = 0; i < sideobjs.length; i++) {\n const sideobj = sideobjs[i]\n let sidetag = getTag(sideobj.vertex0)\n if (sidetag !== starttag) continue\n sidetag = getTag(sideobj.vertex1)\n if (sidetag !== endtag) continue\n if (polygonindex !== null) {\n if (sideobj.polygonindex !== polygonindex) continue\n }\n idx = i\n break\n }\n if (assert && idx < 0) throw new Error('assert failed')\n sideobjs.splice(idx, 1)\n if (sideobjs.length === 0) {\n sidemap.delete(sidetag)\n }\n\n // adjust start and end lists\n idx = vertextag2sidestart.get(starttag).indexOf(sidetag)\n if (assert && idx < 0) throw new Error('assert failed')\n vertextag2sidestart.get(starttag).splice(idx, 1)\n if (vertextag2sidestart.get(starttag).length === 0) {\n vertextag2sidestart.delete(starttag)\n }\n\n idx = vertextag2sideend.get(endtag).indexOf(sidetag)\n if (assert && idx < 0) throw new Error('assert failed')\n vertextag2sideend.get(endtag).splice(idx, 1)\n if (vertextag2sideend.get(endtag).length === 0) {\n vertextag2sideend.delete(endtag)\n }\n}\n\n/*\n Suppose we have two polygons ACDB and EDGF:\n\n A-----B\n | |\n | E--F\n | | |\n C-----D--G\n\n Note that vertex E forms a T-junction on the side BD. In this case some STL slicers will complain\n that the solid is not watertight. This is because the watertightness check is done by checking if\n each side DE is matched by another side ED.\n\n This function will return a new solid with ACDB replaced by ACDEB\n\n Note that this can create polygons that are slightly non-convex (due to rounding errors). Therefore the result should\n not be used for further CSG operations!\n\n Note this function is meant to be used to preprocess geometries when triangulation is required, i.e. AMF, STL, etc.\n Do not use the results in other operations.\n*/\n\n/*\n * Insert missing vertices for T junctions, which creates polygons that can be triangulated.\n * @param {Array} polygons - the original polygons which may or may not have T junctions\n * @return original polygons (if no T junctions found) or new polygons with updated vertices\n */\nconst insertTjunctions = (polygons) => {\n // STEP 1 : build a map of 'unmatched' sides from the polygons\n // i.e. side AB in one polygon does not have a matching side BA in another polygon\n const sidemap = new Map()\n for (let polygonindex = 0; polygonindex < polygons.length; polygonindex++) {\n const polygon = polygons[polygonindex]\n const numvertices = polygon.vertices.length\n if (numvertices >= 3) {\n let vertex = polygon.vertices[0]\n let vertextag = getTag(vertex)\n for (let vertexindex = 0; vertexindex < numvertices; vertexindex++) {\n let nextvertexindex = vertexindex + 1\n if (nextvertexindex === numvertices) nextvertexindex = 0\n\n const nextvertex = polygon.vertices[nextvertexindex]\n const nextvertextag = getTag(nextvertex)\n\n const sidetag = `${vertextag}/${nextvertextag}`\n const reversesidetag = `${nextvertextag}/${vertextag}`\n if (sidemap.has(reversesidetag)) {\n // this side matches the same side in another polygon. Remove from sidemap\n // FIXME is this check necessary? there should only be ONE(1) opposing side\n // FIXME assert ?\n const ar = sidemap.get(reversesidetag)\n ar.splice(-1, 1)\n if (ar.length === 0) {\n sidemap.delete(reversesidetag)\n }\n } else {\n const sideobj = {\n vertex0: vertex,\n vertex1: nextvertex,\n polygonindex: polygonindex\n }\n if (!(sidemap.has(sidetag))) {\n sidemap.set(sidetag, [sideobj])\n } else {\n sidemap.get(sidetag).push(sideobj)\n }\n }\n vertex = nextvertex\n vertextag = nextvertextag\n }\n } else {\n console.warn('warning: invalid polygon found during insertTjunctions')\n }\n }\n\n if (sidemap.size > 0) {\n // STEP 2 : create a list of starting sides and ending sides\n const vertextag2sidestart = new Map()\n const vertextag2sideend = new Map()\n const sidesToCheck = new Map()\n for (const [sidetag, sideobjs] of sidemap) {\n sidesToCheck.set(sidetag, true)\n sideobjs.forEach((sideobj) => {\n const starttag = getTag(sideobj.vertex0)\n const endtag = getTag(sideobj.vertex1)\n if (vertextag2sidestart.has(starttag)) {\n vertextag2sidestart.get(starttag).push(sidetag)\n } else {\n vertextag2sidestart.set(starttag, [sidetag])\n }\n if (vertextag2sideend.has(endtag)) {\n vertextag2sideend.get(endtag).push(sidetag)\n } else {\n vertextag2sideend.set(endtag, [sidetag])\n }\n })\n }\n\n // STEP 3 : if sidemap is not empty\n const newpolygons = polygons.slice(0) // make a copy in order to replace polygons inline\n while (true) {\n if (sidemap.size === 0) break\n\n for (const sidetag of sidemap.keys()) {\n sidesToCheck.set(sidetag, true)\n }\n\n let donesomething = false\n while (true) {\n const sidetags = Array.from(sidesToCheck.keys())\n if (sidetags.length === 0) break // sidesToCheck is empty, we're done!\n const sidetagtocheck = sidetags[0]\n let donewithside = true\n if (sidemap.has(sidetagtocheck)) {\n const sideobjs = sidemap.get(sidetagtocheck)\n if (assert && sideobjs.length === 0) throw new Error('assert failed')\n const sideobj = sideobjs[0]\n for (let directionindex = 0; directionindex < 2; directionindex++) {\n const startvertex = (directionindex === 0) ? sideobj.vertex0 : sideobj.vertex1\n const endvertex = (directionindex === 0) ? sideobj.vertex1 : sideobj.vertex0\n const startvertextag = getTag(startvertex)\n const endvertextag = getTag(endvertex)\n let matchingsides = []\n if (directionindex === 0) {\n if (vertextag2sideend.has(startvertextag)) {\n matchingsides = vertextag2sideend.get(startvertextag)\n }\n } else {\n if (vertextag2sidestart.has(startvertextag)) {\n matchingsides = vertextag2sidestart.get(startvertextag)\n }\n }\n for (let matchingsideindex = 0; matchingsideindex < matchingsides.length; matchingsideindex++) {\n const matchingsidetag = matchingsides[matchingsideindex]\n const matchingside = sidemap.get(matchingsidetag)[0]\n const matchingsidestartvertex = (directionindex === 0) ? matchingside.vertex0 : matchingside.vertex1\n const matchingsideendvertex = (directionindex === 0) ? matchingside.vertex1 : matchingside.vertex0\n const matchingsidestartvertextag = getTag(matchingsidestartvertex)\n const matchingsideendvertextag = getTag(matchingsideendvertex)\n if (assert && matchingsideendvertextag !== startvertextag) throw new Error('assert failed')\n if (matchingsidestartvertextag === endvertextag) {\n // matchingside cancels sidetagtocheck\n deleteSide(sidemap, vertextag2sidestart, vertextag2sideend, startvertex, endvertex, null)\n deleteSide(sidemap, vertextag2sidestart, vertextag2sideend, endvertex, startvertex, null)\n donewithside = false\n directionindex = 2 // skip reverse direction check\n donesomething = true\n break\n } else {\n const startpos = startvertex\n const endpos = endvertex\n const checkpos = matchingsidestartvertex\n const direction = vec3.subtract(vec3.create(), checkpos, startpos)\n // Now we need to check if endpos is on the line startpos-checkpos:\n const t = vec3.dot(vec3.subtract(vec3.create(), endpos, startpos), direction) / vec3.dot(direction, direction)\n if ((t > 0) && (t < 1)) {\n const closestpoint = vec3.scale(vec3.create(), direction, t)\n vec3.add(closestpoint, closestpoint, startpos)\n const distancesquared = vec3.squaredDistance(closestpoint, endpos)\n if (distancesquared < (constants.EPS * constants.EPS)) {\n // Yes it's a t-junction! We need to split matchingside in two:\n const polygonindex = matchingside.polygonindex\n const polygon = newpolygons[polygonindex]\n // find the index of startvertextag in polygon:\n const insertionvertextag = getTag(matchingside.vertex1)\n let insertionvertextagindex = -1\n for (let i = 0; i < polygon.vertices.length; i++) {\n if (getTag(polygon.vertices[i]) === insertionvertextag) {\n insertionvertextagindex = i\n break\n }\n }\n if (assert && insertionvertextagindex < 0) throw new Error('assert failed')\n // split the side by inserting the vertex:\n const newvertices = polygon.vertices.slice(0)\n newvertices.splice(insertionvertextagindex, 0, endvertex)\n const newpolygon = poly3.create(newvertices)\n\n newpolygons[polygonindex] = newpolygon\n\n // remove the original sides from our maps\n deleteSide(sidemap, vertextag2sidestart, vertextag2sideend, matchingside.vertex0, matchingside.vertex1, polygonindex)\n const newsidetag1 = addSide(sidemap, vertextag2sidestart, vertextag2sideend, matchingside.vertex0, endvertex, polygonindex)\n const newsidetag2 = addSide(sidemap, vertextag2sidestart, vertextag2sideend, endvertex, matchingside.vertex1, polygonindex)\n if (newsidetag1 !== null) sidesToCheck.set(newsidetag1, true)\n if (newsidetag2 !== null) sidesToCheck.set(newsidetag2, true)\n donewithside = false\n directionindex = 2 // skip reverse direction check\n donesomething = true\n break\n } // if(distancesquared < 1e-10)\n } // if( (t > 0) && (t < 1) )\n } // if(endingstidestartvertextag === endvertextag)\n } // for matchingsideindex\n } // for directionindex\n } // if(sidetagtocheck in sidemap)\n if (donewithside) {\n sidesToCheck.delete(sidetagtocheck)\n }\n }\n if (!donesomething) break\n }\n polygons = newpolygons\n }\n sidemap.clear()\n\n return polygons\n}\n\nmodule.exports = insertTjunctions\n","const aboutEqualNormals = require('../../maths/utils/aboutEqualNormals')\nconst vec3 = require('../../maths/vec3')\n\nconst poly3 = require('../../geometries/poly3')\n\n// create a set of edges from the given polygon, and link the edges as well\nconst createEdges = (polygon) => {\n const points = poly3.toPoints(polygon)\n const edges = []\n for (let i = 0; i < points.length; i++) {\n const j = (i + 1) % points.length\n const edge = {\n v1: points[i],\n v2: points[j]\n }\n edges.push(edge)\n }\n // link the edges together\n for (let i = 0; i < edges.length; i++) {\n const j = (i + 1) % points.length\n edges[i].next = edges[j]\n edges[j].prev = edges[i]\n }\n return edges\n}\n\nconst insertEdge = (edges, edge) => {\n const key = `${edge.v1}:${edge.v2}`\n edges.set(key, edge)\n}\n\nconst deleteEdge = (edges, edge) => {\n const key = `${edge.v1}:${edge.v2}`\n edges.delete(key)\n}\n\nconst findOppositeEdge = (edges, edge) => {\n const key = `${edge.v2}:${edge.v1}` // NOTE: OPPOSITE OF INSERT KEY\n return edges.get(key)\n}\n\n// calculate the two adjoining angles between the opposing edges\nconst calculateAnglesBetween = (current, opposite, normal) => {\n let v0 = current.prev.v1\n let v1 = current.prev.v2\n let v2 = opposite.next.v2\n const angle1 = calculateAngle(v0, v1, v2, normal)\n\n v0 = opposite.prev.v1\n v1 = opposite.prev.v2\n v2 = current.next.v2\n const angle2 = calculateAngle(v0, v1, v2, normal)\n\n return [angle1, angle2]\n}\n\nconst v1 = vec3.create()\nconst v2 = vec3.create()\n\nconst calculateAngle = (prevpoint, point, nextpoint, normal) => {\n const d0 = vec3.subtract(v1, point, prevpoint)\n const d1 = vec3.subtract(v2, nextpoint, point)\n vec3.cross(d0, d0, d1)\n return vec3.dot(d0, normal)\n}\n\n// create a polygon starting from the given edge (if possible)\nconst createPolygonAnd = (edge) => {\n let polygon\n const points = []\n while (edge.next) {\n const next = edge.next\n\n points.push(edge.v1)\n\n edge.v1 = null\n edge.v2 = null\n edge.next = null\n edge.prev = null\n\n edge = next\n }\n if (points.length > 0) polygon = poly3.create(points)\n return polygon\n}\n\n/*\n * Merge COPLANAR polygons that share common edges.\n * @param {poly3[]} sourcepolygons - list of polygons\n * @returns {poly3[]} new set of polygons\n */\nconst mergeCoplanarPolygons = (sourcepolygons) => {\n if (sourcepolygons.length < 2) return sourcepolygons\n\n const normal = sourcepolygons[0].plane\n const polygons = sourcepolygons.slice()\n const edgeList = new Map()\n\n while (polygons.length > 0) { // NOTE: the length of polygons WILL change\n const polygon = polygons.shift()\n const edges = createEdges(polygon)\n for (let i = 0; i < edges.length; i++) {\n const current = edges[i]\n const opposite = findOppositeEdge(edgeList, current)\n if (opposite) {\n const angles = calculateAnglesBetween(current, opposite, normal)\n if (angles[0] >= 0 && angles[1] >= 0) {\n const edge1 = opposite.next\n const edge2 = current.next\n // adjust the edges, linking together opposing polygons\n current.prev.next = opposite.next\n current.next.prev = opposite.prev\n\n opposite.prev.next = current.next\n opposite.next.prev = current.prev\n\n // remove the opposing edges\n current.v1 = null\n current.v2 = null\n current.next = null\n current.prev = null\n\n deleteEdge(edgeList, opposite)\n\n opposite.v1 = null\n opposite.v2 = null\n opposite.next = null\n opposite.prev = null\n\n const mergeEdges = (list, e1, e2) => {\n const newedge = {\n v1: e2.v1,\n v2: e1.v2,\n next: e1.next,\n prev: e2.prev\n }\n // link in newedge\n e2.prev.next = newedge\n e1.next.prev = newedge\n // remove old edges\n deleteEdge(list, e1)\n e1.v1 = null\n e1.v2 = null\n e1.next = null\n e1.prev = null\n\n deleteEdge(list, e2)\n e2.v1 = null\n e2.v2 = null\n e2.next = null\n e2.prev = null\n }\n\n if (angles[0] === 0.0) {\n mergeEdges(edgeList, edge1, edge1.prev)\n }\n if (angles[1] === 0.0) {\n mergeEdges(edgeList, edge2, edge2.prev)\n }\n }\n } else {\n if (current.next) insertEdge(edgeList, current)\n }\n }\n }\n\n // build a set of polygons from the remaining edges\n const destpolygons = []\n edgeList.forEach((edge) => {\n const polygon = createPolygonAnd(edge)\n if (polygon) destpolygons.push(polygon)\n })\n\n edgeList.clear()\n\n return destpolygons\n}\n\nconst coplanar = (plane1, plane2) => {\n // expect the same distance from the origin, within tolerance\n if (Math.abs(plane1[3] - plane2[3]) < 0.00000015) {\n return aboutEqualNormals(plane1, plane2)\n }\n return false\n}\n\nconst mergePolygons = (epsilon, polygons) => {\n const polygonsPerPlane = [] // elements: [plane, [poly3...]]\n polygons.forEach((polygon) => {\n const mapping = polygonsPerPlane.find((element) => coplanar(element[0], poly3.plane(polygon)))\n if (mapping) {\n const polygons = mapping[1]\n polygons.push(polygon)\n } else {\n polygonsPerPlane.push([poly3.plane(polygon), [polygon]])\n }\n })\n\n let destpolygons = []\n polygonsPerPlane.forEach((mapping) => {\n const sourcepolygons = mapping[1]\n const retesselayedpolygons = mergeCoplanarPolygons(sourcepolygons)\n destpolygons = destpolygons.concat(retesselayedpolygons)\n })\n return destpolygons\n}\n\nmodule.exports = mergePolygons\n","const { EPS } = require('../../maths/constants')\n\nconst line2 = require('../../maths/line2')\nconst vec2 = require('../../maths/vec2')\nconst OrthoNormalBasis = require('../../maths/OrthoNormalBasis')\nconst interpolateBetween2DPointsForY = require('../../maths/utils/interpolateBetween2DPointsForY')\n\nconst { insertSorted, fnNumberSort } = require('../../utils')\n\nconst poly3 = require('../../geometries/poly3')\n\n/*\n * Retesselation for a set of COPLANAR polygons.\n * @param {poly3[]} sourcepolygons - list of polygons\n * @returns {poly3[]} new set of polygons\n */\nconst reTesselateCoplanarPolygons = (sourcepolygons) => {\n if (sourcepolygons.length < 2) return sourcepolygons\n\n const destpolygons = []\n const numpolygons = sourcepolygons.length\n const plane = poly3.plane(sourcepolygons[0])\n const orthobasis = new OrthoNormalBasis(plane)\n const polygonvertices2d = [] // array of array of Vector2D\n const polygontopvertexindexes = [] // array of indexes of topmost vertex per polygon\n const topy2polygonindexes = new Map()\n const ycoordinatetopolygonindexes = new Map()\n\n // convert all polygon vertices to 2D\n // Make a list of all encountered y coordinates\n // And build a map of all polygons that have a vertex at a certain y coordinate:\n const ycoordinatebins = new Map()\n const ycoordinateBinningFactor = 10 / EPS\n for (let polygonindex = 0; polygonindex < numpolygons; polygonindex++) {\n const poly3d = sourcepolygons[polygonindex]\n let vertices2d = []\n let numvertices = poly3d.vertices.length\n let minindex = -1\n if (numvertices > 0) {\n let miny\n let maxy\n for (let i = 0; i < numvertices; i++) {\n let pos2d = orthobasis.to2D(poly3d.vertices[i])\n // perform binning of y coordinates: If we have multiple vertices very\n // close to each other, give them the same y coordinate:\n const ycoordinatebin = Math.floor(pos2d[1] * ycoordinateBinningFactor)\n let newy\n if (ycoordinatebins.has(ycoordinatebin)) {\n newy = ycoordinatebins.get(ycoordinatebin)\n } else if (ycoordinatebins.has(ycoordinatebin + 1)) {\n newy = ycoordinatebins.get(ycoordinatebin + 1)\n } else if (ycoordinatebins.has(ycoordinatebin - 1)) {\n newy = ycoordinatebins.get(ycoordinatebin - 1)\n } else {\n newy = pos2d[1]\n ycoordinatebins.set(ycoordinatebin, pos2d[1])\n }\n pos2d = vec2.fromValues(pos2d[0], newy)\n vertices2d.push(pos2d)\n const y = pos2d[1]\n if ((i === 0) || (y < miny)) {\n miny = y\n minindex = i\n }\n if ((i === 0) || (y > maxy)) {\n maxy = y\n }\n let polygonindexes = ycoordinatetopolygonindexes.get(y)\n if (!polygonindexes) {\n polygonindexes = {} // PERF\n ycoordinatetopolygonindexes.set(y, polygonindexes)\n }\n polygonindexes[polygonindex] = true\n }\n if (miny >= maxy) {\n // degenerate polygon, all vertices have same y coordinate. Just ignore it from now:\n vertices2d = []\n numvertices = 0\n minindex = -1\n } else {\n let polygonindexes = topy2polygonindexes.get(miny)\n if (!polygonindexes) {\n polygonindexes = []\n topy2polygonindexes.set(miny, polygonindexes)\n }\n polygonindexes.push(polygonindex)\n }\n } // if(numvertices > 0)\n // reverse the vertex order:\n vertices2d.reverse()\n minindex = numvertices - minindex - 1\n polygonvertices2d.push(vertices2d)\n polygontopvertexindexes.push(minindex)\n }\n\n const ycoordinates = []\n ycoordinatetopolygonindexes.forEach((polylist, y) => ycoordinates.push(y))\n ycoordinates.sort(fnNumberSort)\n\n // Now we will iterate over all y coordinates, from lowest to highest y coordinate\n // activepolygons: source polygons that are 'active', i.e. intersect with our y coordinate\n // Is sorted so the polygons are in left to right order\n // Each element in activepolygons has these properties:\n // polygonindex: the index of the source polygon (i.e. an index into the sourcepolygons\n // and polygonvertices2d arrays)\n // leftvertexindex: the index of the vertex at the left side of the polygon (lowest x)\n // that is at or just above the current y coordinate\n // rightvertexindex: dito at right hand side of polygon\n // topleft, bottomleft: coordinates of the left side of the polygon crossing the current y coordinate\n // topright, bottomright: coordinates of the right hand side of the polygon crossing the current y coordinate\n let activepolygons = []\n let prevoutpolygonrow = []\n for (let yindex = 0; yindex < ycoordinates.length; yindex++) {\n const newoutpolygonrow = []\n const ycoordinate = ycoordinates[yindex]\n\n // update activepolygons for this y coordinate:\n // - Remove any polygons that end at this y coordinate\n // - update leftvertexindex and rightvertexindex (which point to the current vertex index\n // at the the left and right side of the polygon\n // Iterate over all polygons that have a corner at this y coordinate:\n const polygonindexeswithcorner = ycoordinatetopolygonindexes.get(ycoordinate)\n for (let activepolygonindex = 0; activepolygonindex < activepolygons.length; ++activepolygonindex) {\n const activepolygon = activepolygons[activepolygonindex]\n const polygonindex = activepolygon.polygonindex\n if (polygonindexeswithcorner[polygonindex]) {\n // this active polygon has a corner at this y coordinate:\n const vertices2d = polygonvertices2d[polygonindex]\n const numvertices = vertices2d.length\n let newleftvertexindex = activepolygon.leftvertexindex\n let newrightvertexindex = activepolygon.rightvertexindex\n // See if we need to increase leftvertexindex or decrease rightvertexindex:\n while (true) {\n let nextleftvertexindex = newleftvertexindex + 1\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0\n if (vertices2d[nextleftvertexindex][1] !== ycoordinate) break\n newleftvertexindex = nextleftvertexindex\n }\n let nextrightvertexindex = newrightvertexindex - 1\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1\n if (vertices2d[nextrightvertexindex][1] === ycoordinate) {\n newrightvertexindex = nextrightvertexindex\n }\n if ((newleftvertexindex !== activepolygon.leftvertexindex) && (newleftvertexindex === newrightvertexindex)) {\n // We have increased leftvertexindex or decreased rightvertexindex, and now they point to the same vertex\n // This means that this is the bottom point of the polygon. We'll remove it:\n activepolygons.splice(activepolygonindex, 1)\n --activepolygonindex\n } else {\n activepolygon.leftvertexindex = newleftvertexindex\n activepolygon.rightvertexindex = newrightvertexindex\n activepolygon.topleft = vertices2d[newleftvertexindex]\n activepolygon.topright = vertices2d[newrightvertexindex]\n let nextleftvertexindex = newleftvertexindex + 1\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0\n activepolygon.bottomleft = vertices2d[nextleftvertexindex]\n let nextrightvertexindex = newrightvertexindex - 1\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1\n activepolygon.bottomright = vertices2d[nextrightvertexindex]\n }\n } // if polygon has corner here\n } // for activepolygonindex\n let nextycoordinate\n if (yindex >= ycoordinates.length - 1) {\n // last row, all polygons must be finished here:\n activepolygons = []\n nextycoordinate = null\n } else { // yindex < ycoordinates.length-1\n nextycoordinate = Number(ycoordinates[yindex + 1])\n const middleycoordinate = 0.5 * (ycoordinate + nextycoordinate)\n // update activepolygons by adding any polygons that start here:\n const startingpolygonindexes = topy2polygonindexes.get(ycoordinate)\n for (const polygonindexKey in startingpolygonindexes) {\n const polygonindex = startingpolygonindexes[polygonindexKey]\n const vertices2d = polygonvertices2d[polygonindex]\n const numvertices = vertices2d.length\n const topvertexindex = polygontopvertexindexes[polygonindex]\n // the top of the polygon may be a horizontal line. In that case topvertexindex can point to any point on this line.\n // Find the left and right topmost vertices which have the current y coordinate:\n let topleftvertexindex = topvertexindex\n while (true) {\n let i = topleftvertexindex + 1\n if (i >= numvertices) i = 0\n if (vertices2d[i][1] !== ycoordinate) break\n if (i === topvertexindex) break // should not happen, but just to prevent endless loops\n topleftvertexindex = i\n }\n let toprightvertexindex = topvertexindex\n while (true) {\n let i = toprightvertexindex - 1\n if (i < 0) i = numvertices - 1\n if (vertices2d[i][1] !== ycoordinate) break\n if (i === topleftvertexindex) break // should not happen, but just to prevent endless loops\n toprightvertexindex = i\n }\n let nextleftvertexindex = topleftvertexindex + 1\n if (nextleftvertexindex >= numvertices) nextleftvertexindex = 0\n let nextrightvertexindex = toprightvertexindex - 1\n if (nextrightvertexindex < 0) nextrightvertexindex = numvertices - 1\n const newactivepolygon = {\n polygonindex: polygonindex,\n leftvertexindex: topleftvertexindex,\n rightvertexindex: toprightvertexindex,\n topleft: vertices2d[topleftvertexindex],\n topright: vertices2d[toprightvertexindex],\n bottomleft: vertices2d[nextleftvertexindex],\n bottomright: vertices2d[nextrightvertexindex]\n }\n insertSorted(activepolygons, newactivepolygon, (el1, el2) => {\n const x1 = interpolateBetween2DPointsForY(el1.topleft, el1.bottomleft, middleycoordinate)\n const x2 = interpolateBetween2DPointsForY(el2.topleft, el2.bottomleft, middleycoordinate)\n if (x1 > x2) return 1\n if (x1 < x2) return -1\n return 0\n })\n } // for(let polygonindex in startingpolygonindexes)\n } // yindex < ycoordinates.length-1\n\n // Now activepolygons is up to date\n // Build the output polygons for the next row in newoutpolygonrow:\n for (const activepolygonKey in activepolygons) {\n const activepolygon = activepolygons[activepolygonKey]\n\n let x = interpolateBetween2DPointsForY(activepolygon.topleft, activepolygon.bottomleft, ycoordinate)\n const topleft = vec2.fromValues(x, ycoordinate)\n x = interpolateBetween2DPointsForY(activepolygon.topright, activepolygon.bottomright, ycoordinate)\n const topright = vec2.fromValues(x, ycoordinate)\n x = interpolateBetween2DPointsForY(activepolygon.topleft, activepolygon.bottomleft, nextycoordinate)\n const bottomleft = vec2.fromValues(x, nextycoordinate)\n x = interpolateBetween2DPointsForY(activepolygon.topright, activepolygon.bottomright, nextycoordinate)\n const bottomright = vec2.fromValues(x, nextycoordinate)\n const outpolygon = {\n topleft: topleft,\n topright: topright,\n bottomleft: bottomleft,\n bottomright: bottomright,\n leftline: line2.fromPoints(line2.create(), topleft, bottomleft),\n rightline: line2.fromPoints(line2.create(), bottomright, topright)\n }\n if (newoutpolygonrow.length > 0) {\n const prevoutpolygon = newoutpolygonrow[newoutpolygonrow.length - 1]\n const d1 = vec2.distance(outpolygon.topleft, prevoutpolygon.topright)\n const d2 = vec2.distance(outpolygon.bottomleft, prevoutpolygon.bottomright)\n if ((d1 < EPS) && (d2 < EPS)) {\n // we can join this polygon with the one to the left:\n outpolygon.topleft = prevoutpolygon.topleft\n outpolygon.leftline = prevoutpolygon.leftline\n outpolygon.bottomleft = prevoutpolygon.bottomleft\n newoutpolygonrow.splice(newoutpolygonrow.length - 1, 1)\n }\n }\n newoutpolygonrow.push(outpolygon)\n } // for(activepolygon in activepolygons)\n if (yindex > 0) {\n // try to match the new polygons against the previous row:\n const prevcontinuedindexes = new Set()\n const matchedindexes = new Set()\n for (let i = 0; i < newoutpolygonrow.length; i++) {\n const thispolygon = newoutpolygonrow[i]\n for (let ii = 0; ii < prevoutpolygonrow.length; ii++) {\n if (!matchedindexes.has(ii)) { // not already processed?\n // We have a match if the sidelines are equal or if the top coordinates\n // are on the sidelines of the previous polygon\n const prevpolygon = prevoutpolygonrow[ii]\n if (vec2.distance(prevpolygon.bottomleft, thispolygon.topleft) < EPS) {\n if (vec2.distance(prevpolygon.bottomright, thispolygon.topright) < EPS) {\n // Yes, the top of this polygon matches the bottom of the previous:\n matchedindexes.add(ii)\n // Now check if the joined polygon would remain convex:\n const v1 = line2.direction(thispolygon.leftline)\n const v2 = line2.direction(prevpolygon.leftline)\n const d1 = v1[0] - v2[0]\n\n const v3 = line2.direction(thispolygon.rightline)\n const v4 = line2.direction(prevpolygon.rightline)\n const d2 = v3[0] - v4[0]\n\n const leftlinecontinues = Math.abs(d1) < EPS\n const rightlinecontinues = Math.abs(d2) < EPS\n const leftlineisconvex = leftlinecontinues || (d1 >= 0)\n const rightlineisconvex = rightlinecontinues || (d2 >= 0)\n if (leftlineisconvex && rightlineisconvex) {\n // yes, both sides have convex corners:\n // This polygon will continue the previous polygon\n thispolygon.outpolygon = prevpolygon.outpolygon\n thispolygon.leftlinecontinues = leftlinecontinues\n thispolygon.rightlinecontinues = rightlinecontinues\n prevcontinuedindexes.add(ii)\n }\n break\n }\n }\n } // if(!prevcontinuedindexes.has(ii))\n } // for ii\n } // for i\n for (let ii = 0; ii < prevoutpolygonrow.length; ii++) {\n if (!prevcontinuedindexes.has(ii)) {\n // polygon ends here\n // Finish the polygon with the last point(s):\n const prevpolygon = prevoutpolygonrow[ii]\n prevpolygon.outpolygon.rightpoints.push(prevpolygon.bottomright)\n if (vec2.distance(prevpolygon.bottomright, prevpolygon.bottomleft) > EPS) {\n // polygon ends with a horizontal line:\n prevpolygon.outpolygon.leftpoints.push(prevpolygon.bottomleft)\n }\n // reverse the left half so we get a counterclockwise circle:\n prevpolygon.outpolygon.leftpoints.reverse()\n const points2d = prevpolygon.outpolygon.rightpoints.concat(prevpolygon.outpolygon.leftpoints)\n const vertices3d = points2d.map((point2d) => orthobasis.to3D(point2d))\n const polygon = poly3.fromPointsAndPlane(vertices3d, plane) // TODO support shared\n\n // if we let empty polygon out, next retesselate will crash\n if (polygon.vertices.length) destpolygons.push(polygon)\n }\n }\n } // if(yindex > 0)\n for (let i = 0; i < newoutpolygonrow.length; i++) {\n const thispolygon = newoutpolygonrow[i]\n if (!thispolygon.outpolygon) {\n // polygon starts here:\n thispolygon.outpolygon = {\n leftpoints: [],\n rightpoints: []\n }\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft)\n if (vec2.distance(thispolygon.topleft, thispolygon.topright) > EPS) {\n // we have a horizontal line at the top:\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright)\n }\n } else {\n // continuation of a previous row\n if (!thispolygon.leftlinecontinues) {\n thispolygon.outpolygon.leftpoints.push(thispolygon.topleft)\n }\n if (!thispolygon.rightlinecontinues) {\n thispolygon.outpolygon.rightpoints.push(thispolygon.topright)\n }\n }\n }\n prevoutpolygonrow = newoutpolygonrow\n } // for yindex\n return destpolygons\n}\n\nmodule.exports = reTesselateCoplanarPolygons\n","const geom3 = require('../../geometries/geom3')\nconst poly3 = require('../../geometries/poly3')\nconst { NEPS } = require('../../maths/constants')\nconst reTesselateCoplanarPolygons = require('./reTesselateCoplanarPolygons')\n\n/*\n After boolean operations all coplanar polygon fragments are joined by a retesselating\n operation. geom3.reTesselate(geom).\n Retesselation is done through a linear sweep over the polygon surface.\n The sweep line passes over the y coordinates of all vertices in the polygon.\n Polygons are split at each sweep line, and the fragments are joined horizontally and vertically into larger polygons\n (making sure that we will end up with convex polygons).\n*/\nconst retessellate = (geometry) => {\n if (geometry.isRetesselated) {\n return geometry\n }\n\n const polygons = geom3.toPolygons(geometry).map((polygon, index) => ({ vertices: polygon.vertices, plane: poly3.plane(polygon), index: index }))\n const classified = classifyPolygons(polygons)\n\n const destPolygons = []\n classified.forEach((group) => {\n if (Array.isArray(group)) {\n const reTessellateCoplanarPolygons = reTesselateCoplanarPolygons(group)\n destPolygons.push(...reTessellateCoplanarPolygons)\n } else {\n destPolygons.push(group)\n }\n })\n\n const result = geom3.create(destPolygons)\n result.isRetesselated = true\n\n return result\n}\n\nconst classifyPolygons = (polygons) => {\n let clusters = [polygons] // a cluster is an array of potentially coplanar polygons\n const nonCoplanar = [] // polygons that are known to be non-coplanar\n // go through each component of the plane starting with the last one (the distance from origin)\n for (let component = 3; component >= 0; component--) {\n const maybeCoplanar = []\n const tolerance = component === 3 ? 0.000000015 : NEPS\n clusters.forEach((cluster) => {\n // sort the cluster by the current component\n cluster.sort(byPlaneComponent(component, tolerance))\n // iterate through the cluster and check if there are polygons which are not coplanar with the others\n // or if there are sub-clusters of coplanar polygons\n let startIndex = 0\n for (let i = 1; i < cluster.length; i++) {\n // if there's a difference larger than the tolerance, split the cluster\n if (cluster[i].plane[component] - cluster[startIndex].plane[component] > tolerance) {\n // if there's a single polygon it's definitely not coplanar with any others\n if (i - startIndex === 1) {\n nonCoplanar.push(cluster[startIndex])\n } else { // we have a new sub cluster of potentially coplanar polygons\n maybeCoplanar.push(cluster.slice(startIndex, i))\n }\n startIndex = i\n }\n }\n // handle the last elements of the cluster\n if (cluster.length - startIndex === 1) {\n nonCoplanar.push(cluster[startIndex])\n } else {\n maybeCoplanar.push(cluster.slice(startIndex))\n }\n })\n // replace previous clusters with the new ones\n clusters = maybeCoplanar\n }\n // restore the original order of the polygons\n const result = []\n // polygons inside the cluster should already be sorted by index\n clusters.forEach((cluster) => {\n if (cluster[0]) result[cluster[0].index] = cluster\n })\n nonCoplanar.forEach((polygon) => { result[polygon.index] = polygon })\n\n return result\n}\n\nconst byPlaneComponent = (component, tolerance) => (a, b) => {\n if (a.plane[component] - b.plane[component] > tolerance) {\n return 1\n } else if (b.plane[component] - a.plane[component] > tolerance) {\n return -1\n }\n return 0\n}\n\nmodule.exports = retessellate\n","const flatten = require('../../utils/flatten')\n\nconst vec2 = require('../../maths/vec2')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\nconst measureEpsilon = require('../../measurements/measureEpsilon')\n\nconst snapPolygons = require('./snapPolygons')\n\nconst snapPath2 = (geometry) => {\n const epsilon = measureEpsilon(geometry)\n const points = path2.toPoints(geometry)\n const newpoints = points.map((point) => vec2.snap(vec2.create(), point, epsilon))\n // snap can produce duplicate points, remove those\n return path2.create(newpoints)\n}\n\nconst snapGeom2 = (geometry) => {\n const epsilon = measureEpsilon(geometry)\n const sides = geom2.toSides(geometry)\n let newsides = sides.map((side) => [vec2.snap(vec2.create(), side[0], epsilon), vec2.snap(vec2.create(), side[1], epsilon)])\n // snap can produce sides with zero (0) length, remove those\n newsides = newsides.filter((side) => !vec2.equals(side[0], side[1]))\n return geom2.create(newsides)\n}\n\nconst snapGeom3 = (geometry) => {\n const epsilon = measureEpsilon(geometry)\n const polygons = geom3.toPolygons(geometry)\n const newpolygons = snapPolygons(epsilon, polygons)\n return geom3.create(newpolygons)\n}\n\n/**\n * Snap the given geometries to the overall precision (epsilon) of the geometry.\n * @see measurements.measureEpsilon()\n * @param {...Object} geometries - the geometries to snap\n * @return {Object|Array} the snapped geometry, or a list of snapped geometries\n * @alias module:modeling/modifiers.snap\n */\nconst snap = (...geometries) => {\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('wrong number of arguments')\n\n const results = geometries.map((geometry) => {\n if (path2.isA(geometry)) return snapPath2(geometry)\n if (geom2.isA(geometry)) return snapGeom2(geometry)\n if (geom3.isA(geometry)) return snapGeom3(geometry)\n return geometry\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = snap\n","const vec3 = require('../../maths/vec3')\n\nconst poly3 = require('../../geometries/poly3')\n\nconst isValidPoly3 = (epsilon, polygon) => {\n const area = Math.abs(poly3.measureArea(polygon))\n return (Number.isFinite(area) && area > epsilon)\n}\n\n/*\n * Snap the given list of polygons to the epsilon.\n */\nconst snapPolygons = (epsilon, polygons) => {\n let newpolygons = polygons.map((polygon) => {\n const snapvertices = polygon.vertices.map((vertice) => vec3.snap(vec3.create(), vertice, epsilon))\n // only retain unique vertices\n const newvertices = []\n for (let i = 0; i < snapvertices.length; i++) {\n const j = (i + 1) % snapvertices.length\n if (!vec3.equals(snapvertices[i], snapvertices[j])) newvertices.push(snapvertices[i])\n }\n const newpolygon = poly3.create(newvertices)\n if (polygon.color) newpolygon.color = polygon.color\n return newpolygon\n })\n // snap can produce polygons with zero (0) area, remove those\n const epsilonArea = (epsilon * epsilon * Math.sqrt(3) / 4)\n newpolygons = newpolygons.filter((polygon) => isValidPoly3(epsilonArea, polygon))\n return newpolygons\n}\n\nmodule.exports = snapPolygons\n","const vec3 = require('../../maths/vec3')\nconst poly3 = require('../../geometries/poly3')\n\nconst triangulatePolygon = (epsilon, polygon, triangles) => {\n const nv = polygon.vertices.length\n if (nv > 3) {\n if (nv > 4) {\n // split the polygon using a midpoint\n const midpoint = [0, 0, 0]\n polygon.vertices.forEach((vertice) => vec3.add(midpoint, midpoint, vertice))\n vec3.snap(midpoint, vec3.divide(midpoint, midpoint, [nv, nv, nv]), epsilon)\n for (let i = 0; i < nv; i++) {\n const poly = poly3.create([midpoint, polygon.vertices[i], polygon.vertices[(i + 1) % nv]])\n if (polygon.color) poly.color = polygon.color\n triangles.push(poly)\n }\n return\n }\n // exactly 4 vertices, use simple triangulation\n const poly0 = poly3.create([polygon.vertices[0], polygon.vertices[1], polygon.vertices[2]])\n const poly1 = poly3.create([polygon.vertices[0], polygon.vertices[2], polygon.vertices[3]])\n if (polygon.color) {\n poly0.color = polygon.color\n poly1.color = polygon.color\n }\n triangles.push(poly0, poly1)\n return\n }\n // exactly 3 vertices, so return the original\n triangles.push(polygon)\n}\n\n/*\n * Convert the given polygons into a list of triangles (polygons with 3 vertices).\n * NOTE: this is possible because poly3 is CONVEX by definition\n */\nconst triangulatePolygons = (epsilon, polygons) => {\n const triangles = []\n polygons.forEach((polygon) => {\n triangulatePolygon(epsilon, polygon, triangles)\n })\n return triangles\n}\n\nmodule.exports = triangulatePolygons\n","const flatten = require('../../utils/flatten')\nconst padArrayToLength = require('../../utils/padArrayToLength')\nconst measureAggregateBoundingBox = require('../../measurements/measureAggregateBoundingBox')\nconst { translate } = require('./translate')\n\nconst validateOptions = (options) => {\n if (!Array.isArray(options.modes) || options.modes.length > 3) throw new Error('align(): modes must be an array of length <= 3')\n options.modes = padArrayToLength(options.modes, 'none', 3)\n if (options.modes.filter((mode) => ['center', 'max', 'min', 'none'].includes(mode)).length !== 3) throw new Error('align(): all modes must be one of \"center\", \"max\" or \"min\"')\n\n if (!Array.isArray(options.relativeTo) || options.relativeTo.length > 3) throw new Error('align(): relativeTo must be an array of length <= 3')\n options.relativeTo = padArrayToLength(options.relativeTo, 0, 3)\n if (options.relativeTo.filter((alignVal) => (Number.isFinite(alignVal) || alignVal == null)).length !== 3) throw new Error('align(): all relativeTo values must be a number, or null.')\n\n if (typeof options.grouped !== 'boolean') throw new Error('align(): grouped must be a boolean value.')\n\n return options\n}\n\nconst populateRelativeToFromBounds = (relativeTo, modes, bounds) => {\n for (let i = 0; i < 3; i++) {\n if (relativeTo[i] == null) {\n if (modes[i] === 'center') {\n relativeTo[i] = (bounds[0][i] + bounds[1][i]) / 2\n } else if (modes[i] === 'max') {\n relativeTo[i] = bounds[1][i]\n } else if (modes[i] === 'min') {\n relativeTo[i] = bounds[0][i]\n }\n }\n }\n return relativeTo\n}\n\nconst alignGeometries = (geometry, modes, relativeTo) => {\n const bounds = measureAggregateBoundingBox(geometry)\n const translation = [0, 0, 0]\n for (let i = 0; i < 3; i++) {\n if (modes[i] === 'center') {\n translation[i] = relativeTo[i] - (bounds[0][i] + bounds[1][i]) / 2\n } else if (modes[i] === 'max') {\n translation[i] = relativeTo[i] - bounds[1][i]\n } else if (modes[i] === 'min') {\n translation[i] = relativeTo[i] - bounds[0][i]\n }\n }\n\n return translate(translation, geometry)\n}\n\n/**\n * Align the boundaries of the given geometries using the given options.\n * @param {Object} options - options for aligning\n * @param {Array} [options.modes = ['center', 'center', 'min']] - the point on the geometries to align to for each axis. Valid options are \"center\", \"max\", \"min\", and \"none\".\n * @param {Array} [options.relativeTo = [0,0,0]] - The point one each axis on which to align the geometries upon. If the value is null, then the corresponding value from the group's bounding box is used.\n * @param {Boolean} [options.grouped = false] - if true, transform all geometries by the same amount, maintaining the relative positions to each other.\n * @param {...Object} geometries - the geometries to align\n * @return {Object|Array} the aligned geometry, or a list of aligned geometries\n * @alias module:modeling/transforms.align\n *\n * @example\n * let alignedGeometries = align({modes: ['min', 'center', 'none'], relativeTo: [10, null, 10], grouped: true }, geometries)\n */\nconst align = (options, ...geometries) => {\n const defaults = {\n modes: ['center', 'center', 'min'],\n relativeTo: [0, 0, 0],\n grouped: false\n }\n options = Object.assign({}, defaults, options)\n\n options = validateOptions(options)\n let { modes, relativeTo, grouped } = options\n geometries = flatten(geometries)\n if (geometries.length === 0) throw new Error('align(): No geometries were provided to act upon')\n\n if (relativeTo.filter((val) => val == null).length) {\n const bounds = measureAggregateBoundingBox(geometries)\n relativeTo = populateRelativeToFromBounds(relativeTo, modes, bounds)\n }\n if (grouped) {\n geometries = alignGeometries(geometries, modes, relativeTo)\n } else {\n geometries = geometries.map((geometry) => alignGeometries(geometry, modes, relativeTo))\n }\n return geometries.length === 1 ? geometries[0] : geometries\n}\n\nmodule.exports = align\n","const flatten = require('../../utils/flatten')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\nconst measureBoundingBox = require('../../measurements/measureBoundingBox')\n\nconst { translate } = require('./translate')\n\nconst centerGeometry = (options, object) => {\n const defaults = {\n axes: [true, true, true],\n relativeTo: [0, 0, 0]\n }\n const { axes, relativeTo } = Object.assign({}, defaults, options)\n\n const bounds = measureBoundingBox(object)\n const offset = [0, 0, 0]\n if (axes[0]) offset[0] = relativeTo[0] - (bounds[0][0] + ((bounds[1][0] - bounds[0][0]) / 2))\n if (axes[1]) offset[1] = relativeTo[1] - (bounds[0][1] + ((bounds[1][1] - bounds[0][1]) / 2))\n if (axes[2]) offset[2] = relativeTo[2] - (bounds[0][2] + ((bounds[1][2] - bounds[0][2]) / 2))\n return translate(offset, object)\n}\n\n/**\n * Center the given objects using the given options.\n * @param {Object} options - options for centering\n * @param {Array} [options.axes=[true,true,true]] - axis of which to center, true or false\n * @param {Array} [options.relativeTo=[0,0,0]] - relative point of which to center the objects\n * @param {...Object} objects - the objects to center\n * @return {Object|Array} the centered object, or a list of centered objects\n * @alias module:modeling/transforms.center\n *\n * @example\n * let myshape = center({axes: [true,false,false]}, sphere()) // center about the X axis\n */\nconst center = (options, ...objects) => {\n const defaults = {\n axes: [true, true, true],\n relativeTo: [0, 0, 0]\n // TODO: Add additional 'methods' of centering: midpoint, centroid\n }\n const { axes, relativeTo } = Object.assign({}, defaults, options)\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n if (relativeTo.length !== 3) throw new Error('relativeTo must be an array of length 3')\n\n options = { axes, relativeTo }\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return centerGeometry(options, object)\n if (geom2.isA(object)) return centerGeometry(options, object)\n if (geom3.isA(object)) return centerGeometry(options, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\n/**\n * Center the given objects about the X axis.\n * @param {...Object} objects - the objects to center\n * @return {Object|Array} the centered object, or a list of centered objects\n * @alias module:modeling/transforms.centerX\n */\nconst centerX = (...objects) => center({ axes: [true, false, false] }, objects)\n\n/**\n * Center the given objects about the Y axis.\n * @param {...Object} objects - the objects to center\n * @return {Object|Array} the centered object, or a list of centered objects\n * @alias module:modeling/transforms.centerY\n */\nconst centerY = (...objects) => center({ axes: [false, true, false] }, objects)\n\n/**\n * Center the given objects about the Z axis.\n * @param {...Object} objects - the objects to center\n * @return {Object|Array} the centered object, or a list of centered objects\n * @alias module:modeling/transforms.centerZ\n */\nconst centerZ = (...objects) => center({ axes: [false, false, true] }, objects)\n\nmodule.exports = {\n center,\n centerX,\n centerY,\n centerZ\n}\n","/**\n * All shapes (primitives or the results of operations) can be transformed, such as scaled or rotated.\n * In all cases, the function returns the results, and never changes the original shapes.\n * @module modeling/transforms\n * @example\n * const { center, rotateX, translate } = require('@jscad/modeling').transforms\n */\nmodule.exports = {\n align: require('./align'),\n\n center: require('./center').center,\n centerX: require('./center').centerX,\n centerY: require('./center').centerY,\n centerZ: require('./center').centerZ,\n\n mirror: require('./mirror').mirror,\n mirrorX: require('./mirror').mirrorX,\n mirrorY: require('./mirror').mirrorY,\n mirrorZ: require('./mirror').mirrorZ,\n\n rotate: require('./rotate').rotate,\n rotateX: require('./rotate').rotateX,\n rotateY: require('./rotate').rotateY,\n rotateZ: require('./rotate').rotateZ,\n\n scale: require('./scale').scale,\n scaleX: require('./scale').scaleX,\n scaleY: require('./scale').scaleY,\n scaleZ: require('./scale').scaleZ,\n\n transform: require('./transform'),\n\n translate: require('./translate').translate,\n translateX: require('./translate').translateX,\n translateY: require('./translate').translateY,\n translateZ: require('./translate').translateZ\n}\n","const flatten = require('../../utils/flatten')\n\nconst mat4 = require('../../maths/mat4')\nconst plane = require('../../maths/plane')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\n/**\n * Mirror the given objects using the given options.\n * @param {Object} options - options for mirror\n * @param {Array} [options.origin=[0,0,0]] - the origin of the plane\n * @param {Array} [options.normal=[0,0,1]] - the normal vector of the plane\n * @param {...Object} objects - the objects to mirror\n * @return {Object|Array} the mirrored object, or a list of mirrored objects\n * @alias module:modeling/transforms.mirror\n *\n * @example\n * let myshape = mirror({normal: [0,0,10]}, cube({center: [0,0,15], radius: [20, 25, 5]}))\n */\nconst mirror = (options, ...objects) => {\n const defaults = {\n origin: [0, 0, 0],\n normal: [0, 0, 1] // Z axis\n }\n const { origin, normal } = Object.assign({}, defaults, options)\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n const planeOfMirror = plane.fromNormalAndPoint(plane.create(), normal, origin)\n // verify the plane, i.e. check that the given normal was valid\n if (Number.isNaN(planeOfMirror[0])) {\n throw new Error('the given origin and normal do not define a proper plane')\n }\n\n const matrix = mat4.mirrorByPlane(mat4.create(), planeOfMirror)\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return path2.transform(matrix, object)\n if (geom2.isA(object)) return geom2.transform(matrix, object)\n if (geom3.isA(object)) return geom3.transform(matrix, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\n/**\n * Mirror the given objects about the X axis.\n * @param {...Object} objects - the objects to mirror\n * @return {Object|Array} the mirrored object, or a list of mirrored objects\n * @alias module:modeling/transforms.mirrorX\n */\nconst mirrorX = (...objects) => mirror({ normal: [1, 0, 0] }, objects)\n\n/**\n * Mirror the given objects about the Y axis.\n * @param {...Object} objects - the geometries to mirror\n * @return {Object|Array} the mirrored object, or a list of mirrored objects\n * @alias module:modeling/transforms.mirrorY\n */\nconst mirrorY = (...objects) => mirror({ normal: [0, 1, 0] }, objects)\n\n/**\n * Mirror the given objects about the Z axis.\n * @param {...Object} objects - the geometries to mirror\n * @return {Object|Array} the mirrored object, or a list of mirrored objects\n * @alias module:modeling/transforms.mirrorZ\n */\nconst mirrorZ = (...objects) => mirror({ normal: [0, 0, 1] }, objects)\n\nmodule.exports = {\n mirror,\n mirrorX,\n mirrorY,\n mirrorZ\n}\n","const flatten = require('../../utils/flatten')\n\nconst mat4 = require('../../maths/mat4')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\n/**\n * Rotate the given objects using the given options.\n * @param {Array} angles - angle (RADIANS) of rotations about X, Y, and Z axis\n * @param {...Object} objects - the objects to rotate\n * @return {Object|Array} the rotated object, or a list of rotated objects\n * @alias module:modeling/transforms.rotate\n *\n * @example\n * const newsphere = rotate([TAU / 8, 0, 0], sphere())\n */\nconst rotate = (angles, ...objects) => {\n if (!Array.isArray(angles)) throw new Error('angles must be an array')\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n // adjust the angles if necessary\n angles = angles.slice() // don't modify the original\n while (angles.length < 3) angles.push(0)\n\n const yaw = angles[2]\n const pitch = angles[1]\n const roll = angles[0]\n\n const matrix = mat4.fromTaitBryanRotation(mat4.create(), yaw, pitch, roll)\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return path2.transform(matrix, object)\n if (geom2.isA(object)) return geom2.transform(matrix, object)\n if (geom3.isA(object)) return geom3.transform(matrix, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\n/**\n * Rotate the given objects about the X axis, using the given options.\n * @param {Number} angle - angle (RADIANS) of rotations about X\n * @param {...Object} objects - the objects to rotate\n * @return {Object|Array} the rotated object, or a list of rotated objects\n * @alias module:modeling/transforms.rotateX\n */\nconst rotateX = (angle, ...objects) => rotate([angle, 0, 0], objects)\n\n/**\n * Rotate the given objects about the Y axis, using the given options.\n * @param {Number} angle - angle (RADIANS) of rotations about Y\n * @param {...Object} objects - the objects to rotate\n * @return {Object|Array} the rotated object, or a list of rotated objects\n * @alias module:modeling/transforms.rotateY\n */\nconst rotateY = (angle, ...objects) => rotate([0, angle, 0], objects)\n\n/**\n * Rotate the given objects about the Z axis, using the given options.\n * @param {Number} angle - angle (RADIANS) of rotations about Z\n * @param {...Object} objects - the objects to rotate\n * @return {Object|Array} the rotated object, or a list of rotated objects\n * @alias module:modeling/transforms.rotateZ\n */\nconst rotateZ = (angle, ...objects) => rotate([0, 0, angle], objects)\n\nmodule.exports = {\n rotate,\n rotateX,\n rotateY,\n rotateZ\n}\n","const flatten = require('../../utils/flatten')\n\nconst mat4 = require('../../maths/mat4')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\n/**\n * Scale the given objects using the given options.\n * @param {Array} factors - X, Y, Z factors by which to scale the objects\n * @param {...Object} objects - the objects to scale\n * @return {Object|Array} the scaled object, or a list of scaled objects\n * @alias module:modeling/transforms.scale\n *\n * @example\n * let myshape = scale([5, 0, 10], sphere())\n */\nconst scale = (factors, ...objects) => {\n if (!Array.isArray(factors)) throw new Error('factors must be an array')\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n // adjust the factors if necessary\n factors = factors.slice() // don't modify the original\n while (factors.length < 3) factors.push(1)\n\n if (factors[0] <= 0 || factors[1] <= 0 || factors[2] <= 0) throw new Error('factors must be positive')\n\n const matrix = mat4.fromScaling(mat4.create(), factors)\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return path2.transform(matrix, object)\n if (geom2.isA(object)) return geom2.transform(matrix, object)\n if (geom3.isA(object)) return geom3.transform(matrix, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\n/**\n * Scale the given objects about the X axis using the given options.\n * @param {Number} factor - X factor by which to scale the objects\n * @param {...Object} objects - the objects to scale\n * @return {Object|Array} the scaled object, or a list of scaled objects\n * @alias module:modeling/transforms.scaleX\n */\nconst scaleX = (factor, ...objects) => scale([factor, 1, 1], objects)\n\n/**\n * Scale the given objects about the Y axis using the given options.\n * @param {Number} factor - Y factor by which to scale the objects\n * @param {...Object} objects - the objects to scale\n * @return {Object|Array} the scaled object, or a list of scaled objects\n * @alias module:modeling/transforms.scaleY\n */\nconst scaleY = (factor, ...objects) => scale([1, factor, 1], objects)\n\n/**\n * Scale the given objects about the Z axis using the given options.\n * @param {Number} factor - Z factor by which to scale the objects\n * @param {...Object} objects - the objects to scale\n * @return {Object|Array} the scaled object, or a list of scaled objects\n * @alias module:modeling/transforms.scaleZ\n */\nconst scaleZ = (factor, ...objects) => scale([1, 1, factor], objects)\n\nmodule.exports = {\n scale,\n scaleX,\n scaleY,\n scaleZ\n}\n","const flatten = require('../../utils/flatten')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\n/**\n * Transform the given objects using the given matrix.\n * @param {mat4} matrix - a transformation matrix\n * @param {...Object} objects - the objects to transform\n * @return {Object|Array} the transformed object, or a list of transformed objects\n * @alias module:modeling/transforms.transform\n *\n * @example\n * const newsphere = transform(mat4.rotateX(TAU / 8), sphere())\n */\nconst transform = (matrix, ...objects) => {\n // TODO how to check that the matrix is REAL?\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return path2.transform(matrix, object)\n if (geom2.isA(object)) return geom2.transform(matrix, object)\n if (geom3.isA(object)) return geom3.transform(matrix, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\nmodule.exports = transform\n","const flatten = require('../../utils/flatten')\n\nconst mat4 = require('../../maths/mat4')\n\nconst geom2 = require('../../geometries/geom2')\nconst geom3 = require('../../geometries/geom3')\nconst path2 = require('../../geometries/path2')\n\n/**\n * Translate the given objects using the given options.\n * @param {Array} offset - offset (vector) of which to translate the objects\n * @param {...Object} objects - the objects to translate\n * @return {Object|Array} the translated object, or a list of translated objects\n * @alias module:modeling/transforms.translate\n *\n * @example\n * const newsphere = translate([5, 0, 10], sphere())\n */\nconst translate = (offset, ...objects) => {\n if (!Array.isArray(offset)) throw new Error('offset must be an array')\n\n objects = flatten(objects)\n if (objects.length === 0) throw new Error('wrong number of arguments')\n\n // adjust the offset if necessary\n offset = offset.slice() // don't modify the original\n while (offset.length < 3) offset.push(0)\n\n const matrix = mat4.fromTranslation(mat4.create(), offset)\n\n const results = objects.map((object) => {\n if (path2.isA(object)) return path2.transform(matrix, object)\n if (geom2.isA(object)) return geom2.transform(matrix, object)\n if (geom3.isA(object)) return geom3.transform(matrix, object)\n return object\n })\n return results.length === 1 ? results[0] : results\n}\n\n/**\n * Translate the given objects along the X axis using the given options.\n * @param {Number} offset - X offset of which to translate the objects\n * @param {...Object} objects - the objects to translate\n * @return {Object|Array} the translated object, or a list of translated objects\n * @alias module:modeling/transforms.translateX\n */\nconst translateX = (offset, ...objects) => translate([offset, 0, 0], objects)\n\n/**\n * Translate the given objects along the Y axis using the given options.\n * @param {Number} offset - Y offset of which to translate the geometries\n * @param {...Object} objects - the objects to translate\n * @return {Object|Array} the translated object, or a list of translated objects\n * @alias module:modeling/transforms.translateY\n */\nconst translateY = (offset, ...objects) => translate([0, offset, 0], objects)\n\n/**\n * Translate the given objects along the Z axis using the given options.\n * @param {Number} offset - Z offset of which to translate the geometries\n * @param {...Object} objects - the objects to translate\n * @return {Object|Array} the translated object, or a list of translated objects\n * @alias module:modeling/transforms.translateZ\n */\nconst translateZ = (offset, ...objects) => translate([0, 0, offset], objects)\n\nmodule.exports = {\n translate,\n translateX,\n translateY,\n translateZ\n}\n","const { EPS, TAU } = require('../maths/constants')\n\nconst vec2 = require('../maths/vec2')\n\nconst path2 = require('../geometries/path2')\n\nconst { isGT, isGTE, isNumberArray } = require('./commonChecks')\n\n/**\n * Construct an arc in two dimensional space where all points are at the same distance from the center.\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0]] - center of arc\n * @param {Number} [options.radius=1] - radius of arc\n * @param {Number} [options.startAngle=0] - starting angle of the arc, in radians\n * @param {Number} [options.endAngle=TAU] - ending angle of the arc, in radians\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @param {Boolean} [options.makeTangent=false] - adds line segments at both ends of the arc to ensure that the gradients at the edges are tangent\n * @returns {path2} new 2D path\n * @alias module:modeling/primitives.arc\n */\nconst arc = (options) => {\n const defaults = {\n center: [0, 0],\n radius: 1,\n startAngle: 0,\n endAngle: TAU,\n makeTangent: false,\n segments: 32\n }\n let { center, radius, startAngle, endAngle, makeTangent, segments } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 2)) throw new Error('center must be an array of X and Y values')\n if (!isGT(radius, 0)) throw new Error('radius must be greater than zero')\n if (!isGTE(startAngle, 0)) throw new Error('startAngle must be positive')\n if (!isGTE(endAngle, 0)) throw new Error('endAngle must be positive')\n if (!isGTE(segments, 4)) throw new Error('segments must be four or more')\n\n startAngle = startAngle % TAU\n endAngle = endAngle % TAU\n\n let rotation = TAU\n if (startAngle < endAngle) {\n rotation = endAngle - startAngle\n }\n if (startAngle > endAngle) {\n rotation = endAngle + (TAU - startAngle)\n }\n\n const minangle = Math.acos(((radius * radius) + (radius * radius) - (EPS * EPS)) / (2 * radius * radius))\n\n const centerv = vec2.clone(center)\n let point\n const pointArray = []\n if (rotation < minangle) {\n // there is no rotation, just a single point\n point = vec2.fromAngleRadians(vec2.create(), startAngle)\n vec2.scale(point, point, radius)\n vec2.add(point, point, centerv)\n pointArray.push(point)\n } else {\n // note: add one additional step to acheive full rotation\n const numsteps = Math.max(1, Math.floor(segments * (rotation / TAU))) + 1\n let edgestepsize = numsteps * 0.5 / rotation // step size for half a degree\n if (edgestepsize > 0.25) edgestepsize = 0.25\n\n const totalsteps = makeTangent ? (numsteps + 2) : numsteps\n for (let i = 0; i <= totalsteps; i++) {\n let step = i\n if (makeTangent) {\n step = (i - 1) * (numsteps - 2 * edgestepsize) / numsteps + edgestepsize\n if (step < 0) step = 0\n if (step > numsteps) step = numsteps\n }\n const angle = startAngle + (step * (rotation / numsteps))\n point = vec2.fromAngleRadians(vec2.create(), angle)\n vec2.scale(point, point, radius)\n vec2.add(point, point, centerv)\n pointArray.push(point)\n }\n }\n return path2.fromPoints({ closed: false }, pointArray)\n}\n\nmodule.exports = arc\n","const { TAU } = require('../maths/constants')\n\nconst ellipse = require('./ellipse')\n\nconst { isGTE } = require('./commonChecks')\n\n/**\n * Construct a circle in two dimensional space where all points are at the same distance from the center.\n * @see [ellipse]{@link module:modeling/primitives.ellipse} for more options\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0]] - center of circle\n * @param {Number} [options.radius=1] - radius of circle\n * @param {Number} [options.startAngle=0] - start angle of circle, in radians\n * @param {Number} [options.endAngle=TAU] - end angle of circle, in radians\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @returns {geom2} new 2D geometry\n * @alias module:modeling/primitives.circle\n * @example\n * let myshape = circle({radius: 10})\n */\nconst circle = (options) => {\n const defaults = {\n center: [0, 0],\n radius: 1,\n startAngle: 0,\n endAngle: TAU,\n segments: 32\n }\n let { center, radius, startAngle, endAngle, segments } = Object.assign({}, defaults, options)\n\n if (!isGTE(radius, 0)) throw new Error('radius must be positive')\n\n radius = [radius, radius]\n\n return ellipse({ center, radius, startAngle, endAngle, segments })\n}\n\nmodule.exports = circle\n","// verify that the array has the given dimension, and contains Number values\nconst isNumberArray = (array, dimension) => {\n if (Array.isArray(array) && array.length >= dimension) {\n return array.every((n) => Number.isFinite(n))\n }\n return false\n}\n\n// verify that the value is a Number greater than the constant\nconst isGT = (value, constant) => (Number.isFinite(value) && value > constant)\n\n// verify that the value is a Number greater than or equal to the constant\nconst isGTE = (value, constant) => (Number.isFinite(value) && value >= constant)\n\nmodule.exports = {\n isNumberArray,\n isGT,\n isGTE\n}\n","const cuboid = require('./cuboid')\n\nconst { isGTE } = require('./commonChecks')\n\n/**\n * Construct an axis-aligned solid cube in three dimensional space with six square faces.\n * @see [cuboid]{@link module:modeling/primitives.cuboid} for more options\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0,0]] - center of cube\n * @param {Number} [options.size=2] - dimension of cube\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.cube\n * @example\n * let myshape = cube({size: 10})\n */\nconst cube = (options) => {\n const defaults = {\n center: [0, 0, 0],\n size: 2\n }\n let { center, size } = Object.assign({}, defaults, options)\n\n if (!isGTE(size, 0)) throw new Error('size must be positive')\n\n size = [size, size, size]\n\n return cuboid({ center, size })\n}\n\nmodule.exports = cube\n","const geom3 = require('../geometries/geom3')\nconst poly3 = require('../geometries/poly3')\n\nconst { isNumberArray } = require('./commonChecks')\n\n/**\n * Construct an axis-aligned solid cuboid in three dimensional space.\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0,0]] - center of cuboid\n * @param {Array} [options.size=[2,2,2]] - dimensions of cuboid; width, depth, height\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.cuboid\n *\n * @example\n * let myshape = cuboid({size: [5, 10, 5]})\n */\nconst cuboid = (options) => {\n const defaults = {\n center: [0, 0, 0],\n size: [2, 2, 2]\n }\n const { center, size } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 3)) throw new Error('center must be an array of X, Y and Z values')\n if (!isNumberArray(size, 3)) throw new Error('size must be an array of width, depth and height values')\n if (!size.every((n) => n >= 0)) throw new Error('size values must be positive')\n\n // if any size is zero return empty geometry\n if (size[0] === 0 || size[1] === 0 || size[2] === 0) return geom3.create()\n\n const result = geom3.create(\n // adjust a basic shape to size\n [\n [[0, 4, 6, 2], [-1, 0, 0]],\n [[1, 3, 7, 5], [+1, 0, 0]],\n [[0, 1, 5, 4], [0, -1, 0]],\n [[2, 6, 7, 3], [0, +1, 0]],\n [[0, 2, 3, 1], [0, 0, -1]],\n [[4, 5, 7, 6], [0, 0, +1]]\n ].map((info) => {\n const points = info[0].map((i) => {\n const pos = [\n center[0] + (size[0] / 2) * (2 * !!(i & 1) - 1),\n center[1] + (size[1] / 2) * (2 * !!(i & 2) - 1),\n center[2] + (size[2] / 2) * (2 * !!(i & 4) - 1)\n ]\n return pos\n })\n return poly3.create(points)\n })\n )\n return result\n}\n\nmodule.exports = cuboid\n","const geom3 = require('../geometries/geom3')\n\nconst cylinderElliptic = require('./cylinderElliptic')\n\nconst { isGTE } = require('./commonChecks')\n\n/**\n * Construct a Z axis-aligned cylinder in three dimensional space.\n * @see [cylinderElliptic]{@link module:modeling/primitives.cylinderElliptic} for more options\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0,0]] - center of cylinder\n * @param {Number} [options.height=2] - height of cylinder\n * @param {Number} [options.radius=1] - radius of cylinder (at both start and end)\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @returns {geom3} new geometry\n * @alias module:modeling/primitives.cylinder\n *\n * @example\n * let myshape = cylinder({height: 2, radius: 10})\n */\nconst cylinder = (options) => {\n const defaults = {\n center: [0, 0, 0],\n height: 2,\n radius: 1,\n segments: 32\n }\n const { center, height, radius, segments } = Object.assign({}, defaults, options)\n\n if (!isGTE(radius, 0)) throw new Error('radius must be positive')\n\n // if size is zero return empty geometry\n if (height === 0 || radius === 0) return geom3.create()\n\n const newoptions = {\n center,\n height,\n startRadius: [radius, radius],\n endRadius: [radius, radius],\n segments\n }\n\n return cylinderElliptic(newoptions)\n}\n\nmodule.exports = cylinder\n","const { EPS, TAU } = require('../maths/constants')\n\nconst vec3 = require('../maths/vec3')\n\nconst geom3 = require('../geometries/geom3')\nconst poly3 = require('../geometries/poly3')\n\nconst { sin, cos } = require('../maths/utils/trigonometry')\n\nconst { isGT, isGTE, isNumberArray } = require('./commonChecks')\n\n/**\n * Construct a Z axis-aligned elliptic cylinder in three dimensional space.\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0,0]] - center of cylinder\n * @param {Number} [options.height=2] - height of cylinder\n * @param {Array} [options.startRadius=[1,1]] - radius of rounded start, must be two dimensional array\n * @param {Number} [options.startAngle=0] - start angle of cylinder, in radians\n * @param {Array} [options.endRadius=[1,1]] - radius of rounded end, must be two dimensional array\n * @param {Number} [options.endAngle=TAU] - end angle of cylinder, in radians\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @returns {geom3} new geometry\n * @alias module:modeling/primitives.cylinderElliptic\n *\n * @example\n * let myshape = cylinderElliptic({height: 2, startRadius: [10,5], endRadius: [8,3]})\n */\nconst cylinderElliptic = (options) => {\n const defaults = {\n center: [0, 0, 0],\n height: 2,\n startRadius: [1, 1],\n startAngle: 0,\n endRadius: [1, 1],\n endAngle: TAU,\n segments: 32\n }\n let { center, height, startRadius, startAngle, endRadius, endAngle, segments } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 3)) throw new Error('center must be an array of X, Y and Z values')\n if (!isGT(height, 0)) throw new Error('height must be greater then zero')\n if (!isNumberArray(startRadius, 2)) throw new Error('startRadius must be an array of X and Y values')\n if (!startRadius.every((n) => n >= 0)) throw new Error('startRadius values must be positive')\n if (!isNumberArray(endRadius, 2)) throw new Error('endRadius must be an array of X and Y values')\n if (!endRadius.every((n) => n >= 0)) throw new Error('endRadius values must be positive')\n if (endRadius.every((n) => n === 0) && startRadius.every((n) => n === 0)) throw new Error('at least one radius must be positive')\n if (!isGTE(startAngle, 0)) throw new Error('startAngle must be positive')\n if (!isGTE(endAngle, 0)) throw new Error('endAngle must be positive')\n if (!isGTE(segments, 4)) throw new Error('segments must be four or more')\n\n startAngle = startAngle % TAU\n endAngle = endAngle % TAU\n\n let rotation = TAU\n if (startAngle < endAngle) {\n rotation = endAngle - startAngle\n }\n if (startAngle > endAngle) {\n rotation = endAngle + (TAU - startAngle)\n }\n\n const minradius = Math.min(startRadius[0], startRadius[1], endRadius[0], endRadius[1])\n const minangle = Math.acos(((minradius * minradius) + (minradius * minradius) - (EPS * EPS)) /\n (2 * minradius * minradius))\n if (rotation < minangle) throw new Error('startAngle and endAngle do not define a significant rotation')\n\n const slices = Math.floor(segments * (rotation / TAU))\n\n const start = vec3.fromValues(0, 0, -(height / 2))\n const end = vec3.fromValues(0, 0, height / 2)\n const ray = vec3.subtract(vec3.create(), end, start)\n\n const axisX = vec3.fromValues(1, 0, 0)\n const axisY = vec3.fromValues(0, 1, 0)\n\n const v1 = vec3.create()\n const v2 = vec3.create()\n const v3 = vec3.create()\n const point = (stack, slice, radius) => {\n const angle = slice * rotation + startAngle\n vec3.scale(v1, axisX, radius[0] * cos(angle))\n vec3.scale(v2, axisY, radius[1] * sin(angle))\n vec3.add(v1, v1, v2)\n\n vec3.scale(v3, ray, stack)\n vec3.add(v3, v3, start)\n return vec3.add(vec3.create(), v1, v3)\n }\n\n // adjust the points to center\n const fromPoints = (...points) => {\n const newpoints = points.map((point) => vec3.add(vec3.create(), point, center))\n return poly3.create(newpoints)\n }\n\n const polygons = []\n for (let i = 0; i < slices; i++) {\n const t0 = i / slices\n let t1 = (i + 1) / slices\n // fix rounding error when rotating TAU radians\n if (rotation === TAU && i === slices - 1) t1 = 0\n\n if (endRadius[0] === startRadius[0] && endRadius[1] === startRadius[1]) {\n polygons.push(fromPoints(start, point(0, t1, endRadius), point(0, t0, endRadius)))\n polygons.push(fromPoints(point(0, t1, endRadius), point(1, t1, endRadius), point(1, t0, endRadius), point(0, t0, endRadius)))\n polygons.push(fromPoints(end, point(1, t0, endRadius), point(1, t1, endRadius)))\n } else {\n if (startRadius[0] > 0 && startRadius[1] > 0) {\n polygons.push(fromPoints(start, point(0, t1, startRadius), point(0, t0, startRadius)))\n }\n if (startRadius[0] > 0 || startRadius[1] > 0) {\n polygons.push(fromPoints(point(0, t0, startRadius), point(0, t1, startRadius), point(1, t0, endRadius)))\n }\n if (endRadius[0] > 0 && endRadius[1] > 0) {\n polygons.push(fromPoints(end, point(1, t0, endRadius), point(1, t1, endRadius)))\n }\n if (endRadius[0] > 0 || endRadius[1] > 0) {\n polygons.push(fromPoints(point(1, t0, endRadius), point(0, t1, startRadius), point(1, t1, endRadius)))\n }\n }\n }\n if (rotation < TAU) {\n polygons.push(fromPoints(start, point(0, 0, startRadius), end))\n polygons.push(fromPoints(point(0, 0, startRadius), point(1, 0, endRadius), end))\n polygons.push(fromPoints(start, end, point(0, 1, startRadius)))\n polygons.push(fromPoints(point(0, 1, startRadius), end, point(1, 1, endRadius)))\n }\n const result = geom3.create(polygons)\n return result\n}\n\nmodule.exports = cylinderElliptic\n","const { EPS, TAU } = require('../maths/constants')\n\nconst vec2 = require('../maths/vec2')\n\nconst geom2 = require('../geometries/geom2')\n\nconst { sin, cos } = require('../maths/utils/trigonometry')\n\nconst { isGTE, isNumberArray } = require('./commonChecks')\n\n/**\n * Construct an axis-aligned ellipse in two dimensional space.\n * @see https://en.wikipedia.org/wiki/Ellipse\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0]] - center of ellipse\n * @param {Array} [options.radius=[1,1]] - radius of ellipse, along X and Y\n * @param {Number} [options.startAngle=0] - start angle of ellipse, in radians\n * @param {Number} [options.endAngle=TAU] - end angle of ellipse, in radians\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @returns {geom2} new 2D geometry\n * @alias module:modeling/primitives.ellipse\n * @example\n * let myshape = ellipse({radius: [5,10]})\n */\nconst ellipse = (options) => {\n const defaults = {\n center: [0, 0],\n radius: [1, 1],\n startAngle: 0,\n endAngle: TAU,\n segments: 32\n }\n let { center, radius, startAngle, endAngle, segments } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 2)) throw new Error('center must be an array of X and Y values')\n if (!isNumberArray(radius, 2)) throw new Error('radius must be an array of X and Y values')\n if (!radius.every((n) => n >= 0)) throw new Error('radius values must be positive')\n if (!isGTE(startAngle, 0)) throw new Error('startAngle must be positive')\n if (!isGTE(endAngle, 0)) throw new Error('endAngle must be positive')\n if (!isGTE(segments, 3)) throw new Error('segments must be three or more')\n\n // if any radius is zero return empty geometry\n if (radius[0] === 0 || radius[1] === 0) return geom2.create()\n\n startAngle = startAngle % TAU\n endAngle = endAngle % TAU\n\n let rotation = TAU\n if (startAngle < endAngle) {\n rotation = endAngle - startAngle\n }\n if (startAngle > endAngle) {\n rotation = endAngle + (TAU - startAngle)\n }\n\n const minradius = Math.min(radius[0], radius[1])\n const minangle = Math.acos(((minradius * minradius) + (minradius * minradius) - (EPS * EPS)) /\n (2 * minradius * minradius))\n if (rotation < minangle) throw new Error('startAngle and endAngle do not define a significant rotation')\n\n segments = Math.floor(segments * (rotation / TAU))\n\n const centerv = vec2.clone(center)\n const step = rotation / segments // radians per segment\n\n const points = []\n segments = (rotation < TAU) ? segments + 1 : segments\n for (let i = 0; i < segments; i++) {\n const angle = (step * i) + startAngle\n const point = vec2.fromValues(radius[0] * cos(angle), radius[1] * sin(angle))\n vec2.add(point, centerv, point)\n points.push(point)\n }\n if (rotation < TAU) points.push(centerv)\n return geom2.fromPoints(points)\n}\n\nmodule.exports = ellipse\n","const { TAU } = require('../maths/constants')\nconst vec3 = require('../maths/vec3')\n\nconst geom3 = require('../geometries/geom3')\nconst poly3 = require('../geometries/poly3')\n\nconst { sin, cos } = require('../maths/utils/trigonometry')\n\nconst { isGTE, isNumberArray } = require('./commonChecks')\n\n/**\n * Construct an axis-aligned ellipsoid in three dimensional space.\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0,0]] - center of ellipsoid\n * @param {Array} [options.radius=[1,1,1]] - radius of ellipsoid, along X, Y and Z\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @param {Array} [options.axes] - an array with three vectors for the x, y and z base vectors\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.ellipsoid\n *\n * @example\n * let myshape = ellipsoid({radius: [5, 10, 20]})\n*/\nconst ellipsoid = (options) => {\n const defaults = {\n center: [0, 0, 0],\n radius: [1, 1, 1],\n segments: 32,\n axes: [[1, 0, 0], [0, -1, 0], [0, 0, 1]]\n }\n const { center, radius, segments, axes } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 3)) throw new Error('center must be an array of X, Y and Z values')\n if (!isNumberArray(radius, 3)) throw new Error('radius must be an array of X, Y and Z values')\n if (!radius.every((n) => n >= 0)) throw new Error('radius values must be positive')\n if (!isGTE(segments, 4)) throw new Error('segments must be four or more')\n\n // if any radius is zero return empty geometry\n if (radius[0] === 0 || radius[1] === 0 || radius[2] === 0) return geom3.create()\n\n const xvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), axes[0]), radius[0])\n const yvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), axes[1]), radius[1])\n const zvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), axes[2]), radius[2])\n\n const qsegments = Math.round(segments / 4)\n let prevcylinderpoint\n const polygons = []\n const p1 = vec3.create()\n const p2 = vec3.create()\n for (let slice1 = 0; slice1 <= segments; slice1++) {\n const angle = TAU * slice1 / segments\n const cylinderpoint = vec3.add(vec3.create(), vec3.scale(p1, xvector, cos(angle)), vec3.scale(p2, yvector, sin(angle)))\n if (slice1 > 0) {\n let prevcospitch, prevsinpitch\n for (let slice2 = 0; slice2 <= qsegments; slice2++) {\n const pitch = TAU / 4 * slice2 / qsegments\n const cospitch = cos(pitch)\n const sinpitch = sin(pitch)\n if (slice2 > 0) {\n let points = []\n let point\n point = vec3.subtract(vec3.create(), vec3.scale(p1, prevcylinderpoint, prevcospitch), vec3.scale(p2, zvector, prevsinpitch))\n points.push(vec3.add(point, point, center))\n point = vec3.subtract(vec3.create(), vec3.scale(p1, cylinderpoint, prevcospitch), vec3.scale(p2, zvector, prevsinpitch))\n points.push(vec3.add(point, point, center))\n if (slice2 < qsegments) {\n point = vec3.subtract(vec3.create(), vec3.scale(p1, cylinderpoint, cospitch), vec3.scale(p2, zvector, sinpitch))\n points.push(vec3.add(point, point, center))\n }\n point = vec3.subtract(vec3.create(), vec3.scale(p1, prevcylinderpoint, cospitch), vec3.scale(p2, zvector, sinpitch))\n points.push(vec3.add(point, point, center))\n\n polygons.push(poly3.create(points))\n\n points = []\n point = vec3.add(vec3.create(), vec3.scale(p1, prevcylinderpoint, prevcospitch), vec3.scale(p2, zvector, prevsinpitch))\n points.push(vec3.add(vec3.create(), center, point))\n point = vec3.add(point, vec3.scale(p1, cylinderpoint, prevcospitch), vec3.scale(p2, zvector, prevsinpitch))\n points.push(vec3.add(vec3.create(), center, point))\n if (slice2 < qsegments) {\n point = vec3.add(point, vec3.scale(p1, cylinderpoint, cospitch), vec3.scale(p2, zvector, sinpitch))\n points.push(vec3.add(vec3.create(), center, point))\n }\n point = vec3.add(point, vec3.scale(p1, prevcylinderpoint, cospitch), vec3.scale(p2, zvector, sinpitch))\n points.push(vec3.add(vec3.create(), center, point))\n points.reverse()\n\n polygons.push(poly3.create(points))\n }\n prevcospitch = cospitch\n prevsinpitch = sinpitch\n }\n }\n prevcylinderpoint = cylinderpoint\n }\n return geom3.create(polygons)\n}\n\nmodule.exports = ellipsoid\n","const mat4 = require('../maths/mat4')\nconst vec3 = require('../maths/vec3')\n\nconst geom3 = require('../geometries/geom3')\n\nconst polyhedron = require('./polyhedron')\n\nconst { isGTE } = require('./commonChecks')\n\n/**\n * Construct a geodesic sphere based on icosahedron symmetry.\n * @param {Object} [options] - options for construction\n * @param {Number} [options.radius=1] - target radius of sphere\n * @param {Number} [options.frequency=6] - subdivision frequency per face, multiples of 6\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.geodesicSphere\n *\n * @example\n * let myshape = geodesicSphere({radius: 15, frequency: 18})\n */\nconst geodesicSphere = (options) => {\n const defaults = {\n radius: 1,\n frequency: 6\n }\n let { radius, frequency } = Object.assign({}, defaults, options)\n\n if (!isGTE(radius, 0)) throw new Error('radius must be positive')\n if (!isGTE(frequency, 6)) throw new Error('frequency must be six or more')\n\n // if radius is zero return empty geometry\n if (radius === 0) return geom3.create()\n\n // adjust the frequency to base 6\n frequency = Math.floor(frequency / 6)\n\n const ci = [ // hard-coded data of icosahedron (20 faces, all triangles)\n [0.850651, 0.000000, -0.525731],\n [0.850651, -0.000000, 0.525731],\n [-0.850651, -0.000000, 0.525731],\n [-0.850651, 0.000000, -0.525731],\n [0.000000, -0.525731, 0.850651],\n [0.000000, 0.525731, 0.850651],\n [0.000000, 0.525731, -0.850651],\n [0.000000, -0.525731, -0.850651],\n [-0.525731, -0.850651, -0.000000],\n [0.525731, -0.850651, -0.000000],\n [0.525731, 0.850651, 0.000000],\n [-0.525731, 0.850651, 0.000000]]\n\n const ti = [[0, 9, 1], [1, 10, 0], [6, 7, 0], [10, 6, 0], [7, 9, 0], [5, 1, 4], [4, 1, 9], [5, 10, 1], [2, 8, 3], [3, 11, 2], [2, 5, 4],\n [4, 8, 2], [2, 11, 5], [3, 7, 6], [6, 11, 3], [8, 7, 3], [9, 8, 4], [11, 10, 5], [10, 11, 6], [8, 9, 7]]\n\n const geodesicSubDivide = (p, frequency, offset) => {\n const p1 = p[0]\n const p2 = p[1]\n const p3 = p[2]\n let n = offset\n const c = []\n const f = []\n\n // p3\n // /\\\n // /__\\ frequency = 3\n // i /\\ /\\\n // /__\\/__\\ total triangles = 9 (frequency*frequency)\n // /\\ /\\ /\\\n // 0/__\\/__\\/__\\\n // p1 0 j p2\n\n for (let i = 0; i < frequency; i++) {\n for (let j = 0; j < frequency - i; j++) {\n const t0 = i / frequency\n const t1 = (i + 1) / frequency\n const s0 = j / (frequency - i)\n const s1 = (j + 1) / (frequency - i)\n const s2 = frequency - i - 1 ? j / (frequency - i - 1) : 1\n const q = []\n\n q[0] = mix3(mix3(p1, p2, s0), p3, t0)\n q[1] = mix3(mix3(p1, p2, s1), p3, t0)\n q[2] = mix3(mix3(p1, p2, s2), p3, t1)\n\n // -- normalize\n for (let k = 0; k < 3; k++) {\n const r = vec3.length(q[k])\n for (let l = 0; l < 3; l++) {\n q[k][l] /= r\n }\n }\n c.push(q[0], q[1], q[2])\n f.push([n, n + 1, n + 2]); n += 3\n\n if (j < frequency - i - 1) {\n const s3 = frequency - i - 1 ? (j + 1) / (frequency - i - 1) : 1\n q[0] = mix3(mix3(p1, p2, s1), p3, t0)\n q[1] = mix3(mix3(p1, p2, s3), p3, t1)\n q[2] = mix3(mix3(p1, p2, s2), p3, t1)\n\n // -- normalize\n for (let k = 0; k < 3; k++) {\n const r = vec3.length(q[k])\n for (let l = 0; l < 3; l++) {\n q[k][l] /= r\n }\n }\n c.push(q[0], q[1], q[2])\n f.push([n, n + 1, n + 2]); n += 3\n }\n }\n }\n return { points: c, triangles: f, offset: n }\n }\n\n const mix3 = (a, b, f) => {\n const _f = 1 - f\n const c = []\n for (let i = 0; i < 3; i++) {\n c[i] = a[i] * _f + b[i] * f\n }\n return c\n }\n\n let points = []\n let faces = []\n let offset = 0\n\n for (let i = 0; i < ti.length; i++) {\n const g = geodesicSubDivide([ci[ti[i][0]], ci[ti[i][1]], ci[ti[i][2]]], frequency, offset)\n points = points.concat(g.points)\n faces = faces.concat(g.triangles)\n offset = g.offset\n }\n\n let geometry = polyhedron({ points: points, faces: faces, orientation: 'inward' })\n if (radius !== 1) geometry = geom3.transform(mat4.fromScaling(mat4.create(), [radius, radius, radius]), geometry)\n return geometry\n}\n\nmodule.exports = geodesicSphere\n","/**\n * Primitives provide the building blocks for complex parts.\n * Each primitive is a geometrical object that can be described mathematically, and therefore precise.\n * Primitives can be logically combined, transformed, extruded, etc.\n * @module modeling/primitives\n * @example\n * const { cube, ellipse, star } = require('@jscad/modeling').primitives\n */\nmodule.exports = {\n arc: require('./arc'),\n circle: require('./circle'),\n cube: require('./cube'),\n cuboid: require('./cuboid'),\n cylinder: require('./cylinder'),\n cylinderElliptic: require('./cylinderElliptic'),\n ellipse: require('./ellipse'),\n ellipsoid: require('./ellipsoid'),\n geodesicSphere: require('./geodesicSphere'),\n line: require('./line'),\n polygon: require('./polygon'),\n polyhedron: require('./polyhedron'),\n rectangle: require('./rectangle'),\n roundedCuboid: require('./roundedCuboid'),\n roundedCylinder: require('./roundedCylinder'),\n roundedRectangle: require('./roundedRectangle'),\n sphere: require('./sphere'),\n square: require('./square'),\n star: require('./star'),\n torus: require('./torus'),\n triangle: require('./triangle')\n}\n","const path2 = require('../geometries/path2')\n\n/**\n * Construct a new line in two dimensional space from the given points.\n * The points must be provided as an array, where each element is a 2D point.\n * @param {Array} points - array of points from which to create the path\n * @returns {path2} new 2D path\n * @alias module:modeling/primitives.line\n *\n * @example\n * let myshape = line([[10, 10], [-10, 10]])\n */\nconst line = (points) => {\n if (!Array.isArray(points)) throw new Error('points must be an array')\n\n return path2.fromPoints({}, points)\n}\n\nmodule.exports = line\n","const geom2 = require('../geometries/geom2')\n\n/**\n * Construct a polygon in two dimensional space from a list of points, or a list of points and paths.\n * NOTE: The ordering of points is VERY IMPORTANT.\n * @param {Object} options - options for construction\n * @param {Array} options.points - points of the polygon : either flat or nested array of 2D points\n * @param {Array} [options.paths] - paths of the polygon : either flat or nested array of point indexes\n * @returns {geom2} new 2D geometry\n * @alias module:modeling/primitives.polygon\n *\n * @example\n * let roof = [[10,11], [0,11], [5,20]]\n * let wall = [[0,0], [10,0], [10,10], [0,10]]\n *\n * let poly = polygon({ points: roof })\n * or\n * let poly = polygon({ points: [roof, wall] })\n * or\n * let poly = polygon({ points: roof, paths: [0, 1, 2] })\n * or\n * let poly = polygon({ points: [roof, wall], paths: [[0, 1, 2], [3, 4, 5, 6]] })\n */\nconst polygon = (options) => {\n const defaults = {\n points: [],\n paths: []\n }\n const { points, paths } = Object.assign({}, defaults, options)\n\n if (!(Array.isArray(points) && Array.isArray(paths))) throw new Error('points and paths must be arrays')\n\n let listofpolys = points\n if (Array.isArray(points[0])) {\n if (!Array.isArray(points[0][0])) {\n // points is an array of something... convert to list\n listofpolys = [points]\n }\n }\n\n listofpolys.forEach((list, i) => {\n if (!Array.isArray(list)) throw new Error('list of points ' + i + ' must be an array')\n if (list.length < 3) throw new Error('list of points ' + i + ' must contain three or more points')\n list.forEach((point, j) => {\n if (!Array.isArray(point)) throw new Error('list of points ' + i + ', point ' + j + ' must be an array')\n if (point.length < 2) throw new Error('list of points ' + i + ', point ' + j + ' must contain by X and Y values')\n })\n })\n\n let listofpaths = paths\n if (paths.length === 0) {\n // create a list of paths based on the points\n let count = 0\n listofpaths = listofpolys.map((list) => list.map((point) => count++))\n }\n\n // flatten the listofpoints for indexed access\n const allpoints = []\n listofpolys.forEach((list) => list.forEach((point) => allpoints.push(point)))\n\n let sides = []\n listofpaths.forEach((path) => {\n const setofpoints = path.map((index) => allpoints[index])\n const geometry = geom2.fromPoints(setofpoints)\n sides = sides.concat(geom2.toSides(geometry))\n })\n return geom2.create(sides)\n}\n\nmodule.exports = polygon\n","const geom3 = require('../geometries/geom3')\nconst poly3 = require('../geometries/poly3')\n\nconst { isNumberArray } = require('./commonChecks')\n\n/**\n * Construct a polyhedron in three dimensional space from the given set of 3D points and faces.\n * The faces can define outward or inward facing polygons (orientation).\n * However, each face must define a counter clockwise rotation of points which follows the right hand rule.\n * @param {Object} options - options for construction\n * @param {Array} options.points - list of points in 3D space\n * @param {Array} options.faces - list of faces, where each face is a set of indexes into the points\n * @param {Array} [options.colors=undefined] - list of RGBA colors to apply to each face\n * @param {String} [options.orientation='outward'] - orientation of faces\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.polyhedron\n *\n * @example\n * let mypoints = [ [10, 10, 0], [10, -10, 0], [-10, -10, 0], [-10, 10, 0], [0, 0, 10] ]\n * let myfaces = [ [0, 1, 4], [1, 2, 4], [2, 3, 4], [3, 0, 4], [1, 0, 3], [2, 1, 3] ]\n * let myshape = polyhedron({points: mypoint, faces: myfaces, orientation: 'inward'})\n */\nconst polyhedron = (options) => {\n const defaults = {\n points: [],\n faces: [],\n colors: undefined,\n orientation: 'outward'\n }\n const { points, faces, colors, orientation } = Object.assign({}, defaults, options)\n\n if (!(Array.isArray(points) && Array.isArray(faces))) {\n throw new Error('points and faces must be arrays')\n }\n if (points.length < 3) {\n throw new Error('three or more points are required')\n }\n if (faces.length < 1) {\n throw new Error('one or more faces are required')\n }\n if (colors) {\n if (!Array.isArray(colors)) {\n throw new Error('colors must be an array')\n }\n if (colors.length !== faces.length) {\n throw new Error('faces and colors must have the same length')\n }\n }\n points.forEach((point, i) => {\n if (!isNumberArray(point, 3)) throw new Error(`point ${i} must be an array of X, Y, Z values`)\n })\n faces.forEach((face, i) => {\n if (face.length < 3) throw new Error(`face ${i} must contain 3 or more indexes`)\n if (!isNumberArray(face, face.length)) throw new Error(`face ${i} must be an array of numbers`)\n })\n\n // invert the faces if orientation is inwards, as all internals expect outwarding facing polygons\n if (orientation !== 'outward') {\n faces.forEach((face) => face.reverse())\n }\n\n const polygons = faces.map((face, findex) => {\n const polygon = poly3.create(face.map((pindex) => points[pindex]))\n if (colors && colors[findex]) polygon.color = colors[findex]\n return polygon\n })\n\n return geom3.create(polygons)\n}\n\nmodule.exports = polyhedron\n","const vec2 = require('../maths/vec2')\n\nconst geom2 = require('../geometries/geom2')\n\nconst { isNumberArray } = require('./commonChecks')\n\n/**\n * Construct an axis-aligned rectangle in two dimensional space with four sides at right angles.\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0]] - center of rectangle\n * @param {Array} [options.size=[2,2]] - dimension of rectangle, width and length\n * @returns {geom2} new 2D geometry\n * @alias module:modeling/primitives.rectangle\n *\n * @example\n * let myshape = rectangle({size: [10, 20]})\n */\nconst rectangle = (options) => {\n const defaults = {\n center: [0, 0],\n size: [2, 2]\n }\n const { center, size } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 2)) throw new Error('center must be an array of X and Y values')\n if (!isNumberArray(size, 2)) throw new Error('size must be an array of X and Y values')\n if (!size.every((n) => n >= 0)) throw new Error('size values must be positive')\n\n // if any size is zero return empty geometry\n if (size[0] === 0 || size[1] === 0) return geom2.create()\n\n const point = [size[0] / 2, size[1] / 2]\n const pswap = [point[0], -point[1]]\n\n const points = [\n vec2.subtract(vec2.create(), center, point),\n vec2.add(vec2.create(), center, pswap),\n vec2.add(vec2.create(), center, point),\n vec2.subtract(vec2.create(), center, pswap)\n ]\n return geom2.fromPoints(points)\n}\n\nmodule.exports = rectangle\n","const { EPS, TAU } = require('../maths/constants')\n\nconst vec2 = require('../maths/vec2')\nconst vec3 = require('../maths/vec3')\n\nconst geom3 = require('../geometries/geom3')\nconst poly3 = require('../geometries/poly3')\n\nconst { sin, cos } = require('../maths/utils/trigonometry')\n\nconst { isGTE, isNumberArray } = require('./commonChecks')\nconst cuboid = require('./cuboid')\n\nconst createCorners = (center, size, radius, segments, slice, positive) => {\n const pitch = (TAU / 4) * slice / segments\n const cospitch = cos(pitch)\n const sinpitch = sin(pitch)\n\n const layersegments = segments - slice\n let layerradius = radius * cospitch\n let layeroffset = size[2] - (radius - (radius * sinpitch))\n if (!positive) layeroffset = (radius - (radius * sinpitch)) - size[2]\n\n layerradius = layerradius > EPS ? layerradius : 0\n\n const corner0 = vec3.add(vec3.create(), center, [size[0] - radius, size[1] - radius, layeroffset])\n const corner1 = vec3.add(vec3.create(), center, [radius - size[0], size[1] - radius, layeroffset])\n const corner2 = vec3.add(vec3.create(), center, [radius - size[0], radius - size[1], layeroffset])\n const corner3 = vec3.add(vec3.create(), center, [size[0] - radius, radius - size[1], layeroffset])\n const corner0Points = []\n const corner1Points = []\n const corner2Points = []\n const corner3Points = []\n for (let i = 0; i <= layersegments; i++) {\n const radians = layersegments > 0 ? TAU / 4 * i / layersegments : 0\n const point2d = vec2.fromAngleRadians(vec2.create(), radians)\n vec2.scale(point2d, point2d, layerradius)\n const point3d = vec3.fromVec2(vec3.create(), point2d)\n corner0Points.push(vec3.add(vec3.create(), corner0, point3d))\n vec3.rotateZ(point3d, point3d, [0, 0, 0], TAU / 4)\n corner1Points.push(vec3.add(vec3.create(), corner1, point3d))\n vec3.rotateZ(point3d, point3d, [0, 0, 0], TAU / 4)\n corner2Points.push(vec3.add(vec3.create(), corner2, point3d))\n vec3.rotateZ(point3d, point3d, [0, 0, 0], TAU / 4)\n corner3Points.push(vec3.add(vec3.create(), corner3, point3d))\n }\n if (!positive) {\n corner0Points.reverse()\n corner1Points.reverse()\n corner2Points.reverse()\n corner3Points.reverse()\n return [corner3Points, corner2Points, corner1Points, corner0Points]\n }\n return [corner0Points, corner1Points, corner2Points, corner3Points]\n}\n\nconst stitchCorners = (previousCorners, currentCorners) => {\n const polygons = []\n for (let i = 0; i < previousCorners.length; i++) {\n const previous = previousCorners[i]\n const current = currentCorners[i]\n for (let j = 0; j < (previous.length - 1); j++) {\n polygons.push(poly3.create([previous[j], previous[j + 1], current[j]]))\n\n if (j < (current.length - 1)) {\n polygons.push(poly3.create([current[j], previous[j + 1], current[j + 1]]))\n }\n }\n }\n return polygons\n}\n\nconst stitchWalls = (previousCorners, currentCorners) => {\n const polygons = []\n for (let i = 0; i < previousCorners.length; i++) {\n let previous = previousCorners[i]\n let current = currentCorners[i]\n const p0 = previous[previous.length - 1]\n const c0 = current[current.length - 1]\n\n const j = (i + 1) % previousCorners.length\n previous = previousCorners[j]\n current = currentCorners[j]\n const p1 = previous[0]\n const c1 = current[0]\n\n polygons.push(poly3.create([p0, p1, c1, c0]))\n }\n return polygons\n}\n\nconst stitchSides = (bottomCorners, topCorners) => {\n // make a copy and reverse the bottom corners\n bottomCorners = [bottomCorners[3], bottomCorners[2], bottomCorners[1], bottomCorners[0]]\n bottomCorners = bottomCorners.map((corner) => corner.slice().reverse())\n\n const bottomPoints = []\n bottomCorners.forEach((corner) => {\n corner.forEach((point) => bottomPoints.push(point))\n })\n\n const topPoints = []\n topCorners.forEach((corner) => {\n corner.forEach((point) => topPoints.push(point))\n })\n\n const polygons = []\n for (let i = 0; i < topPoints.length; i++) {\n const j = (i + 1) % topPoints.length\n polygons.push(poly3.create([bottomPoints[i], bottomPoints[j], topPoints[j], topPoints[i]]))\n }\n return polygons\n}\n\n/**\n * Construct an axis-aligned solid cuboid in three dimensional space with rounded corners.\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0,0]] - center of rounded cube\n * @param {Array} [options.size=[2,2,2]] - dimension of rounded cube; width, depth, height\n * @param {Number} [options.roundRadius=0.2] - radius of rounded edges\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.roundedCuboid\n *\n * @example\n * let mycube = roundedCuboid({size: [10, 20, 10], roundRadius: 2, segments: 16})\n */\nconst roundedCuboid = (options) => {\n const defaults = {\n center: [0, 0, 0],\n size: [2, 2, 2],\n roundRadius: 0.2,\n segments: 32\n }\n let { center, size, roundRadius, segments } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 3)) throw new Error('center must be an array of X, Y and Z values')\n if (!isNumberArray(size, 3)) throw new Error('size must be an array of X, Y and Z values')\n if (!size.every((n) => n >= 0)) throw new Error('size values must be positive')\n if (!isGTE(roundRadius, 0)) throw new Error('roundRadius must be positive')\n if (!isGTE(segments, 4)) throw new Error('segments must be four or more')\n\n // if any size is zero return empty geometry\n if (size[0] === 0 || size[1] === 0 || size[2] === 0) return geom3.create()\n\n // if roundRadius is zero, return cuboid\n if (roundRadius === 0) return cuboid({ center, size })\n\n size = size.map((v) => v / 2) // convert to radius\n\n if (roundRadius > (size[0] - EPS) ||\n roundRadius > (size[1] - EPS) ||\n roundRadius > (size[2] - EPS)) throw new Error('roundRadius must be smaller then the radius of all dimensions')\n\n segments = Math.floor(segments / 4)\n\n let prevCornersPos = null\n let prevCornersNeg = null\n let polygons = []\n for (let slice = 0; slice <= segments; slice++) {\n const cornersPos = createCorners(center, size, roundRadius, segments, slice, true)\n const cornersNeg = createCorners(center, size, roundRadius, segments, slice, false)\n\n if (slice === 0) {\n polygons = polygons.concat(stitchSides(cornersNeg, cornersPos))\n }\n\n if (prevCornersPos) {\n polygons = polygons.concat(stitchCorners(prevCornersPos, cornersPos),\n stitchWalls(prevCornersPos, cornersPos))\n }\n if (prevCornersNeg) {\n polygons = polygons.concat(stitchCorners(prevCornersNeg, cornersNeg),\n stitchWalls(prevCornersNeg, cornersNeg))\n }\n\n if (slice === segments) {\n // add the top\n let points = cornersPos.map((corner) => corner[0])\n polygons.push(poly3.create(points))\n // add the bottom\n points = cornersNeg.map((corner) => corner[0])\n polygons.push(poly3.create(points))\n }\n\n prevCornersPos = cornersPos\n prevCornersNeg = cornersNeg\n }\n\n return geom3.create(polygons)\n}\n\nmodule.exports = roundedCuboid\n","const { EPS, TAU } = require('../maths/constants')\n\nconst vec3 = require('../maths/vec3')\n\nconst geom3 = require('../geometries/geom3')\nconst poly3 = require('../geometries/poly3')\n\nconst { sin, cos } = require('../maths/utils/trigonometry')\n\nconst { isGTE, isNumberArray } = require('./commonChecks')\nconst cylinder = require('./cylinder')\n\n/**\n * Construct a Z axis-aligned solid cylinder in three dimensional space with rounded ends.\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0,0]] - center of cylinder\n * @param {Number} [options.height=2] - height of cylinder\n * @param {Number} [options.radius=1] - radius of cylinder\n * @param {Number} [options.roundRadius=0.2] - radius of rounded edges\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.roundedCylinder\n *\n * @example\n * let myshape = roundedCylinder({ height: 10, radius: 2, roundRadius: 0.5 })\n */\nconst roundedCylinder = (options) => {\n const defaults = {\n center: [0, 0, 0],\n height: 2,\n radius: 1,\n roundRadius: 0.2,\n segments: 32\n }\n const { center, height, radius, roundRadius, segments } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 3)) throw new Error('center must be an array of X, Y and Z values')\n if (!isGTE(height, 0)) throw new Error('height must be positive')\n if (!isGTE(radius, 0)) throw new Error('radius must be positive')\n if (!isGTE(roundRadius, 0)) throw new Error('roundRadius must be positive')\n if (roundRadius > radius) throw new Error('roundRadius must be smaller then the radius')\n if (!isGTE(segments, 4)) throw new Error('segments must be four or more')\n\n // if size is zero return empty geometry\n if (height === 0 || radius === 0) return geom3.create()\n\n // if roundRadius is zero, return cylinder\n if (roundRadius === 0) return cylinder({ center, height, radius })\n\n const start = [0, 0, -(height / 2)]\n const end = [0, 0, height / 2]\n const direction = vec3.subtract(vec3.create(), end, start)\n const length = vec3.length(direction)\n\n if ((2 * roundRadius) > (length - EPS)) throw new Error('height must be larger than twice roundRadius')\n\n let defaultnormal\n if (Math.abs(direction[0]) > Math.abs(direction[1])) {\n defaultnormal = vec3.fromValues(0, 1, 0)\n } else {\n defaultnormal = vec3.fromValues(1, 0, 0)\n }\n\n const zvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), direction), roundRadius)\n const xvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), vec3.cross(vec3.create(), zvector, defaultnormal)), radius)\n const yvector = vec3.scale(vec3.create(), vec3.normalize(vec3.create(), vec3.cross(vec3.create(), xvector, zvector)), radius)\n\n vec3.add(start, start, zvector)\n vec3.subtract(end, end, zvector)\n\n const qsegments = Math.floor(0.25 * segments)\n\n const fromPoints = (points) => {\n // adjust the points to center\n const newpoints = points.map((point) => vec3.add(point, point, center))\n return poly3.create(newpoints)\n }\n\n const polygons = []\n const v1 = vec3.create()\n const v2 = vec3.create()\n let prevcylinderpoint\n for (let slice1 = 0; slice1 <= segments; slice1++) {\n const angle = TAU * slice1 / segments\n const cylinderpoint = vec3.add(vec3.create(), vec3.scale(v1, xvector, cos(angle)), vec3.scale(v2, yvector, sin(angle)))\n if (slice1 > 0) {\n // cylinder wall\n let points = []\n points.push(vec3.add(vec3.create(), start, cylinderpoint))\n points.push(vec3.add(vec3.create(), start, prevcylinderpoint))\n points.push(vec3.add(vec3.create(), end, prevcylinderpoint))\n points.push(vec3.add(vec3.create(), end, cylinderpoint))\n polygons.push(fromPoints(points))\n\n let prevcospitch, prevsinpitch\n for (let slice2 = 0; slice2 <= qsegments; slice2++) {\n const pitch = TAU / 4 * slice2 / qsegments\n const cospitch = cos(pitch)\n const sinpitch = sin(pitch)\n if (slice2 > 0) {\n // cylinder rounding, start\n points = []\n let point\n point = vec3.add(vec3.create(), start, vec3.subtract(v1, vec3.scale(v1, prevcylinderpoint, prevcospitch), vec3.scale(v2, zvector, prevsinpitch)))\n points.push(point)\n point = vec3.add(vec3.create(), start, vec3.subtract(v1, vec3.scale(v1, cylinderpoint, prevcospitch), vec3.scale(v2, zvector, prevsinpitch)))\n points.push(point)\n if (slice2 < qsegments) {\n point = vec3.add(vec3.create(), start, vec3.subtract(v1, vec3.scale(v1, cylinderpoint, cospitch), vec3.scale(v2, zvector, sinpitch)))\n points.push(point)\n }\n point = vec3.add(vec3.create(), start, vec3.subtract(v1, vec3.scale(v1, prevcylinderpoint, cospitch), vec3.scale(v2, zvector, sinpitch)))\n points.push(point)\n\n polygons.push(fromPoints(points))\n\n // cylinder rounding, end\n points = []\n point = vec3.add(vec3.create(), vec3.scale(v1, prevcylinderpoint, prevcospitch), vec3.scale(v2, zvector, prevsinpitch))\n vec3.add(point, point, end)\n points.push(point)\n point = vec3.add(vec3.create(), vec3.scale(v1, cylinderpoint, prevcospitch), vec3.scale(v2, zvector, prevsinpitch))\n vec3.add(point, point, end)\n points.push(point)\n if (slice2 < qsegments) {\n point = vec3.add(vec3.create(), vec3.scale(v1, cylinderpoint, cospitch), vec3.scale(v2, zvector, sinpitch))\n vec3.add(point, point, end)\n points.push(point)\n }\n point = vec3.add(vec3.create(), vec3.scale(v1, prevcylinderpoint, cospitch), vec3.scale(v2, zvector, sinpitch))\n vec3.add(point, point, end)\n points.push(point)\n points.reverse()\n\n polygons.push(fromPoints(points))\n }\n prevcospitch = cospitch\n prevsinpitch = sinpitch\n }\n }\n prevcylinderpoint = cylinderpoint\n }\n const result = geom3.create(polygons)\n return result\n}\n\nmodule.exports = roundedCylinder\n","const { EPS, TAU } = require('../maths/constants')\n\nconst vec2 = require('../maths/vec2')\n\nconst geom2 = require('../geometries/geom2')\n\nconst { isGTE, isNumberArray } = require('./commonChecks')\nconst rectangle = require('./rectangle')\n\n/**\n * Construct an axis-aligned rectangle in two dimensional space with rounded corners.\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0]] - center of rounded rectangle\n * @param {Array} [options.size=[2,2]] - dimension of rounded rectangle; width and length\n * @param {Number} [options.roundRadius=0.2] - round radius of corners\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @returns {geom2} new 2D geometry\n * @alias module:modeling/primitives.roundedRectangle\n *\n * @example\n * let myshape = roundedRectangle({size: [10, 20], roundRadius: 2})\n */\nconst roundedRectangle = (options) => {\n const defaults = {\n center: [0, 0],\n size: [2, 2],\n roundRadius: 0.2,\n segments: 32\n }\n let { center, size, roundRadius, segments } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 2)) throw new Error('center must be an array of X and Y values')\n if (!isNumberArray(size, 2)) throw new Error('size must be an array of X and Y values')\n if (!size.every((n) => n >= 0)) throw new Error('size values must be positive')\n if (!isGTE(roundRadius, 0)) throw new Error('roundRadius must be positive')\n if (!isGTE(segments, 4)) throw new Error('segments must be four or more')\n\n // if any size is zero return empty geometry\n if (size[0] === 0 || size[1] === 0) return geom2.create()\n\n // if roundRadius is zero, return rectangle\n if (roundRadius === 0) return rectangle({ center, size })\n\n size = size.map((v) => v / 2) // convert to radius\n\n if (roundRadius > (size[0] - EPS) ||\n roundRadius > (size[1] - EPS)) throw new Error('roundRadius must be smaller then the radius of all dimensions')\n\n const cornersegments = Math.floor(segments / 4)\n\n // create sets of points that define the corners\n const corner0 = vec2.add(vec2.create(), center, [size[0] - roundRadius, size[1] - roundRadius])\n const corner1 = vec2.add(vec2.create(), center, [roundRadius - size[0], size[1] - roundRadius])\n const corner2 = vec2.add(vec2.create(), center, [roundRadius - size[0], roundRadius - size[1]])\n const corner3 = vec2.add(vec2.create(), center, [size[0] - roundRadius, roundRadius - size[1]])\n const corner0Points = []\n const corner1Points = []\n const corner2Points = []\n const corner3Points = []\n for (let i = 0; i <= cornersegments; i++) {\n const radians = TAU / 4 * i / cornersegments\n const point = vec2.fromAngleRadians(vec2.create(), radians)\n vec2.scale(point, point, roundRadius)\n corner0Points.push(vec2.add(vec2.create(), corner0, point))\n vec2.rotate(point, point, vec2.create(), TAU / 4)\n corner1Points.push(vec2.add(vec2.create(), corner1, point))\n vec2.rotate(point, point, vec2.create(), TAU / 4)\n corner2Points.push(vec2.add(vec2.create(), corner2, point))\n vec2.rotate(point, point, vec2.create(), TAU / 4)\n corner3Points.push(vec2.add(vec2.create(), corner3, point))\n }\n\n return geom2.fromPoints(corner0Points.concat(corner1Points, corner2Points, corner3Points))\n}\n\nmodule.exports = roundedRectangle\n","const ellipsoid = require('./ellipsoid')\n\nconst { isGTE } = require('./commonChecks')\n\n/**\n * Construct a sphere in three dimensional space where all points are at the same distance from the center.\n * @see [ellipsoid]{@link module:modeling/primitives.ellipsoid} for more options\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0,0]] - center of sphere\n * @param {Number} [options.radius=1] - radius of sphere\n * @param {Number} [options.segments=32] - number of segments to create per full rotation\n * @param {Array} [options.axes] - an array with three vectors for the x, y and z base vectors\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.sphere\n *\n * @example\n * let myshape = sphere({radius: 5})\n */\nconst sphere = (options) => {\n const defaults = {\n center: [0, 0, 0],\n radius: 1,\n segments: 32,\n axes: [[1, 0, 0], [0, -1, 0], [0, 0, 1]]\n }\n let { center, radius, segments, axes } = Object.assign({}, defaults, options)\n\n if (!isGTE(radius, 0)) throw new Error('radius must be positive')\n\n radius = [radius, radius, radius]\n\n return ellipsoid({ center, radius, segments, axes })\n}\n\nmodule.exports = sphere\n","const rectangle = require('./rectangle')\n\nconst { isGTE } = require('./commonChecks')\n\n/**\n * Construct an axis-aligned square in two dimensional space with four equal sides at right angles.\n * @see [rectangle]{@link module:modeling/primitives.rectangle} for more options\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0]] - center of square\n * @param {Number} [options.size=2] - dimension of square\n * @returns {geom2} new 2D geometry\n * @alias module:modeling/primitives.square\n *\n * @example\n * let myshape = square({size: 10})\n */\nconst square = (options) => {\n const defaults = {\n center: [0, 0],\n size: 2\n }\n let { center, size } = Object.assign({}, defaults, options)\n\n if (!isGTE(size, 0)) throw new Error('size must be positive')\n\n size = [size, size]\n\n return rectangle({ center, size })\n}\n\nmodule.exports = square\n","const { TAU } = require('../maths/constants')\nconst vec2 = require('../maths/vec2')\n\nconst geom2 = require('../geometries/geom2')\n\nconst { isGT, isGTE, isNumberArray } = require('./commonChecks')\n\n// @see http://www.jdawiseman.com/papers/easymath/surds_star_inner_radius.html\nconst getRadiusRatio = (vertices, density) => {\n if (vertices > 0 && density > 1 && density < vertices / 2) {\n return Math.cos(Math.PI * density / vertices) / Math.cos(Math.PI * (density - 1) / vertices)\n }\n return 0\n}\n\nconst getPoints = (vertices, radius, startAngle, center) => {\n const a = TAU / vertices\n\n const points = []\n for (let i = 0; i < vertices; i++) {\n const point = vec2.fromAngleRadians(vec2.create(), a * i + startAngle)\n vec2.scale(point, point, radius)\n vec2.add(point, center, point)\n points.push(point)\n }\n return points\n}\n\n/**\n * Construct a star in two dimensional space.\n * @see https://en.wikipedia.org/wiki/Star_polygon\n * @param {Object} [options] - options for construction\n * @param {Array} [options.center=[0,0]] - center of star\n * @param {Number} [options.vertices=5] - number of vertices (P) on the star\n * @param {Number} [options.density=2] - density (Q) of star\n * @param {Number} [options.outerRadius=1] - outer radius of vertices\n * @param {Number} [options.innerRadius=0] - inner radius of vertices, or zero to calculate\n * @param {Number} [options.startAngle=0] - starting angle for first vertice, in radians\n * @returns {geom2} new 2D geometry\n * @alias module:modeling/primitives.star\n *\n * @example\n * let star1 = star({vertices: 8, outerRadius: 10}) // star with 8/2 density\n * let star2 = star({vertices: 12, outerRadius: 40, innerRadius: 20}) // star with given radius\n */\nconst star = (options) => {\n const defaults = {\n center: [0, 0],\n vertices: 5,\n outerRadius: 1,\n innerRadius: 0,\n density: 2,\n startAngle: 0\n }\n let { center, vertices, outerRadius, innerRadius, density, startAngle } = Object.assign({}, defaults, options)\n\n if (!isNumberArray(center, 2)) throw new Error('center must be an array of X and Y values')\n if (!isGTE(vertices, 2)) throw new Error('vertices must be two or more')\n if (!isGT(outerRadius, 0)) throw new Error('outerRadius must be greater than zero')\n if (!isGTE(innerRadius, 0)) throw new Error('innerRadius must be greater than zero')\n if (!isGTE(startAngle, 0)) throw new Error('startAngle must be greater than zero')\n\n // force integers\n vertices = Math.floor(vertices)\n density = Math.floor(density)\n\n startAngle = startAngle % TAU\n\n if (innerRadius === 0) {\n if (!isGTE(density, 2)) throw new Error('density must be two or more')\n innerRadius = outerRadius * getRadiusRatio(vertices, density)\n }\n\n const centerv = vec2.clone(center)\n\n const outerPoints = getPoints(vertices, outerRadius, startAngle, centerv)\n const innerPoints = getPoints(vertices, innerRadius, startAngle + Math.PI / vertices, centerv)\n\n const allPoints = []\n for (let i = 0; i < vertices; i++) {\n allPoints.push(outerPoints[i])\n allPoints.push(innerPoints[i])\n }\n\n return geom2.fromPoints(allPoints)\n}\n\nmodule.exports = star\n","const { TAU } = require('../maths/constants')\n\nconst extrudeRotate = require('../operations/extrusions/extrudeRotate')\nconst { rotate } = require('../operations/transforms/rotate')\nconst { translate } = require('../operations/transforms/translate')\n\nconst circle = require('./circle')\n\nconst { isGT, isGTE } = require('./commonChecks')\n\n/**\n * Construct a torus by revolving a small circle (inner) about the circumference of a large (outer) circle.\n * @param {Object} [options] - options for construction\n * @param {Number} [options.innerRadius=1] - radius of small (inner) circle\n * @param {Number} [options.outerRadius=4] - radius of large (outer) circle\n * @param {Integer} [options.innerSegments=32] - number of segments to create per rotation\n * @param {Integer} [options.outerSegments=32] - number of segments to create per rotation\n * @param {Integer} [options.innerRotation=0] - rotation of small (inner) circle in radians\n * @param {Number} [options.outerRotation=TAU] - rotation (outer) of the torus (RADIANS)\n * @param {Number} [options.startAngle=0] - start angle of the torus (RADIANS)\n * @returns {geom3} new 3D geometry\n * @alias module:modeling/primitives.torus\n *\n * @example\n * let myshape = torus({ innerRadius: 10, outerRadius: 100 })\n */\nconst torus = (options) => {\n const defaults = {\n innerRadius: 1,\n innerSegments: 32,\n outerRadius: 4,\n outerSegments: 32,\n innerRotation: 0,\n startAngle: 0,\n outerRotation: TAU\n }\n const { innerRadius, innerSegments, outerRadius, outerSegments, innerRotation, startAngle, outerRotation } = Object.assign({}, defaults, options)\n\n if (!isGT(innerRadius, 0)) throw new Error('innerRadius must be greater than zero')\n if (!isGTE(innerSegments, 3)) throw new Error('innerSegments must be three or more')\n if (!isGT(outerRadius, 0)) throw new Error('outerRadius must be greater than zero')\n if (!isGTE(outerSegments, 3)) throw new Error('outerSegments must be three or more')\n if (!isGTE(startAngle, 0)) throw new Error('startAngle must be positive')\n if (!isGT(outerRotation, 0)) throw new Error('outerRotation must be greater than zero')\n\n if (innerRadius >= outerRadius) throw new Error('inner circle is two large to rotate about the outer circle')\n\n let innerCircle = circle({ radius: innerRadius, segments: innerSegments })\n\n if (innerRotation !== 0) {\n innerCircle = rotate([0, 0, innerRotation], innerCircle)\n }\n\n innerCircle = translate([outerRadius, 0], innerCircle)\n\n const extrudeOptions = {\n startAngle: startAngle,\n angle: outerRotation,\n segments: outerSegments\n }\n return extrudeRotate(extrudeOptions, innerCircle)\n}\n\nmodule.exports = torus\n","const { NEPS } = require('../maths/constants')\nconst vec2 = require('../maths/vec2')\n\nconst geom2 = require('../geometries/geom2')\n\nconst { isNumberArray } = require('./commonChecks')\n\n// returns angle C\nconst solveAngleFromSSS = (a, b, c) => Math.acos(((a * a) + (b * b) - (c * c)) / (2 * a * b))\n\n// returns side c\nconst solveSideFromSAS = (a, C, b) => {\n if (C > NEPS) {\n return Math.sqrt(a * a + b * b - 2 * a * b * Math.cos(C))\n }\n\n // Explained in https://www.nayuki.io/page/numerically-stable-law-of-cosines\n return Math.sqrt((a - b) * (a - b) + a * b * C * C * (1 - C * C / 12))\n}\n\n// AAA is when three angles of a triangle, but no sides\nconst solveAAA = (angles) => {\n const eps = Math.abs(angles[0] + angles[1] + angles[2] - Math.PI)\n if (eps > NEPS) throw new Error('AAA triangles require angles that sum to PI')\n\n const A = angles[0]\n const B = angles[1]\n const C = Math.PI - A - B\n\n // Note: This is not 100% proper but...\n // default the side c length to 1\n // solve the other lengths\n const c = 1\n const a = (c / Math.sin(C)) * Math.sin(A)\n const b = (c / Math.sin(C)) * Math.sin(B)\n return createTriangle(A, B, C, a, b, c)\n}\n\n// AAS is when two angles and one side are known, and the side is not between the angles\nconst solveAAS = (values) => {\n const A = values[0]\n const B = values[1]\n const C = Math.PI + NEPS - A - B\n\n if (C < NEPS) throw new Error('AAS triangles require angles that sum to PI')\n\n const a = values[2]\n const b = (a / Math.sin(A)) * Math.sin(B)\n const c = (a / Math.sin(A)) * Math.sin(C)\n return createTriangle(A, B, C, a, b, c)\n}\n\n// ASA is when two angles and the side between the angles are known\nconst solveASA = (values) => {\n const A = values[0]\n const B = values[2]\n const C = Math.PI + NEPS - A - B\n\n if (C < NEPS) throw new Error('ASA triangles require angles that sum to PI')\n\n const c = values[1]\n const a = (c / Math.sin(C)) * Math.sin(A)\n const b = (c / Math.sin(C)) * Math.sin(B)\n return createTriangle(A, B, C, a, b, c)\n}\n\n// SAS is when two sides and the angle between them are known\nconst solveSAS = (values) => {\n const c = values[0]\n const B = values[1]\n const a = values[2]\n\n const b = solveSideFromSAS(c, B, a)\n\n const A = solveAngleFromSSS(b, c, a) // solve for A\n const C = Math.PI - A - B\n return createTriangle(A, B, C, a, b, c)\n}\n\n// SSA is when two sides and an angle that is not the angle between the sides are known\nconst solveSSA = (values) => {\n const c = values[0]\n const a = values[1]\n const C = values[2]\n\n const A = Math.asin(a * Math.sin(C) / c)\n const B = Math.PI - A - C\n\n const b = (c / Math.sin(C)) * Math.sin(B)\n return createTriangle(A, B, C, a, b, c)\n}\n\n// SSS is when we know three sides of the triangle\nconst solveSSS = (lengths) => {\n const a = lengths[1]\n const b = lengths[2]\n const c = lengths[0]\n if (((a + b) <= c) || ((b + c) <= a) || ((c + a) <= b)) {\n throw new Error('SSS triangle is incorrect, as the longest side is longer than the sum of the other sides')\n }\n\n const A = solveAngleFromSSS(b, c, a) // solve for A\n const B = solveAngleFromSSS(c, a, b) // solve for B\n const C = Math.PI - A - B\n return createTriangle(A, B, C, a, b, c)\n}\n\nconst createTriangle = (A, B, C, a, b, c) => {\n const p0 = vec2.fromValues(0, 0) // everything starts from 0, 0\n const p1 = vec2.fromValues(c, 0)\n const p2 = vec2.fromValues(a, 0)\n vec2.add(p2, vec2.rotate(p2, p2, [0, 0], Math.PI - B), p1)\n return geom2.fromPoints([p0, p1, p2])\n}\n\n/**\n * Construct a triangle in two dimensional space from the given options.\n * The triangle is always constructed CCW from the origin, [0, 0, 0].\n * @see https://www.mathsisfun.com/algebra/trig-solving-triangles.html\n * @param {Object} [options] - options for construction\n * @param {String} [options.type='SSS'] - type of triangle to construct; A ~ angle, S ~ side\n * @param {Array} [options.values=[1,1,1]] - angle (radians) of corners or length of sides\n * @returns {geom2} new 2D geometry\n * @alias module:modeling/primitives.triangle\n *\n * @example\n * let myshape = triangle({type: 'AAS', values: [degToRad(62), degToRad(35), 7]})\n */\nconst triangle = (options) => {\n const defaults = {\n type: 'SSS',\n values: [1, 1, 1]\n }\n let { type, values } = Object.assign({}, defaults, options)\n\n if (typeof (type) !== 'string') throw new Error('triangle type must be a string')\n type = type.toUpperCase()\n if (!((type[0] === 'A' || type[0] === 'S') &&\n (type[1] === 'A' || type[1] === 'S') &&\n (type[2] === 'A' || type[2] === 'S'))) throw new Error('triangle type must contain three letters; A or S')\n\n if (!isNumberArray(values, 3)) throw new Error('triangle values must contain three values')\n if (!values.every((n) => n > 0)) throw new Error('triangle values must be greater than zero')\n\n switch (type) {\n case 'AAA':\n return solveAAA(values)\n case 'AAS':\n return solveAAS(values)\n case 'ASA':\n return solveASA(values)\n case 'SAS':\n return solveSAS(values)\n case 'SSA':\n return solveSSA(values)\n case 'SSS':\n return solveSSS(values)\n default:\n throw new Error('invalid triangle type, try again')\n }\n}\n\nmodule.exports = triangle\n","// -- data source from from http://paulbourke.net/dataformats/hershey/\n// -- reduced to save some bytes...\n// { [ascii code]: [width, x, y, ...] } - undefined value as path separator\nmodule.exports = {\n height: 14,\n 32: [16],\n 33: [10, 5, 21, 5, 7, undefined, 5, 2, 4, 1, 5, 0, 6, 1, 5, 2],\n 34: [16, 4, 21, 4, 14, undefined, 12, 21, 12, 14],\n 35: [21, 11, 25, 4, -7, undefined, 17, 25, 10, -7, undefined, 4, 12, 18, 12, undefined, 3, 6, 17, 6],\n 36: [20, 8, 25, 8, -4, undefined, 12, 25, 12, -4, undefined, 17, 18, 15, 20, 12, 21, 8, 21, 5, 20, 3, 18, 3, 16, 4, 14, 5, 13, 7, 12, 13, 10, 15, 9, 16, 8, 17, 6, 17, 3, 15, 1, 12, 0, 8, 0, 5, 1, 3, 3],\n 37: [24, 21, 21, 3, 0, undefined, 8, 21, 10, 19, 10, 17, 9, 15, 7, 14, 5, 14, 3, 16, 3, 18, 4, 20, 6, 21, 8, 21, 10, 20, 13, 19, 16, 19, 19, 20, 21, 21, undefined, 17, 7, 15, 6, 14, 4, 14, 2, 16, 0, 18, 0, 20, 1, 21, 3, 21, 5, 19, 7, 17, 7],\n 38: [26, 23, 12, 23, 13, 22, 14, 21, 14, 20, 13, 19, 11, 17, 6, 15, 3, 13, 1, 11, 0, 7, 0, 5, 1, 4, 2, 3, 4, 3, 6, 4, 8, 5, 9, 12, 13, 13, 14, 14, 16, 14, 18, 13, 20, 11, 21, 9, 20, 8, 18, 8, 16, 9, 13, 11, 10, 16, 3, 18, 1, 20, 0, 22, 0, 23, 1, 23, 2],\n 39: [10, 5, 19, 4, 20, 5, 21, 6, 20, 6, 18, 5, 16, 4, 15],\n 40: [14, 11, 25, 9, 23, 7, 20, 5, 16, 4, 11, 4, 7, 5, 2, 7, -2, 9, -5, 11, -7],\n 41: [14, 3, 25, 5, 23, 7, 20, 9, 16, 10, 11, 10, 7, 9, 2, 7, -2, 5, -5, 3, -7],\n 42: [16, 8, 21, 8, 9, undefined, 3, 18, 13, 12, undefined, 13, 18, 3, 12],\n 43: [26, 13, 18, 13, 0, undefined, 4, 9, 22, 9],\n 44: [10, 6, 1, 5, 0, 4, 1, 5, 2, 6, 1, 6, -1, 5, -3, 4, -4],\n 45: [26, 4, 9, 22, 9],\n 46: [10, 5, 2, 4, 1, 5, 0, 6, 1, 5, 2],\n 47: [22, 20, 25, 2, -7],\n 48: [20, 9, 21, 6, 20, 4, 17, 3, 12, 3, 9, 4, 4, 6, 1, 9, 0, 11, 0, 14, 1, 16, 4, 17, 9, 17, 12, 16, 17, 14, 20, 11, 21, 9, 21],\n 49: [20, 6, 17, 8, 18, 11, 21, 11, 0],\n 50: [20, 4, 16, 4, 17, 5, 19, 6, 20, 8, 21, 12, 21, 14, 20, 15, 19, 16, 17, 16, 15, 15, 13, 13, 10, 3, 0, 17, 0],\n 51: [20, 5, 21, 16, 21, 10, 13, 13, 13, 15, 12, 16, 11, 17, 8, 17, 6, 16, 3, 14, 1, 11, 0, 8, 0, 5, 1, 4, 2, 3, 4],\n 52: [20, 13, 21, 3, 7, 18, 7, undefined, 13, 21, 13, 0],\n 53: [20, 15, 21, 5, 21, 4, 12, 5, 13, 8, 14, 11, 14, 14, 13, 16, 11, 17, 8, 17, 6, 16, 3, 14, 1, 11, 0, 8, 0, 5, 1, 4, 2, 3, 4],\n 54: [20, 16, 18, 15, 20, 12, 21, 10, 21, 7, 20, 5, 17, 4, 12, 4, 7, 5, 3, 7, 1, 10, 0, 11, 0, 14, 1, 16, 3, 17, 6, 17, 7, 16, 10, 14, 12, 11, 13, 10, 13, 7, 12, 5, 10, 4, 7],\n 55: [20, 17, 21, 7, 0, undefined, 3, 21, 17, 21],\n 56: [20, 8, 21, 5, 20, 4, 18, 4, 16, 5, 14, 7, 13, 11, 12, 14, 11, 16, 9, 17, 7, 17, 4, 16, 2, 15, 1, 12, 0, 8, 0, 5, 1, 4, 2, 3, 4, 3, 7, 4, 9, 6, 11, 9, 12, 13, 13, 15, 14, 16, 16, 16, 18, 15, 20, 12, 21, 8, 21],\n 57: [20, 16, 14, 15, 11, 13, 9, 10, 8, 9, 8, 6, 9, 4, 11, 3, 14, 3, 15, 4, 18, 6, 20, 9, 21, 10, 21, 13, 20, 15, 18, 16, 14, 16, 9, 15, 4, 13, 1, 10, 0, 8, 0, 5, 1, 4, 3],\n 58: [10, 5, 14, 4, 13, 5, 12, 6, 13, 5, 14, undefined, 5, 2, 4, 1, 5, 0, 6, 1, 5, 2],\n 59: [10, 5, 14, 4, 13, 5, 12, 6, 13, 5, 14, undefined, 6, 1, 5, 0, 4, 1, 5, 2, 6, 1, 6, -1, 5, -3, 4, -4],\n 60: [24, 20, 18, 4, 9, 20, 0],\n 61: [26, 4, 12, 22, 12, undefined, 4, 6, 22, 6],\n 62: [24, 4, 18, 20, 9, 4, 0],\n 63: [18, 3, 16, 3, 17, 4, 19, 5, 20, 7, 21, 11, 21, 13, 20, 14, 19, 15, 17, 15, 15, 14, 13, 13, 12, 9, 10, 9, 7, undefined, 9, 2, 8, 1, 9, 0, 10, 1, 9, 2],\n 64: [27, 18, 13, 17, 15, 15, 16, 12, 16, 10, 15, 9, 14, 8, 11, 8, 8, 9, 6, 11, 5, 14, 5, 16, 6, 17, 8, undefined, 12, 16, 10, 14, 9, 11, 9, 8, 10, 6, 11, 5, undefined, 18, 16, 17, 8, 17, 6, 19, 5, 21, 5, 23, 7, 24, 10, 24, 12, 23, 15, 22, 17, 20, 19, 18, 20, 15, 21, 12, 21, 9, 20, 7, 19, 5, 17, 4, 15, 3, 12, 3, 9, 4, 6, 5, 4, 7, 2, 9, 1, 12, 0, 15, 0, 18, 1, 20, 2, 21, 3, undefined, 19, 16, 18, 8, 18, 6, 19, 5],\n 65: [18, 9, 21, 1, 0, undefined, 9, 21, 17, 0, undefined, 4, 7, 14, 7],\n 66: [21, 4, 21, 4, 0, undefined, 4, 21, 13, 21, 16, 20, 17, 19, 18, 17, 18, 15, 17, 13, 16, 12, 13, 11, undefined, 4, 11, 13, 11, 16, 10, 17, 9, 18, 7, 18, 4, 17, 2, 16, 1, 13, 0, 4, 0],\n 67: [21, 18, 16, 17, 18, 15, 20, 13, 21, 9, 21, 7, 20, 5, 18, 4, 16, 3, 13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0, 13, 0, 15, 1, 17, 3, 18, 5],\n 68: [21, 4, 21, 4, 0, undefined, 4, 21, 11, 21, 14, 20, 16, 18, 17, 16, 18, 13, 18, 8, 17, 5, 16, 3, 14, 1, 11, 0, 4, 0],\n 69: [19, 4, 21, 4, 0, undefined, 4, 21, 17, 21, undefined, 4, 11, 12, 11, undefined, 4, 0, 17, 0],\n 70: [18, 4, 21, 4, 0, undefined, 4, 21, 17, 21, undefined, 4, 11, 12, 11],\n 71: [21, 18, 16, 17, 18, 15, 20, 13, 21, 9, 21, 7, 20, 5, 18, 4, 16, 3, 13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0, 13, 0, 15, 1, 17, 3, 18, 5, 18, 8, undefined, 13, 8, 18, 8],\n 72: [22, 4, 21, 4, 0, undefined, 18, 21, 18, 0, undefined, 4, 11, 18, 11],\n 73: [8, 4, 21, 4, 0],\n 74: [16, 12, 21, 12, 5, 11, 2, 10, 1, 8, 0, 6, 0, 4, 1, 3, 2, 2, 5, 2, 7],\n 75: [21, 4, 21, 4, 0, undefined, 18, 21, 4, 7, undefined, 9, 12, 18, 0],\n 76: [17, 4, 21, 4, 0, undefined, 4, 0, 16, 0],\n 77: [24, 4, 21, 4, 0, undefined, 4, 21, 12, 0, undefined, 20, 21, 12, 0, undefined, 20, 21, 20, 0],\n 78: [22, 4, 21, 4, 0, undefined, 4, 21, 18, 0, undefined, 18, 21, 18, 0],\n 79: [22, 9, 21, 7, 20, 5, 18, 4, 16, 3, 13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0, 13, 0, 15, 1, 17, 3, 18, 5, 19, 8, 19, 13, 18, 16, 17, 18, 15, 20, 13, 21, 9, 21],\n 80: [21, 4, 21, 4, 0, undefined, 4, 21, 13, 21, 16, 20, 17, 19, 18, 17, 18, 14, 17, 12, 16, 11, 13, 10, 4, 10],\n 81: [22, 9, 21, 7, 20, 5, 18, 4, 16, 3, 13, 3, 8, 4, 5, 5, 3, 7, 1, 9, 0, 13, 0, 15, 1, 17, 3, 18, 5, 19, 8, 19, 13, 18, 16, 17, 18, 15, 20, 13, 21, 9, 21, undefined, 12, 4, 18, -2],\n 82: [21, 4, 21, 4, 0, undefined, 4, 21, 13, 21, 16, 20, 17, 19, 18, 17, 18, 15, 17, 13, 16, 12, 13, 11, 4, 11, undefined, 11, 11, 18, 0],\n 83: [20, 17, 18, 15, 20, 12, 21, 8, 21, 5, 20, 3, 18, 3, 16, 4, 14, 5, 13, 7, 12, 13, 10, 15, 9, 16, 8, 17, 6, 17, 3, 15, 1, 12, 0, 8, 0, 5, 1, 3, 3],\n 84: [16, 8, 21, 8, 0, undefined, 1, 21, 15, 21],\n 85: [22, 4, 21, 4, 6, 5, 3, 7, 1, 10, 0, 12, 0, 15, 1, 17, 3, 18, 6, 18, 21],\n 86: [18, 1, 21, 9, 0, undefined, 17, 21, 9, 0],\n 87: [24, 2, 21, 7, 0, undefined, 12, 21, 7, 0, undefined, 12, 21, 17, 0, undefined, 22, 21, 17, 0],\n 88: [20, 3, 21, 17, 0, undefined, 17, 21, 3, 0],\n 89: [18, 1, 21, 9, 11, 9, 0, undefined, 17, 21, 9, 11],\n 90: [20, 17, 21, 3, 0, undefined, 3, 21, 17, 21, undefined, 3, 0, 17, 0],\n 91: [14, 4, 25, 4, -7, undefined, 5, 25, 5, -7, undefined, 4, 25, 11, 25, undefined, 4, -7, 11, -7],\n 92: [14, 0, 21, 14, -3],\n 93: [14, 9, 25, 9, -7, undefined, 10, 25, 10, -7, undefined, 3, 25, 10, 25, undefined, 3, -7, 10, -7],\n 94: [16, 6, 15, 8, 18, 10, 15, undefined, 3, 12, 8, 17, 13, 12, undefined, 8, 17, 8, 0],\n 95: [16, 0, -2, 16, -2],\n 96: [10, 6, 21, 5, 20, 4, 18, 4, 16, 5, 15, 6, 16, 5, 17],\n 97: [19, 15, 14, 15, 0, undefined, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3],\n 98: [19, 4, 21, 4, 0, undefined, 4, 11, 6, 13, 8, 14, 11, 14, 13, 13, 15, 11, 16, 8, 16, 6, 15, 3, 13, 1, 11, 0, 8, 0, 6, 1, 4, 3],\n 99: [18, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3],\n 100: [19, 15, 21, 15, 0, undefined, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3],\n 101: [18, 3, 8, 15, 8, 15, 10, 14, 12, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3],\n 102: [12, 10, 21, 8, 21, 6, 20, 5, 17, 5, 0, undefined, 2, 14, 9, 14],\n 103: [19, 15, 14, 15, -2, 14, -5, 13, -6, 11, -7, 8, -7, 6, -6, undefined, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3],\n 104: [19, 4, 21, 4, 0, undefined, 4, 10, 7, 13, 9, 14, 12, 14, 14, 13, 15, 10, 15, 0],\n 105: [8, 3, 21, 4, 20, 5, 21, 4, 22, 3, 21, undefined, 4, 14, 4, 0],\n 106: [10, 5, 21, 6, 20, 7, 21, 6, 22, 5, 21, undefined, 6, 14, 6, -3, 5, -6, 3, -7, 1, -7],\n 107: [17, 4, 21, 4, 0, undefined, 14, 14, 4, 4, undefined, 8, 8, 15, 0],\n 108: [8, 4, 21, 4, 0],\n 109: [30, 4, 14, 4, 0, undefined, 4, 10, 7, 13, 9, 14, 12, 14, 14, 13, 15, 10, 15, 0, undefined, 15, 10, 18, 13, 20, 14, 23, 14, 25, 13, 26, 10, 26, 0],\n 110: [19, 4, 14, 4, 0, undefined, 4, 10, 7, 13, 9, 14, 12, 14, 14, 13, 15, 10, 15, 0],\n 111: [19, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3, 16, 6, 16, 8, 15, 11, 13, 13, 11, 14, 8, 14],\n 112: [19, 4, 14, 4, -7, undefined, 4, 11, 6, 13, 8, 14, 11, 14, 13, 13, 15, 11, 16, 8, 16, 6, 15, 3, 13, 1, 11, 0, 8, 0, 6, 1, 4, 3],\n 113: [19, 15, 14, 15, -7, undefined, 15, 11, 13, 13, 11, 14, 8, 14, 6, 13, 4, 11, 3, 8, 3, 6, 4, 3, 6, 1, 8, 0, 11, 0, 13, 1, 15, 3],\n 114: [13, 4, 14, 4, 0, undefined, 4, 8, 5, 11, 7, 13, 9, 14, 12, 14],\n 115: [17, 14, 11, 13, 13, 10, 14, 7, 14, 4, 13, 3, 11, 4, 9, 6, 8, 11, 7, 13, 6, 14, 4, 14, 3, 13, 1, 10, 0, 7, 0, 4, 1, 3, 3],\n 116: [12, 5, 21, 5, 4, 6, 1, 8, 0, 10, 0, undefined, 2, 14, 9, 14],\n 117: [19, 4, 14, 4, 4, 5, 1, 7, 0, 10, 0, 12, 1, 15, 4, undefined, 15, 14, 15, 0],\n 118: [16, 2, 14, 8, 0, undefined, 14, 14, 8, 0],\n 119: [22, 3, 14, 7, 0, undefined, 11, 14, 7, 0, undefined, 11, 14, 15, 0, undefined, 19, 14, 15, 0],\n 120: [17, 3, 14, 14, 0, undefined, 14, 14, 3, 0],\n 121: [16, 2, 14, 8, 0, undefined, 14, 14, 8, 0, 6, -4, 4, -6, 2, -7, 1, -7],\n 122: [17, 14, 14, 3, 0, undefined, 3, 14, 14, 14, undefined, 3, 0, 14, 0],\n 123: [14, 9, 25, 7, 24, 6, 23, 5, 21, 5, 19, 6, 17, 7, 16, 8, 14, 8, 12, 6, 10, undefined, 7, 24, 6, 22, 6, 20, 7, 18, 8, 17, 9, 15, 9, 13, 8, 11, 4, 9, 8, 7, 9, 5, 9, 3, 8, 1, 7, 0, 6, -2, 6, -4, 7, -6, undefined, 6, 8, 8, 6, 8, 4, 7, 2, 6, 1, 5, -1, 5, -3, 6, -5, 7, -6, 9, -7],\n 124: [8, 4, 25, 4, -7],\n 125: [14, 5, 25, 7, 24, 8, 23, 9, 21, 9, 19, 8, 17, 7, 16, 6, 14, 6, 12, 8, 10, undefined, 7, 24, 8, 22, 8, 20, 7, 18, 6, 17, 5, 15, 5, 13, 6, 11, 10, 9, 6, 7, 5, 5, 5, 3, 6, 1, 7, 0, 8, -2, 8, -4, 7, -6, undefined, 8, 8, 6, 6, 6, 4, 7, 2, 8, 1, 9, -1, 9, -3, 8, -5, 7, -6, 5, -7],\n 126: [24, 3, 6, 3, 8, 4, 11, 6, 12, 8, 12, 10, 11, 14, 8, 16, 7, 18, 7, 20, 8, 21, 10, undefined, 3, 8, 4, 10, 6, 11, 8, 11, 10, 10, 14, 7, 16, 6, 18, 6, 20, 7, 21, 10, 21, 12]\n}\n","/**\n * Texts provide sets of segments for each character or text strings.\n * The segments can be used to create outlines for both 2D and 3D geometry.\n * Note: Only ASCII characters are supported.\n * @module modeling/text\n * @example\n * const { vectorChar, vectorText } = require('@jscad/modeling').text\n */\nmodule.exports = {\n vectorChar: require('./vectorChar'),\n vectorText: require('./vectorText')\n}\n","const vectorParams = require('./vectorParams')\n\n/**\n * Represents a character as a list of segments\n * @typedef {Object} VectorCharObject\n * @property {Float} width - character width\n * @property {Float} height - character height (uppercase)\n * @property {Array} segments - character segments [[[x, y], ...], ...]\n */\n\n/** Construct a {@link VectorCharObject} from a ascii character whose code is between 31 and 127,\n* if the character is not supported it is replaced by a question mark.\n* @param {Object|String} [options] - options for construction or ascii character\n* @param {Float} [options.xOffset=0] - x offset\n* @param {Float} [options.yOffset=0] - y offset\n* @param {Float} [options.height=21] - font size (uppercase height)\n* @param {Float} [options.extrudeOffset=0] - width of the extrusion that will be applied (manually) after the creation of the character\n* @param {String} [options.input='?'] - ascii character (ignored/overwrited if provided as seconds parameter)\n* @param {String} [char='?'] - ascii character\n* @returns {VectorCharObject}\n* @alias module:modeling/text.vectorChar\n*\n* @example\n* let vectorCharObject = vectorChar()\n* or\n* let vectorCharObject = vectorChar('A')\n* or\n* let vectorCharObject = vectorChar({ xOffset: 57 }, 'C')\n* or\n* let vectorCharObject = vectorChar({ xOffset: 78, input: '!' })\n*/\nconst vectorChar = (options, char) => {\n const {\n xOffset, yOffset, input, font, height, extrudeOffset\n } = vectorParams(options, char)\n let code = input.charCodeAt(0)\n if (!code || !font[code]) {\n code = 63 // 63 => ?\n }\n const glyph = [].concat(font[code])\n const ratio = (height - extrudeOffset) / font.height\n const extrudeYOffset = (extrudeOffset / 2)\n const width = glyph.shift() * ratio\n const segments = []\n let polyline = []\n for (let i = 0, il = glyph.length; i < il; i += 2) {\n const gx = ratio * glyph[i] + xOffset\n const gy = ratio * glyph[i + 1] + yOffset + extrudeYOffset\n if (glyph[i] !== undefined) {\n polyline.push([gx, gy])\n continue\n }\n segments.push(polyline)\n polyline = []\n i--\n }\n if (polyline.length) {\n segments.push(polyline)\n }\n return { width, height, segments }\n}\n\nmodule.exports = vectorChar\n","const defaultFont = require('./fonts/single-line/hershey/simplex.js')\n\nconst defaultsVectorParams = {\n xOffset: 0,\n yOffset: 0,\n input: '?',\n align: 'left',\n font: defaultFont,\n height: 14, // == old vector_xxx simplex font height\n lineSpacing: 2.142857142857143, // == 30/14 == old vector_xxx ratio\n letterSpacing: 1,\n extrudeOffset: 0\n}\n\n// vectorsXXX parameters handler\nconst vectorParams = (options, input) => {\n if (!input && typeof options === 'string') {\n options = { input: options }\n }\n options = options || {}\n const params = Object.assign({}, defaultsVectorParams, options)\n params.input = input || params.input\n return params\n}\n\nmodule.exports = vectorParams\n","const vectorChar = require('./vectorChar')\nconst vectorParams = require('./vectorParams')\n\n// translate text line\nconst translateLine = (options, line) => {\n const { x, y } = Object.assign({ x: 0, y: 0 }, options || {})\n const segments = line.segments\n let segment = null\n let point = null\n for (let i = 0, il = segments.length; i < il; i++) {\n segment = segments[i]\n for (let j = 0, jl = segment.length; j < jl; j++) {\n point = segment[j]\n segment[j] = [point[0] + x, point[1] + y]\n }\n }\n return line\n}\n\n/**\n * Construct an array of character segments from a ascii string whose characters code is between 31 and 127,\n * if one character is not supported it is replaced by a question mark.\n * @param {Object|String} [options] - options for construction or ascii string\n * @param {Float} [options.xOffset=0] - x offset\n * @param {Float} [options.yOffset=0] - y offset\n * @param {Float} [options.height=21] - font size (uppercase height)\n * @param {Float} [options.lineSpacing=1.4] - line spacing expressed as a percentage of font size\n * @param {Float} [options.letterSpacing=1] - extra letter spacing expressed as a percentage of font size\n * @param {String} [options.align='left'] - multi-line text alignment: left, center, right\n * @param {Float} [options.extrudeOffset=0] - width of the extrusion that will be applied (manually) after the creation of the character\n * @param {String} [options.input='?'] - ascii string (ignored/overwrited if provided as seconds parameter)\n * @param {String} [text='?'] - ascii string\n * @returns {Array} characters segments [[[x, y], ...], ...]\n * @alias module:modeling/text.vectorText\n *\n * @example\n * let textSegments = vectorText()\n * or\n * let textSegments = vectorText('OpenJSCAD')\n * or\n * let textSegments = vectorText({ yOffset: -50 }, 'OpenJSCAD')\n * or\n * let textSegments = vectorText({ yOffset: -80, input: 'OpenJSCAD' })\n */\nconst vectorText = (options, text) => {\n const {\n xOffset, yOffset, input, font, height, align, extrudeOffset, lineSpacing, letterSpacing\n } = vectorParams(options, text)\n let [x, y] = [xOffset, yOffset]\n let i, il, char, vect, width, diff\n let line = { width: 0, segments: [] }\n const lines = []\n let output = []\n let maxWidth = 0\n const lineStart = x\n const pushLine = () => {\n lines.push(line)\n maxWidth = Math.max(maxWidth, line.width)\n line = { width: 0, segments: [] }\n }\n for (i = 0, il = input.length; i < il; i++) {\n char = input[i]\n vect = vectorChar({ xOffset: x, yOffset: y, font, height, extrudeOffset }, char)\n if (char === '\\n') {\n x = lineStart\n y -= vect.height * lineSpacing\n pushLine()\n continue\n }\n width = vect.width * letterSpacing\n line.width += width\n x += width\n if (char !== ' ') {\n line.segments = line.segments.concat(vect.segments)\n }\n }\n if (line.segments.length) {\n pushLine()\n }\n for (i = 0, il = lines.length; i < il; i++) {\n line = lines[i]\n if (maxWidth > line.width) {\n diff = maxWidth - line.width\n if (align === 'right') {\n line = translateLine({ x: diff }, line)\n } else if (align === 'center') {\n line = translateLine({ x: diff / 2 }, line)\n }\n }\n output = output.concat(line.segments)\n }\n return output\n}\n\nmodule.exports = vectorText\n","// list of supported geometries\nconst geom2 = require('../geometries/geom2')\nconst geom3 = require('../geometries/geom3')\nconst path2 = require('../geometries/path2')\n\n/**\n * @param {Array} shapes - list of shapes to compare\n * @returns {Boolean} true if the given shapes are of the same type\n * @alias module:modeling/utils.areAllShapesTheSameType\n */\nconst areAllShapesTheSameType = (shapes) => {\n let previousType\n for (const shape of shapes) {\n let currentType = 0\n if (geom2.isA(shape)) currentType = 1\n if (geom3.isA(shape)) currentType = 2\n if (path2.isA(shape)) currentType = 3\n\n if (previousType && currentType !== previousType) return false\n previousType = currentType\n }\n return true\n}\n\nmodule.exports = areAllShapesTheSameType\n","/**\n * Convert the given angle (degrees) to radians.\n * @param {Number} degrees - angle in degrees\n * @returns {Number} angle in radians\n * @alias module:modeling/utils.degToRad\n */\nconst degToRad = (degrees) => degrees * 0.017453292519943295\n\nmodule.exports = degToRad\n","/**\n * Flatten the given list of arguments into a single flat array.\n * The arguments can be composed of multiple depths of objects and arrays.\n * @param {Array} arr - list of arguments\n * @returns {Array} a flat list of arguments\n * @alias module:modeling/utils.flatten\n */\nconst flatten = (arr) => arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), [])\n\nmodule.exports = flatten\n","/**\n * @alias module:modeling/utils.fnNumberSort\n */\nconst fnNumberSort = (a, b) => a - b\n\nmodule.exports = fnNumberSort\n","/**\n * Utility functions of various sorts.\n * @module modeling/utils\n * @example\n * const { flatten, insertSorted } = require('@jscad/modeling').utils\n */\nmodule.exports = {\n areAllShapesTheSameType: require('./areAllShapesTheSameType'),\n degToRad: require('./degToRad'),\n flatten: require('./flatten'),\n fnNumberSort: require('./fnNumberSort'),\n insertSorted: require('./insertSorted'),\n radiusToSegments: require('./radiusToSegments'),\n radToDeg: require('./radToDeg')\n}\n","/**\n * Insert the given element into the given array using the compareFunction.\n * @alias module:modeling/utils.insertSorted\n */\nconst insertSorted = (array, element, comparefunc) => {\n let leftbound = 0\n let rightbound = array.length\n while (rightbound > leftbound) {\n const testindex = Math.floor((leftbound + rightbound) / 2)\n const testelement = array[testindex]\n const compareresult = comparefunc(element, testelement)\n if (compareresult > 0) { // element > testelement\n leftbound = testindex + 1\n } else {\n rightbound = testindex\n }\n }\n array.splice(leftbound, 0, element)\n}\n\nmodule.exports = insertSorted\n","/**\n * Build an array of at minimum a specified length from an existing array and a padding value. IF the array is already larger than the target length, it will not be shortened.\n * @param {Array} anArray - the source array to copy into the result.\n * @param {*} padding - the value to add to the new array to reach the desired length.\n * @param {Number} targetLength - The desired length of the return array.\n * @returns {Array} an array of at least 'targetLength' length\n * @alias module:modeling/utils.padArrayToLength\n */\nconst padArrayToLength = (anArray, padding, targetLength) => {\n anArray = anArray.slice()\n while (anArray.length < targetLength) {\n anArray.push(padding)\n }\n return anArray\n}\n\nmodule.exports = padArrayToLength\n","/**\n * Convert the given angle (radians) to degrees.\n * @param {Number} radians - angle in radians\n * @returns {Number} angle in degrees\n * @alias module:modeling/utils.radToDeg\n */\nconst radToDeg = (radians) => radians * 57.29577951308232\n\nmodule.exports = radToDeg\n","const { TAU } = require('../maths/constants')\n\n/**\n * Calculate the number of segments from the given radius based on minimum length or angle.\n * @param {Number} radius - radius of the requested shape\n * @param {Number} minimumLength - minimum length of segments; length > 0\n * @param {Number} minimumAngle - minimum angle (radians) between segments; 0 > angle < TAU\n * @returns {Number} number of segments to complete the radius\n * @alias module:modeling/utils.radiusToSegments\n */\nconst radiusToSegments = (radius, minimumLength, minimumAngle) => {\n const ss = minimumLength > 0 ? radius * TAU / minimumLength : 0\n const as = minimumAngle > 0 ? TAU / minimumAngle : 0\n // minimum segments is four(4) for round primitives\n return Math.ceil(Math.max(ss, as, 4))\n}\n\nmodule.exports = radiusToSegments\n","// modified version of https://github.com/thibauts/vertices-bounding-box that also works with non nested positions\nconst boundingBox = (positions) => {\n if (positions.length === 0) {\n return [[0, 0, 0], [0, 0, 0]]\n }\n\n const nested = (Array.isArray(positions) && Array.isArray(positions[0]))\n\n const dimensions = nested ? positions[0].length : 3\n const min = new Array(dimensions)\n const max = new Array(dimensions)\n\n for (let i = 0; i < dimensions; i += 1) {\n min[i] = Infinity\n max[i] = -Infinity\n }\n\n if (nested) {\n positions.forEach((position) => {\n for (let i = 0; i < dimensions; i += 1) {\n const _position = nested ? position[i] : position\n max[i] = _position > max[i] ? _position : max[i] // position[i] > max[i] ? position[i] : max[i]\n min[i] = _position < min[i] ? _position : min[i] // min[i] = position[i] < min[i] ? position[i] : min[i]\n }\n })\n } else {\n for (let j = 0; j < positions.length; j += dimensions) {\n for (let i = 0; i < dimensions; i += 1) {\n const _position = positions[i + j] // nested ? positions[i] : position\n max[i] = _position > max[i] ? _position : max[i] // position[i] > max[i] ? position[i] : max[i]\n min[i] = _position < min[i] ? _position : min[i] // min[i] = position[i] < min[i] ? position[i] : min[i]\n }\n }\n }\n\n return [min, max]\n}\nmodule.exports = boundingBox\n","const vec3 = require('gl-vec3')\n\nconst { flatten } = require('@jscad/array-utils')\n\nconst boundingBox = require('./boundingBox')\n\n/*\n * Compute the bounds of the given geometries.\n * See geometry-utils-V2\n * @param {geometry|Array} geometries - geometry or list of geometries to measure\n * @return {Object} the bounds of the given geometries\n * bounds: {\n * dia: 40,\n * center: [0,20,8],\n * min: [9, -10, 0],\n * max: [15, 10, 4]\n * size: [6,20,4]\n * }\n */\nconst computeBounds = (...geometries) => {\n geometries = flatten(geometries)\n\n let bbox // min and max\n geometries.forEach((geometry) => {\n let gbbox = boundingBox(geometry.positions)\n gbbox = gbbox.map((bounds) => vec3.transformMat4(bounds, bounds, geometry.transforms))\n if (bbox) {\n vec3.min(bbox[0], bbox[0], gbbox[0])\n vec3.max(bbox[1], bbox[1], gbbox[1])\n } else {\n bbox = gbbox\n }\n })\n\n const min = vec3.min(vec3.create(), bbox[1], bbox[0])\n const max = vec3.max(vec3.create(), bbox[1], bbox[0])\n\n const size = vec3.subtract(vec3.create(), max, min)\n let center = vec3.scale(vec3.create(), size, 0.5)\n center = vec3.add(center, min, center)\n // aproximate diamter\n const dia = vec3.distance(center, max)\n\n const bounds = {\n dia,\n center: [...center],\n min: [...min],\n max: [...max],\n size: [...size]\n }\n return bounds\n}\n\nmodule.exports = computeBounds\n","const vec3 = require('gl-vec3')\nconst mat4 = require('gl-mat4')\n\nconst fromOrthographicToPerspective = (orthographicCamera) => {\n const { near, far, fov, zoom } = orthographicCamera\n // recompute projection matrix to use perspective camera projection matrix\n const { viewport } = orthographicCamera\n const projection = require('./perspectiveCamera').setProjection(orthographicCamera, { width: viewport[2], height: viewport[3] })\n const { projectionType } = require('./perspectiveCamera').cameraState\n return Object.assign({}, orthographicCamera, projection, { projectionType }, { near, far, fov })\n}\n\nconst fromPerspectiveToOrthographic = (perspectiveCamera) => {\n const { fov, aspect } = perspectiveCamera\n\n // set the orthographic view rectangle to 0,0,width,height\n // see here : http://stackoverflow.com/questions/13483775/set-zoomvalue-of-a-perspective-equal-to-perspective\n\n const distance = vec3.length(vec3.subtract([], perspectiveCamera.position, perspectiveCamera.target)) * 0.3\n const width = Math.tan(fov) * distance * aspect\n const height = Math.tan(fov) * distance\n\n // we re-use near, far, & projection matrix of orthographicCamera\n const { near, far, viewport } = perspectiveCamera\n const fCam = { zoom: 1, near, far }\n const orthographicCamera = require('./orthographicCamera').cameraState\n const projection = require('./orthographicCamera').setProjection(fCam, { width, height })\n return Object.assign({}, orthographicCamera, perspectiveCamera, projection, { projectionType: orthographicCamera.projectionType, viewport })\n}\n\nconst toPerspectiveView = ({ camera }) => {\n const offsetToTarget = vec3.distance(camera.position, camera.target)\n const distance = offsetToTarget\n const position = [distance, distance, distance]\n const view = mat4.lookAt(mat4.create(), position, camera.target, camera.up)\n\n return { view, position }\n}\n\n/**\n * Calculate the camera view and position for acheiving the given preset view.\n */\nconst toPresetView = (viewName, { camera }) => {\n const presets = {\n top: [0, -0.000001, 1],\n bottom: [0, 0, -1],\n front: [0, 1, 0],\n back: [0, -1, 0],\n left: [-1, 0, 0],\n right: [1, 0, 0],\n undefined: [0, 0, 0]\n }\n\n const offsetToTarget = vec3.distance(camera.position, camera.target)\n const position = vec3.add(vec3.create(), presets[viewName].map((x) => x * offsetToTarget), camera.target)\n const view = mat4.lookAt(mat4.create(), position, camera.target, camera.up)\n\n return { view, position }\n}\n\nmodule.exports = {\n toPerspectiveView,\n toPresetView,\n fromOrthographicToPerspective,\n fromPerspectiveToOrthographic\n}\n","const mat4 = require('gl-mat4')\n\nconst cameraState = {\n view: mat4.identity(new Float32Array(16)),\n projection: mat4.identity(new Float32Array(16)),\n matrix: mat4.identity(new Float32Array(16)), // not sure if needed\n near: 1, // 0.01,\n far: 1300,\n up: [0, 0, 1],\n // distance: 10.0, // not sure if needed\n eye: new Float32Array(3), // same as position\n position: [150, 250, 200],\n target: [0, 0, 0],\n fov: Math.PI / 4,\n aspect: 1,\n viewport: [0, 0, 0, 0],\n zoom: 1,\n projectionType: 'orthographic'\n}\n\nconst cameraProps = {}\n\nconst setProjection = (camera, input) => {\n const { width, height } = input\n // context.viewportWidth / context.viewportHeight,\n const aspect = width / height\n const viewport = [0, 0, width, height]\n const multiplier = camera.zoom\n\n const left = -width * multiplier\n const right = width * multiplier\n const bottom = -height * multiplier\n const top = height * multiplier\n\n const projection = mat4.ortho([], left, right, bottom, top, camera.near, camera.far)\n return { projection, aspect, viewport }\n}\n\nmodule.exports = { cameraState, cameraProps, setProjection }\n","const mat4 = require('gl-mat4')\nconst vec3 = require('gl-vec3')\n\nconst cameraState = {\n view: mat4.identity(new Float32Array(16)),\n projection: mat4.identity(new Float32Array(16)),\n matrix: mat4.identity(new Float32Array(16)), // not sure if needed\n near: 1, // 0.01,\n far: 18000,\n up: [0, 0, 1],\n // distance: 10.0, // not sure if needed\n eye: new Float32Array(3), // same as position\n position: [450, 550, 700],\n target: [0, 0, 0],\n fov: Math.PI / 4,\n aspect: 1,\n viewport: [0, 0, 0, 0],\n projectionType: 'perspective'\n}\n\nconst cameraProps = {}\nconst defaults = Object.assign({}, cameraState, cameraProps)\n\nconst setProjection = (output, camera, input) => {\n // context.viewportWidth / context.viewportHeight,\n const aspect = input.width / input.height\n\n const projection = mat4.perspective(mat4.identity([]), camera.fov, aspect,\n camera.near,\n camera.far)\n const viewport = [0, 0, input.width, input.height]\n\n // optional mutation\n const out = output || {}\n out.projection = projection\n out.aspect = aspect\n out.viewport = viewport\n\n return out\n}\n\nconst update = (output, camera) => {\n if (!camera) {\n camera = output\n }\n const { position, target, up } = camera\n const offset = vec3.subtract([], position, target)\n const newPosition = vec3.add(vec3.create(), target, offset)\n const newView = mat4.lookAt(mat4.create(), newPosition, target, up)\n\n // optional mutation\n const out = output || {}\n out.position = newPosition\n out.view = newView\n return out\n}\n\nmodule.exports = { cameraState, cameraProps, defaults, setProjection, update }\n","const vec3 = require('gl-vec3')\nconst mat4 = require('gl-mat4')\nconst { max, min, sqrt, PI, sin, cos, atan2 } = Math\n\nconst computeBounds = require('../bound-utils/computeBounds')\n\n// TODO: make it more data driven ?\n/*\nsetFocus => modify the focusPoint input\nrotate => modify the angle input\n\n*/\n/* cameras are assumed to have:\n projection\n view\n target (focal point)\n eye/position\n up\n*/\n// TODO: multiple data, sometimes redundant, needs simplification\n/*\n- camera state\n- camera props\n\n- controls state\n- controls props\n\n- other\n\n*/\n\nconst controlsProps = {\n limits: {\n minDistance: 0.01,\n maxDistance: 10000\n },\n drag: 0.27, // Decrease the momentum by 1% each iteration\n EPS: 0.000001,\n zoomToFit: {\n auto: true, // always tried to apply zoomTofit\n targets: 'all',\n tightness: 1.5 // how close should the fit be: the lower the tigher : 1 means very close, but fitting most of the time\n },\n // all these, not sure are needed in this shape\n userControl: {\n zoom: true,\n zoomSpeed: 1.0,\n rotate: true,\n rotateSpeed: 1.0,\n pan: true,\n panSpeed: 1.0\n },\n autoRotate: {\n enabled: false,\n speed: 1.0 // 30 seconds per round when fps is 60\n },\n autoAdjustPlanes: true // adjust near & far planes when zooming in &out\n}\n\nconst controlsState = {\n // orbit controls state\n thetaDelta: 0,\n phiDelta: 0,\n scale: 1\n}\n\nconst defaults = Object.assign({}, controlsState, controlsProps)\n\nconst update = ({ controls, camera }, output) => {\n // custom z up is settable, with inverted Y and Z (since we use camera[2] => up)\n const { EPS, drag } = controls\n const { position, target } = camera\n const up = controls.up ? controls.up : camera.up\n\n let curThetaDelta = controls.thetaDelta\n const curPhiDelta = controls.phiDelta\n const curScale = controls.scale\n\n const offset = vec3.subtract([], position, target)\n let theta\n let phi\n\n if (up[2] === 1) {\n // angle from z-axis around y-axis, upVector : z\n theta = atan2(offset[0], offset[1])\n // angle from y-axis\n phi = atan2(sqrt(offset[0] * offset[0] + offset[1] * offset[1]), offset[2])\n } else {\n // in case of y up\n theta = atan2(offset[0], offset[2])\n phi = atan2(sqrt(offset[0] * offset[0] + offset[2] * offset[2]), offset[1])\n // curThetaDelta = -(curThetaDelta)\n }\n\n if (controls.autoRotate.enabled && controls.userControl.rotate) {\n curThetaDelta += 2 * Math.PI / 60 / 60 * controls.autoRotate.speed\n }\n\n theta += curThetaDelta\n phi += curPhiDelta\n\n // restrict phi to be betwee EPS and PI-EPS\n phi = max(EPS, min(PI - EPS, phi))\n // multiply by scaling effect and restrict radius to be between desired limits\n const radius = max(controls.limits.minDistance, min(controls.limits.maxDistance, vec3.length(offset) * curScale))\n\n if (up[2] === 1) {\n offset[0] = radius * sin(phi) * sin(theta)\n offset[2] = radius * cos(phi)\n offset[1] = radius * sin(phi) * cos(theta)\n } else {\n offset[0] = radius * sin(phi) * sin(theta)\n offset[1] = radius * cos(phi)\n offset[2] = radius * sin(phi) * cos(theta)\n }\n\n const newPosition = vec3.add(vec3.create(), target, offset)\n const newView = mat4.lookAt(mat4.create(), newPosition, target, up)\n\n const dragEffect = 1 - max(min(drag, 1.0), 0.01)\n const positionChanged = vec3.distance(position, newPosition) > 0.001\n\n /* let newMatrix = mat4.create()\n newMatrix = mat4.lookAt(newMatrix, newPosition, target, up)\n newMatrix = mat4.translate(matrix, matrix, newPosition) */\n\n // update camera matrix\n // let quaternion = quatFromRotationMatrix(mat4.lookAt(mat4.create(), [0, 0, 0], target, up))\n // let newMatrix = composeMat4(mat4.create(), newPosition, quaternion, [1, 1, 1])\n\n // view = newMatrix\n\n /* if (output) {\n output.controls.thetaDelta = curThetaDelta * dragEffect\n } */\n\n return {\n // controls state\n controls: {\n thetaDelta: curThetaDelta * dragEffect,\n phiDelta: curPhiDelta * dragEffect,\n scale: 1,\n changed: positionChanged\n },\n // camera state\n camera: {\n position: newPosition,\n view: newView\n }\n // matrix: newMatrix\n }\n}\n\n/**\n * compute camera state to rotate the camera\n * @param {Object} controls the controls data/state\n * @param {Object} camera the camera data/state\n * @param {Float} angle value of the angle to rotate\n * @return {Object} the updated camera data/state\n*/\nconst rotate = ({ controls, camera, speed = 1 }, angle) => {\n let {\n thetaDelta,\n phiDelta\n } = controls\n\n if (controls.userControl.rotate) {\n thetaDelta += (angle[0] * speed)\n phiDelta += (angle[1] * speed)\n }\n\n return {\n controls: {\n thetaDelta,\n phiDelta\n },\n camera\n }\n}\n\n/**\n * compute camera state to zoom the camera\n * @param {Object} controls the controls data/state\n * @param {Object} camera the camera data/state\n * @param {Float} zoomDelta value of the zoom\n * @return {Object} the updated camera data/state\n*/\nconst zoom = ({ controls, camera, speed = 1 }, zoomDelta = 0) => {\n let { scale } = controls\n\n if (controls.userControl.zoom && camera && zoomDelta !== undefined && zoomDelta !== 0 && !isNaN(zoomDelta)) {\n const sign = Math.sign(zoomDelta) === 0 ? 1 : Math.sign(zoomDelta)\n zoomDelta = (zoomDelta / zoomDelta) * sign * speed// controls.userControl.zoomSpeed\n // adjust zoom scaling based on distance : the closer to the target, the lesser zoom scaling we apply\n // zoomDelta *= Math.exp(Math.max(camera.scale * 0.05, 1))\n // updated scale after we will apply the new zoomDelta to the current scale\n const newScale = (zoomDelta + controls.scale)\n // updated distance after the scale has been updated, used to prevent going outside limits\n const newDistance = vec3.distance(camera.position, camera.target) * newScale\n\n if (newDistance > controls.limits.minDistance && newDistance < controls.limits.maxDistance) {\n scale += zoomDelta\n }\n // for ortho cameras\n if (camera.projectionType === 'orthographic') {\n const distance = vec3.length(vec3.subtract([], camera.position, camera.target)) * 0.3\n const width = Math.tan(camera.fov) * distance * camera.aspect\n const height = Math.tan(camera.fov) * distance\n\n const projection = require('../cameras/orthographicCamera').setProjection(camera, { width, height })\n camera = projection\n }\n\n /* if (controls.autoAdjustPlanes) {\n // these are empirical values , after a LOT of testing\n const distance = vec3.squaredDistance(camera.target, camera.position)\n camera.near = Math.min(Math.max(5, distance * 0.0015), 100)\n } */\n }\n return { controls: { scale }, camera }\n}\n\n/**\n * compute camera state to pan the camera\n * @param {Object} controls the controls data/state\n * @param {Object} camera the camera data/state\n * @param {Float} delta value of the raw pan delta\n * @return {Object} the updated camera data/state\n*/\nconst pan = ({ controls, camera, speed = 1 }, delta) => {\n const unproject = require('camera-unproject')\n const { projection, view, viewport } = camera\n const combinedProjView = mat4.multiply([], projection, view)\n const invProjView = mat4.invert([], combinedProjView)\n\n const panStart = [\n viewport[2],\n viewport[3],\n 0\n ]\n const panEnd = [\n viewport[2] - delta[0],\n viewport[3] + delta[1],\n 0\n ]\n const unPanStart = unproject([], panStart, viewport, invProjView)\n const unPanEnd = unproject([], panEnd, viewport, invProjView)\n const eyeDistance = vec3.distance(camera.position, camera.eye)\n\n const offset = vec3.subtract([], unPanStart, unPanEnd).map((x) => x * speed * eyeDistance * controls.scale)\n\n return {\n controls,\n camera: {\n position: vec3.add(vec3.create(), camera.position, offset),\n target: vec3.add(vec3.create(), camera.target, offset)\n }\n }\n}\n\n/**\n * compute camera state to 'fit' an object on screen\n * Note1: this is a non optimal but fast & easy implementation\n * @param {Object} controls the controls data/state\n * @param {Object} camera the camera data/state\n * @param {Array} entities - an array of entities (see entitiesFromSolids)\n * @return {Object} the updated camera data/state\n*/\nconst zoomToFit = ({ controls, camera, entities }) => {\n // our camera.fov is already in radian, no need to convert\n const { zoomToFit } = controls\n if (zoomToFit.targets !== 'all') {\n return { controls, camera }\n }\n\n if (entities.length === 0) return { controls, camera }\n\n // compute the overall bounds\n const geometries = entities.map((entity) => entity.geometry)\n const bounds = computeBounds(geometries)\n\n // fixme: for now , we only use the first item\n const { fov, target, position } = camera\n const { tightness } = Object.assign({}, zoomToFit, controlsProps.zoomToFit)\n /*\n - x is scaleForIdealDistance\n - currentDistance is fixed\n - how many times currentDistance * x = idealDistance\n So\n x = idealDistance / currentDistance\n */\n const idealDistanceFromCamera = (bounds.dia * tightness) / Math.tan(fov / 2.0)\n const currentDistance = vec3.distance(target, position)\n const scaleForIdealDistance = idealDistanceFromCamera / currentDistance\n\n return {\n camera: { target: bounds.center },\n controls: { scale: scaleForIdealDistance }\n }\n}\n\n/**\n * compute controls state to 'reset it' to the given state\n * Note1: this is a non optimal but fast & easy implementation\n * @param {Object} controls the controls data/state\n * @param {Object} camera the camera data/state\n * @param {Object} desiredState the state to reset the camera to: defaults to default values\n * @return {Object} the updated camera data/state\n*/\nconst reset = ({ controls, camera }, desiredState) => {\n const options = {\n camera: {\n position: desiredState.camera.position,\n target: desiredState.camera.target,\n projection: mat4.perspective([], camera.fov, camera.aspect, camera.near, camera.far),\n view: desiredState.camera.view\n },\n controls: {\n thetaDelta: desiredState.controls.thetaDelta,\n phiDelta: desiredState.controls.phiDelta,\n scale: desiredState.controls.scale\n }\n }\n return options\n}\n\nmodule.exports = {\n controlsProps,\n controlsState,\n defaults,\n update,\n rotate,\n zoom,\n pan,\n zoomToFit,\n reset\n}\n","const { flatten, toArray } = require('@jscad/array-utils')\n\nconst { meshColor } = require('../rendering/renderDefaults')\n\nconst geom2ToGeometries = require('./geom2ToGeometries')\nconst geom3ToGeometries = require('./geom3ToGeometries')\nconst path2ToGeometries = require('./path2ToGeometries')\n\n/*\n * Assemble a set of renderable entities from the given geometries.\n */\nconst assembleEntities = (geometries) => {\n const entities = geometries.map((geometry) => {\n const visuals = {\n drawCmd: geometry.type === '2d' ? 'drawLines' : 'drawMesh',\n show: true,\n transparent: geometry.isTransparent,\n useVertexColors: true\n }\n const entity = {\n geometry,\n visuals\n }\n return entity\n })\n return entities\n}\n\n/**\n * Convert the given solids into renderable entities.\n * Each 'solid' (V2 geometry) is converted to a WEBGL renderable 'geometry'.\n * The resulting entities are passed as properities to the render.\n * @param {Object} options - options for construction\n * @param {Array} [options.color] - color for rendering, if the solid does not provide a color\n * @param {Boolean} [options.smoothNormals=true] - smooth the normals of 3d solids, rendering a smooth surface\n * @returns {Array} an array of renderable entities\n */\nconst entitiesFromSolids = (options, ...solids) => {\n const defaults = {\n color: meshColor,\n smoothNormals: true\n }\n const { color, smoothNormals } = Object.assign({}, defaults, options)\n\n solids = flatten(toArray(solids))\n solids = solids.filter((solid) => solid && (solid instanceof Object))\n\n const entities = []\n solids.forEach((solid) => {\n let geometries = []\n if ('sides' in solid) {\n geometries = geom2ToGeometries({ color }, solid)\n } else if ('points' in solid) {\n geometries = path2ToGeometries({ color }, solid)\n } else if ('polygons' in solid) {\n geometries = geom3ToGeometries({\n smoothLighting: smoothNormals,\n normalThreshold: 0.3,\n color\n }, solid)\n }\n entities.push(...assembleEntities(geometries))\n })\n return entities\n}\n\nmodule.exports = entitiesFromSolids\n","const mat4 = require('gl-mat4')\n\nconst maxIndex = Math.floor(65535 / 2) // two vertices per segment\n\n/*\n * Convert the given solid into one or more geometries for rendering.\n * @param {Object} options - options for conversion\n * @param {Array} options.color - RGBA of solid\n * @param {geom2} solid - the solid to convert\n * @return {Array} list of new geometries\n */\nconst geom2ToGeometries = (options, solid) => {\n let { color } = options\n\n const sides = solid.sides\n if (sides.length === 0) return []\n\n if ('color' in solid) color = solid.color\n const isTransparent = (color[3] < 1.0)\n const colors = []\n const numgeometries = Math.floor(sides.length / (maxIndex)) + 1\n\n const addColor = (startColor, endColor) => {\n // each line needs 2 colors: startColor and endColor\n // endColor is optional\n colors.push(startColor, endColor || startColor)\n }\n\n const geometries = []\n for (let g = 0; g < numgeometries; g++) {\n const offset = g * maxIndex\n const endset = Math.min(offset + maxIndex, sides.length)\n const positions = []\n\n for (let i = offset; i < endset; i++) {\n const side = sides[i]\n if (side.color) {\n // backfill colors, so colors array is not used unless at least one side has color defined\n if (colors.length === 0 && positions.length > 0) {\n const toFill = positions.length\n for (let j = 0; j < toFill; j++) {\n colors.push(color) // push default color\n }\n }\n // shader actually allows for gradient on the lines by design\n addColor(side.color, side.endColor)\n } else if (colors.length) {\n addColor(color)\n }\n positions.push([side[0][0], side[0][1], 0])\n positions.push([side[1][0], side[1][1], 0])\n }\n // assemble the geometry\n const normals = positions.map((x) => [0, 0, -1])\n const indices = positions.map((x, i) => i)\n const transforms = solid.transforms ? mat4.clone(solid.transforms) : mat4.create()\n\n // FIXME positions should be Float32Array buffers to eliminate another conversion\n // FIXME normals should be Float32Array buffers to eliminate another conversion\n // FIXME indices should be Uint16Array buffers to eliminate another conversion\n geometries.push({ type: '2d', positions, normals, indices, transforms, color, colors, isTransparent })\n }\n return geometries\n}\n\nmodule.exports = geom2ToGeometries\n","const vec3 = require('gl-vec3')\nconst mat4 = require('gl-mat4')\n\nconst maxIndex = 65535\n\n/*\n * Convert the given solid into one or more geometries for rendering.\n * @param {Object} options - options for conversion\n * @param {Array} options.color - RGBA of solid\n * @param {Boolean} options.smoothLighting - set to true in order to use interpolated vertex normals\n * this creates nice round spheres but does not represent the shape of the actual model\n * @param {geom3} solid - the solid to convert\n * @return {Array} list of new geometries\n */\nconst geom3ToGeometries = (options, solid) => {\n let { color, smoothLighting } = options\n\n if ('color' in solid) color = solid.color\n\n const polygons = solid.polygons\n const transforms = solid.transforms ? mat4.clone(solid.transforms) : mat4.create()\n\n const geometries = []\n\n let setstart = 0\n while (setstart < polygons.length) {\n // calculate end of this set\n let vcount = 0\n let setend = setstart\n for (let i = setstart; i < polygons.length; i++) {\n vcount += polygons[i].vertices.length\n if (vcount > maxIndex) break\n setend++\n }\n // temporary storage\n // create attributes of geometry\n const positions = []\n const normals = []\n const indices = []\n const colors = []\n const isTransparent = (color[3] < 1.0)\n\n for (let i = setstart; i < setend; i++) {\n const polygon = polygons[i]\n const vertices = polygon.vertices\n\n const normal = calculateNormal(polygon)\n const faceColor = polygonColor(polygon, color)\n\n const polygonIndices = []\n for (let j = 0; j < vertices.length; j++) {\n const position = vertices[j]\n\n positions.push(position)\n normals.push(normal)\n colors.push(faceColor)\n\n const index = positions.length - 1\n polygonIndices.push(index)\n }\n // add indices to list\n for (let j = 2; j < polygonIndices.length; j++) {\n indices.push([polygonIndices[0], polygonIndices[j - 1], polygonIndices[j]])\n }\n }\n // FIXME positions should be Float32Array buffers to eliminate another conversion\n // FIXME normals should be Float32Array buffers to eliminate another conversion\n // FIXME indices should be Uint16Array buffers to eliminate another conversion\n // FIXME colors should be Float32Array buffers to eliminate another conversion\n // assemble the geometry\n const geometry = {\n type: '3d',\n positions,\n normals,\n indices,\n colors,\n transforms,\n isTransparent\n }\n geometries.push(geometry)\n\n // continue on\n setstart = setend\n }\n return geometries\n}\n\n/*\n * TODO\n * TODO Implement smoothing\n * TODO\n */\nconst smoothing = () => {\n const polygons = []\n const color = []\n let isTransparent = true\n const smoothLighting = true\n const normalThreshold = 0.5 // threshold beyond which to split normals\n const positions = []\n const normals = []\n const indices = []\n const colors = []\n const normalPositionLookup = []\n let tupplesIndex = 0\n for (let i = 0; i < polygons.length; i++) {\n const polygon = polygons[i]\n const vertices = polygon.vertices\n const faceColor = polygonColor(polygon, color)\n const normal = calculateNormal(polygon)\n if (faceColor && faceColor[3] !== 1) isTransparent = true\n const polygonIndices = []\n // we need unique tupples of normal + position, that gives us a specific index (indices)\n // if the angle between a given normal and another normal is less than X they are considered the same\n for (let j = 0; j < vertices.length; j++) {\n let index\n const position = vertices[j]\n if (smoothLighting) {\n const candidateTupple = { normal, position }\n const existingTupple = fuzyNormalAndPositionLookup(normalPositionLookup, candidateTupple, normalThreshold)\n if (!existingTupple) {\n const existingPositing = normalPositionLookup[candidateTupple.position]\n const itemToAdd = [{ normal: candidateTupple.normal, index: tupplesIndex }]\n if (!existingPositing) {\n normalPositionLookup[candidateTupple.position] = itemToAdd\n } else {\n normalPositionLookup[candidateTupple.position] = normalPositionLookup[candidateTupple.position]\n .concat(itemToAdd)\n }\n index = tupplesIndex\n if (faceColor) {\n colors.push(faceColor)\n }\n normals.push(normal)\n positions.push(position)\n tupplesIndex += 1\n } else {\n index = existingTupple.index\n }\n } else {\n if (faceColor) {\n colors.push(faceColor)\n }\n normals.push(normal)\n positions.push(position)\n index = positions.length - 1\n }\n polygonIndices.push(index)\n }\n for (let j = 2; j < polygonIndices.length; j++) {\n indices.push([polygonIndices[0], polygonIndices[j - 1], polygonIndices[j]])\n }\n }\n}\n\n/**\n * return the color information of a polygon\n * @param {Object} polygon a polygon\n * @param {Object} color a default color\n * @returns {Array} `[r, g, b, a]`\n */\nconst polygonColor = (polygon, color) => {\n let faceColor = color\n\n if (polygon.color) {\n faceColor = polygon.color\n }\n // opaque is default\n if (faceColor && faceColor.length < 4) {\n faceColor.push(1.0)\n }\n return faceColor\n}\n\n/*\n * Calculate the normal of the given polygon\n */\nconst calculateNormal = (polygon) => {\n if (polygon.plane) return vec3.clone(polygon.plane)\n\n const vertices = polygon.vertices\n const ba = vec3.create()\n vec3.subtract(ba, vertices[1], vertices[0])\n const ca = vec3.create()\n vec3.subtract(ca, vertices[2], vertices[0])\n const normal = vec3.create()\n vec3.cross(normal, ba, ca)\n vec3.normalize(normal, normal)\n return normal\n}\n\n/*\n * determine if the two given normals are 'similar' ie if the distance/angle between the\n * two is less than the given threshold\n * @param {Array} normal a 3 component array normal\n * @param {Array} otherNormal another 3 component array normal\n * @returns {Boolean} true if the two normals are similar\n */\nconst areNormalsSimilar = (normal, otherNormal, threshold) => (vec3.distance(normal, otherNormal) <= threshold)\n\nconst fuzyNormalAndPositionLookup = (normalPositionLookup, toCompare, normalThreshold) => {\n const normalsCandidates = normalPositionLookup[toCompare.position]\n if (normalsCandidates) {\n // normalPositionLookup[toCompare.position] = normalPositionLookup[toCompare.position].concat([toCompare.normal])\n // get array of normals with same position\n for (let i = 0; i < normalsCandidates.length; i++) {\n const normal = normalsCandidates[i].normal\n const similarNormal = areNormalsSimilar(normal, toCompare.normal, normalThreshold)\n const similar = similarNormal\n if (similar) {\n return { tupple: { position: toCompare.position, normal }, index: normalsCandidates[i].index }\n }\n }\n }\n return undefined\n}\n\nmodule.exports = geom3ToGeometries\n","const mat4 = require('gl-mat4')\n\n// The only data types accepted by WebGL (and OpenGL ES 2.0) for indices are unsigned bytes and unsigned shorts.\n// Since an unsigned short has a range of 0-65535, this means that gl.DrawElements can only reference 65k vertices per draw call.\nconst maxIndex = Math.floor(65535 / 2) - 2 // two vertices per segment, less closing segment\n\n/*\n * Convert the given solid into one or more geometries for rendering.\n * @param {Object} options - options for conversion\n * @param {Array} options.color - RGBA of solid\n * @param {path2} solid - the solid to convert\n * @return {Array} list of new geometries\n */\nconst path2ToGeometries = (options, solid) => {\n let { color } = options\n\n const points = solid.points\n if (points.length === 0) return []\n\n if ('color' in solid) color = solid.color\n const isTransparent = (color[3] < 1.0)\n\n const numgeometries = Math.floor(points.length / (maxIndex)) + 1\n\n const geometries = []\n for (let g = 0; g < numgeometries; g++) {\n const offset = g * maxIndex\n const endset = Math.min(offset + maxIndex, points.length)\n const positions = []\n let prevvertice\n for (let i = offset; i < endset; i++) {\n const point = points[i]\n if (prevvertice) {\n positions.push([prevvertice[0], prevvertice[1], 0])\n positions.push([point[0], point[1], 0])\n }\n prevvertice = point\n }\n // add the last segment if necessary\n if ((g + 1) === numgeometries && solid.isClosed && prevvertice) {\n const point = points[0]\n positions.push([prevvertice[0], prevvertice[1], 0])\n positions.push([point[0], point[1], 0])\n }\n // assemble the geometry\n const normals = positions.map((x) => [0, 0, -1])\n const indices = positions.map((x, i) => i) // FIXME: temporary, not really needed, need to change drawLines\n const transforms = solid.transforms ? mat4.clone(solid.transforms) : mat4.create()\n\n // FIXME positions should be Float32Array buffers to eliminate another conversion\n // FIXME normals should be Float32Array buffers to eliminate another conversion\n // FIXME indices should be Uint16Array buffers to eliminate another conversion\n geometries.push({ type: '2d', positions, normals, indices, transforms, color, isTransparent })\n }\n return geometries\n}\n\nmodule.exports = path2ToGeometries\n","module.exports = {\n prepareRender: require('./rendering/render'),\n drawCommands: {\n // draw commands should bootstrap themselves the first time they are run\n drawGrid: require('./rendering/commands/drawGrid/multi.js'),\n drawAxis: require('./rendering/commands/drawAxis'),\n drawMesh: require('./rendering/commands/drawMesh'),\n drawLines: require('./rendering/commands/drawLines')\n },\n cameras: {\n camera: require('./cameras/camera'),\n orthographic: require('./cameras/orthographicCamera'),\n perspective: require('./cameras/perspectiveCamera')\n },\n controls: {\n orbit: require('./controls/orbitControls')\n },\n entitiesFromSolids: require('./geometry-utils-V2/entitiesFromSolids')\n\n}\n","const mat4 = require('gl-mat4')\n\nconst drawAxis = (regl, params) => {\n const defaults = {\n xColor: [1, 0, 0, 1],\n yColor: [0, 1, 0, 1],\n zColor: [0, 0, 1, 1],\n size: 10,\n lineWidth: 3, // FIXME/ linewidth has been \"deprecated\" in multiple browsers etc, need a workaround,\n alwaysVisible: true // to have the widget alway visible 'on top' of the rest of the scene\n }\n let { size, xColor, yColor, zColor, lineWidth, alwaysVisible } = Object.assign({}, defaults, params)\n\n if (lineWidth > regl.limits.lineWidthDims[1]) {\n lineWidth = regl.limits.lineWidthDims[1]\n }\n const points = [\n 0, 0, 0,\n size, 0, 0\n ]\n\n const commandParams = {\n frag: `precision mediump float;\n uniform vec4 color;\n void main() {\n gl_FragColor = color;\n }`,\n vert: `\n precision mediump float;\n attribute vec3 position;\n uniform mat4 model, view, projection;\n void main() {\n gl_Position = projection * view * model * vec4(position, 1);\n }`,\n\n uniforms: {\n model: (context, props) => props && props.model ? props.model : mat4.identity([]),\n color: (context, props) => props.color,\n angle: (contet, props) => props.angle\n },\n attributes: {\n position: points\n },\n count: points.length / 3,\n primitive: 'line loop',\n lineWidth,\n depth: {\n enable: !alwaysVisible // disable depth testing to have the axis widget 'alway on top' of other items in the 3d viewer\n }\n }\n\n const xAxisModel = mat4.identity([])\n const yAxisModel = mat4.rotateZ(mat4.create(), mat4.identity([]), Math.PI / 2)\n const zAxisModel = mat4.rotateY(mat4.create(), mat4.identity([]), -Math.PI / 2)\n const single = regl(commandParams)\n return (props) => {\n const defaults = {\n model: mat4.identity([])\n }\n props = Object.assign({}, defaults, props)\n return single([\n { color: xColor, model: mat4.multiply(mat4.create(), props.model, xAxisModel) }, // X\n { color: yColor, model: mat4.multiply(mat4.create(), props.model, yAxisModel) }, // Y\n { color: zColor, model: mat4.multiply(mat4.create(), props.model, zAxisModel) } // Z\n ])\n }\n}\n\nmodule.exports = drawAxis\n","const mat4 = require('gl-mat4')\n\nconst makeDrawGrid = (regl, params = {}) => {\n const positions = []\n const defaults = {\n visuals: {\n color: [0, 0, 1, 1],\n fadeOut: false\n },\n ticks: 1,\n size: [16, 16],\n centered: false,\n lineWidth: 2\n }\n const visuals = Object.assign({}, defaults.visuals, params.visuals || {})\n const { fadeOut, color } = visuals\n const { size, ticks, centered, lineWidth } = Object.assign({}, defaults, params)\n\n const width = size[0]\n const length = size[1]\n\n // if (false) {\n // const halfWidth = width * 0.5\n // const halfLength = length * 0.5\n // // const gridLine =\n // positions.push(-halfWidth, 0, 0)\n // positions.push(halfWidth, 0, 0)\n // }\n\n if (centered) {\n const halfWidth = width * 0.5\n const halfLength = length * 0.5\n\n const remWidth = halfWidth % ticks\n const widthStart = -halfWidth + remWidth\n const widthEnd = -widthStart\n\n const remLength = halfLength % ticks\n const lengthStart = -halfLength + remLength\n const lengthEnd = -lengthStart\n\n const skipEvery = 0\n\n for (let i = widthStart, j = 0; i <= widthEnd; i += ticks, j += 1) {\n if (j % skipEvery !== 0) {\n positions.push(lengthStart, i, 0)\n positions.push(lengthEnd, i, 0)\n positions.push(lengthStart, i, 0)\n }\n }\n for (let i = lengthStart, j = 0; i <= lengthEnd; i += ticks, j += 1) {\n if (j % skipEvery !== 0) {\n positions.push(i, widthStart, 0)\n positions.push(i, widthEnd, 0)\n positions.push(i, widthStart, 0)\n }\n }\n } else {\n for (let i = -width * 0.5; i <= width * 0.5; i += ticks) {\n positions.push(-length * 0.5, i, 0)\n positions.push(length * 0.5, i, 0)\n positions.push(-length * 0.5, i, 0)\n }\n\n for (let i = -length * 0.5; i <= length * 0.5; i += ticks) {\n positions.push(i, -width * 0.5, 0)\n positions.push(i, width * 0.5, 0)\n positions.push(i, -width * 0.5, 0)\n }\n }\n return regl({\n vert: `precision mediump float;\n\n uniform float camNear, camFar;\n uniform mat4 model, view, projection;\n\n attribute vec3 position;\n varying vec3 fragNormal, fragPosition;\n varying vec4 worldPosition;\n\n void main() {\n fragPosition = position;\n worldPosition = model * vec4(position, 1);\n vec4 glPosition = projection * view * worldPosition;\n gl_Position = glPosition;\n }`,\n frag: `precision mediump float;\n uniform vec4 color;\n varying vec3 fragNormal, fragPosition;\n varying vec4 worldPosition;\n\n uniform vec4 fogColor;\n uniform bool fadeOut;\n void main() {\n float dist = .5;\n if(fadeOut){\n dist = distance( vec2(0.,0.), vec2(worldPosition.x, worldPosition.y));\n dist *= 0.0025;\n dist = sqrt(dist);\n }\n\n gl_FragColor = mix(color, fogColor, dist);\n }\n `,\n\n attributes: {\n position: regl.buffer(positions)\n },\n count: positions.length / 3,\n uniforms: {\n model: (context, props) => props && props.model ? props.model : mat4.identity([]),\n color: (context, props) => props && props.color ? props.color : color,\n fogColor: (context, props) => props && props.color\n ? [props.color[0], props.color[1], props.color[2], 0]\n : [color[0], color[1], color[2], 0.0],\n fadeOut: (context, props) => props && props.fadeOut !== undefined ? props.fadeOut : fadeOut\n },\n lineWidth: (context, props) => Math.min((props && props.lineWidth ? props.lineWidth : lineWidth), regl.limits.lineWidthDims[1]),\n primitive: 'lines',\n cull: {\n enable: true,\n face: 'front'\n },\n polygonOffset: {\n enable: true,\n offset: {\n factor: 1,\n units: Math.random() * 10\n }\n },\n blend: {\n enable: true,\n func: {\n src: 'src alpha',\n dst: 'one minus src alpha'\n }\n }\n\n })\n}\n\nmodule.exports = makeDrawGrid\n","const makeDrawMultiGrid = (regl, params) => {\n const defaults = {\n size: [50, 50],\n ticks: [10, 1]\n }\n const { size, ticks } = Object.assign({}, defaults, params)\n const drawMainGrid = require('./index')(regl, { size, ticks: ticks[0] })\n const drawSubGrid = require('./index')(regl, { size, ticks: ticks[1] })\n const drawGrid = (props) => {\n drawMainGrid(props)\n drawSubGrid({ color: props.subColor, fadeOut: props.fadeOut })\n }\n return drawGrid\n}\n\nmodule.exports = makeDrawMultiGrid\n","const vColorFrag = `\nprecision mediump float;\nuniform vec4 ucolor;\n\nvoid main () {\n gl_FragColor = ucolor;\n}\n`\nmodule.exports = { frag: vColorFrag }\n","const mat4 = require('gl-mat4')\n\nconst { meshColor } = require('../../renderDefaults')\n\nconst drawLines = (regl, params = {}) => {\n const defaults = {\n color: meshColor,\n geometry: undefined\n }\n let { geometry, color, transparent } = Object.assign({}, defaults, params)\n\n if ('color' in geometry) color = geometry.color\n\n const hasIndices = !!(geometry.indices && geometry.indices.length > 0)\n const hasNormals = !!(geometry.normals && geometry.normals.length > 0)\n const hasVertexColors = !!(geometry.colors && geometry.colors.length > 0)\n\n const vert = hasVertexColors ? require('./vColorShaders').vert : require('./meshShaders').vert\n const frag = hasVertexColors ? require('./vColorShaders').frag : require('./colorOnlyShaders').frag\n\n const commandParams = {\n primitive: 'lines',\n vert,\n frag,\n\n uniforms: {\n model: (context, props) => props.model || geometry.transforms || mat4.create(),\n ucolor: (context, props) => (props && props.color) ? props.color : color\n },\n attributes: {\n position: regl.buffer({ usage: 'static', type: 'float', data: geometry.positions })\n }\n }\n\n // blending is a bit tricky\n // https://stackoverflow.com/questions/51938739/regl-color-and-alpha-blending-of-primitives\n if (transparent) {\n commandParams.blend = {\n enable: true,\n func: { src: 'src alpha', dst: 'one minus src alpha' }\n }\n }\n\n if (hasVertexColors) {\n commandParams.attributes.color = regl.buffer({ usage: 'static', type: 'float', data: geometry.colors })\n }\n\n if (hasIndices) {\n commandParams.elements = regl.elements({ usage: 'static', type: 'uint16', data: geometry.indices })\n }\n\n if (hasNormals) {\n commandParams.attributes.normal = regl.buffer({ usage: 'static', type: 'float', data: geometry.normals })\n }\n\n return regl(commandParams)\n}\n\nmodule.exports = drawLines\n","const meshVert = `\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\n\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\n\n\nvoid main() {\n\n\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n`\n\nconst meshFrag = `\nprecision mediump float;\nvarying vec3 surfaceNormal;\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform vec4 ucolor;\nuniform vec3 lightDirection;\nuniform vec3 opacity;\n\nvarying vec4 _worldSpacePosition;\n\nuniform vec2 printableArea;\n\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n\n float v = 0.8; // shadow value\n vec4 endColor = ucolor;\n\n vec3 ambient = ambientLightAmount * endColor.rgb;\n float cosTheta = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(cosTheta , 0.0, 1.0 );\n\n float cosTheta2 = dot(surfaceNormal, vec3(-lightDirection.x, -lightDirection.y, lightDirection.z));\n vec3 diffuse2 = diffuseLightAmount * endColor.rgb * clamp(cosTheta2 , 0.0, 1.0 );\n\n gl_FragColor = vec4((ambient + diffuse + diffuse2 * v), endColor.a);\n}`\n\nmodule.exports = { vert: meshVert, frag: meshFrag }\n","const vColorVert = `\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\nattribute vec4 color;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\nvarying vec4 vColor;\n\nvoid main() {\n vColor = color;\n\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n`\n\nconst vColorFrag = `\nprecision mediump float;\nvarying vec4 vColor;\n\nvoid main () {\n gl_FragColor = vColor;\n}\n`\nmodule.exports = { frag: vColorFrag, vert: vColorVert }\n","const mat4 = require('gl-mat4')\n\nconst { meshColor } = require('../../renderDefaults')\n\nconst drawMesh = (regl, params = { extras: {} }) => {\n const defaults = {\n useVertexColors: true,\n dynamicCulling: true,\n geometry: undefined,\n color: meshColor,\n visuals: {}\n }\n const { geometry, dynamicCulling, useVertexColors, color, visuals } = Object.assign({}, defaults, params)\n // let ambientOcclusion = vao(geometry.indices, geometry.positions, 64, 64)\n const ambientOcclusion = regl.buffer([])\n\n // vertex colors or not ?\n const hasIndices = !!(geometry.indices && geometry.indices.length > 0)\n const hasNormals = !!(geometry.normals && geometry.normals.length > 0)\n const transparent = 'transparent' in visuals ? visuals.transparent : false\n const hasVertexColors = !!(useVertexColors && geometry.colors && geometry.colors.length > 0)\n const transforms = geometry.transforms || mat4.create()\n const flip = mat4.determinant(transforms) < 0\n const cullFace = dynamicCulling\n ? (flip ? 'front' : 'back')\n : 'back'\n\n const vert = hasVertexColors ? require('./vColorShaders').vert : require('./meshShaders').vert\n const frag = hasVertexColors ? require('./vColorShaders').frag : require('./meshShaders').frag\n const modelMatrixInv = mat4.invert(mat4.create(), transforms)\n\n let commandParams = {\n primitive: 'triangles',\n vert,\n frag,\n\n uniforms: {\n model: (context, props) => transforms,\n ucolor: (context, props) => (props && props.color) ? props.color : color,\n // semi hack, woraround to enable/disable vertex colors !!!\n vColorToggler: (context, props) => (props && props.useVertexColors && props.useVertexColors === true) ? 1.0 : 0.0,\n // experimental\n unormal: (context, props) => {\n const modelViewMatrix = mat4.invert(mat4.create(), props.camera.view)\n mat4.multiply(modelViewMatrix, modelMatrixInv, modelViewMatrix)\n mat4.transpose(modelViewMatrix, modelViewMatrix)\n return modelViewMatrix\n }\n },\n attributes: {\n position: regl.buffer({ usage: 'static', type: 'float', data: geometry.positions }),\n ao: ambientOcclusion\n },\n cull: {\n enable: true,\n face: cullFace\n }\n }\n\n // blending is a bit tricky\n // https://stackoverflow.com/questions/51938739/regl-color-and-alpha-blending-of-primitives\n if (transparent) {\n commandParams.blend = {\n enable: true,\n func: { src: 'src alpha', dst: 'one minus src alpha' }\n }\n }\n\n if (geometry.cells) {\n commandParams.elements = geometry.cells\n } else if (hasIndices) {\n commandParams.elements = regl.elements({ usage: 'static', type: 'uint16', data: geometry.indices })\n } else if (geometry.triangles) {\n commandParams.elements = geometry.triangles\n } else {\n commandParams.count = geometry.positions.length / 3\n }\n\n if (hasNormals) {\n commandParams.attributes.normal = regl.buffer({ usage: 'static', type: 'float', data: geometry.normals })\n }\n if (hasVertexColors) {\n commandParams.attributes.color = regl.buffer({ usage: 'static', type: 'float', data: geometry.colors })\n }\n\n // Splice in any extra params\n commandParams = Object.assign({}, commandParams, params.extras)\n return regl(commandParams)\n}\n\nmodule.exports = drawMesh\n","const meshFrag = `\nprecision mediump float;\nvarying vec3 surfaceNormal;\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform vec4 ucolor;\nuniform vec3 lightDirection;\nuniform vec3 opacity;\n\nvarying vec4 _worldSpacePosition;\n\nuniform vec2 printableArea;\n\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n\n float v = 0.8; // shadow value\n vec4 endColor = ucolor;\n\n vec3 ambient = ambientLightAmount * endColor.rgb;\n float cosTheta = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(cosTheta , 0.0, 1.0 );\n\n float cosTheta2 = dot(surfaceNormal, vec3(-lightDirection.x, -lightDirection.y, lightDirection.z));\n vec3 diffuse2 = diffuseLightAmount * endColor.rgb * clamp(cosTheta2 , 0.0, 1.0 );\n\n gl_FragColor = vec4((ambient + diffuse + diffuse2 * v), endColor.a);\n}`\n\nconst meshVert = `\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection;\n\nattribute vec3 position, normal;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\n\nvoid main() {\n surfacePosition = position;\n surfaceNormal = normal;\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n}\n`\n\nmodule.exports = { vert: meshVert, frag: meshFrag }\n","const vColorVert = `\nprecision mediump float;\n\nuniform float camNear, camFar;\nuniform mat4 model, view, projection, unormal;\n\nattribute vec3 position, normal;\nattribute vec4 color;\n\nattribute float ao;\nvarying float ambientAo;\n\nvarying vec3 surfaceNormal, surfacePosition;\nvarying vec4 _worldSpacePosition;\nvarying vec4 vColor;\n\nvoid main() {\n surfacePosition = (unormal * vec4(position, 1.0)).xyz;\n surfaceNormal = normalize((unormal * vec4(normal, 1.0)).xyz); //vec4 transformedNormal = uNormalMatrix * vec4(aVertexNormal, 1.0);\n vec4 worldSpacePosition = model * vec4(position, 1);\n _worldSpacePosition = worldSpacePosition;\n //gl_Position = projection * view * worldSpacePosition;\n\n vColor = color;\n\n //ambientAo = (1. - ao) * (0.5 * max(normal.x, 0.) + 0.5);\n\n vec4 glPosition = projection * view * model * vec4(position, 1);\n gl_Position = glPosition;\n //gl_Position = zBufferAdjust(glPosition, camNear, camFar);\n}\n`\nconst vColorFrag = `\nprecision mediump float;\nvarying vec3 surfaceNormal, surfacePosition;\n\nuniform float ambientLightAmount;\nuniform float diffuseLightAmount;\nuniform float specularLightAmount;\n\nuniform vec3 lightDirection;\nuniform vec4 lightColor;\nuniform vec3 opacity;\nuniform float uMaterialShininess;\n\nvarying vec4 vColor;\nuniform vec4 ucolor;\nuniform float vColorToggler;\n\nuniform vec2 printableArea;\nvec4 errorColor = vec4(0.15, 0.15, 0.15, 0.3);//vec4(0.15, 0.15, 0.15, 0.3);\nvarying vec4 _worldSpacePosition;\nvarying float ambientAo;\n\nvoid main () {\n vec4 depth = gl_FragCoord;\n vec4 endColor = vColor * vColorToggler + ucolor * (1.0 - vColorToggler);\n\n vec3 ambient = ambientLightAmount * endColor.rgb ; //ambientAo * \n\n float diffuseWeight = dot(surfaceNormal, lightDirection);\n vec3 diffuse = diffuseLightAmount * endColor.rgb * clamp(diffuseWeight , 0.0, 1.0 );\n\n //specular\n \n vec4 specularColor = vec4(lightColor);\n vec3 eyeDirection = normalize(surfacePosition.xyz);\n vec3 reflectionDirection = reflect(-lightDirection, -surfaceNormal);\n float specularLightWeight = pow(max(dot(reflectionDirection, eyeDirection), 0.0), uMaterialShininess);\n vec3 specular = specularColor.rgb * specularLightWeight * specularLightAmount;\n\n gl_FragColor = vec4((ambient + diffuse + specular), endColor.a);\n}\n`\n\nmodule.exports = { frag: vColorFrag, vert: vColorVert }\n","const renderContext = require('./renderContext')\nconst renderDefaults = require('./renderDefaults')\n\nconst prepareRender = (params) => {\n const defaults = {\n // extensions:['oes_element_index_uint']\n }\n const options = Object.assign(\n {},\n defaults,\n params.glOptions,\n {\n // canvas: (element.nodeName.toLowerCase() === 'canvas') ? element : undefined,\n // container: (element.nodeName.toLowerCase() !== 'canvas') ? element : undefined\n onDone: (err, callback) => {\n if (err) {\n throw err\n }\n }\n }\n )\n // setup regl\n const regl = require('regl')(options)// , (width, height))\n // setup draw command cache\n // const drawCache = {}\n const drawCache2 = new Map()\n\n // create the main draw command\n const command = (props) => {\n props.rendering = Object.assign({}, renderDefaults, props.rendering)\n\n // props is the first parameter, the second one is a function, doing the actual rendering\n renderContext(regl)(props, (context) => {\n regl.clear({\n color: props.rendering.background,\n depth: 1\n })\n // this whole thing is very inneficiant and innelegant ... improve in the future\n if (props.entities) {\n // we need to sort transparents vs non transparents: transparent objects should be rendered last\n // since you can see 'behind' transparent ones, so what is behind needs to already be rendered\n props.entities\n .sort((a, b) => {\n const aTransparent = 'transparent' in a.visuals ? a.visuals.transparent : false\n const bTransparent = 'transparent' in b.visuals ? b.visuals.transparent : false\n return (aTransparent === bTransparent) ? 0 : aTransparent ? 1 : -1\n })\n .forEach((entity) => {\n const { visuals } = entity\n const show = ('show' in visuals) ? visuals.show : true\n if (show && visuals.drawCmd && props.drawCommands[visuals.drawCmd]) {\n let drawCmd\n if (visuals.cacheId) {\n drawCmd = drawCache2.get(visuals.cacheId)\n } else {\n visuals.cacheId = drawCache2.size\n drawCmd = props.drawCommands[visuals.drawCmd](regl, entity)\n drawCache2.set(visuals.cacheId, drawCmd)\n }\n const drawParams = { // FIXME: horrible, tidy up !!: what is needed/should be passed to render pass ?\n ...entity,\n ...visuals,\n camera: props.camera\n }\n drawCmd(drawParams)\n }\n })\n }\n })\n }\n // actual render function\n return function render (data) {\n // important for stats, correct resizing etc\n regl.poll()\n command(data)// meh ??\n // tick += 0.01\n }\n}\n\nmodule.exports = prepareRender\n","const mat4 = require('gl-mat4')\n\n/** function that injects most of the uniforms into the regl context:\n * ie keeps track of all regl global state.\n * @param {} regl\n * @param {} params={}\n */\nconst renderWrapper = (regl, params = {}) => {\n const { fbo } = params\n\n const commandParams = {\n cull: {\n enable: true\n },\n context: {\n lightDirection: [0.2, 0.2, 1]// [0.19, 0.47, 0.29]\n },\n uniforms: {\n view: (context, props) => props.camera.view,\n eye: (context, props) => props.camera.position,\n // projection: (context, props) => mat4.perspective([], props.camera.fov, context.viewportWidth/context.viewportHeight, props.camera.near, props.camera.far), //props.camera.projection,//context.viewportWidth also an alternative?\n projection: (context, props) => props.camera.projection,\n camNear: (context, props) => props.camera.near,\n camFar: (context, props) => props.camera.far,\n // accessories to the above\n invertedView: (context, props) => mat4.invert([], props.camera.view),\n // lighting stuff, needs cleanup\n lightPosition: (context, props) => props && props.rendering && props.rendering.lightPosition ? props.rendering.lightPosition : [100, 200, 100],\n lightDirection: (context, props) => props && props.rendering && props.rendering.lightDirection ? props.rendering.lightDirection : context.lightDirection || [0, 0, 0],\n lightView: (context) => mat4.lookAt([], context.lightDirection, [0.0, 0.0, 0.0], [0.0, 0.0, 1.0]),\n lightProjection: mat4.ortho([], -25, -25, -20, 20, -25, 25),\n lightColor: (context, props) => props && props.rendering && props.rendering.lightColor ? props.rendering.lightColor : [1, 0.8, 0],\n ambientLightAmount: (context, props) => props && props.rendering && props.rendering.ambientLightAmount ? props.rendering.ambientLightAmount : 0.3,\n diffuseLightAmount: (context, props) => props && props.rendering && props.rendering.diffuseLightAmount ? props && props.rendering && props.rendering.diffuseLightAmount : 0.89,\n specularLightAmount: (context, props) => props && props.rendering && props.rendering.specularLightAmount ? props.rendering.specularLightAmount : 0.16,\n uMaterialShininess: (context, props) => props && props.rendering && props.rendering.materialShininess ? props.rendering.materialShininess : 8.0,\n materialAmbient: [0.5, 0.8, 0.3],\n materialDiffuse: [0.5, 0.8, 0.3],\n materialSpecular: [0.5, 0.8, 0.3]\n },\n framebuffer: fbo\n }\n\n // it returns a function\n return regl(Object.assign({}, commandParams, params.extras))\n}\n\nmodule.exports = renderWrapper\n","module.exports = {\n background: [1, 1, 1, 1],\n meshColor: [0, 0.6, 1, 1], // default face color or line color\n lightColor: [1, 1, 1, 1], // note: for now there is a single preset light, not an entity\n lightDirection: [0.2, 0.2, 1],\n lightPosition: [100, 200, 100],\n ambientLightAmount: 0.3,\n diffuseLightAmount: 0.89,\n specularLightAmount: 0.16,\n materialShininess: 8.0\n}\n","/**\n * Flatten the given array into a single array of elements.\n * The given array can be composed of multiple depths of objects and or arrays.\n * @param {Array} array - array to flatten\n * @returns {Array} a flat array with a single list of elements\n * @alias module:array-utils.flatten\n * @example\n * const flat = flatten([[1], [2, 3, [4, 5]], 6]) // returns [1, 2, 3, 4, 5, 6]\n */\nconst flatten = (arr) => arr.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatten(val)) : acc.concat(val), [])\n\nmodule.exports = flatten\n","/**\n * Compare function for sorting arrays of numbers.\n * @param {Number} a - first number\n * @param {Number} b - second number\n * @return {Number} result of a - b\n * @alias module:array-utils.fnNumberSort\n * @example\n * const numbers = [2, 1, 4, 3, 6, 5, 8, 7, 9, 0]\n * const sorted = numbers.sort(fnNumberSort)\n */\nconst fnNumberSort = (a, b) => a - b\n\nmodule.exports = fnNumberSort\n","/**\n * Return the first element of the given array.\n * @param {*} array - anything\n * @returns {*} first element of the array, or undefined\n * @alias module:array-utils.head\n * @example\n * let element = head([1, 2])\n */\nconst head = (array) => {\n if (!Array.isArray(array) || array.length === 0) {\n return undefined\n }\n return array[0]\n}\n\nmodule.exports = head\n","/**\n * Utility functions for arrays.\n * @module array-utils\n * @example\n * const { flatten, head } = require('@jscad/array-utils')\n */\n\nmodule.exports = {\n flatten: require('./flatten'),\n fnNumberSort: require('./fnNumberSort'),\n head: require('./head'),\n insertSorted: require('./insertSorted'),\n nth: require('./nth'),\n padToLength: require('./padToLength'),\n toArray: require('./toArray')\n}\n","/**\n * Insert the given element into the give array using the compareFunction.\n * @param {Array} array - array in which to insert\n * @param {*} element - element to insert into the array\n * @param {Function} compareFunction - a function that defines the sort order of elements\n * @alias module:array-utils.insertSorted\n * @example\n * const numbers = [1, 5]\n * const result = insertSorted(numbers, 3, fnNumberSort)\n */\nconst insertSorted = (array, element, compareFunction) => {\n let leftbound = 0\n let rightbound = array.length\n while (rightbound > leftbound) {\n const testindex = Math.floor((leftbound + rightbound) / 2)\n const testelement = array[testindex]\n const compareresult = compareFunction(element, testelement)\n if (compareresult > 0) { // element > testelement\n leftbound = testindex + 1\n } else {\n rightbound = testindex\n }\n }\n array.splice(leftbound, 0, element)\n return array\n}\n\nmodule.exports = insertSorted\n","/**\n * Return the Nth element of the given array.\n * @param {*} array - anything\n * @param {Number} index - index of the element to return\n * @returns {*} Nth element of the array, or undefined\n * @alias module:array-utils.nth\n * @example\n * let value = nth([1], 2) // undefined\n * let value = nth([1, 2, 3, 4, 5], 3) // 4\n */\nconst nth = (array, index) => {\n if (!Array.isArray(array) || array.length < index) {\n return undefined\n }\n return array[index]\n}\n\nmodule.exports = nth\n","/**\n * Build an array of the given target length from an existing array and a padding value.\n * If the array is already larger than the target length, it will not be shortened.\n * @param {Array} anArray - the source array to copy into the result.\n * @param {*} padding - the value to add to the new array to reach the desired length.\n * @param {Number} targetLength - The desired length of the returned array.\n * @returns {Array} an array with at least 'target length\" elements\n * @alias module:array-utils.padToLength\n * @example\n * const srcArray = [2, 3, 4]\n * const paddedArray = padToLength(srcArray, 0, 5)\n */\nconst padToLength = (anArray, padding, targetLength) => {\n anArray = anArray.slice()\n while (anArray.length < targetLength) {\n anArray.push(padding)\n }\n return anArray\n}\n\nmodule.exports = padToLength\n","/**\n * Convert the given array to an array if not already an array.\n * @param {*} array - anything\n * @returns {Array} an array\n * @alias module:array-utils.toArray\n * @example\n * const array = toArray(1) // [1]\n */\nconst toArray = (array) => {\n if (Array.isArray(array)) return array\n if (array === undefined || array === null) return []\n return [array]\n}\n\nmodule.exports = toArray\n","var transform = require('./lib/projectMat4')\n\nmodule.exports = unproject\n\n/**\n * Unproject a point from screen space to 3D space.\n * The point should have its x and y properties set to\n * 2D screen space, and the z either at 0 (near plane)\n * or 1 (far plane). The provided matrix is assumed to already\n * be combined, i.e. projection * view.\n *\n * After this operation, the out vector's [x, y, z] components will\n * represent the unprojected 3D coordinate.\n *\n * @param {vec3} out the output vector\n * @param {vec3} vec the 2D space vector to unproject\n * @param {vec4} viewport screen x, y, width and height in pixels\n * @param {mat4} invProjectionView combined projection and view matrix\n * @return {vec3} the output vector\n */\nfunction unproject (out, vec, viewport, invProjectionView) {\n var viewX = viewport[0],\n viewY = viewport[1],\n viewWidth = viewport[2],\n viewHeight = viewport[3]\n\n var x = vec[0],\n y = vec[1],\n z = vec[2]\n\n x = x - viewX\n y = viewHeight - y - 1\n y = y - viewY\n\n out[0] = (2 * x) / viewWidth - 1\n out[1] = (2 * y) / viewHeight - 1\n out[2] = 2 * z - 1\n return transform(out, out, invProjectionView)\n}\n","module.exports = project\n\n/**\n * Multiplies the input vec by the specified matrix, \n * applying a W divide, and stores the result in out \n * vector. This is useful for projection,\n * e.g. unprojecting a 2D point into 3D space.\n *\n * @method prj\n * @param {vec3} out the output vector\n * @param {vec3} vec the input vector to project\n * @param {mat4} m the 4x4 matrix to multiply with \n * @return {vec3} the out vector\n */\nfunction project (out, vec, m) {\n var x = vec[0],\n y = vec[1],\n z = vec[2],\n a00 = m[0], a01 = m[1], a02 = m[2], a03 = m[3],\n a10 = m[4], a11 = m[5], a12 = m[6], a13 = m[7],\n a20 = m[8], a21 = m[9], a22 = m[10], a23 = m[11],\n a30 = m[12], a31 = m[13], a32 = m[14], a33 = m[15]\n\n var lw = 1 / (x * a03 + y * a13 + z * a23 + a33)\n\n out[0] = (x * a00 + y * a10 + z * a20 + a30) * lw\n out[1] = (x * a01 + y * a11 + z * a21 + a31) * lw\n out[2] = (x * a02 + y * a12 + z * a22 + a32) * lw\n return out\n}\n","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n ? window : typeof self === 'object' && self.self === self\n ? self : typeof global === 'object' && global.global === global\n ? global\n : this\n\nfunction bom (blob, opts) {\n if (typeof opts === 'undefined') opts = { autoBom: false }\n else if (typeof opts !== 'object') {\n console.warn('Deprecated: Expected third argument to be a object')\n opts = { autoBom: !opts }\n }\n\n // prepend BOM for UTF-8 XML and text/* types (including HTML)\n // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n }\n return blob\n}\n\nfunction download (url, name, opts) {\n var xhr = new XMLHttpRequest()\n xhr.open('GET', url)\n xhr.responseType = 'blob'\n xhr.onload = function () {\n saveAs(xhr.response, name, opts)\n }\n xhr.onerror = function () {\n console.error('could not download file')\n }\n xhr.send()\n}\n\nfunction corsEnabled (url) {\n var xhr = new XMLHttpRequest()\n // use sync to avoid popup blocker\n xhr.open('HEAD', url, false)\n try {\n xhr.send()\n } catch (e) {}\n return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n try {\n node.dispatchEvent(new MouseEvent('click'))\n } catch (e) {\n var evt = document.createEvent('MouseEvents')\n evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n 20, false, false, false, false, 0, null)\n node.dispatchEvent(evt)\n }\n}\n\n// Detect WebView inside a native macOS app by ruling out all browsers\n// We just need to check for 'Safari' because all other browsers (besides Firefox) include that too\n// https://www.whatismybrowser.com/guides/the-latest-user-agent/macos\nvar isMacOSWebView = _global.navigator && /Macintosh/.test(navigator.userAgent) && /AppleWebKit/.test(navigator.userAgent) && !/Safari/.test(navigator.userAgent)\n\nvar saveAs = _global.saveAs || (\n // probably in some web worker\n (typeof window !== 'object' || window !== _global)\n ? function saveAs () { /* noop */ }\n\n // Use download attribute first if possible (#193 Lumia mobile) unless this is a macOS WebView\n : ('download' in HTMLAnchorElement.prototype && !isMacOSWebView)\n ? function saveAs (blob, name, opts) {\n var URL = _global.URL || _global.webkitURL\n var a = document.createElement('a')\n name = name || blob.name || 'download'\n\n a.download = name\n a.rel = 'noopener' // tabnabbing\n\n // TODO: detect chrome extensions & packaged apps\n // a.target = '_blank'\n\n if (typeof blob === 'string') {\n // Support regular links\n a.href = blob\n if (a.origin !== location.origin) {\n corsEnabled(a.href)\n ? download(blob, name, opts)\n : click(a, a.target = '_blank')\n } else {\n click(a)\n }\n } else {\n // Support blobs\n a.href = URL.createObjectURL(blob)\n setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n setTimeout(function () { click(a) }, 0)\n }\n }\n\n // Use msSaveOrOpenBlob as a second approach\n : 'msSaveOrOpenBlob' in navigator\n ? function saveAs (blob, name, opts) {\n name = name || blob.name || 'download'\n\n if (typeof blob === 'string') {\n if (corsEnabled(blob)) {\n download(blob, name, opts)\n } else {\n var a = document.createElement('a')\n a.href = blob\n a.target = '_blank'\n setTimeout(function () { click(a) })\n }\n } else {\n navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n }\n }\n\n // Fallback to using FileReader and a popup\n : function saveAs (blob, name, opts, popup) {\n // Open a popup immediately do go around popup blocker\n // Mostly only available on user interaction and the fileReader is async so...\n popup = popup || open('', '_blank')\n if (popup) {\n popup.document.title =\n popup.document.body.innerText = 'downloading...'\n }\n\n if (typeof blob === 'string') return download(blob, name, opts)\n\n var force = blob.type === 'application/octet-stream'\n var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n if ((isChromeIOS || (force && isSafari) || isMacOSWebView) && typeof FileReader !== 'undefined') {\n // Safari doesn't allow downloading of blob URLs\n var reader = new FileReader()\n reader.onloadend = function () {\n var url = reader.result\n url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n if (popup) popup.location.href = url\n else location = url\n popup = null // reverse-tabnabbing #460\n }\n reader.readAsDataURL(blob)\n } else {\n var URL = _global.URL || _global.webkitURL\n var url = URL.createObjectURL(blob)\n if (popup) popup.location = url\n else location.href = url\n popup = null // reverse-tabnabbing #460\n setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n }\n }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n module.exports = saveAs;\n}\n","/*!\n * github-buttons v2.27.0\n * (c) 2023 なつき\n * @license BSD-2-Clause\n */\nvar document = window.document;\n\nvar Math = window.Math;\n\nvar HTMLElement = window.HTMLElement;\n\nvar XMLHttpRequest = window.XMLHttpRequest;\n\nvar forEach = function (obj, func) {\n for (var i = 0, len = obj.length; i < len; i++) {\n func(obj[i]);\n }\n};\n\nvar createElementInDocument = function (document) {\n return function (tag, props, children) {\n var el = document.createElement(tag);\n if (props != null) {\n for (var prop in props) {\n var val = props[prop];\n if (val != null) {\n if (el[prop] != null) {\n el[prop] = val;\n } else {\n el.setAttribute(prop, val);\n }\n }\n }\n }\n if (children != null) {\n forEach(children, function (child) {\n el.appendChild(typeof child === 'string' ? document.createTextNode(child) : child);\n });\n }\n return el\n }\n};\n\nvar createElement = createElementInDocument(document);\n\nvar dispatchOnce = function (func) {\n var onceToken;\n return function () {\n if (!onceToken) {\n onceToken = 1;\n func.apply(this, arguments);\n }\n }\n};\n\nvar hasOwnProperty = function (obj, prop) {\n return {}.hasOwnProperty.call(obj, prop)\n};\n\nvar toLowerCase = function (obj) {\n return ('' + obj).toLowerCase()\n};\n\nvar name = \"github-buttons\";\nvar version = \"2.27.0\";\n\nvar iframeURL = 'https://' + (/* istanbul ignore next */ 'unpkg.com/' + name + '@' + version + '/dist' ) + '/buttons.html';\n\nvar domain = 'github.com';\n\nvar apiBaseURL = 'https://api.' + domain;\n\nvar useXHR = XMLHttpRequest && 'prototype' in XMLHttpRequest && 'withCredentials' in XMLHttpRequest.prototype;\n\nvar useShadowDOM = useXHR && HTMLElement && 'attachShadow' in HTMLElement.prototype && !('prototype' in HTMLElement.prototype.attachShadow);\n\nvar onEvent = function (target, eventName, func) {\n /* istanbul ignore else: IE lt 9 */\n if (target.addEventListener) {\n target.addEventListener(eventName, func, false);\n } else {\n target.attachEvent('on' + eventName, func);\n }\n};\n\nvar offEvent = function (target, eventName, func) {\n /* istanbul ignore else: IE lt 9 */\n if (target.removeEventListener) {\n target.removeEventListener(eventName, func, false);\n } else {\n target.detachEvent('on' + eventName, func);\n }\n};\n\nvar onceEvent = function (target, eventName, func) {\n var callback = function () {\n offEvent(target, eventName, callback);\n return func.apply(this, arguments)\n };\n onEvent(target, eventName, callback);\n};\n\nvar onceReadyStateChange = /* istanbul ignore next: IE lt 9 */ function (target, regex, func) {\n if (target.readyState != null) {\n var eventName = 'readystatechange';\n var callback = function () {\n if (regex.test(target.readyState)) {\n offEvent(target, eventName, callback);\n return func.apply(this, arguments)\n }\n };\n onEvent(target, eventName, callback);\n }\n};\n\nvar parseOptions = function (anchor) {\n var options = {\n href: anchor.href,\n title: anchor.title,\n 'aria-label': anchor.getAttribute('aria-label')\n };\n\n forEach(['icon', 'color-scheme', 'text', 'size', 'show-count'], function (option) {\n var attribute = 'data-' + option;\n options[attribute] = anchor.getAttribute(attribute);\n });\n\n if (options['data-text'] == null) {\n options['data-text'] = anchor.textContent || anchor.innerText;\n }\n\n return options\n};\n\nvar buttonsCssText = \"body{margin:0}a{text-decoration:none;outline:0}.widget{display:inline-block;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;font-size:0;line-height:0;white-space:nowrap}.btn,.social-count{position:relative;display:inline-block;display:inline-flex;height:14px;padding:2px 5px;font-size:11px;font-weight:600;line-height:14px;vertical-align:bottom;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-repeat:repeat-x;background-position:-1px -1px;background-size:110% 110%;border:1px solid}.btn{border-radius:.25em}.btn:not(:last-child){border-radius:.25em 0 0 .25em}.social-count{border-left:0;border-radius:0 .25em .25em 0}.widget-lg .btn,.widget-lg .social-count{height:16px;padding:5px 10px;font-size:12px;line-height:16px}.octicon{display:inline-block;vertical-align:text-top;fill:currentColor;overflow:visible}\";\n\nvar light = \".btn:focus-visible,.social-count:focus-visible{outline:2px solid #0969da;outline-offset:-2px}.btn{color:#24292f;background-color:#ebf0f4;border-color:#ccd1d5;border-color:rgba(31,35,40,.15);background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f6f8fa'/%3e%3cstop offset='90%25' stop-color='%23ebf0f4'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #f6f8fa, #ebf0f4 90%);background-image:linear-gradient(180deg, #f6f8fa, #ebf0f4 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF6F8FA', endColorstr='#FFEAEFF3')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#e9ebef;background-position:0 -0.5em;border-color:#cbcdd1;border-color:rgba(31,35,40,.15);background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23f3f4f6'/%3e%3cstop offset='90%25' stop-color='%23e9ebef'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #f3f4f6, #e9ebef 90%);background-image:linear-gradient(180deg, #f3f4f6, #e9ebef 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FFF3F4F6', endColorstr='#FFE8EAEE')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#e5e9ed;border-color:#c7cbcf;border-color:rgba(31,35,40,.15);background-image:none;filter:none}.social-count{color:#24292f;background-color:#fff;border-color:#dddedf;border-color:rgba(31,35,40,.15)}.social-count:hover,.social-count:focus{color:#0969da}.octicon-heart{color:#bf3989}\";\n\nvar lightHighContrast = \".btn:focus-visible,.social-count:focus-visible{outline:2px solid #0349b4;outline-offset:-2px}.btn{color:#0e1116;background-color:#e7ecf0;border-color:#2f3237;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:hover,.btn:focus{background-color:#c4cdd5;background-position:0 -0.5em;border-color:#282c32;border-color:rgba(1,4,9,.8);background-image:none;filter:none}.btn:active{background-color:#d8dde1;border-color:#2c2f34;border-color:rgba(1,4,9,.8)}.social-count{color:#0e1116;background-color:#fff;border-color:#34363a;border-color:rgba(1,4,9,.8)}.social-count:hover,.social-count:focus{color:#0349b4}.octicon-heart{color:#971368}\";\n\nvar dark = \".btn:focus-visible,.social-count:focus-visible{outline:2px solid #2f81f7;outline-offset:-2px}.btn{color:#c9d1d9;background-color:#1a1e23;border-color:#2f3439;border-color:rgba(240,246,252,.1);background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%2321262d'/%3e%3cstop offset='90%25' stop-color='%231a1e23'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #21262d, #1a1e23 90%);background-image:linear-gradient(180deg, #21262d, #1a1e23 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF21262D', endColorstr='#FF191D22')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#292e33;background-position:0 -0.5em;border-color:#8b949e;background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%2330363d'/%3e%3cstop offset='90%25' stop-color='%23292e33'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #30363d, #292e33 90%);background-image:linear-gradient(180deg, #30363d, #292e33 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF30363D', endColorstr='#FF282D32')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#161719;border-color:#8b949e;background-image:none;filter:none}.social-count{color:#c9d1d9;background-color:#0d1117;border-color:#24282e;border-color:rgba(240,246,252,.1)}.social-count:hover,.social-count:focus{color:#2f81f7}.octicon-heart{color:#db61a2}\";\n\nvar darkDimmed = \".btn:focus-visible,.social-count:focus-visible{outline:2px solid #539bf5;outline-offset:-2px}.btn{color:#adbac7;background-color:#30363d;border-color:#40464e;border-color:rgba(205,217,229,.1);background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23373e47'/%3e%3cstop offset='90%25' stop-color='%2330363d'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #373e47, #30363d 90%);background-image:linear-gradient(180deg, #373e47, #30363d 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF373E47', endColorstr='#FF2F353C')}:root .btn{filter:none}.btn:hover,.btn:focus{background-color:#3c444d;background-position:0 -0.5em;border-color:#768390;background-image:url(\\\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg'%3e%3clinearGradient id='o' x2='0' y2='1'%3e%3cstop stop-color='%23444c56'/%3e%3cstop offset='90%25' stop-color='%233c444d'/%3e%3c/linearGradient%3e%3crect width='100%25' height='100%25' fill='url(%23o)'/%3e%3c/svg%3e\\\");background-image:-moz-linear-gradient(top, #444c56, #3c444d 90%);background-image:linear-gradient(180deg, #444c56, #3c444d 90%);filter:progid:DXImageTransform.Microsoft.Gradient(startColorstr='#FF444C56', endColorstr='#FF3B434C')}:root .btn:hover,:root .btn:focus{filter:none}.btn:active{background-color:#2e3031;border-color:#768390;background-image:none;filter:none}.social-count{color:#adbac7;background-color:#22272e;border-color:#333940;border-color:rgba(205,217,229,.1)}.social-count:hover,.social-count:focus{color:#539bf5}.octicon-heart{color:#c96198}\";\n\nvar darkHighContrast = \".btn:focus-visible,.social-count:focus-visible{outline:2px solid #71b7ff;outline-offset:-2px}.btn{color:#f0f3f6;background-color:#272b33;border-color:#7a828e;background-image:none;filter:none}.btn:hover,.btn:focus{background-color:#4a515b;background-position:0 -0.5em;border-color:#bdc4cc;background-image:none;filter:none}.btn:active{background-color:#1d1d1f;border-color:#bdc4cc}.social-count{color:#f0f3f6;background-color:#0a0c10;border-color:#7a828e}.social-count:hover,.social-count:focus{color:#71b7ff}.octicon-heart{color:#ef6eb1}\";\n\nvar stringify = function (obj, sep, eq, encodeURIComponent) {\n if (sep == null) {\n sep = '&';\n }\n if (eq == null) {\n eq = '=';\n }\n if (encodeURIComponent == null) {\n encodeURIComponent = window.encodeURIComponent;\n }\n var params = [];\n for (var name in obj) {\n var value = obj[name];\n if (value != null) {\n params.push(encodeURIComponent(name) + eq + encodeURIComponent(value));\n }\n }\n return params.join(sep)\n};\n\nvar parse = function (str, sep, eq, decodeURIComponent) {\n if (sep == null) {\n sep = '&';\n }\n if (eq == null) {\n eq = '=';\n }\n if (decodeURIComponent == null) {\n decodeURIComponent = window.decodeURIComponent;\n }\n var obj = {};\n forEach(str.split(sep), function (entry) {\n if (entry !== '') {\n var ref = entry.split(eq);\n obj[decodeURIComponent(ref[0])] = (ref[1] != null ? decodeURIComponent(ref.slice(1).join(eq)) : undefined);\n }\n });\n return obj\n};\n\nvar widgetColorSchemes = {\n light: light,\n light_high_contrast: lightHighContrast,\n dark: dark,\n dark_dimmed: darkDimmed,\n dark_high_contrast: darkHighContrast\n};\n\nvar getColorSchemeMediaQuery = function (systemColorScheme, widgetColorScheme) {\n return '@media(prefers-color-scheme:' + systemColorScheme + '){' + widgetColorSchemes[hasOwnProperty(widgetColorSchemes, widgetColorScheme) ? widgetColorScheme : systemColorScheme] + '}'\n};\n\nvar getColorScheme = function (declarations) {\n if (declarations == null) {\n return widgetColorSchemes.light\n }\n\n if (hasOwnProperty(widgetColorSchemes, declarations)) {\n return widgetColorSchemes[declarations]\n }\n\n var colorSchemes = parse(declarations, ';', ':', function (str) {\n return str.replace(/^[ \\t\\n\\f\\r]+|[ \\t\\n\\f\\r]+$/g, '')\n });\n\n return widgetColorSchemes[hasOwnProperty(widgetColorSchemes, colorSchemes['no-preference']) ? colorSchemes['no-preference'] : 'light'] +\n getColorSchemeMediaQuery('light', colorSchemes.light) +\n getColorSchemeMediaQuery('dark', colorSchemes.dark)\n};\n\nvar data = {\n \"comment-discussion\": {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n download: {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n eye: {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n heart: {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n \"issue-opened\": {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n \"mark-github\": {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n \"package\": {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n play: {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n \"repo-forked\": {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n \"repo-template\": {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n },\n star: {\n heights: {\n \"16\": {\n width: 16,\n path: \"\"\n }\n }\n }\n};\n\nvar octicon = function (icon, height) {\n icon = toLowerCase(icon).replace(/^octicon-/, '');\n if (!hasOwnProperty(data, icon)) {\n icon = 'mark-github';\n }\n\n var defaultHeight = height >= 24 && /* istanbul ignore next */ 24 in data[icon].heights ? /* istanbul ignore next */ 24 : 16;\n\n var svg = data[icon].heights[defaultHeight];\n\n return ''\n};\n\nvar queues = {};\n\nvar fetch = function (url, func) {\n var queue = queues[url] || (queues[url] = []);\n if (queue.push(func) > 1) {\n return\n }\n\n var callback = dispatchOnce(function () {\n delete queues[url];\n while ((func = queue.shift())) {\n func.apply(null, arguments);\n }\n });\n\n if (useXHR) {\n var xhr = new XMLHttpRequest();\n onEvent(xhr, 'abort', callback);\n onEvent(xhr, 'error', callback);\n onEvent(xhr, 'load', function () {\n var data;\n try {\n data = JSON.parse(this.responseText);\n } catch (error) {\n callback(error);\n return\n }\n callback(this.status !== 200, data);\n });\n xhr.open('GET', url);\n xhr.send();\n } else {\n var contentWindow = this || window;\n contentWindow._ = function (json) {\n contentWindow._ = null;\n callback(json.meta.status !== 200, json.data);\n };\n var script = createElementInDocument(contentWindow.document)('script', {\n async: true,\n src: url + (url.indexOf('?') !== -1 ? '&' : '?') + 'callback=_'\n });\n var onloadend = /* istanbul ignore next: IE lt 9 */ function () {\n if (contentWindow._) {\n contentWindow._({\n meta: {}\n });\n }\n };\n onEvent(script, 'load', onloadend);\n onEvent(script, 'error', onloadend);\n onceReadyStateChange(script, /de|m/, onloadend);\n contentWindow.document.getElementsByTagName('head')[0].appendChild(script);\n }\n};\n\nvar render$1 = function (root, options, func) {\n var createElement = createElementInDocument(root.ownerDocument);\n\n var style = root.appendChild(createElement('style', {\n type: 'text/css'\n }));\n\n var cssText = buttonsCssText + getColorScheme(options['data-color-scheme']);\n\n /* istanbul ignore if: IE lt 9 */\n if (style.styleSheet) {\n style.styleSheet.cssText = cssText;\n } else {\n style.appendChild(root.ownerDocument.createTextNode(cssText));\n }\n\n var isLarge = toLowerCase(options['data-size']) === 'large';\n\n var btn = createElement('a', {\n className: 'btn',\n href: options.href,\n rel: 'noopener',\n target: '_blank',\n title: options.title || undefined,\n 'aria-label': options['aria-label'] || undefined,\n innerHTML: octicon(options['data-icon'], isLarge ? 16 : 14) + ' '\n }, [\n createElement('span', {}, [options['data-text'] || ''])\n ]);\n\n var widget = root.appendChild(createElement('div', {\n className: 'widget' + (isLarge ? ' widget-lg' : '')\n }, [\n btn\n ]));\n\n var hostname = btn.hostname.replace(/\\.$/, '');\n if (('.' + hostname).substring(hostname.length - domain.length) !== ('.' + domain)) {\n btn.removeAttribute('href');\n func(widget);\n return\n }\n\n var path = (' /' + btn.pathname).split(/\\/+/);\n if (((hostname === domain || hostname === 'gist.' + domain) && path[3] === 'archive') ||\n (hostname === domain && path[3] === 'releases' && (path[4] === 'download' || (path[4] === 'latest' && path[5] === 'download'))) ||\n (hostname === 'codeload.' + domain)) {\n btn.target = '_top';\n }\n\n if (toLowerCase(options['data-show-count']) !== 'true' ||\n hostname !== domain ||\n path[1] === 'marketplace' ||\n path[1] === 'sponsors' ||\n path[1] === 'orgs' ||\n path[1] === 'users' ||\n path[1] === '-') {\n func(widget);\n return\n }\n\n var href, property;\n if (!path[2] && path[1]) {\n property = 'followers';\n href = '?tab=followers';\n } else if (!path[3] && path[2]) {\n property = 'stargazers_count';\n href = '/stargazers';\n } else if (!path[4] && path[3] === 'subscription') {\n property = 'subscribers_count';\n href = '/watchers';\n } else if (!path[4] && path[3] === 'fork') {\n property = 'forks_count';\n href = '/forks';\n } else if (path[3] === 'issues') {\n property = 'open_issues_count';\n href = '/issues';\n } else {\n func(widget);\n return\n }\n\n var api = path[2] ? '/repos/' + path[1] + '/' + path[2] : '/users/' + path[1];\n fetch.call(this, apiBaseURL + api, function (error, json) {\n if (!error) {\n var data = json[property];\n widget.appendChild(createElement('a', {\n className: 'social-count',\n href: json.html_url + href,\n rel: 'noopener',\n target: '_blank',\n 'aria-label': data + ' ' + property.replace(/_count$/, '').replace('_', ' ').slice(0, data < 2 ? -1 : undefined) + ' on GitHub'\n }, [\n ('' + data).replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n ]));\n }\n func(widget);\n });\n};\n\nvar devicePixelRatio = window.devicePixelRatio || /* istanbul ignore next */ 1;\n\nvar ceilPixel = function (px) {\n return (devicePixelRatio > 1 ? Math.ceil(Math.round(px * devicePixelRatio) / devicePixelRatio * 2) / 2 : Math.ceil(px)) || 0\n};\n\nvar get = function (el) {\n var width = el.offsetWidth;\n var height = el.offsetHeight;\n if (el.getBoundingClientRect) {\n var boundingClientRect = el.getBoundingClientRect();\n width = Math.max(width, ceilPixel(boundingClientRect.width));\n height = Math.max(height, ceilPixel(boundingClientRect.height));\n }\n return [width, height]\n};\n\nvar set = function (el, size) {\n el.style.width = size[0] + 'px';\n el.style.height = size[1] + 'px';\n};\n\nvar render = function (options, func) {\n if (options == null || func == null) {\n return\n }\n if (options.getAttribute) {\n options = parseOptions(options);\n }\n if (useShadowDOM) {\n var host = createElement('span');\n render$1(host.attachShadow({ mode: 'closed' }), options, function () {\n func(host);\n });\n } else {\n var iframe = createElement('iframe', {\n src: 'javascript:0',\n title: options.title || undefined,\n allowtransparency: true,\n scrolling: 'no',\n frameBorder: 0\n });\n set(iframe, [0, 0]);\n iframe.style.border = 'none';\n var callback = function () {\n var contentWindow = iframe.contentWindow;\n var body;\n try {\n body = contentWindow.document.body;\n } catch (_) /* istanbul ignore next: IE 11 */ {\n document.body.appendChild(iframe.parentNode.removeChild(iframe));\n return\n }\n offEvent(iframe, 'load', callback);\n render$1.call(contentWindow, body, options, function (widget) {\n var size = get(widget);\n iframe.parentNode.removeChild(iframe);\n onceEvent(iframe, 'load', function () {\n set(iframe, size);\n });\n iframe.src = iframeURL + '#' + (iframe.name = stringify(options));\n func(iframe);\n });\n };\n onEvent(iframe, 'load', callback);\n document.body.appendChild(iframe);\n }\n};\n\nexport { render };\n","module.exports = adjoint;\n\n/**\n * Calculates the adjugate of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nfunction adjoint(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n out[0] = (a11 * (a22 * a33 - a23 * a32) - a21 * (a12 * a33 - a13 * a32) + a31 * (a12 * a23 - a13 * a22));\n out[1] = -(a01 * (a22 * a33 - a23 * a32) - a21 * (a02 * a33 - a03 * a32) + a31 * (a02 * a23 - a03 * a22));\n out[2] = (a01 * (a12 * a33 - a13 * a32) - a11 * (a02 * a33 - a03 * a32) + a31 * (a02 * a13 - a03 * a12));\n out[3] = -(a01 * (a12 * a23 - a13 * a22) - a11 * (a02 * a23 - a03 * a22) + a21 * (a02 * a13 - a03 * a12));\n out[4] = -(a10 * (a22 * a33 - a23 * a32) - a20 * (a12 * a33 - a13 * a32) + a30 * (a12 * a23 - a13 * a22));\n out[5] = (a00 * (a22 * a33 - a23 * a32) - a20 * (a02 * a33 - a03 * a32) + a30 * (a02 * a23 - a03 * a22));\n out[6] = -(a00 * (a12 * a33 - a13 * a32) - a10 * (a02 * a33 - a03 * a32) + a30 * (a02 * a13 - a03 * a12));\n out[7] = (a00 * (a12 * a23 - a13 * a22) - a10 * (a02 * a23 - a03 * a22) + a20 * (a02 * a13 - a03 * a12));\n out[8] = (a10 * (a21 * a33 - a23 * a31) - a20 * (a11 * a33 - a13 * a31) + a30 * (a11 * a23 - a13 * a21));\n out[9] = -(a00 * (a21 * a33 - a23 * a31) - a20 * (a01 * a33 - a03 * a31) + a30 * (a01 * a23 - a03 * a21));\n out[10] = (a00 * (a11 * a33 - a13 * a31) - a10 * (a01 * a33 - a03 * a31) + a30 * (a01 * a13 - a03 * a11));\n out[11] = -(a00 * (a11 * a23 - a13 * a21) - a10 * (a01 * a23 - a03 * a21) + a20 * (a01 * a13 - a03 * a11));\n out[12] = -(a10 * (a21 * a32 - a22 * a31) - a20 * (a11 * a32 - a12 * a31) + a30 * (a11 * a22 - a12 * a21));\n out[13] = (a00 * (a21 * a32 - a22 * a31) - a20 * (a01 * a32 - a02 * a31) + a30 * (a01 * a22 - a02 * a21));\n out[14] = -(a00 * (a11 * a32 - a12 * a31) - a10 * (a01 * a32 - a02 * a31) + a30 * (a01 * a12 - a02 * a11));\n out[15] = (a00 * (a11 * a22 - a12 * a21) - a10 * (a01 * a22 - a02 * a21) + a20 * (a01 * a12 - a02 * a11));\n return out;\n};","module.exports = clone;\n\n/**\n * Creates a new mat4 initialized with values from an existing matrix\n *\n * @param {mat4} a matrix to clone\n * @returns {mat4} a new 4x4 matrix\n */\nfunction clone(a) {\n var out = new Float32Array(16);\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};","module.exports = copy;\n\n/**\n * Copy the values from one mat4 to another\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nfunction copy(out, a) {\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};","module.exports = create;\n\n/**\n * Creates a new identity mat4\n *\n * @returns {mat4} a new 4x4 matrix\n */\nfunction create() {\n var out = new Float32Array(16);\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n};","module.exports = determinant;\n\n/**\n * Calculates the determinant of a mat4\n *\n * @param {mat4} a the source matrix\n * @returns {Number} determinant of a\n */\nfunction determinant(a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32;\n\n // Calculate the determinant\n return b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n};","module.exports = fromQuat;\n\n/**\n * Creates a matrix from a quaternion rotation.\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @returns {mat4} out\n */\nfunction fromQuat(out, q) {\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n yx = y * x2,\n yy = y * y2,\n zx = z * x2,\n zy = z * y2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - yy - zz;\n out[1] = yx + wz;\n out[2] = zx - wy;\n out[3] = 0;\n\n out[4] = yx - wz;\n out[5] = 1 - xx - zz;\n out[6] = zy + wx;\n out[7] = 0;\n\n out[8] = zx + wy;\n out[9] = zy - wx;\n out[10] = 1 - xx - yy;\n out[11] = 0;\n\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n\n return out;\n};","module.exports = fromRotation\n\n/**\n * Creates a matrix from a given angle around a given axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.rotate(dest, dest, rad, axis)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @param {vec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nfunction fromRotation(out, rad, axis) {\n var s, c, t\n var x = axis[0]\n var y = axis[1]\n var z = axis[2]\n var len = Math.sqrt(x * x + y * y + z * z)\n\n if (Math.abs(len) < 0.000001) {\n return null\n }\n\n len = 1 / len\n x *= len\n y *= len\n z *= len\n\n s = Math.sin(rad)\n c = Math.cos(rad)\n t = 1 - c\n\n // Perform rotation-specific matrix multiplication\n out[0] = x * x * t + c\n out[1] = y * x * t + z * s\n out[2] = z * x * t - y * s\n out[3] = 0\n out[4] = x * y * t - z * s\n out[5] = y * y * t + c\n out[6] = z * y * t + x * s\n out[7] = 0\n out[8] = x * z * t + y * s\n out[9] = y * z * t - x * s\n out[10] = z * z * t + c\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n","module.exports = fromRotationTranslation;\n\n/**\n * Creates a matrix from a quaternion rotation and vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest);\n * mat4.translate(dest, vec);\n * var quatMat = mat4.create();\n * quat4.toMat4(quat, quatMat);\n * mat4.multiply(dest, quatMat);\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {quat4} q Rotation quaternion\n * @param {vec3} v Translation vector\n * @returns {mat4} out\n */\nfunction fromRotationTranslation(out, q, v) {\n // Quaternion math\n var x = q[0], y = q[1], z = q[2], w = q[3],\n x2 = x + x,\n y2 = y + y,\n z2 = z + z,\n\n xx = x * x2,\n xy = x * y2,\n xz = x * z2,\n yy = y * y2,\n yz = y * z2,\n zz = z * z2,\n wx = w * x2,\n wy = w * y2,\n wz = w * z2;\n\n out[0] = 1 - (yy + zz);\n out[1] = xy + wz;\n out[2] = xz - wy;\n out[3] = 0;\n out[4] = xy - wz;\n out[5] = 1 - (xx + zz);\n out[6] = yz + wx;\n out[7] = 0;\n out[8] = xz + wy;\n out[9] = yz - wx;\n out[10] = 1 - (xx + yy);\n out[11] = 0;\n out[12] = v[0];\n out[13] = v[1];\n out[14] = v[2];\n out[15] = 1;\n \n return out;\n};","module.exports = fromScaling\n\n/**\n * Creates a matrix from a vector scaling\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.scale(dest, dest, vec)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {vec3} v Scaling vector\n * @returns {mat4} out\n */\nfunction fromScaling(out, v) {\n out[0] = v[0]\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = v[1]\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[10] = v[2]\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}\n","module.exports = fromTranslation\n\n/**\n * Creates a matrix from a vector translation\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.translate(dest, dest, vec)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {vec3} v Translation vector\n * @returns {mat4} out\n */\nfunction fromTranslation(out, v) {\n out[0] = 1\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = 1\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[10] = 1\n out[11] = 0\n out[12] = v[0]\n out[13] = v[1]\n out[14] = v[2]\n out[15] = 1\n return out\n}\n","module.exports = fromXRotation\n\n/**\n * Creates a matrix from the given angle around the X axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.rotateX(dest, dest, rad)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nfunction fromXRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad)\n\n // Perform axis-specific matrix multiplication\n out[0] = 1\n out[1] = 0\n out[2] = 0\n out[3] = 0\n out[4] = 0\n out[5] = c\n out[6] = s\n out[7] = 0\n out[8] = 0\n out[9] = -s\n out[10] = c\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}","module.exports = fromYRotation\n\n/**\n * Creates a matrix from the given angle around the Y axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.rotateY(dest, dest, rad)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nfunction fromYRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad)\n\n // Perform axis-specific matrix multiplication\n out[0] = c\n out[1] = 0\n out[2] = -s\n out[3] = 0\n out[4] = 0\n out[5] = 1\n out[6] = 0\n out[7] = 0\n out[8] = s\n out[9] = 0\n out[10] = c\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}","module.exports = fromZRotation\n\n/**\n * Creates a matrix from the given angle around the Z axis\n * This is equivalent to (but much faster than):\n *\n * mat4.identity(dest)\n * mat4.rotateZ(dest, dest, rad)\n *\n * @param {mat4} out mat4 receiving operation result\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nfunction fromZRotation(out, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad)\n\n // Perform axis-specific matrix multiplication\n out[0] = c\n out[1] = s\n out[2] = 0\n out[3] = 0\n out[4] = -s\n out[5] = c\n out[6] = 0\n out[7] = 0\n out[8] = 0\n out[9] = 0\n out[10] = 1\n out[11] = 0\n out[12] = 0\n out[13] = 0\n out[14] = 0\n out[15] = 1\n return out\n}","module.exports = frustum;\n\n/**\n * Generates a frustum matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {Number} left Left bound of the frustum\n * @param {Number} right Right bound of the frustum\n * @param {Number} bottom Bottom bound of the frustum\n * @param {Number} top Top bound of the frustum\n * @param {Number} near Near bound of the frustum\n * @param {Number} far Far bound of the frustum\n * @returns {mat4} out\n */\nfunction frustum(out, left, right, bottom, top, near, far) {\n var rl = 1 / (right - left),\n tb = 1 / (top - bottom),\n nf = 1 / (near - far);\n out[0] = (near * 2) * rl;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = (near * 2) * tb;\n out[6] = 0;\n out[7] = 0;\n out[8] = (right + left) * rl;\n out[9] = (top + bottom) * tb;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = (far * near * 2) * nf;\n out[15] = 0;\n return out;\n};","module.exports = identity;\n\n/**\n * Set a mat4 to the identity matrix\n *\n * @param {mat4} out the receiving matrix\n * @returns {mat4} out\n */\nfunction identity(out) {\n out[0] = 1;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = 1;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 1;\n out[11] = 0;\n out[12] = 0;\n out[13] = 0;\n out[14] = 0;\n out[15] = 1;\n return out;\n};","module.exports = {\n create: require('./create')\n , clone: require('./clone')\n , copy: require('./copy')\n , identity: require('./identity')\n , transpose: require('./transpose')\n , invert: require('./invert')\n , adjoint: require('./adjoint')\n , determinant: require('./determinant')\n , multiply: require('./multiply')\n , translate: require('./translate')\n , scale: require('./scale')\n , rotate: require('./rotate')\n , rotateX: require('./rotateX')\n , rotateY: require('./rotateY')\n , rotateZ: require('./rotateZ')\n , fromRotation: require('./fromRotation')\n , fromRotationTranslation: require('./fromRotationTranslation')\n , fromScaling: require('./fromScaling')\n , fromTranslation: require('./fromTranslation')\n , fromXRotation: require('./fromXRotation')\n , fromYRotation: require('./fromYRotation')\n , fromZRotation: require('./fromZRotation')\n , fromQuat: require('./fromQuat')\n , frustum: require('./frustum')\n , perspective: require('./perspective')\n , perspectiveFromFieldOfView: require('./perspectiveFromFieldOfView')\n , ortho: require('./ortho')\n , lookAt: require('./lookAt')\n , str: require('./str')\n}\n","module.exports = invert;\n\n/**\n * Inverts a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nfunction invert(out, a) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15],\n\n b00 = a00 * a11 - a01 * a10,\n b01 = a00 * a12 - a02 * a10,\n b02 = a00 * a13 - a03 * a10,\n b03 = a01 * a12 - a02 * a11,\n b04 = a01 * a13 - a03 * a11,\n b05 = a02 * a13 - a03 * a12,\n b06 = a20 * a31 - a21 * a30,\n b07 = a20 * a32 - a22 * a30,\n b08 = a20 * a33 - a23 * a30,\n b09 = a21 * a32 - a22 * a31,\n b10 = a21 * a33 - a23 * a31,\n b11 = a22 * a33 - a23 * a32,\n\n // Calculate the determinant\n det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;\n\n if (!det) { \n return null; \n }\n det = 1.0 / det;\n\n out[0] = (a11 * b11 - a12 * b10 + a13 * b09) * det;\n out[1] = (a02 * b10 - a01 * b11 - a03 * b09) * det;\n out[2] = (a31 * b05 - a32 * b04 + a33 * b03) * det;\n out[3] = (a22 * b04 - a21 * b05 - a23 * b03) * det;\n out[4] = (a12 * b08 - a10 * b11 - a13 * b07) * det;\n out[5] = (a00 * b11 - a02 * b08 + a03 * b07) * det;\n out[6] = (a32 * b02 - a30 * b05 - a33 * b01) * det;\n out[7] = (a20 * b05 - a22 * b02 + a23 * b01) * det;\n out[8] = (a10 * b10 - a11 * b08 + a13 * b06) * det;\n out[9] = (a01 * b08 - a00 * b10 - a03 * b06) * det;\n out[10] = (a30 * b04 - a31 * b02 + a33 * b00) * det;\n out[11] = (a21 * b02 - a20 * b04 - a23 * b00) * det;\n out[12] = (a11 * b07 - a10 * b09 - a12 * b06) * det;\n out[13] = (a00 * b09 - a01 * b07 + a02 * b06) * det;\n out[14] = (a31 * b01 - a30 * b03 - a32 * b00) * det;\n out[15] = (a20 * b03 - a21 * b01 + a22 * b00) * det;\n\n return out;\n};","var identity = require('./identity');\n\nmodule.exports = lookAt;\n\n/**\n * Generates a look-at matrix with the given eye position, focal point, and up axis\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {vec3} eye Position of the viewer\n * @param {vec3} center Point the viewer is looking at\n * @param {vec3} up vec3 pointing up\n * @returns {mat4} out\n */\nfunction lookAt(out, eye, center, up) {\n var x0, x1, x2, y0, y1, y2, z0, z1, z2, len,\n eyex = eye[0],\n eyey = eye[1],\n eyez = eye[2],\n upx = up[0],\n upy = up[1],\n upz = up[2],\n centerx = center[0],\n centery = center[1],\n centerz = center[2];\n\n if (Math.abs(eyex - centerx) < 0.000001 &&\n Math.abs(eyey - centery) < 0.000001 &&\n Math.abs(eyez - centerz) < 0.000001) {\n return identity(out);\n }\n\n z0 = eyex - centerx;\n z1 = eyey - centery;\n z2 = eyez - centerz;\n\n len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);\n z0 *= len;\n z1 *= len;\n z2 *= len;\n\n x0 = upy * z2 - upz * z1;\n x1 = upz * z0 - upx * z2;\n x2 = upx * z1 - upy * z0;\n len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);\n if (!len) {\n x0 = 0;\n x1 = 0;\n x2 = 0;\n } else {\n len = 1 / len;\n x0 *= len;\n x1 *= len;\n x2 *= len;\n }\n\n y0 = z1 * x2 - z2 * x1;\n y1 = z2 * x0 - z0 * x2;\n y2 = z0 * x1 - z1 * x0;\n\n len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);\n if (!len) {\n y0 = 0;\n y1 = 0;\n y2 = 0;\n } else {\n len = 1 / len;\n y0 *= len;\n y1 *= len;\n y2 *= len;\n }\n\n out[0] = x0;\n out[1] = y0;\n out[2] = z0;\n out[3] = 0;\n out[4] = x1;\n out[5] = y1;\n out[6] = z1;\n out[7] = 0;\n out[8] = x2;\n out[9] = y2;\n out[10] = z2;\n out[11] = 0;\n out[12] = -(x0 * eyex + x1 * eyey + x2 * eyez);\n out[13] = -(y0 * eyex + y1 * eyey + y2 * eyez);\n out[14] = -(z0 * eyex + z1 * eyey + z2 * eyez);\n out[15] = 1;\n\n return out;\n};","module.exports = multiply;\n\n/**\n * Multiplies two mat4's\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the first operand\n * @param {mat4} b the second operand\n * @returns {mat4} out\n */\nfunction multiply(out, a, b) {\n var a00 = a[0], a01 = a[1], a02 = a[2], a03 = a[3],\n a10 = a[4], a11 = a[5], a12 = a[6], a13 = a[7],\n a20 = a[8], a21 = a[9], a22 = a[10], a23 = a[11],\n a30 = a[12], a31 = a[13], a32 = a[14], a33 = a[15];\n\n // Cache only the current line of the second matrix\n var b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3]; \n out[0] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[1] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[2] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[3] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[4]; b1 = b[5]; b2 = b[6]; b3 = b[7];\n out[4] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[5] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[6] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[7] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[8]; b1 = b[9]; b2 = b[10]; b3 = b[11];\n out[8] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[9] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[10] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[11] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n\n b0 = b[12]; b1 = b[13]; b2 = b[14]; b3 = b[15];\n out[12] = b0*a00 + b1*a10 + b2*a20 + b3*a30;\n out[13] = b0*a01 + b1*a11 + b2*a21 + b3*a31;\n out[14] = b0*a02 + b1*a12 + b2*a22 + b3*a32;\n out[15] = b0*a03 + b1*a13 + b2*a23 + b3*a33;\n return out;\n};","module.exports = ortho;\n\n/**\n * Generates a orthogonal projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} left Left bound of the frustum\n * @param {number} right Right bound of the frustum\n * @param {number} bottom Bottom bound of the frustum\n * @param {number} top Top bound of the frustum\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nfunction ortho(out, left, right, bottom, top, near, far) {\n var lr = 1 / (left - right),\n bt = 1 / (bottom - top),\n nf = 1 / (near - far);\n out[0] = -2 * lr;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = -2 * bt;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = 2 * nf;\n out[11] = 0;\n out[12] = (left + right) * lr;\n out[13] = (top + bottom) * bt;\n out[14] = (far + near) * nf;\n out[15] = 1;\n return out;\n};","module.exports = perspective;\n\n/**\n * Generates a perspective projection matrix with the given bounds\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fovy Vertical field of view in radians\n * @param {number} aspect Aspect ratio. typically viewport width/height\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nfunction perspective(out, fovy, aspect, near, far) {\n var f = 1.0 / Math.tan(fovy / 2),\n nf = 1 / (near - far);\n out[0] = f / aspect;\n out[1] = 0;\n out[2] = 0;\n out[3] = 0;\n out[4] = 0;\n out[5] = f;\n out[6] = 0;\n out[7] = 0;\n out[8] = 0;\n out[9] = 0;\n out[10] = (far + near) * nf;\n out[11] = -1;\n out[12] = 0;\n out[13] = 0;\n out[14] = (2 * far * near) * nf;\n out[15] = 0;\n return out;\n};","module.exports = perspectiveFromFieldOfView;\n\n/**\n * Generates a perspective projection matrix with the given field of view.\n * This is primarily useful for generating projection matrices to be used\n * with the still experiemental WebVR API.\n *\n * @param {mat4} out mat4 frustum matrix will be written into\n * @param {number} fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees\n * @param {number} near Near bound of the frustum\n * @param {number} far Far bound of the frustum\n * @returns {mat4} out\n */\nfunction perspectiveFromFieldOfView(out, fov, near, far) {\n var upTan = Math.tan(fov.upDegrees * Math.PI/180.0),\n downTan = Math.tan(fov.downDegrees * Math.PI/180.0),\n leftTan = Math.tan(fov.leftDegrees * Math.PI/180.0),\n rightTan = Math.tan(fov.rightDegrees * Math.PI/180.0),\n xScale = 2.0 / (leftTan + rightTan),\n yScale = 2.0 / (upTan + downTan);\n\n out[0] = xScale;\n out[1] = 0.0;\n out[2] = 0.0;\n out[3] = 0.0;\n out[4] = 0.0;\n out[5] = yScale;\n out[6] = 0.0;\n out[7] = 0.0;\n out[8] = -((leftTan - rightTan) * xScale * 0.5);\n out[9] = ((upTan - downTan) * yScale * 0.5);\n out[10] = far / (near - far);\n out[11] = -1.0;\n out[12] = 0.0;\n out[13] = 0.0;\n out[14] = (far * near) / (near - far);\n out[15] = 0.0;\n return out;\n}\n\n","module.exports = rotate;\n\n/**\n * Rotates a mat4 by the given angle\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @param {vec3} axis the axis to rotate around\n * @returns {mat4} out\n */\nfunction rotate(out, a, rad, axis) {\n var x = axis[0], y = axis[1], z = axis[2],\n len = Math.sqrt(x * x + y * y + z * z),\n s, c, t,\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23,\n b00, b01, b02,\n b10, b11, b12,\n b20, b21, b22;\n\n if (Math.abs(len) < 0.000001) { return null; }\n \n len = 1 / len;\n x *= len;\n y *= len;\n z *= len;\n\n s = Math.sin(rad);\n c = Math.cos(rad);\n t = 1 - c;\n\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n // Construct the elements of the rotation matrix\n b00 = x * x * t + c; b01 = y * x * t + z * s; b02 = z * x * t - y * s;\n b10 = x * y * t - z * s; b11 = y * y * t + c; b12 = z * y * t + x * s;\n b20 = x * z * t + y * s; b21 = y * z * t - x * s; b22 = z * z * t + c;\n\n // Perform rotation-specific matrix multiplication\n out[0] = a00 * b00 + a10 * b01 + a20 * b02;\n out[1] = a01 * b00 + a11 * b01 + a21 * b02;\n out[2] = a02 * b00 + a12 * b01 + a22 * b02;\n out[3] = a03 * b00 + a13 * b01 + a23 * b02;\n out[4] = a00 * b10 + a10 * b11 + a20 * b12;\n out[5] = a01 * b10 + a11 * b11 + a21 * b12;\n out[6] = a02 * b10 + a12 * b11 + a22 * b12;\n out[7] = a03 * b10 + a13 * b11 + a23 * b12;\n out[8] = a00 * b20 + a10 * b21 + a20 * b22;\n out[9] = a01 * b20 + a11 * b21 + a21 * b22;\n out[10] = a02 * b20 + a12 * b21 + a22 * b22;\n out[11] = a03 * b20 + a13 * b21 + a23 * b22;\n\n if (a !== out) { // If the source and destination differ, copy the unchanged last row\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n return out;\n};","module.exports = rotateX;\n\n/**\n * Rotates a matrix by the given angle around the X axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nfunction rotateX(out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n out[0] = a[0];\n out[1] = a[1];\n out[2] = a[2];\n out[3] = a[3];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[4] = a10 * c + a20 * s;\n out[5] = a11 * c + a21 * s;\n out[6] = a12 * c + a22 * s;\n out[7] = a13 * c + a23 * s;\n out[8] = a20 * c - a10 * s;\n out[9] = a21 * c - a11 * s;\n out[10] = a22 * c - a12 * s;\n out[11] = a23 * c - a13 * s;\n return out;\n};","module.exports = rotateY;\n\n/**\n * Rotates a matrix by the given angle around the Y axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nfunction rotateY(out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a20 = a[8],\n a21 = a[9],\n a22 = a[10],\n a23 = a[11];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged rows\n out[4] = a[4];\n out[5] = a[5];\n out[6] = a[6];\n out[7] = a[7];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c - a20 * s;\n out[1] = a01 * c - a21 * s;\n out[2] = a02 * c - a22 * s;\n out[3] = a03 * c - a23 * s;\n out[8] = a00 * s + a20 * c;\n out[9] = a01 * s + a21 * c;\n out[10] = a02 * s + a22 * c;\n out[11] = a03 * s + a23 * c;\n return out;\n};","module.exports = rotateZ;\n\n/**\n * Rotates a matrix by the given angle around the Z axis\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to rotate\n * @param {Number} rad the angle to rotate the matrix by\n * @returns {mat4} out\n */\nfunction rotateZ(out, a, rad) {\n var s = Math.sin(rad),\n c = Math.cos(rad),\n a00 = a[0],\n a01 = a[1],\n a02 = a[2],\n a03 = a[3],\n a10 = a[4],\n a11 = a[5],\n a12 = a[6],\n a13 = a[7];\n\n if (a !== out) { // If the source and destination differ, copy the unchanged last row\n out[8] = a[8];\n out[9] = a[9];\n out[10] = a[10];\n out[11] = a[11];\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n }\n\n // Perform axis-specific matrix multiplication\n out[0] = a00 * c + a10 * s;\n out[1] = a01 * c + a11 * s;\n out[2] = a02 * c + a12 * s;\n out[3] = a03 * c + a13 * s;\n out[4] = a10 * c - a00 * s;\n out[5] = a11 * c - a01 * s;\n out[6] = a12 * c - a02 * s;\n out[7] = a13 * c - a03 * s;\n return out;\n};","module.exports = scale;\n\n/**\n * Scales the mat4 by the dimensions in the given vec3\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to scale\n * @param {vec3} v the vec3 to scale the matrix by\n * @returns {mat4} out\n **/\nfunction scale(out, a, v) {\n var x = v[0], y = v[1], z = v[2];\n\n out[0] = a[0] * x;\n out[1] = a[1] * x;\n out[2] = a[2] * x;\n out[3] = a[3] * x;\n out[4] = a[4] * y;\n out[5] = a[5] * y;\n out[6] = a[6] * y;\n out[7] = a[7] * y;\n out[8] = a[8] * z;\n out[9] = a[9] * z;\n out[10] = a[10] * z;\n out[11] = a[11] * z;\n out[12] = a[12];\n out[13] = a[13];\n out[14] = a[14];\n out[15] = a[15];\n return out;\n};","module.exports = str;\n\n/**\n * Returns a string representation of a mat4\n *\n * @param {mat4} mat matrix to represent as a string\n * @returns {String} string representation of the matrix\n */\nfunction str(a) {\n return 'mat4(' + a[0] + ', ' + a[1] + ', ' + a[2] + ', ' + a[3] + ', ' +\n a[4] + ', ' + a[5] + ', ' + a[6] + ', ' + a[7] + ', ' +\n a[8] + ', ' + a[9] + ', ' + a[10] + ', ' + a[11] + ', ' + \n a[12] + ', ' + a[13] + ', ' + a[14] + ', ' + a[15] + ')';\n};","module.exports = translate;\n\n/**\n * Translate a mat4 by the given vector\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the matrix to translate\n * @param {vec3} v vector to translate by\n * @returns {mat4} out\n */\nfunction translate(out, a, v) {\n var x = v[0], y = v[1], z = v[2],\n a00, a01, a02, a03,\n a10, a11, a12, a13,\n a20, a21, a22, a23;\n\n if (a === out) {\n out[12] = a[0] * x + a[4] * y + a[8] * z + a[12];\n out[13] = a[1] * x + a[5] * y + a[9] * z + a[13];\n out[14] = a[2] * x + a[6] * y + a[10] * z + a[14];\n out[15] = a[3] * x + a[7] * y + a[11] * z + a[15];\n } else {\n a00 = a[0]; a01 = a[1]; a02 = a[2]; a03 = a[3];\n a10 = a[4]; a11 = a[5]; a12 = a[6]; a13 = a[7];\n a20 = a[8]; a21 = a[9]; a22 = a[10]; a23 = a[11];\n\n out[0] = a00; out[1] = a01; out[2] = a02; out[3] = a03;\n out[4] = a10; out[5] = a11; out[6] = a12; out[7] = a13;\n out[8] = a20; out[9] = a21; out[10] = a22; out[11] = a23;\n\n out[12] = a00 * x + a10 * y + a20 * z + a[12];\n out[13] = a01 * x + a11 * y + a21 * z + a[13];\n out[14] = a02 * x + a12 * y + a22 * z + a[14];\n out[15] = a03 * x + a13 * y + a23 * z + a[15];\n }\n\n return out;\n};","module.exports = transpose;\n\n/**\n * Transpose the values of a mat4\n *\n * @param {mat4} out the receiving matrix\n * @param {mat4} a the source matrix\n * @returns {mat4} out\n */\nfunction transpose(out, a) {\n // If we are transposing ourselves we can skip a few steps but have to cache some values\n if (out === a) {\n var a01 = a[1], a02 = a[2], a03 = a[3],\n a12 = a[6], a13 = a[7],\n a23 = a[11];\n\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a01;\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a02;\n out[9] = a12;\n out[11] = a[14];\n out[12] = a03;\n out[13] = a13;\n out[14] = a23;\n } else {\n out[0] = a[0];\n out[1] = a[4];\n out[2] = a[8];\n out[3] = a[12];\n out[4] = a[1];\n out[5] = a[5];\n out[6] = a[9];\n out[7] = a[13];\n out[8] = a[2];\n out[9] = a[6];\n out[10] = a[10];\n out[11] = a[14];\n out[12] = a[3];\n out[13] = a[7];\n out[14] = a[11];\n out[15] = a[15];\n }\n \n return out;\n};","module.exports = add;\n\n/**\n * Adds two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction add(out, a, b) {\n out[0] = a[0] + b[0]\n out[1] = a[1] + b[1]\n out[2] = a[2] + b[2]\n return out\n}","module.exports = angle\n\nvar fromValues = require('./fromValues')\nvar normalize = require('./normalize')\nvar dot = require('./dot')\n\n/**\n * Get the angle between two 3D vectors\n * @param {vec3} a The first operand\n * @param {vec3} b The second operand\n * @returns {Number} The angle in radians\n */\nfunction angle(a, b) {\n var tempA = fromValues(a[0], a[1], a[2])\n var tempB = fromValues(b[0], b[1], b[2])\n \n normalize(tempA, tempA)\n normalize(tempB, tempB)\n \n var cosine = dot(tempA, tempB)\n\n if(cosine > 1.0){\n return 0\n } else {\n return Math.acos(cosine)\n } \n}\n","module.exports = ceil\n\n/**\n * Math.ceil the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to ceil\n * @returns {vec3} out\n */\nfunction ceil(out, a) {\n out[0] = Math.ceil(a[0])\n out[1] = Math.ceil(a[1])\n out[2] = Math.ceil(a[2])\n return out\n}\n","module.exports = clone;\n\n/**\n * Creates a new vec3 initialized with values from an existing vector\n *\n * @param {vec3} a vector to clone\n * @returns {vec3} a new 3D vector\n */\nfunction clone(a) {\n var out = new Float32Array(3)\n out[0] = a[0]\n out[1] = a[1]\n out[2] = a[2]\n return out\n}","module.exports = copy;\n\n/**\n * Copy the values from one vec3 to another\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the source vector\n * @returns {vec3} out\n */\nfunction copy(out, a) {\n out[0] = a[0]\n out[1] = a[1]\n out[2] = a[2]\n return out\n}","module.exports = create;\n\n/**\n * Creates a new, empty vec3\n *\n * @returns {vec3} a new 3D vector\n */\nfunction create() {\n var out = new Float32Array(3)\n out[0] = 0\n out[1] = 0\n out[2] = 0\n return out\n}","module.exports = cross;\n\n/**\n * Computes the cross product of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction cross(out, a, b) {\n var ax = a[0], ay = a[1], az = a[2],\n bx = b[0], by = b[1], bz = b[2]\n\n out[0] = ay * bz - az * by\n out[1] = az * bx - ax * bz\n out[2] = ax * by - ay * bx\n return out\n}","module.exports = require('./distance')\n","module.exports = distance;\n\n/**\n * Calculates the euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} distance between a and b\n */\nfunction distance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2]\n return Math.sqrt(x*x + y*y + z*z)\n}","module.exports = require('./divide')\n","module.exports = divide;\n\n/**\n * Divides two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction divide(out, a, b) {\n out[0] = a[0] / b[0]\n out[1] = a[1] / b[1]\n out[2] = a[2] / b[2]\n return out\n}","module.exports = dot;\n\n/**\n * Calculates the dot product of two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} dot product of a and b\n */\nfunction dot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]\n}","module.exports = 0.000001\n","module.exports = equals\n\nvar EPSILON = require('./epsilon')\n\n/**\n * Returns whether or not the vectors have approximately the same elements in the same position.\n *\n * @param {vec3} a The first vector.\n * @param {vec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nfunction equals(a, b) {\n var a0 = a[0]\n var a1 = a[1]\n var a2 = a[2]\n var b0 = b[0]\n var b1 = b[1]\n var b2 = b[2]\n return (Math.abs(a0 - b0) <= EPSILON * Math.max(1.0, Math.abs(a0), Math.abs(b0)) &&\n Math.abs(a1 - b1) <= EPSILON * Math.max(1.0, Math.abs(a1), Math.abs(b1)) &&\n Math.abs(a2 - b2) <= EPSILON * Math.max(1.0, Math.abs(a2), Math.abs(b2)))\n}\n","module.exports = exactEquals\n\n/**\n * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)\n *\n * @param {vec3} a The first vector.\n * @param {vec3} b The second vector.\n * @returns {Boolean} True if the vectors are equal, false otherwise.\n */\nfunction exactEquals(a, b) {\n return a[0] === b[0] && a[1] === b[1] && a[2] === b[2]\n}\n","module.exports = floor\n\n/**\n * Math.floor the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to floor\n * @returns {vec3} out\n */\nfunction floor(out, a) {\n out[0] = Math.floor(a[0])\n out[1] = Math.floor(a[1])\n out[2] = Math.floor(a[2])\n return out\n}\n","module.exports = forEach;\n\nvar vec = require('./create')()\n\n/**\n * Perform some operation over an array of vec3s.\n *\n * @param {Array} a the array of vectors to iterate over\n * @param {Number} stride Number of elements between the start of each vec3. If 0 assumes tightly packed\n * @param {Number} offset Number of elements to skip at the beginning of the array\n * @param {Number} count Number of vec3s to iterate over. If 0 iterates over entire array\n * @param {Function} fn Function to call for each vector in the array\n * @param {Object} [arg] additional argument to pass to fn\n * @returns {Array} a\n * @function\n */\nfunction forEach(a, stride, offset, count, fn, arg) {\n var i, l\n if(!stride) {\n stride = 3\n }\n\n if(!offset) {\n offset = 0\n }\n \n if(count) {\n l = Math.min((count * stride) + offset, a.length)\n } else {\n l = a.length\n }\n\n for(i = offset; i < l; i += stride) {\n vec[0] = a[i] \n vec[1] = a[i+1] \n vec[2] = a[i+2]\n fn(vec, vec, arg)\n a[i] = vec[0] \n a[i+1] = vec[1] \n a[i+2] = vec[2]\n }\n \n return a\n}","module.exports = fromValues;\n\n/**\n * Creates a new vec3 initialized with the given values\n *\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} a new 3D vector\n */\nfunction fromValues(x, y, z) {\n var out = new Float32Array(3)\n out[0] = x\n out[1] = y\n out[2] = z\n return out\n}","module.exports = {\n EPSILON: require('./epsilon')\n , create: require('./create')\n , clone: require('./clone')\n , angle: require('./angle')\n , fromValues: require('./fromValues')\n , copy: require('./copy')\n , set: require('./set')\n , equals: require('./equals')\n , exactEquals: require('./exactEquals')\n , add: require('./add')\n , subtract: require('./subtract')\n , sub: require('./sub')\n , multiply: require('./multiply')\n , mul: require('./mul')\n , divide: require('./divide')\n , div: require('./div')\n , min: require('./min')\n , max: require('./max')\n , floor: require('./floor')\n , ceil: require('./ceil')\n , round: require('./round')\n , scale: require('./scale')\n , scaleAndAdd: require('./scaleAndAdd')\n , distance: require('./distance')\n , dist: require('./dist')\n , squaredDistance: require('./squaredDistance')\n , sqrDist: require('./sqrDist')\n , length: require('./length')\n , len: require('./len')\n , squaredLength: require('./squaredLength')\n , sqrLen: require('./sqrLen')\n , negate: require('./negate')\n , inverse: require('./inverse')\n , normalize: require('./normalize')\n , dot: require('./dot')\n , cross: require('./cross')\n , lerp: require('./lerp')\n , random: require('./random')\n , transformMat4: require('./transformMat4')\n , transformMat3: require('./transformMat3')\n , transformQuat: require('./transformQuat')\n , rotateX: require('./rotateX')\n , rotateY: require('./rotateY')\n , rotateZ: require('./rotateZ')\n , forEach: require('./forEach')\n}\n","module.exports = inverse;\n\n/**\n * Returns the inverse of the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to invert\n * @returns {vec3} out\n */\nfunction inverse(out, a) {\n out[0] = 1.0 / a[0]\n out[1] = 1.0 / a[1]\n out[2] = 1.0 / a[2]\n return out\n}","module.exports = require('./length')\n","module.exports = length;\n\n/**\n * Calculates the length of a vec3\n *\n * @param {vec3} a vector to calculate length of\n * @returns {Number} length of a\n */\nfunction length(a) {\n var x = a[0],\n y = a[1],\n z = a[2]\n return Math.sqrt(x*x + y*y + z*z)\n}","module.exports = lerp;\n\n/**\n * Performs a linear interpolation between two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} t interpolation amount between the two inputs\n * @returns {vec3} out\n */\nfunction lerp(out, a, b, t) {\n var ax = a[0],\n ay = a[1],\n az = a[2]\n out[0] = ax + t * (b[0] - ax)\n out[1] = ay + t * (b[1] - ay)\n out[2] = az + t * (b[2] - az)\n return out\n}","module.exports = max;\n\n/**\n * Returns the maximum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction max(out, a, b) {\n out[0] = Math.max(a[0], b[0])\n out[1] = Math.max(a[1], b[1])\n out[2] = Math.max(a[2], b[2])\n return out\n}","module.exports = min;\n\n/**\n * Returns the minimum of two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction min(out, a, b) {\n out[0] = Math.min(a[0], b[0])\n out[1] = Math.min(a[1], b[1])\n out[2] = Math.min(a[2], b[2])\n return out\n}","module.exports = require('./multiply')\n","module.exports = multiply;\n\n/**\n * Multiplies two vec3's\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction multiply(out, a, b) {\n out[0] = a[0] * b[0]\n out[1] = a[1] * b[1]\n out[2] = a[2] * b[2]\n return out\n}","module.exports = negate;\n\n/**\n * Negates the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to negate\n * @returns {vec3} out\n */\nfunction negate(out, a) {\n out[0] = -a[0]\n out[1] = -a[1]\n out[2] = -a[2]\n return out\n}","module.exports = normalize;\n\n/**\n * Normalize a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to normalize\n * @returns {vec3} out\n */\nfunction normalize(out, a) {\n var x = a[0],\n y = a[1],\n z = a[2]\n var len = x*x + y*y + z*z\n if (len > 0) {\n //TODO: evaluate use of glm_invsqrt here?\n len = 1 / Math.sqrt(len)\n out[0] = a[0] * len\n out[1] = a[1] * len\n out[2] = a[2] * len\n }\n return out\n}","module.exports = random;\n\n/**\n * Generates a random vector with the given scale\n *\n * @param {vec3} out the receiving vector\n * @param {Number} [scale] Length of the resulting vector. If ommitted, a unit vector will be returned\n * @returns {vec3} out\n */\nfunction random(out, scale) {\n scale = scale || 1.0\n\n var r = Math.random() * 2.0 * Math.PI\n var z = (Math.random() * 2.0) - 1.0\n var zScale = Math.sqrt(1.0-z*z) * scale\n\n out[0] = Math.cos(r) * zScale\n out[1] = Math.sin(r) * zScale\n out[2] = z * scale\n return out\n}","module.exports = rotateX;\n\n/**\n * Rotate a 3D vector around the x-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nfunction rotateX(out, a, b, c){\n var by = b[1]\n var bz = b[2]\n\n // Translate point to the origin\n var py = a[1] - by\n var pz = a[2] - bz\n\n var sc = Math.sin(c)\n var cc = Math.cos(c)\n\n // perform rotation and translate to correct position\n out[0] = a[0]\n out[1] = by + py * cc - pz * sc\n out[2] = bz + py * sc + pz * cc\n\n return out\n}\n","module.exports = rotateY;\n\n/**\n * Rotate a 3D vector around the y-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nfunction rotateY(out, a, b, c){\n var bx = b[0]\n var bz = b[2]\n\n // translate point to the origin\n var px = a[0] - bx\n var pz = a[2] - bz\n \n var sc = Math.sin(c)\n var cc = Math.cos(c)\n \n // perform rotation and translate to correct position\n out[0] = bx + pz * sc + px * cc\n out[1] = a[1]\n out[2] = bz + pz * cc - px * sc\n \n return out\n}\n","module.exports = rotateZ;\n\n/**\n * Rotate a 3D vector around the z-axis\n * @param {vec3} out The receiving vec3\n * @param {vec3} a The vec3 point to rotate\n * @param {vec3} b The origin of the rotation\n * @param {Number} c The angle of rotation\n * @returns {vec3} out\n */\nfunction rotateZ(out, a, b, c){\n var bx = b[0]\n var by = b[1]\n\n //Translate point to the origin\n var px = a[0] - bx\n var py = a[1] - by\n \n var sc = Math.sin(c)\n var cc = Math.cos(c)\n\n // perform rotation and translate to correct position\n out[0] = bx + px * cc - py * sc\n out[1] = by + px * sc + py * cc\n out[2] = a[2]\n \n return out\n}\n","module.exports = round\n\n/**\n * Math.round the components of a vec3\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a vector to round\n * @returns {vec3} out\n */\nfunction round(out, a) {\n out[0] = Math.round(a[0])\n out[1] = Math.round(a[1])\n out[2] = Math.round(a[2])\n return out\n}\n","module.exports = scale;\n\n/**\n * Scales a vec3 by a scalar number\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to scale\n * @param {Number} b amount to scale the vector by\n * @returns {vec3} out\n */\nfunction scale(out, a, b) {\n out[0] = a[0] * b\n out[1] = a[1] * b\n out[2] = a[2] * b\n return out\n}","module.exports = scaleAndAdd;\n\n/**\n * Adds two vec3's after scaling the second operand by a scalar value\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @param {Number} scale the amount to scale b by before adding\n * @returns {vec3} out\n */\nfunction scaleAndAdd(out, a, b, scale) {\n out[0] = a[0] + (b[0] * scale)\n out[1] = a[1] + (b[1] * scale)\n out[2] = a[2] + (b[2] * scale)\n return out\n}","module.exports = set;\n\n/**\n * Set the components of a vec3 to the given values\n *\n * @param {vec3} out the receiving vector\n * @param {Number} x X component\n * @param {Number} y Y component\n * @param {Number} z Z component\n * @returns {vec3} out\n */\nfunction set(out, x, y, z) {\n out[0] = x\n out[1] = y\n out[2] = z\n return out\n}","module.exports = require('./squaredDistance')\n","module.exports = require('./squaredLength')\n","module.exports = squaredDistance;\n\n/**\n * Calculates the squared euclidian distance between two vec3's\n *\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {Number} squared distance between a and b\n */\nfunction squaredDistance(a, b) {\n var x = b[0] - a[0],\n y = b[1] - a[1],\n z = b[2] - a[2]\n return x*x + y*y + z*z\n}","module.exports = squaredLength;\n\n/**\n * Calculates the squared length of a vec3\n *\n * @param {vec3} a vector to calculate squared length of\n * @returns {Number} squared length of a\n */\nfunction squaredLength(a) {\n var x = a[0],\n y = a[1],\n z = a[2]\n return x*x + y*y + z*z\n}","module.exports = require('./subtract')\n","module.exports = subtract;\n\n/**\n * Subtracts vector b from vector a\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the first operand\n * @param {vec3} b the second operand\n * @returns {vec3} out\n */\nfunction subtract(out, a, b) {\n out[0] = a[0] - b[0]\n out[1] = a[1] - b[1]\n out[2] = a[2] - b[2]\n return out\n}","module.exports = transformMat3;\n\n/**\n * Transforms the vec3 with a mat3.\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m the 3x3 matrix to transform with\n * @returns {vec3} out\n */\nfunction transformMat3(out, a, m) {\n var x = a[0], y = a[1], z = a[2]\n out[0] = x * m[0] + y * m[3] + z * m[6]\n out[1] = x * m[1] + y * m[4] + z * m[7]\n out[2] = x * m[2] + y * m[5] + z * m[8]\n return out\n}","module.exports = transformMat4;\n\n/**\n * Transforms the vec3 with a mat4.\n * 4th vector component is implicitly '1'\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {mat4} m matrix to transform with\n * @returns {vec3} out\n */\nfunction transformMat4(out, a, m) {\n var x = a[0], y = a[1], z = a[2],\n w = m[3] * x + m[7] * y + m[11] * z + m[15]\n w = w || 1.0\n out[0] = (m[0] * x + m[4] * y + m[8] * z + m[12]) / w\n out[1] = (m[1] * x + m[5] * y + m[9] * z + m[13]) / w\n out[2] = (m[2] * x + m[6] * y + m[10] * z + m[14]) / w\n return out\n}","module.exports = transformQuat;\n\n/**\n * Transforms the vec3 with a quat\n *\n * @param {vec3} out the receiving vector\n * @param {vec3} a the vector to transform\n * @param {quat} q quaternion to transform with\n * @returns {vec3} out\n */\nfunction transformQuat(out, a, q) {\n // benchmarks: http://jsperf.com/quaternion-transform-vec3-implementations\n\n var x = a[0], y = a[1], z = a[2],\n qx = q[0], qy = q[1], qz = q[2], qw = q[3],\n\n // calculate quat * vec\n ix = qw * x + qy * z - qz * y,\n iy = qw * y + qz * x - qx * z,\n iz = qw * z + qx * y - qy * x,\n iw = -qx * x - qy * y - qz * z\n\n // calculate result * inverse quat\n out[0] = ix * qw + iw * -qx + iy * -qz - iz * -qy\n out[1] = iy * qw + iw * -qy + iz * -qx - ix * -qz\n out[2] = iz * qw + iw * -qz + ix * -qy - iy * -qx\n return out\n}","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&uh(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=sh(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Ah(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=yh(f.type,f.key,f.props,null,a.mode,h),h.ref=sh(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=zh(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);th(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=xh(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Bh=vh(!0),Ch=vh(!1),Dh={},Eh=Uf(Dh),Fh=Uf(Dh),Gh=Uf(Dh);function Hh(a){if(a===Dh)throw Error(p(174));return a}function Ih(a,b){G(Gh,b);G(Fh,a);G(Eh,Dh);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:lb(null,\"\");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=lb(b,a)}E(Eh);G(Eh,b)}function Jh(){E(Eh);E(Fh);E(Gh)}\nfunction Kh(a){Hh(Gh.current);var b=Hh(Eh.current);var c=lb(b,a.type);b!==c&&(G(Fh,a),G(Eh,c))}function Lh(a){Fh.current===a&&(E(Eh),E(Fh))}var M=Uf(0);\nfunction Mh(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||\"$?\"===c.data||\"$!\"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&128))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Nh=[];\nfunction Oh(){for(var a=0;ac?c:4;a(!0);var d=Qh.transition;Qh.transition={};try{a(!1),b()}finally{C=c,Qh.transition=d}}function Fi(){return di().memoizedState}\nfunction Gi(a,b,c){var d=lh(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,c);else if(c=Yg(a,b,c,d),null!==c){var e=L();mh(c,a,d,e);Ji(c,b,d)}}\nfunction ri(a,b,c){var d=lh(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(Hi(a))Ii(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,Xg(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=Yg(a,b,e,d);null!==c&&(e=L(),mh(c,a,d,e),Ji(c,b,d))}}\nfunction Hi(a){var b=a.alternate;return a===N||null!==b&&b===N}function Ii(a,b){Th=Sh=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Ji(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar ai={readContext:Vg,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useInsertionEffect:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useSyncExternalStore:Q,useId:Q,unstable_isNewReconciler:!1},Yh={readContext:Vg,useCallback:function(a,b){ci().memoizedState=[a,void 0===b?null:b];return a},useContext:Vg,useEffect:vi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ti(4194308,\n4,yi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ti(4194308,4,a,b)},useInsertionEffect:function(a,b){return ti(4,2,a,b)},useMemo:function(a,b){var c=ci();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=ci();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=Gi.bind(null,N,a);return[d.memoizedState,a]},useRef:function(a){var b=\nci();a={current:a};return b.memoizedState=a},useState:qi,useDebugValue:Ai,useDeferredValue:function(a){return ci().memoizedState=a},useTransition:function(){var a=qi(!1),b=a[0];a=Ei.bind(null,a[1]);ci().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=N,e=ci();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===R)throw Error(p(349));0!==(Rh&30)||ni(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;vi(ki.bind(null,d,\nf,a),[a]);d.flags|=2048;li(9,mi.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=ci(),b=R.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Uh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;Aj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eHj&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304)}else{if(!d)if(a=Mh(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Ej(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Hj&&1073741824!==c&&(b.flags|=128,d=!0,Ej(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=M.current,G(M,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Ij(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(gj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Jj(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return Jh(),E(Wf),E(H),Oh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Lh(b),null;case 13:E(M);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(M),null;case 4:return Jh(),null;case 10:return Rg(b.type._context),null;case 22:case 23:return Ij(),\nnull;case 24:return null;default:return null}}var Kj=!1,U=!1,Lj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Mj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Nj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Oj=!1;\nfunction Pj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Lg(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Oj;Oj=!1;return n}\nfunction Qj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Nj(b,c,f)}e=e.next}while(e!==d)}}function Rj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Sj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Tj(a){var b=a.alternate;null!==b&&(a.alternate=null,Tj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Uj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Vj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Uj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}\nfunction Xj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Xj(a,b,c),a=a.sibling;null!==a;)Xj(a,b,c),a=a.sibling}var X=null,Yj=!1;function Zj(a,b,c){for(c=c.child;null!==c;)ak(a,b,c),c=c.sibling}\nfunction ak(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Mj(c,b);case 6:var d=X,e=Yj;X=null;Zj(a,b,c);X=d;Yj=e;null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Yj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Yj;X=c.stateNode.containerInfo;Yj=!0;\nZj(a,b,c);X=d;Yj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Nj(c,b,g):0!==(f&4)&&Nj(c,b,g));e=e.next}while(e!==d)}Zj(a,b,c);break;case 1:if(!U&&(Mj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Zj(a,b,c);break;case 21:Zj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Zj(a,b,c),U=d):Zj(a,b,c);break;default:Zj(a,b,c)}}function bk(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Lj);b.forEach(function(b){var d=ck.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction dk(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*mk(d/1960))-d;if(10a?16:a;if(null===xk)var d=!1;else{a=xk;xk=null;yk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-gk?Lk(a,0):sk|=c);Ek(a,b)}function Zk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=L();a=Zg(a,b);null!==a&&(Ac(a,b,c),Ek(a,c))}function vj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Zk(a,c)}\nfunction ck(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Zk(a,c)}var Wk;\nWk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)Ug=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return Ug=!1,zj(a,b,c);Ug=0!==(a.flags&131072)?!0:!1}else Ug=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;jj(a,b);a=b.pendingProps;var e=Yf(b,H.current);Tg(b,c);e=Xh(null,b,d,a,e,c);var f=bi();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,ah(b),e.updater=nh,b.stateNode=e,e._reactInternals=b,rh(b,d,a,c),b=kj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Yi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{jj(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=$k(d);a=Lg(d,a);switch(e){case 0:b=dj(null,b,d,a,c);break a;case 1:b=ij(null,b,d,a,c);break a;case 11:b=Zi(null,b,d,a,c);break a;case 14:b=aj(null,b,d,Lg(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),dj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),ij(a,b,d,e,c);case 3:a:{lj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;bh(a,b);gh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ki(Error(p(423)),b);b=mj(a,b,d,c,e);break a}else if(d!==e){e=Ki(Error(p(424)),b);b=mj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Ch(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=$i(a,b,c);break a}Yi(a,b,d,c)}b=b.child}return b;case 5:return Kh(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\nhj(a,b),Yi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return pj(a,b,c);case 4:return Ih(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Bh(b,null,d,c):Yi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),Zi(a,b,d,e,c);case 7:return Yi(a,b,b.pendingProps,c),b.child;case 8:return Yi(a,b,b.pendingProps.children,c),b.child;case 12:return Yi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Mg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=$i(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=ch(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);Sg(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);Sg(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Yi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,Tg(b,c),e=Vg(e),d=d(e),b.flags|=1,Yi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Lg(d,b.pendingProps),e=Lg(d.type,e),aj(a,b,d,e,c);case 15:return cj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Lg(d,e),jj(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,Tg(b,c),ph(b,d,e),rh(b,d,e,c),kj(null,b,d,!0,a,c);case 19:return yj(a,b,c);case 22:return ej(a,b,c)}throw Error(p(156,b.tag));};function Gk(a,b){return ac(a,b)}\nfunction al(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new al(a,b,c,d)}function bj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction $k(a){if(\"function\"===typeof a)return bj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction wh(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction yh(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)bj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Ah(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return qj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Ah(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function qj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function xh(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction zh(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction bl(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function cl(a,b,c,d,e,f,g,h,k){a=new bl(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};ah(f);return a}function dl(a,b,c){var d=3>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return arrayLikeToArray(arr);\n}\nmodule.exports = _arrayWithoutHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nfunction _createForOfIteratorHelper(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (!it) {\n if (Array.isArray(o) || (it = unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n var F = function F() {};\n return {\n s: F,\n n: function n() {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n },\n e: function e(_e) {\n throw _e;\n },\n f: F\n };\n }\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n var normalCompletion = true,\n didErr = false,\n err;\n return {\n s: function s() {\n it = it.call(o);\n },\n n: function n() {\n var step = it.next();\n normalCompletion = step.done;\n return step;\n },\n e: function e(_e2) {\n didErr = true;\n err = _e2;\n },\n f: function f() {\n try {\n if (!normalCompletion && it[\"return\"] != null) it[\"return\"]();\n } finally {\n if (didErr) throw err;\n }\n }\n };\n}\nmodule.exports = _createForOfIteratorHelper, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\nmodule.exports = _iterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableSpread, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var defineProperty = require(\"./defineProperty.js\");\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nmodule.exports = _objectSpread2, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithoutHoles = require(\"./arrayWithoutHoles.js\");\nvar iterableToArray = require(\"./iterableToArray.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableSpread = require(\"./nonIterableSpread.js\");\nfunction _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || unsupportedIterableToArray(arr) || nonIterableSpread();\n}\nmodule.exports = _toConsumableArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nmodule.exports = _toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}\nmodule.exports = _toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"static/js/\" + chunkId + \".\" + \"e5b8f22d\" + \".chunk.js\";\n};","// This function allow to reference async chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn undefined;\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","var inProgress = {};\nvar dataWebpackPrefix = \"easy-enclosure:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.p = \"/easy-enclosure/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t179: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkeasy_enclosure\"] = self[\"webpackChunkeasy_enclosure\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function _toPropertyKey(arg) {\n var key = toPrimitive(arg, \"string\");\n return _typeof(key) === \"symbol\" ? key : String(key);\n}","import _typeof from \"./typeof.js\";\nexport default function _toPrimitive(input, hint) {\n if (_typeof(input) !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (_typeof(res) !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}","import defineProperty from \"./defineProperty.js\";\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nexport default function _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","/**\r\n * Copied from fbjs is-shallow-equal\r\n */\r\n\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\n/**\r\n * inlined Object.is polyfill to avoid requiring consumers ship their own\r\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\r\n */\r\nfunction is(x: any, y: any): boolean {\r\n // SameValue algorithm\r\n if (x === y) { // Steps 1-5, 7-10\r\n // Steps 6.b-6.e: +0 != -0\r\n // Added the nonzero y check to make Flow happy, but it is redundant\r\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\r\n } else {\r\n // Step 6.a: NaN == NaN\r\n return x !== x && y !== y;\r\n }\r\n}\r\n\r\n/**\r\n * Performs equality by iterating through keys on an object and returning false\r\n * when any key has values which are not strictly equal between the arguments.\r\n * Returns true when the values of all keys are strictly equal.\r\n */\r\nexport function shallowEqual(objA: any, objB: any): boolean {\r\n if (is(objA, objB)) {\r\n return true;\r\n }\r\n\r\n if (typeof objA !== 'object' || objA === null ||\r\n typeof objB !== 'object' || objB === null) {\r\n return false;\r\n }\r\n\r\n const keysA = Object.keys(objA);\r\n const keysB = Object.keys(objB);\r\n\r\n if (keysA.length !== keysB.length) {\r\n return false;\r\n }\r\n\r\n // Test for A's keys different from B.\r\n for (let i = 0; i < keysA.length; i++) {\r\n if (\r\n !hasOwnProperty.call(objB, keysA[i]) ||\r\n !is(objA[keysA[i]], objB[keysA[i]])\r\n ) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}","import React from 'react';\r\nimport { shallowEqual } from './is-shallow-equal';\r\n\r\n///\r\n/// EXPORTED SYMBOLS (LIBRARY INTERFACE)\r\n///\r\n\r\n/**\r\n * 'JSON path' from root of a state object to a nested property.\r\n * Return type of [StateMethod.path](#readonly-path).\r\n *\r\n * For example, an object `{ a: [{ b: 1 }, { 1000: 'value' }, '3rd'] }`,\r\n * has got the following paths pointing to existing properties:\r\n *\r\n * - `[]`\r\n * - `['a']`\r\n * - `['a', 0]`\r\n * - `['a', 0, 'b']`\r\n * - `['a', 1]`\r\n * - `['a', 1, 1000]`\r\n * - `['a', 2]`\r\n */\r\nexport type Path = ReadonlyArray;\r\n\r\n/**\r\n * Type of an argument of [State.set](#set).\r\n * \r\n * @typeparam S Type of a value of a state\r\n */\r\nexport type SetStateAction = (S | Immutable | Promise>) | ((prevState: S) => (S | Immutable | Promise>));\r\n\r\n/**\r\n * Type of an argument of [State.merge](#merge).\r\n * \r\n * @typeparam S Type of a value of a state\r\n */\r\nexport type SetPartialStateAction =\r\n S extends ReadonlyArray<(infer U)> ?\r\n ReadonlyArray> | Record> | ((prevValue: S) => (ReadonlyArray> | Record>)) :\r\n S extends object | string ? Partial> | ((prevValue: S) => Partial>) :\r\n S | Immutable | ((prevState: S) => (S | Immutable));\r\n\r\n/**\r\n * Type of an argument of [hookstate](#hookstate) and [useHookstate](#useHookstate).\r\n * \r\n * @typeparam S Type of a value of a state\r\n */\r\nexport type SetInitialStateAction = S | Promise | (() => S | Promise)\r\n\r\n/**\r\n * Special symbol which might be used to delete properties\r\n * from an object calling [State.set](#set) or [State.merge](#merge).\r\n * \r\n * [Learn more...](https://hookstate.js.org/docs/nested-state#deleting-existing-element)\r\n */\r\nexport const none = Symbol('none') as StateValueAtPath;\r\n\r\n/**\r\n * Return type of [State.keys](#readonly-keys).\r\n * \r\n * @typeparam S Type of a value of a state\r\n */\r\nexport type InferStateKeysType =\r\n S extends ReadonlyArray ? ReadonlyArray :\r\n S extends null ? undefined :\r\n S extends object ? ReadonlyArray :\r\n undefined;\r\n\r\n/**\r\n * Return type of [State.ornull](#ornull).\r\n * \r\n * @typeparam S Type of a value of a state\r\n */\r\nexport type InferStateOrnullType =\r\n S extends undefined ? undefined :\r\n S extends null ? null : State;\r\n\r\n/**\r\n * Makes a value deep readonly\r\n */\r\nexport type Immutable =\r\n T extends ImmutablePrimitive ? T :\r\n T extends Array ? ImmutableArray :\r\n T extends Map ? ImmutableMap :\r\n T extends Set ? ImmutableSet : ImmutableObject;\r\nexport type ImmutablePrimitive = undefined | null | boolean | string | number | Function;\r\nexport type ImmutableArray = ReadonlyArray>;\r\nexport type ImmutableMap = ReadonlyMap, Immutable>;\r\nexport type ImmutableSet = ReadonlySet>;\r\nexport type ImmutableObject = { readonly [K in keyof T]: Immutable };\r\n\r\n/**\r\n * An interface to manage a state in Hookstate.\r\n * \r\n * @typeparam S Type of a value of a state\r\n */\r\nexport interface StateMethods {\r\n /**\r\n * 'Javascript' object 'path' to an element relative to the root object\r\n * in the state. For example:\r\n *\r\n * ```tsx\r\n * const state = useHookstate([{ name: 'First Task' }])\r\n * state.path IS []\r\n * state[0].path IS [0]\r\n * state.[0].name.path IS [0, 'name']\r\n * ```\r\n */\r\n readonly path: Path;\r\n\r\n /**\r\n * Return the keys of nested states.\r\n * For a given state of [State](#state) type,\r\n * `state.keys` will be structurally equal to Object.keys(state),\r\n * with two minor difference:\r\n * 1. if `state.value` is an array, the returned result will be\r\n * an array of numbers, not strings like with `Object.keys`.\r\n * 2. if `state.value` is not an object, the returned result will be undefined.\r\n */\r\n readonly keys: InferStateKeysType;\r\n\r\n /**\r\n * Unwraps and returns the underlying state value referred by\r\n * [path](#readonly-path) of this state instance.\r\n *\r\n * It returns the same result as [State.get](#get) method.\r\n *\r\n * This property is more useful than [get](#get) method for the cases,\r\n * when a value may hold null or undefined values.\r\n * Typescript compiler does not handle elimination of undefined with get(),\r\n * like in the following examples, but value does:\r\n *\r\n * ```tsx\r\n * const state = useHookstate(0)\r\n * const myvalue: number = state.value\r\n * ? state.value + 1\r\n * : 0; // <-- compiles\r\n * const myvalue: number = state.get()\r\n * ? state.get() + 1\r\n * : 0; // <-- does not compile\r\n * ```\r\n */\r\n readonly value: Immutable;\r\n\r\n /**\r\n * True if state value is not yet available (eg. equal to a promise)\r\n */\r\n readonly promised: boolean;\r\n\r\n /**\r\n * If the State is promised, this will be a defined promise\r\n * which an application can use to subscribe to with 'then' callback.\r\n */\r\n readonly promise: Promise> | undefined;\r\n\r\n /**\r\n * If a state was set to a promise and the promise was rejected,\r\n * this property will return the error captured from the promise rejection\r\n */\r\n readonly error: StateErrorAtRoot | undefined;\r\n\r\n /**\r\n * Unwraps and returns the underlying state value referred by\r\n * [path](#readonly-path) of this state instance.\r\n *\r\n * It returns the same result as [State.value](#readonly-value) method.\r\n * \r\n * If the additional option `noproxy` is set, the method will return\r\n * the original data object without wrapping it by proxy.\r\n * All properties of the object will be marked as used and on change will trigger the rerender.\r\n * \r\n * If the additional option `stealth` is set, the method will not mark\r\n * the object as used and it will not trigger the rerender if it is changed.\r\n * It might be helpful to use it during debugging, for example:\r\n * `console.log(state.get({ stealth: true }))`.\r\n * If you use it, make sure you know what you are doing. \r\n */\r\n get(options?: { noproxy?: boolean, stealth?: boolean }): Immutable;\r\n\r\n /**\r\n * Sets new value for a state.\r\n * If `this.path === []`,\r\n * it is similar to the `setState` variable returned by `React.useState` hook.\r\n * If `this.path !== []`, it sets only the segment of the state value, pointed out by the path.\r\n * Unlike [merge](#merge) method, this method will not accept partial updates.\r\n * Partial updates can be also done by walking the nested states and setting those.\r\n *\r\n * @param newValue new value to set to a state.\r\n * It can be a value, a promise resolving to a value\r\n * (only if [this.path](#readonly-path) is `[]`),\r\n * or a function returning one of these.\r\n * The function receives the current state value as an argument.\r\n */\r\n set(newValue: SetStateAction): void;\r\n\r\n /**\r\n * Similarly to [set](#set) method updates state value.\r\n *\r\n * - If current state value is an object, it does partial update for the object.\r\n * - If state value is an array and the argument is an array too,\r\n * it concatenates the current value with the value of the argument and sets it to the state.\r\n * - If state value is an array and the `merge` argument is an object,\r\n * it does partial update for the current array value.\r\n * - If current state value is a string, it concatenates the current state\r\n * value with the argument converted to string and sets the result to the state.\r\n */\r\n merge(newValue: SetPartialStateAction): void;\r\n\r\n /**\r\n * Returns nested state by key.\r\n * `state.nested('myprop')` returns the same as `state.myprop` or `state['myprop']`,\r\n * but also works for properties, which names collide with names of state methods.\r\n * \r\n * [Learn more about nested states...](https://hookstate.js.org/docs/nested-state)\r\n * \r\n * @param key child property name or index\r\n */\r\n nested(key: K): State;\r\n\r\n /**\r\n * If state value is null or undefined, returns state value.\r\n * Otherwise, it returns this state instance but\r\n * with null and undefined removed from the type parameter.\r\n * \r\n * [Learn more...](https://hookstate.js.org/docs/nullable-state)\r\n */\r\n ornull: InferStateOrnullType;\r\n}\r\n\r\n/**\r\n * Returns an interface stripped of all keys that don't resolve to U, defaulting \r\n * to a non-strict comparison of T[key] extends U. Setting B to true performs\r\n * a strict type comparison of T[key] extends U & U extends T[key]\r\n */\r\nexport type InferKeysOfType = {\r\n [P in keyof T]: B extends true\r\n ? T[P] extends U\r\n ? (U extends T[P]\r\n ? P\r\n : never)\r\n : never\r\n : T[P] extends U\r\n ? P\r\n : never;\r\n}[keyof T];\r\n\r\n// type PickByType = Pick>;\r\n\r\n/**\r\n * A symbol which is used for type inference marking.\r\n * \r\n * @hidden\r\n * @ignore\r\n */\r\nexport const __state = Symbol('__state')\r\n/**\r\n * An interface which is used for type inference marking.\r\n * \r\n * @hidden\r\n * @ignore\r\n */\r\nexport interface __State {\r\n [__state]: [S, E]\r\n}\r\n\r\n/**\r\n * A routine which allows to extract value type of a state. Useful for extension developers.\r\n */\r\nexport type InferStateValueType = InferReturnType extends __State<(infer S), (infer _)> ? S : V\r\n/**\r\n * A routine which allows to extract extension methods / properties type of a state.\r\n * Useful for extension developers.\r\n */\r\nexport type InferStateExtensionType = InferReturnType extends __State<(infer _), (infer E)>\r\n ? E\r\n : InferReturnType extends Extension<(infer _), (infer _), (infer E)>\r\n ? E : V\r\nexport type InferReturnType = V extends (...args: any) => (infer R) ? InferReturnType : V;\r\n\r\n/**\r\n * Type of a result of [hookstate](#hookstate) and [useHookstate](#useHookstate) functions\r\n * \r\n * @typeparam S Type of a value of a state\r\n * \r\n * [Learn more about global states...](https://hookstate.js.org/docs/global-state)\r\n * [Learn more about local states...](https://hookstate.js.org/docs/local-state)\r\n * [Learn more about nested states...](https://hookstate.js.org/docs/nested-state)\r\n */\r\nexport type State = __State & StateMethods & E & (\r\n S extends ReadonlyArray<(infer U)> ? ReadonlyArray> :\r\n S extends object ? Omit<\r\n { readonly [K in keyof Required]: State; },\r\n keyof StateMethods | InferKeysOfType | keyof E\r\n > : {}\r\n);\r\n\r\n/**\r\n * For extension developers only.\r\n * Type alias to highlight the places where we are dealing with root state value.\r\n *\r\n * @hidden\r\n * @ignore\r\n */\r\nexport type StateValueAtRoot = any; //tslint:disable-line: no-any\r\n/**\r\n * For extension developers only.\r\n * Type alias to highlight the places where we are dealing with nested state value.\r\n *\r\n * @hidden\r\n * @ignore\r\n */\r\nexport type StateValueAtPath = any; //tslint:disable-line: no-any\r\n/**\r\n * For extension developers only.\r\n * Type alias to highlight the places where we are dealing with state error.\r\n *\r\n * @hidden\r\n * @ignore\r\n */\r\nexport type StateErrorAtRoot = any; //tslint:disable-line: no-any\r\n\r\n/**\r\n * For extension developers only.\r\n * Type alias to highlight the places where we are dealing with unknown state extension type.\r\n *\r\n * @hidden\r\n * @ignore\r\n */\r\nexport type StateExtensionUnknown = any; //tslint:disable-line: no-any\r\n\r\n/**\r\n * For extension developers only.\r\n * An additional descriptor of an action mutation action applied\r\n * \r\n * @hidden\r\n * @ignore\r\n */\r\nexport interface SetActionDescriptor {\r\n // path to update / rerender,\r\n // migth be not the same as the part of state methods\r\n // for example, when a new index is added to array\r\n path: Path,\r\n actions?: Record\r\n}\r\n\r\n/**\r\n * For extension developers only.\r\n * Set of callbacks, an extension may subscribe to.\r\n * \r\n * [Learn more...](https://hookstate.js.org/docs/writing-extension)\r\n */\r\nexport interface Extension {\r\n readonly onCreate?: (\r\n state: State,\r\n extensionsCallbacks: {\r\n [K in keyof I]: (i: State) => I[K];\r\n },\r\n ) => { readonly [K in keyof Required]: (state: State) => E[K]; },\r\n readonly onInit?: (\r\n state: State,\r\n extensionsCallbacks: {\r\n [K in keyof E & I]: (i: State) => (E & I)[K];\r\n }\r\n ) => void,\r\n readonly onPreset?: (state: State, value: StateValueAtPath, rootState: State) => void,\r\n readonly onPremerge?: (state: State, value: StateValueAtPath, rootState: State) => void,\r\n readonly onSet?: (state: State, descriptor: SetActionDescriptor, rootState: State) => void,\r\n readonly onDestroy?: (state: State) => void,\r\n};\r\n\r\nexport type ExtensionFactory = (typemarker?: __State) => Extension\r\n\r\nexport function hookstate(\r\n source: __State,\r\n extension?: ExtensionFactory\r\n): never;\r\n/**\r\n * Creates new state and returns it.\r\n *\r\n * You can create as many global states as you need.\r\n *\r\n * When you the state is not needed anymore,\r\n * it should be destroyed by calling\r\n * `destroy()` function.\r\n * This is necessary for some extensions,\r\n * which allocate native resources,\r\n * like subscription to databases, broadcast channels, etc.\r\n * In most cases, a global state is used during\r\n * whole life time of an application and would not require\r\n * destruction. However, if you have got, for example,\r\n * a catalog of dynamically created and destroyed global states,\r\n * the states should be destroyed as advised above.\r\n *\r\n * @param initial Initial value of the state.\r\n * It can be a value OR a promise,\r\n * which asynchronously resolves to a value,\r\n * OR a function returning a value or a promise.\r\n *\r\n * @typeparam S Type of a value of the state\r\n *\r\n * @returns [State](#state) instance,\r\n * which can be used directly to get and set state value\r\n * outside of React components.\r\n * When you need to use the state in a functional `React` component,\r\n * pass the created state to [useHookstate](#useHookstate) function and\r\n * use the returned result in the component's logic.\r\n */\r\nexport function hookstate(\r\n initial: SetInitialStateAction,\r\n extension?: ExtensionFactory\r\n): State;\r\nexport function hookstate(\r\n initial: SetInitialStateAction,\r\n extension?: ExtensionFactory\r\n): State {\r\n const store = createStore(initial);\r\n store.activate(extension as ExtensionFactory)\r\n const methods = store.toMethods();\r\n return methods.self() as unknown as State;\r\n}\r\n\r\n/**\r\n * A method to destroy a global state and resources allocated by the extensions\r\n */\r\nexport function destroy(state: __State) {\r\n (state[self] as StateMethodsImpl).deactivate()\r\n}\r\n\r\n/**\r\n * A method to check if a variable is an instance of Hookstate State\r\n */\r\nexport function isHookstate(v: any) {\r\n return !!(v?.[self])\r\n}\r\n\r\n/**\r\n * A method to check if a variable is an instance of traced (wrapped in a proxy) Hookstate Value\r\n */\r\nexport function isHookstateValue(v: any) {\r\n return !!(v?.[SelfMethodsID])\r\n}\r\n\r\n/**\r\n * A function combines multiple extensions into one extension and returns it\r\n * Browse an example [here](https://hookstate.js.org/docs/extensions-snapshotable)\r\n */\r\nexport function extend<\r\n S,\r\n E,\r\n E1 extends {} = {},\r\n E2 extends {} = {},\r\n E3 extends {} = {},\r\n E4 extends {} = {},\r\n E5 extends {} = {}\r\n>(\r\n e1?: ExtensionFactory,\r\n e2?: ExtensionFactory,\r\n e3?: ExtensionFactory,\r\n e4?: ExtensionFactory,\r\n e5?: ExtensionFactory\r\n): ExtensionFactory {\r\n function extended(extensions: (ExtensionFactory)[]) {\r\n let exts = extensions.map(i => i());\r\n let onInitCbs = exts.map(i => i.onInit).filter(i => i)\r\n let onPremergeCbs = exts.map(i => i.onPremerge).filter(i => i)\r\n let onPresetCbs = exts.map(i => i.onPreset).filter(i => i)\r\n let onSetCbs = exts.map(i => i.onSet).filter(i => i)\r\n let onDestroyCbs = exts.map(i => i.onDestroy).filter(i => i)\r\n let result: Writeable> = {\r\n onCreate: (instanceFactory, combinedMethods) => {\r\n for (let ext of exts) {\r\n if (ext.onCreate) {\r\n let extMethods = ext.onCreate(instanceFactory, combinedMethods)\r\n Object.assign(combinedMethods, extMethods)\r\n }\r\n }\r\n return combinedMethods\r\n }\r\n }\r\n if (onInitCbs.length > 0) {\r\n result.onInit = (s, e) => {\r\n for (let cb of onInitCbs) {\r\n cb!(s, e);\r\n }\r\n }\r\n }\r\n if (onPremergeCbs.length > 0) {\r\n result.onPremerge = (s, d, r) => {\r\n for (let cb of onPremergeCbs) {\r\n cb!(s, d, r);\r\n }\r\n }\r\n }\r\n if (onPresetCbs.length > 0) {\r\n result.onPreset = (s, d, r) => {\r\n for (let cb of onPresetCbs) {\r\n cb!(s, d, r);\r\n }\r\n }\r\n }\r\n if (onSetCbs.length > 0) {\r\n result.onSet = (s, d, r) => {\r\n for (let cb of onSetCbs) {\r\n cb!(s, d, r);\r\n }\r\n }\r\n }\r\n if (onDestroyCbs.length > 0) {\r\n result.onDestroy = (s) => {\r\n for (let cb of onDestroyCbs) {\r\n cb!(s);\r\n }\r\n }\r\n }\r\n return result as Extension\r\n }\r\n return () => extended((\r\n [e1, e2, e3, e4, e5] as ExtensionFactory[]\r\n ).filter(i => i!))\r\n}\r\n\r\n/**\r\n * @warning Initializing a local state to a promise without using \r\n * an initializer callback function, which returns a Promise,\r\n * is almost always a mistake. So, it is blocked.\r\n * Use `useHookstate(() => your_promise)` instead of `useHookstate(your_promise)`.\r\n */\r\nexport function useHookstate(\r\n source: Promise,\r\n extension?: ExtensionFactory\r\n): never;\r\nexport function useHookstate(\r\n source: __State,\r\n extension: ExtensionFactory\r\n): never;\r\n/**\r\n * Enables a functional React component to use a state,\r\n * either created by [hookstate](#hookstate) (*global* state) or\r\n * derived from another call to [useHookstate](#useHookstate) (*scoped* state).\r\n *\r\n * The `useHookstate` forces a component to rerender every time, when:\r\n * - a segment/part of the state data is updated *AND only if*\r\n * - this segment was **used** by the component during or after the latest rendering.\r\n *\r\n * For example, if the state value is `{ a: 1, b: 2 }` and\r\n * a component uses only `a` property of the state, it will rerender\r\n * only when the whole state object is updated or when `a` property is updated.\r\n * Setting the state value/property to the same value is also considered as an update.\r\n *\r\n * A component can use one or many states,\r\n * i.e. you may call `useHookstate` multiple times for multiple states.\r\n *\r\n * The same state can be used by multiple different components.\r\n *\r\n * @param source a reference to the state to hook into\r\n *\r\n * The `useHookstate` is a hook and should follow React's rules of hooks.\r\n *\r\n * @returns an instance of [State](#state),\r\n * which **must be** used within the component (during rendering\r\n * or in effects) or it's children.\r\n */\r\nexport function useHookstate(\r\n source: __State\r\n): State;\r\n/**\r\n * This function enables a functional React component to use a state,\r\n * created per component by [useHookstate](#useHookstate) (*local* state).\r\n * In this case `useHookstate` behaves similarly to `React.useState`,\r\n * but the returned instance of [State](#state)\r\n * has got more features.\r\n *\r\n * When a state is used by only one component, and maybe it's children,\r\n * it is recommended to use *local* state instead of *global*,\r\n * which is created by [hookstate](#hookstate).\r\n *\r\n * *Local* (per component) state is created when a component is mounted\r\n * and automatically destroyed when a component is unmounted.\r\n *\r\n * The same as with the usage of a *global* state,\r\n * `useHookstate` forces a component to rerender when:\r\n * - a segment/part of the state data is updated *AND only if*\r\n * - this segment was **used** by the component during or after the latest rendering.\r\n *\r\n * You can use as many local states within the same component as you need.\r\n *\r\n * @param source An initial value state.\r\n *\r\n * @returns an instance of [State](#state),\r\n * which **must be** used within the component (during rendering\r\n * or in effects) or it's children.\r\n */\r\nexport function useHookstate(\r\n source: SetInitialStateAction,\r\n extension?: ExtensionFactory\r\n): State;\r\nexport function useHookstate(\r\n source: SetInitialStateAction | State,\r\n extension?: ExtensionFactory\r\n): State {\r\n const parentMethods = Object(source) === source ?\r\n source[self] as StateMethodsImpl | undefined :\r\n undefined;\r\n if (parentMethods) {\r\n if (parentMethods.isMounted) {\r\n // Scoped state mount\r\n // eslint-disable-next-line react-hooks/rules-of-hooks\r\n const initializer = () => {\r\n // warning: this is called twice in react strict mode\r\n let store = parentMethods.store\r\n let onSetUsedCallback = () => setValue({\r\n store: store, // immutable\r\n state: state, // immutable\r\n source: value.source // mutable, get the latest from value\r\n })\r\n let state = new StateMethodsImpl(\r\n store,\r\n parentMethods.path,\r\n store.get(parentMethods.path),\r\n store.edition,\r\n onSetUsedCallback\r\n );\r\n return {\r\n store: store,\r\n state: state,\r\n source: source\r\n }\r\n };\r\n const [value, setValue] = React.useState(initializer);\r\n\r\n if (value.store !== parentMethods.store || !('source' in value)) {\r\n throw new StateInvalidUsageError(parentMethods.path, ErrorId.InitStateStoreSwitchover)\r\n }\r\n\r\n // TODO move to a class hide props on prototype level\r\n // hide props from development tools\r\n Object.defineProperty(value, 'store', { enumerable: false });\r\n Object.defineProperty(value, 'state', { enumerable: false });\r\n Object.defineProperty(value, 'source', { enumerable: false });\r\n\r\n value.state.reconstruct(\r\n parentMethods.path,\r\n value.store.get(parentMethods.path),\r\n value.store.edition,\r\n // parent state object has changed its reference object\r\n // so the scopped state should change too\r\n value.source !== source\r\n );\r\n value.source = source;\r\n\r\n // need to subscribe in sync mode, because\r\n // safari delays calling the effect giving priority to timeouts and network events,\r\n // which can cause the state update\r\n parentMethods.subscribe(value.state); // no-op if already subscribed\r\n useIsomorphicLayoutEffect(() => {\r\n // warning: in strict mode, effect is called twice\r\n // so need to restore subscription and reconstruct the extension\r\n // after the first effect unmount callback\r\n value.state.onMount() // no-op if already mounted\r\n parentMethods.subscribe(value.state); // no-op if already subscribed\r\n return () => {\r\n value.state.onUnmount()\r\n parentMethods.unsubscribe(value.state);\r\n }\r\n }, []);\r\n\r\n let state = value.state.self();\r\n // expose property in development tools\r\n value['[hookstate(scoped)]'] = state; // TODO use label here, add core extension to label states\r\n return state\r\n } else {\r\n // Global state mount or destroyed link\r\n // eslint-disable-next-line react-hooks/rules-of-hooks\r\n let initializer = () => {\r\n // warning: this is called twice in react strict mode\r\n let store = parentMethods.store\r\n let onSetUsedCallback = () => setValue({\r\n store: store, // immutable\r\n state: state, // immutable\r\n source: value.source // mutable, get the latest from value\r\n })\r\n let state = new StateMethodsImpl(\r\n store,\r\n RootPath,\r\n store.get(RootPath),\r\n store.edition,\r\n onSetUsedCallback\r\n );\r\n return {\r\n store: store,\r\n state: state,\r\n source: source\r\n }\r\n }\r\n const [value, setValue] = React.useState(initializer);\r\n\r\n if (value.store !== parentMethods.store || !('source' in value)) {\r\n throw new StateInvalidUsageError(parentMethods.path, ErrorId.InitStateStoreSwitchover)\r\n }\r\n\r\n // hide props from development tools\r\n Object.defineProperty(value, 'store', { enumerable: false });\r\n Object.defineProperty(value, 'state', { enumerable: false });\r\n Object.defineProperty(value, 'source', { enumerable: false });\r\n\r\n value.state.reconstruct(\r\n RootPath,\r\n value.store.get(RootPath),\r\n value.store.edition,\r\n // parent state object has changed its reference object\r\n // so the scopped state should change too\r\n value.source !== source\r\n );\r\n value.source = source;\r\n\r\n // need to subscribe in sync mode, because\r\n // safari delays calling the effect giving priority to timeouts and network events,\r\n // which can cause the state update\r\n value.store.subscribe(value.state); // no-op if already subscribed\r\n useIsomorphicLayoutEffect(() => {\r\n // warning: in strict mode, effect is called twice\r\n // so need to restore subscription and reconstruct the extension\r\n // after the first effect unmount callback\r\n value.state.onMount() // no-op if already mounted\r\n value.store.subscribe(value.state); // no-op if already subscribed\r\n return () => {\r\n value.state.onUnmount()\r\n value.store.unsubscribe(value.state);\r\n }\r\n }, []);\r\n\r\n let state: State = value.state.self();\r\n for (let ind = 0; ind < parentMethods.path.length; ind += 1) {\r\n state = state.nested(parentMethods.path[ind]);\r\n }\r\n // expose property in development tools\r\n value['[hookstate(global)]'] = state; // TODO use label here, add core extension to label states\r\n return state as State;\r\n }\r\n } else {\r\n // Local state mount\r\n // eslint-disable-next-line react-hooks/rules-of-hooks\r\n let initializer = () => {\r\n // warning: this is called twice in react strict mode\r\n let store = createStore(source)\r\n let onSetUsedCallback = () => setValue({\r\n store: store,\r\n state: state,\r\n })\r\n let state = new StateMethodsImpl(\r\n store,\r\n RootPath,\r\n store.get(RootPath),\r\n store.edition,\r\n onSetUsedCallback\r\n );\r\n return {\r\n store: store,\r\n state: state\r\n }\r\n }\r\n const [value, setValue] = React.useState(initializer);\r\n\r\n if ('source' in value) {\r\n throw new StateInvalidUsageError(RootPath, ErrorId.InitStateStoreSwitchover)\r\n }\r\n\r\n // hide props from development tools\r\n Object.defineProperty(value, 'store', { enumerable: false });\r\n Object.defineProperty(value, 'state', { enumerable: false });\r\n\r\n value.state.reconstruct(\r\n RootPath,\r\n value.store.get(RootPath),\r\n value.store.edition,\r\n false\r\n );\r\n\r\n // need to subscribe in sync mode, because\r\n // safari delays calling the effect giving priority to timeouts and network events,\r\n // which can cause the state update\r\n value.store.subscribe(value.state); // no-op if already subscribed\r\n // need to attach the extension straight away\r\n // because extension methods are used in render function\r\n // and we can not defer it to the effect callback\r\n value.store.activate(extension as ExtensionFactory); // no-op if already attached\r\n useIsomorphicLayoutEffect(() => {\r\n // warning: in strict mode, effect is called twice\r\n // so need to restore subscription and reconstruct the extension\r\n // after the first effect unmount callback\r\n value.state.onMount() // no-op if already mounted\r\n value.store.subscribe(value.state); // no-op if already subscribed\r\n value.store.activate(extension as ExtensionFactory); // no-op if already attached\r\n return () => {\r\n value.state.onUnmount()\r\n value.store.unsubscribe(value.state);\r\n value.store.deactivate() // this will destroy the extensions\r\n }\r\n }, []);\r\n\r\n let state = value.state.self();\r\n // expose property in development tools\r\n value['[hookstate(local)]'] = state; // TODO use label here, add core extension to label states\r\n return state\r\n }\r\n}\r\n\r\nexport function StateFragment(\r\n props: {\r\n state: __State,\r\n extension: ExtensionFactory,\r\n children: (state: State) => React.ReactElement,\r\n suspend?: boolean,\r\n }\r\n): never;\r\n/**\r\n * Allows to use a state without defining a functional react component.\r\n * It can be also used in class-based React components. It is also\r\n * particularly useful for creating *scoped* states.\r\n *\r\n * [Learn more...](https://hookstate.js.org/docs/using-without-statehook)\r\n * \r\n * @typeparam S Type of a value of a state\r\n */\r\nexport function StateFragment(\r\n props: {\r\n state: __State,\r\n children: (state: State) => React.ReactElement,\r\n suspend?: boolean,\r\n }\r\n): React.ReactElement;\r\n/**\r\n * Allows to use a state without defining a functional react component.\r\n * See more at [StateFragment](#statefragment)\r\n * \r\n * [Learn more...](https://hookstate.js.org/docs/using-without-statehook)\r\n * \r\n * @typeparam S Type of a value of a state\r\n */\r\nexport function StateFragment(\r\n props: {\r\n state: SetInitialStateAction,\r\n extension?: ExtensionFactory,\r\n children: (state: State) => React.ReactElement,\r\n suspend?: boolean,\r\n }\r\n): React.ReactElement;\r\nexport function StateFragment(\r\n props: {\r\n state: State | SetInitialStateAction,\r\n extension?: ExtensionFactory,\r\n children: (state: State) => React.ReactElement,\r\n suspend?: boolean,\r\n }\r\n): React.ReactElement {\r\n const scoped = useHookstate(props.state as SetInitialStateAction, props.extension);\r\n return props.suspend && suspend(scoped) || props.children(scoped);\r\n}\r\n\r\n/**\r\n * If state is promised, then it returns a component which integrates with React 18 Suspend feature automatically.\r\n * Note, that React 18 Suspend support for data loading is still experimental,\r\n * but it worked as per our experiments and testing.\r\n */\r\nexport function suspend(state: State) {\r\n const p = state.promise;\r\n return p && React.createElement(React.lazy(() => p as Promise));\r\n}\r\n\r\n///\r\n/// INTERNAL SYMBOLS (LIBRARY IMPLEMENTATION)\r\n///\r\n\r\nconst self = Symbol('self')\r\n\r\nenum ErrorId {\r\n StateUsedInDependencyList = 100,\r\n\r\n InitStateToValueFromState = 101,\r\n SetStateToValueFromState = 102,\r\n GetStateWhenPromised = 103,\r\n SetStateWhenPromised = 104,\r\n SetStateNestedToPromised = 105,\r\n SetStateWhenDestroyed = 106,\r\n ToJson_Value = 108,\r\n ToJson_State = 109,\r\n\r\n GetProperty_Function = 110,\r\n InitStateStoreSwitchover = 111,\r\n\r\n GetUnknownPlugin = 120,\r\n\r\n SetProperty_State = 201,\r\n SetProperty_Value = 202,\r\n SetPrototypeOf_State = 203,\r\n SetPrototypeOf_Value = 204,\r\n PreventExtensions_State = 205,\r\n PreventExtensions_Value = 206,\r\n DefineProperty_State = 207,\r\n DefineProperty_Value = 208,\r\n DeleteProperty_State = 209,\r\n DeleteProperty_Value = 210,\r\n Construct_State = 211,\r\n Construct_Value = 212,\r\n Apply_State = 213,\r\n Apply_Value = 214,\r\n}\r\n\r\nclass StateInvalidUsageError extends Error {\r\n constructor(path: Path, id: ErrorId, details?: string) {\r\n super(`Error: HOOKSTATE-${id} [path: /${path.join('/')}${details ? `, details: ${details}` : ''}]. ` +\r\n `See https://hookstate.js.org/docs/exceptions#hookstate-${id}`)\r\n }\r\n}\r\n\r\ninterface Subscriber {\r\n onSet(paths: SetActionDescriptor, actions: Set<() => void>): boolean;\r\n}\r\n\r\ninterface Subscribable {\r\n subscribe(l: Subscriber): void;\r\n unsubscribe(l: Subscriber): void;\r\n}\r\n\r\nconst SelfMethodsID = Symbol('ProxyMarker');\r\n\r\nconst RootPath: Path = [];\r\n\r\ntype Writeable = { -readonly [P in keyof T]: T[P] };\r\n\r\nclass Store implements Subscribable {\r\n // > 0 means active store, < 0 means destroyed\r\n // please note, in react strict mode and hot reload cases\r\n // state can be reused, so we should support store resurection\r\n public edition = 1;\r\n\r\n private _stateMethods: StateMethodsImpl;\r\n\r\n private _subscribers: Set = new Set();\r\n\r\n private _extension?: Extension;\r\n private _extensionMethods?: {};\r\n\r\n private _promise?: Promise;\r\n private _promiseResolver?: (_: StateValueAtRoot) => void;\r\n private _promiseError?: StateValueAtRoot;\r\n\r\n constructor(private _value: StateValueAtRoot) {\r\n if (Object(_value) === _value &&\r\n configuration.promiseDetector(_value)) {\r\n this.setPromised(_value)\r\n } else if (_value === none) {\r\n this.setPromised(undefined)\r\n }\r\n\r\n let onSetUsedStoreStateMethods = () => {\r\n this._stateMethods.reconstruct(\r\n RootPath,\r\n this.get(RootPath),\r\n this.edition,\r\n false\r\n )\r\n }\r\n onSetUsedStoreStateMethods[IsUnmounted] = true\r\n\r\n this._stateMethods = new StateMethodsImpl(\r\n this,\r\n RootPath,\r\n this.get(RootPath),\r\n this.edition,\r\n onSetUsedStoreStateMethods\r\n )\r\n this.subscribe(this._stateMethods)\r\n }\r\n\r\n setPromised(promise: StateValueAtPath | undefined) {\r\n this._value = none\r\n this._promiseError = undefined\r\n this._promiseResolver = undefined\r\n\r\n if (!promise) {\r\n this._promise = new Promise(resolve => {\r\n this._promiseResolver = resolve;\r\n })\r\n return;\r\n }\r\n\r\n promise = promise\r\n .then((r: StateValueAtRoot) => {\r\n if (this._promise === promise) {\r\n this._promise = undefined\r\n this._promiseError = undefined\r\n this._promiseResolver === undefined\r\n this.update(this._stateMethods.self(), this.set(RootPath, r))\r\n }\r\n })\r\n .catch((err: StateValueAtRoot) => {\r\n if (this._promise === promise) {\r\n this._promise = undefined\r\n this._promiseResolver = undefined\r\n this._promiseError = err\r\n this.edition += 1\r\n let ad = { path: RootPath };\r\n this.update(this._stateMethods.self(), ad)\r\n }\r\n })\r\n this._promise = promise\r\n }\r\n\r\n activate(extensionFactory: ExtensionFactory | undefined) {\r\n if (this.edition < 0) {\r\n this.edition = -this.edition\r\n }\r\n if (this._extension === undefined) {\r\n this._extension = extensionFactory?.();\r\n this._extensionMethods = this._extension?.onCreate?.(this._stateMethods.self(), {})\r\n // this is invoked with all extension methods activated on the state\r\n this._extension?.onInit?.(this._stateMethods.self(), this._extensionMethods || {})\r\n }\r\n }\r\n\r\n deactivate() {\r\n if (this._extension) {\r\n this._extension.onDestroy?.(this._stateMethods.self())\r\n delete this._extension;\r\n delete this._extensionMethods;\r\n }\r\n if (this.edition > 0) {\r\n this.edition = -this.edition\r\n }\r\n }\r\n\r\n get extension() {\r\n return this._extensionMethods\r\n }\r\n\r\n get promise() {\r\n return this._promise;\r\n }\r\n\r\n get promiseError() {\r\n return this._promiseError;\r\n }\r\n\r\n get(path: Path) {\r\n let result = this._value;\r\n if (result === none) {\r\n return result;\r\n }\r\n path.forEach(p => {\r\n result = result[p];\r\n });\r\n return result;\r\n }\r\n\r\n set(path: Path, value: StateValueAtPath): SetActionDescriptor {\r\n if (this.edition < 0) {\r\n // TODO convert to console log\r\n throw new StateInvalidUsageError(path, ErrorId.SetStateWhenDestroyed)\r\n }\r\n\r\n if (path.length === 0) {\r\n // Root value UPDATE case,\r\n\r\n if (value === none) {\r\n this.setPromised(undefined)\r\n } else if (Object(value) === value && configuration.promiseDetector(value)) {\r\n this.setPromised(value)\r\n value = none\r\n } else if (this._promise && !this._promiseResolver) {\r\n throw new StateInvalidUsageError(path, ErrorId.SetStateWhenPromised)\r\n } else {\r\n this._promiseError = undefined\r\n }\r\n\r\n let prevValue = this._value;\r\n this._value = value;\r\n this.afterSet()\r\n\r\n if (prevValue === none && this._value !== none && this._promiseResolver) {\r\n this._promise = undefined\r\n this._promiseError = undefined\r\n let resolver = this._promiseResolver\r\n this._promiseResolver === undefined\r\n resolver(this._value)\r\n }\r\n\r\n return {\r\n path\r\n };\r\n }\r\n\r\n if (Object(value) === value && configuration.promiseDetector(value)) {\r\n // TODO this one still can get into the state as nested property, need to check on read instead\r\n throw new StateInvalidUsageError(path, ErrorId.SetStateNestedToPromised)\r\n }\r\n\r\n let target = this._value;\r\n for (let i = 0; i < path.length - 1; i += 1) {\r\n target = target[path[i]];\r\n }\r\n\r\n const p = path[path.length - 1]\r\n if (p in target) {\r\n if (value !== none) {\r\n // Property UPDATE case\r\n target[p] = value;\r\n this.afterSet()\r\n return {\r\n path\r\n };\r\n } else {\r\n // Property DELETE case\r\n if (Array.isArray(target) && typeof p === 'number') {\r\n target.splice(p, 1)\r\n } else {\r\n delete target[p]\r\n }\r\n this.afterSet()\r\n\r\n // if an array of objects is about to loose existing property\r\n // we consider it is the whole object is changed\r\n // which is identified by upper path\r\n return {\r\n path: path.slice(0, -1),\r\n actions: { [p]: \"D\" as \"D\" }\r\n }\r\n }\r\n }\r\n\r\n if (value !== none) {\r\n // Property INSERT case\r\n target[p] = value;\r\n this.afterSet()\r\n\r\n // if an array of objects is about to be extended by new property\r\n // we consider it is the whole object is changed\r\n // which is identified by upper path\r\n return {\r\n path: path.slice(0, -1),\r\n actions: { [p]: \"I\" as \"I\" }\r\n }\r\n }\r\n\r\n // Non-existing property DELETE case\r\n // no-op\r\n return {\r\n path\r\n };\r\n }\r\n\r\n preset(state: State, value: StateValueAtPath) {\r\n this._extension?.onPreset?.(state, value, this._stateMethods.self())\r\n }\r\n\r\n premerge(state: State, value: StateValueAtPath) {\r\n this._extension?.onPremerge?.(state, value, this._stateMethods.self())\r\n }\r\n\r\n update(state: State, ad: SetActionDescriptor) {\r\n this._extension?.onSet?.(state, ad, this._stateMethods.self())\r\n\r\n const actions = new Set<() => void>();\r\n // check if actions descriptor can be unfolded into a number of individual update actions\r\n // this is the case when merge call swaps to properties for example\r\n // so we optimize rerendering only these properties\r\n if (ad.actions && Object.values(ad.actions).findIndex(i => i !== \"U\") === -1) {\r\n // all actions are update actions\r\n Object.keys(ad.actions).forEach(key => {\r\n this._subscribers.forEach(s => s.onSet({ path: ad.path.concat(key) }, actions));\r\n })\r\n } else {\r\n this._subscribers.forEach(s => s.onSet(ad, actions));\r\n }\r\n actions.forEach(a => a());\r\n }\r\n\r\n afterSet() {\r\n if (this.edition > 0) {\r\n this.edition += 1;\r\n }\r\n if (this.edition < 0) {\r\n this.edition -= 1;\r\n }\r\n }\r\n toMethods() {\r\n return this._stateMethods;\r\n }\r\n\r\n subscribe(l: Subscriber) {\r\n this._subscribers.add(l);\r\n }\r\n\r\n unsubscribe(l: Subscriber) {\r\n this._subscribers.delete(l);\r\n }\r\n\r\n toJSON() {\r\n throw new StateInvalidUsageError(RootPath, ErrorId.ToJson_Value);\r\n }\r\n}\r\n\r\n// use symbol property to allow for easier reference finding\r\nconst UnusedValue = Symbol('UnusedValue');\r\n\r\n// use symbol to mark that a function has no effect anymore\r\nconst IsUnmounted = Symbol('IsUnmounted');\r\n\r\nclass StateMethodsImpl implements StateMethods, Subscribable, Subscriber {\r\n private subscribers: Set | undefined;\r\n\r\n private childrenCreated: Record> | undefined;\r\n private childrenUsedPrevious: Record> | undefined;\r\n private childrenUsed: Record> | undefined;\r\n\r\n private valueUsedNoProxy: boolean | undefined;\r\n private valueUsedNoProxyPrevious: boolean | undefined;\r\n private valueUsed: StateValueAtPath = UnusedValue;\r\n\r\n private selfUsed: State | undefined;\r\n\r\n get [__state](): [Immutable, E] {\r\n return [this.get(), this.self() as E]\r\n };\r\n\r\n constructor(\r\n public readonly store: Store,\r\n public path: Path,\r\n private valueSource: S,\r\n private valueEdition: number,\r\n private onSetUsed: () => void\r\n ) { }\r\n\r\n reconstruct(path: Path, valueSource: S, valueEdition: number, reset: boolean) {\r\n this.path = path;\r\n this.valueSource = valueSource;\r\n this.valueEdition = valueEdition;\r\n this.valueUsed = UnusedValue;\r\n\r\n if (reset) {\r\n delete this.selfUsed;\r\n delete this.childrenCreated\r\n delete this.childrenUsedPrevious\r\n } else {\r\n this.valueUsedNoProxyPrevious = this.valueUsedNoProxy;\r\n this.childrenUsedPrevious = this.childrenUsed;\r\n }\r\n delete this.valueUsedNoProxy;\r\n delete this.childrenUsed\r\n\r\n // We should not delete subscribers as these are self cleaned up when unmounted\r\n // Theoretically it is possible to reconnect subscribers like we done it for \r\n // children, but it is easier and more efficient to leave subscribers to have independent lifecycle\r\n // If we delete subscribers here, scoped states wrapped in React.memo\r\n // will lose state change propagation and rerendering for scopped states\r\n // delete this.subscribers;\r\n }\r\n\r\n reconnect() {\r\n // Mark it's as used, because it is used in a dependency list\r\n // (we are making it's value used implicitly, so rerender is triggered).\r\n // Otherwise, no rerender => no effects running, even when a value is changed.\r\n // This is marking the state used a bit more than it might be really used\r\n // in the effect callback. More optimized / precise implementation would be\r\n // to remember useSelf as previous (similar to childrenUsed),\r\n // but it is a lot more complicated and the benefit is not worth the complexity.\r\n // So, mark it used.\r\n // We also using it without proxy if it wass used without proxy during the\r\n // previous render, because otherwise children usage might be not traced completely\r\n // and so will not result in renreder if children are updated.\r\n // This is covered by some tests, but there are so many possible corner cases...\r\n this.get({ __internalAllowPromised: true, noproxy: this.valueUsedNoProxyPrevious })\r\n this.childrenUsed = {\r\n ...this.childrenUsedPrevious,\r\n ...this.childrenUsed\r\n }\r\n }\r\n\r\n getUntracked(__internalAllowPromised?: boolean) {\r\n if (this.valueEdition !== this.store.edition) {\r\n this.valueSource = this.store.get(this.path)\r\n this.valueEdition = this.store.edition\r\n\r\n if (this.valueUsed !== UnusedValue) {\r\n this.valueUsed = UnusedValue\r\n this.get({ __internalAllowPromised: true }) // renew cache to keep it marked used\r\n }\r\n }\r\n if (__internalAllowPromised) {\r\n return this.valueSource\r\n }\r\n if (this.store.promiseError) {\r\n throw this.store.promiseError;\r\n }\r\n if (this.store.promise) {\r\n throw new StateInvalidUsageError(this.path, ErrorId.GetStateWhenPromised)\r\n }\r\n return this.valueSource;\r\n }\r\n\r\n get(options?: { noproxy?: boolean, stealth?: boolean, __internalAllowPromised?: boolean }): Immutable {\r\n const valueSource = this.getUntracked(options?.__internalAllowPromised)\r\n if (options?.stealth) {\r\n return valueSource as Immutable;\r\n }\r\n if (this.valueUsed === UnusedValue) {\r\n if (Array.isArray(valueSource)) {\r\n this.valueUsed = this.valueArrayImpl(valueSource as unknown as StateValueAtPath[]);\r\n } else if (Object(valueSource) === valueSource) {\r\n if ((valueSource as StateValueAtPath).constructor?.name === \"Object\") {\r\n this.valueUsed = this.valueObjectImpl(valueSource as unknown as object);\r\n } else {\r\n // any other object except Object, for example Date\r\n this.valueUsedNoProxy = true\r\n this.valueUsed = valueSource;\r\n }\r\n } else {\r\n this.valueUsed = valueSource;\r\n }\r\n }\r\n if (options?.noproxy) {\r\n this.valueUsedNoProxy = true\r\n return valueSource as Immutable;\r\n }\r\n return this.valueUsed as Immutable;\r\n }\r\n\r\n get value(): Immutable {\r\n // various tools, including react dev tools and webpack import\r\n // inspect an object and it's properties\r\n // so these should not throw\r\n // return this.get({ __internalAllowPromised: true })\r\n return this.get()\r\n }\r\n\r\n setUntrackedV4(newValue: SetStateAction): SetActionDescriptor | null {\r\n if (typeof newValue === 'function') {\r\n newValue = (newValue as ((prevValue: S) => S))(this.getUntracked());\r\n }\r\n this.store.preset(this.self() as unknown as State, newValue)\r\n\r\n if (Object(newValue) === newValue && newValue![SelfMethodsID]) {\r\n // TODO check on read instead as it might escape as nested on set anyway\r\n throw new StateInvalidUsageError(this.path, ErrorId.SetStateToValueFromState)\r\n }\r\n if (newValue !== Object(newValue) && newValue === this.getUntracked(true)) {\r\n // this is primitive value and has not changed\r\n // so skip this set call as it does not make an effect\r\n return null\r\n }\r\n return this.store.set(this.path, newValue);\r\n }\r\n\r\n set(newValue: SetStateAction) {\r\n let ad = this.setUntrackedV4(newValue);\r\n if (ad) {\r\n this.store.update(this.self() as State, ad);\r\n }\r\n }\r\n\r\n mergeUntracked(sourceValue: SetPartialStateAction): Path[] {\r\n let r = this.mergeUntrackedV4(sourceValue);\r\n if (r) {\r\n return [r.path]\r\n }\r\n return []\r\n }\r\n\r\n mergeUntrackedV4(sourceValue: SetPartialStateAction): SetActionDescriptor | null {\r\n const currentValue = this.getUntracked()\r\n if (typeof sourceValue === 'function') {\r\n sourceValue = (sourceValue as Function)(currentValue);\r\n }\r\n this.store.premerge(this.self() as unknown as State, sourceValue)\r\n\r\n if (Array.isArray(currentValue)) {\r\n if (Array.isArray(sourceValue)) {\r\n let ad: Required = { path: this.path, actions: {} };\r\n sourceValue.forEach((e, i) => {\r\n ad.actions[currentValue.push(e) - 1] = \"I\"\r\n })\r\n if (Object.keys(ad.actions).length > 0) {\r\n this.setUntrackedV4(currentValue)\r\n return ad\r\n }\r\n return null\r\n } else {\r\n let ad: Required = { path: this.path, actions: {} };\r\n const deletedIndexes: number[] = []\r\n Object.keys(sourceValue as StateValueAtPath)\r\n .map(i => Number(i))\r\n .sort((a, b) => a - b)\r\n .forEach(i => {\r\n const index = Number(i);\r\n const newPropValue = sourceValue[index]\r\n if (newPropValue === none) {\r\n ad.actions[index] = \"D\"\r\n deletedIndexes.push(index)\r\n } else {\r\n if (index in currentValue) {\r\n ad.actions[index] = \"U\"\r\n } else {\r\n ad.actions[index] = \"I\"\r\n }\r\n (currentValue as StateValueAtPath[])[index] = newPropValue\r\n }\r\n });\r\n // indexes are ascending sorted as per above\r\n // so, delete one by one from the end\r\n // this way index positions do not change\r\n deletedIndexes.reverse().forEach(p => {\r\n (currentValue as unknown as []).splice(p, 1)\r\n })\r\n if (Object.keys(ad.actions).length > 0) {\r\n this.setUntrackedV4(currentValue)\r\n return ad\r\n }\r\n return null\r\n }\r\n } else if (Object(currentValue) === currentValue) {\r\n let ad: Required = { path: this.path, actions: {} };\r\n Object.keys(sourceValue as StateValueAtPath).forEach(key => {\r\n const newPropValue = sourceValue[key]\r\n if (newPropValue === none) {\r\n ad.actions[key] = \"D\"\r\n delete currentValue[key]\r\n } else {\r\n if (key in currentValue) {\r\n ad.actions[key] = \"U\"\r\n } else {\r\n ad.actions[key] = \"I\"\r\n }\r\n currentValue[key] = newPropValue\r\n }\r\n })\r\n if (Object.keys(ad.actions).length > 0) {\r\n this.setUntrackedV4(currentValue)\r\n return ad\r\n }\r\n return null\r\n } else if (typeof currentValue === 'string') {\r\n return this.setUntrackedV4((currentValue + String(sourceValue)) as unknown as S)\r\n } else {\r\n return this.setUntrackedV4(sourceValue as S)\r\n }\r\n }\r\n\r\n merge(sourceValue: SetPartialStateAction) {\r\n let r = this.mergeUntrackedV4(sourceValue);\r\n if (r) {\r\n this.store.update(this.self() as State, r)\r\n }\r\n }\r\n\r\n nested(key: K): State {\r\n return this.child(key as string | number).self() as State\r\n }\r\n\r\n rerender(paths: Path[]) {\r\n for (let path of paths) {\r\n this.store.update(this.self() as State, { path })\r\n }\r\n }\r\n\r\n activate(extensionFactory: ExtensionFactory | undefined): void {\r\n this.store.activate(extensionFactory)\r\n }\r\n\r\n deactivate(): void {\r\n this.store.deactivate()\r\n }\r\n\r\n subscribe(l: Subscriber) {\r\n if (this.subscribers === undefined) {\r\n this.subscribers = new Set();\r\n }\r\n this.subscribers.add(l);\r\n }\r\n\r\n unsubscribe(l: Subscriber) {\r\n if (this.subscribers) {\r\n this.subscribers.delete(l);\r\n }\r\n }\r\n\r\n get isMounted(): boolean {\r\n return !this.onSetUsed[IsUnmounted]\r\n }\r\n\r\n onMount() {\r\n delete this.onSetUsed[IsUnmounted];\r\n }\r\n\r\n onUnmount() {\r\n this.onSetUsed[IsUnmounted] = true\r\n }\r\n\r\n onSet(ad: SetActionDescriptor, actions: Set<() => void>): boolean {\r\n const update = () => {\r\n let isAffected = false\r\n if (this.valueUsedNoProxy\r\n // TODO this condition becomes redundant when Downgraded plugins is deleted\r\n && this.valueUsed !== UnusedValue) {\r\n actions.add(this.onSetUsed);\r\n delete this.selfUsed;\r\n isAffected = true;\r\n }\r\n let path = ad.path;\r\n const nextChildKey = path[this.path.length];\r\n if (nextChildKey === undefined) {\r\n // There is no next child to dive into\r\n // So it is this one which was updated\r\n if (this.valueUsed !== UnusedValue) {\r\n actions.add(this.onSetUsed);\r\n delete this.selfUsed;\r\n delete this.childrenUsed;\r\n\r\n if (ad.actions && this.childrenCreated) {\r\n // TODO add automated unit tests for this part\r\n if (Array.isArray(this.valueSource)\r\n && Object.values(ad.actions).includes(\"D\")) {\r\n // this is an array and some elements were removed\r\n // so invalidate cache for all children after the first deleted\r\n let firstDeletedIndex = Object.keys(ad.actions)\r\n .map(i => Number(i))\r\n .sort((a, b) => a - b)\r\n .find(i => ad.actions?.[i] === \"D\")!\r\n for (let childKey in this.childrenCreated) {\r\n if (Number(childKey) >= firstDeletedIndex ||\r\n childKey in ad.actions) {\r\n delete this.childrenCreated[childKey]\r\n }\r\n }\r\n } else {\r\n for (let childKey in ad.actions) {\r\n delete this.childrenCreated[childKey]\r\n }\r\n }\r\n } else {\r\n delete this.childrenCreated;\r\n }\r\n return true;\r\n }\r\n } else {\r\n const nextChild = this.childrenUsed?.[nextChildKey];\r\n if (nextChild && nextChild.onSet(ad, actions)) {\r\n delete this.selfUsed;\r\n return true;\r\n }\r\n }\r\n return isAffected;\r\n }\r\n\r\n const updated = update();\r\n if (!updated && this.subscribers !== undefined) {\r\n this.subscribers.forEach(s => {\r\n if (s.onSet(ad, actions)) {\r\n delete this.selfUsed;\r\n }\r\n })\r\n }\r\n return updated;\r\n }\r\n\r\n get keys(): InferStateKeysType {\r\n const value = this.get()\r\n if (Array.isArray(value)) {\r\n return Object.keys(value).map(i => Number(i)).filter(i => Number.isInteger(i)) as\r\n unknown as InferStateKeysType;\r\n }\r\n if (Object(value) === value) {\r\n return Object.keys(value as StateValueAtPath) as unknown as InferStateKeysType;\r\n }\r\n return undefined as InferStateKeysType;\r\n }\r\n\r\n child(key: number | string) {\r\n this.childrenUsed = this.childrenUsed || {};\r\n const cachedChild = this.childrenUsed.hasOwnProperty(key) && this.childrenUsed[key];\r\n if (cachedChild) {\r\n return cachedChild;\r\n }\r\n\r\n const valueSource = this.valueSource[key]\r\n if (typeof valueSource === 'function') {\r\n // hitting a method of a custom type, should be no-op\r\n throw new StateInvalidUsageError(this.path, ErrorId.GetProperty_Function)\r\n }\r\n this.childrenCreated = this.childrenCreated || {};\r\n const child = this.childrenCreated[key];\r\n let r;\r\n if (child) {\r\n child.reconstruct(\r\n this.path.concat(key),\r\n valueSource,\r\n this.valueEdition,\r\n false\r\n )\r\n r = child;\r\n } else {\r\n r = new StateMethodsImpl(\r\n this.store,\r\n this.path.concat(key),\r\n valueSource,\r\n this.valueEdition,\r\n this.onSetUsed,\r\n )\r\n this.childrenCreated[key] = r;\r\n }\r\n if (this.valueUsedNoProxy) {\r\n // TODO this is redundant when Downgraded plugin is deleted\r\n r.valueUsedNoProxy = true;\r\n }\r\n this.childrenUsed[key] = r;\r\n return r;\r\n }\r\n\r\n private valueArrayImpl(currentValue: StateValueAtPath[]): S {\r\n return proxyWrap(this.path, currentValue,\r\n () => currentValue,\r\n (target: object, key: PropertyKey) => {\r\n if (key === 'length') {\r\n return (target as []).length;\r\n }\r\n if (key in Array.prototype) {\r\n return Array.prototype[key];\r\n }\r\n if (key === SelfMethodsID) {\r\n return this;\r\n }\r\n if (typeof key === 'symbol') {\r\n // allow clients to associate hidden cache with state values\r\n return target[key];\r\n }\r\n const index = Number(key);\r\n if (!Number.isInteger(index)) {\r\n return undefined;\r\n }\r\n return this.child(index).get();\r\n },\r\n (target: object, key: PropertyKey, value: StateValueAtPath) => {\r\n if (typeof key === 'symbol') {\r\n // allow clients to associate hidden cache with state values\r\n target[key] = value;\r\n return true;\r\n }\r\n throw new StateInvalidUsageError(this.path, ErrorId.SetProperty_Value)\r\n },\r\n true\r\n ) as unknown as S;\r\n }\r\n\r\n private valueObjectImpl(currentValue: object): S {\r\n return proxyWrap(this.path, currentValue,\r\n () => currentValue,\r\n (target: object, key: PropertyKey) => {\r\n if (key in Object.prototype) {\r\n return Object.prototype[key];\r\n }\r\n if (key === SelfMethodsID) {\r\n return this;\r\n }\r\n if (typeof key === 'symbol') {\r\n // allow clients to associate hidden cache with state values\r\n return target[key];\r\n }\r\n return this.child(key).get();\r\n },\r\n (target: object, key: PropertyKey, value: StateValueAtPath) => {\r\n if (typeof key === 'symbol') {\r\n // allow clients to associate hidden cache with state values\r\n target[key] = value;\r\n return true;\r\n }\r\n throw new StateInvalidUsageError(this.path, ErrorId.SetProperty_Value)\r\n },\r\n true\r\n ) as unknown as S;\r\n }\r\n\r\n self(): State {\r\n if (this.selfUsed) {\r\n return this.selfUsed\r\n }\r\n\r\n const getter = (_: object, key: PropertyKey) => {\r\n if (key === self) {\r\n return this\r\n }\r\n if (typeof key === 'symbol') {\r\n return undefined\r\n }\r\n if (key === 'toJSON') {\r\n throw new StateInvalidUsageError(this.path, ErrorId.ToJson_State);\r\n }\r\n\r\n let nestedGetter = (prop: PropertyKey) => {\r\n const currentValue = this.get({ __internalAllowPromised: prop === '$$typeof' || prop === 'constructor' });\r\n\r\n if (prop in Object.prototype) {\r\n // Mark it used entirely, so changes to the value\r\n // invalidate and rerender results for Object.prototype.toString(),\r\n // for example.\r\n // We check for Object prototype functions\r\n // even for primitive values, because primitive values still\r\n // can have object methods.\r\n return Object.prototype[prop];\r\n }\r\n\r\n if (// if currentValue is primitive type\r\n (Object(currentValue) !== currentValue) &&\r\n // if promised, it will be none\r\n currentValue !== none) {\r\n // This was an error case, but various tools like webpack bundler\r\n // and react dev tools attempt to get props out of non-null object,\r\n // so this was changed to return just undefined for any property request\r\n // as there is no way to fix 3rd party tools.\r\n // Logging a warning to console is also not an option\r\n // as it pollutes console for legitimate apps on app start app.\r\n // Ref: https://github.com/avkonst/hookstate/issues/125\r\n return undefined\r\n }\r\n\r\n if (Array.isArray(currentValue)) {\r\n if (prop === 'length') {\r\n return currentValue.length;\r\n }\r\n if (prop in Array.prototype) {\r\n return Array.prototype[prop];\r\n }\r\n const index = Number(prop);\r\n if (!Number.isInteger(index)) {\r\n return undefined;\r\n }\r\n return this.nested(index as keyof S)\r\n }\r\n return this.nested(prop.toString() as keyof S)\r\n }\r\n\r\n switch (key) {\r\n case 'path':\r\n return this.path\r\n case 'keys':\r\n return this.keys\r\n case 'value':\r\n return this.value\r\n case 'ornull':\r\n return this.ornull\r\n case 'promised':\r\n return this.promised\r\n case 'promise':\r\n return this.promise\r\n case 'error':\r\n return this.error\r\n case 'get':\r\n return (opts: { noproxy: boolean, stealth: boolean }) => this.get(opts)\r\n case 'set':\r\n return (p: SetStateAction) => this.set(p)\r\n case 'merge':\r\n return (p: SetPartialStateAction) => this.merge(p)\r\n case 'nested':\r\n return (p: keyof S) => nestedGetter(p)\r\n default:\r\n // check if extension method\r\n let ext = this.store.extension\r\n if (ext && key in ext) {\r\n return ext[key](this.self())\r\n }\r\n // otherwise nested child\r\n return nestedGetter(key)\r\n }\r\n }\r\n\r\n this.selfUsed = proxyWrap(this.path, this.valueSource,\r\n (opts) => {\r\n return this.get({ __internalAllowPromised: true, stealth: opts?.stealth });\r\n },\r\n getter,\r\n (_, key, value) => {\r\n throw new StateInvalidUsageError(this.path, ErrorId.SetProperty_State)\r\n },\r\n false) as unknown as State;\r\n return this.selfUsed\r\n }\r\n\r\n get promised(): boolean {\r\n this.get({ __internalAllowPromised: true }) // marks used\r\n return !!this.store.promise;\r\n }\r\n\r\n get promise(): Promise> | undefined {\r\n this.get({ __internalAllowPromised: true }) // marks used\r\n return this.store.promise?.then(_ => this.self());\r\n }\r\n\r\n get error(): StateErrorAtRoot | undefined {\r\n this.get({ __internalAllowPromised: !!this.store.promiseError }) // marks used\r\n return this.store.promiseError;\r\n }\r\n\r\n get ornull(): InferStateOrnullType {\r\n const value = this.get()\r\n if (value === null || value === undefined) {\r\n return value as unknown as InferStateOrnullType;\r\n }\r\n return this.self() as InferStateOrnullType;\r\n }\r\n}\r\n\r\nfunction proxyWrap(\r\n path: Path,\r\n // tslint:disable-next-line: no-any\r\n targetBootstrap: any,\r\n // tslint:disable-next-line: no-any\r\n targetGetter: (opts?: { stealth?: boolean }) => any,\r\n // tslint:disable-next-line: no-any\r\n propertyGetter: (unused: any, key: PropertyKey) => any,\r\n // tslint:disable-next-line: no-any\r\n propertySetter: (unused: any, p: PropertyKey, value: any, receiver: any) => boolean,\r\n isValueProxy: boolean\r\n) {\r\n const onInvalidUsage = (op: ErrorId) => {\r\n throw new StateInvalidUsageError(path, op)\r\n }\r\n if (Object(targetBootstrap) !== targetBootstrap) {\r\n targetBootstrap = {}\r\n }\r\n return new Proxy(targetBootstrap, {\r\n getPrototypeOf: (_target) => {\r\n // should satisfy the invariants:\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/getPrototypeOf#Invariants\r\n const targetReal = targetGetter()\r\n if (targetReal === undefined || targetReal === null) {\r\n return null;\r\n }\r\n if (targetReal === none) {\r\n return Object.getPrototypeOf(new Promise(() => { }));\r\n }\r\n return Object.getPrototypeOf(targetReal);\r\n },\r\n setPrototypeOf: (_target, v) => {\r\n return onInvalidUsage(isValueProxy ?\r\n ErrorId.SetPrototypeOf_State :\r\n ErrorId.SetPrototypeOf_Value)\r\n },\r\n isExtensible: (_target) => {\r\n // should satisfy the invariants:\r\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/isExtensible#Invariants\r\n return true; // required to satisfy the invariants of the getPrototypeOf\r\n // return Object.isExtensible(target);\r\n },\r\n preventExtensions: (_target) => {\r\n return onInvalidUsage(isValueProxy ?\r\n ErrorId.PreventExtensions_State :\r\n ErrorId.PreventExtensions_Value)\r\n },\r\n getOwnPropertyDescriptor: (_target, p) => {\r\n const targetReal = targetGetter()\r\n\r\n if (Object(targetReal) === targetReal) {\r\n const origin = Object.getOwnPropertyDescriptor(targetReal, p);\r\n if (Array.isArray(targetReal) && p in Array.prototype) {\r\n return origin;\r\n }\r\n return origin && {\r\n // should be configurable as may not exist on proxy target\r\n configurable: true, // JSON.stringify() does not work for an object without it\r\n enumerable: origin.enumerable,\r\n get: () => propertyGetter(targetReal, p),\r\n set: undefined\r\n };\r\n }\r\n\r\n if (isValueProxy || targetReal === none) {\r\n return undefined;\r\n }\r\n if (p === 'value') {\r\n return {\r\n // should be configurable as does not exist on proxy target\r\n configurable: true,\r\n enumerable: true,\r\n get: () => targetGetter({ stealth: true }),\r\n set: undefined\r\n };\r\n }\r\n if (p === 'path') {\r\n return {\r\n // should be configurable as does not exist on proxy target\r\n configurable: true,\r\n enumerable: true,\r\n get: () => path,\r\n set: undefined\r\n };\r\n }\r\n return undefined;\r\n },\r\n has: (_target, p) => {\r\n if (typeof p === 'symbol') {\r\n return false;\r\n }\r\n const targetReal = targetGetter()\r\n if (Object(targetReal) === targetReal) {\r\n return p in targetReal;\r\n }\r\n if (isValueProxy || targetReal === none) {\r\n return false;\r\n }\r\n return p === 'value' || p === 'path';\r\n },\r\n get: propertyGetter,\r\n set: propertySetter,\r\n deleteProperty: (_target, p) => {\r\n return onInvalidUsage(isValueProxy ?\r\n ErrorId.DeleteProperty_State :\r\n ErrorId.DeleteProperty_Value)\r\n },\r\n defineProperty: (_target, p, attributes) => {\r\n return onInvalidUsage(isValueProxy ?\r\n ErrorId.DefineProperty_State :\r\n ErrorId.DefineProperty_Value)\r\n },\r\n ownKeys: (_target) => {\r\n const targetReal = targetGetter()\r\n if (Array.isArray(targetReal)) {\r\n if (_target.length === undefined) {\r\n // an object turned into an array now\r\n // inject length property now as it is defined on the array\r\n // to enable getOwnPropertyDescriptor for length not throw\r\n Object.defineProperty(targetBootstrap, 'length', {\r\n value: 0, writable: true, enumerable: false, configurable: false\r\n })\r\n }\r\n }\r\n if (Object(targetReal) === targetReal) {\r\n return Object.getOwnPropertyNames(targetReal);\r\n }\r\n if (isValueProxy || targetReal === none) {\r\n return []\r\n }\r\n return ['value', 'path']\r\n },\r\n apply: (_target, thisArg, argArray?) => {\r\n return onInvalidUsage(isValueProxy ?\r\n ErrorId.Apply_State :\r\n ErrorId.Apply_Value)\r\n },\r\n construct: (_target, argArray, newTarget?) => {\r\n return onInvalidUsage(isValueProxy ?\r\n ErrorId.Construct_State :\r\n ErrorId.Construct_Value)\r\n }\r\n });\r\n}\r\n\r\nfunction createStore(initial: SetInitialStateAction): Store {\r\n let initialValue: S | Promise = initial as (S | Promise);\r\n if (typeof initial === 'function') {\r\n initialValue = (initial as (() => S | Promise))();\r\n }\r\n if (Object(initialValue) === initialValue && initialValue[SelfMethodsID]) {\r\n throw new StateInvalidUsageError(RootPath, ErrorId.InitStateToValueFromState)\r\n }\r\n return new Store(initialValue);\r\n}\r\n\r\n/**\r\n * A type of an argument of the configure function\r\n */\r\nexport interface Configuration {\r\n /**\r\n * By default Hookstate intercepts calls to useEffect, useMemo and\r\n * other functions where a dependency lists are used as arguments.\r\n * This allows these hook functions to have Hookstate State objects\r\n * in dependency lists and everything to work as 'expected'.\r\n * \r\n * It is possible to opt-out from this mode, configuring the option to never.\r\n * \r\n * Alternatively, it is possible to set it to intercept only during development,\r\n * which will raise HOOKSTATE-100 error whenever Hookstate State is used in a dependency list of standard React hook function.\r\n * This error can be fixed by replacing standard React hooks by Hookstate provided hooks,\r\n * for example useEffect by useHookstateEffect\r\n */\r\n interceptDependencyListsMode: 'always' | 'development' | 'never',\r\n /**\r\n * Defines is Hookstate is running in a development mode.\r\n * Development mode enables additional checking and HMR support.\r\n * By default, it detects if process.env.NODE_ENV is set to 'development'.\r\n * It might not work in all environments and so expected to be provided by an application explicitly.\r\n */\r\n isDevelopmentMode: boolean,\r\n /**\r\n * A callback which allows Hookstate to detect if a provided variable is a promise or not.\r\n * This allows to enable Hookstate working in Angular environment when Promises are wrapped by zone.js,\r\n * which breaks standard promise resolution / detection convention.\r\n */\r\n promiseDetector: (p: any) => boolean,\r\n}\r\nlet configuration: Configuration & { hiddenInterceptDependencyListsModeDebug: boolean } = {\r\n interceptDependencyListsMode: 'always',\r\n isDevelopmentMode: typeof process === 'object' &&\r\n typeof process.env === 'object' &&\r\n process.env.NODE_ENV === 'development',\r\n promiseDetector: (p) => Promise.resolve(p) === p,\r\n hiddenInterceptDependencyListsModeDebug: false\r\n}\r\n\r\n/**\r\n * Configures Hookstate behavior globally. This is for special cases only, when default\r\n * heuristics fail to work in a specific environment.\r\n * \r\n * @param config \r\n */\r\nexport function configure(config: Partial) {\r\n configuration = {\r\n interceptDependencyListsMode: config.interceptDependencyListsMode ?? configuration.interceptDependencyListsMode,\r\n isDevelopmentMode: config.isDevelopmentMode ?? configuration.isDevelopmentMode,\r\n promiseDetector: config.promiseDetector ?? configuration.promiseDetector,\r\n hiddenInterceptDependencyListsModeDebug: false\r\n }\r\n\r\n interceptReactHooks() // not really required, but for safety\r\n\r\n if (configuration.interceptDependencyListsMode === 'never') {\r\n configuration.hiddenInterceptDependencyListsModeDebug = false;\r\n React['useEffect'] = React['useEffect'] && useEffectOrigin;\r\n React['useLayoutEffect'] = React['useLayoutEffect'] && useLayoutEffectOrigin;\r\n React['useInsertionEffect'] = React['useInsertionEffect'] && useInsertionEffectOrigin;\r\n React['useImperativeHandle'] = React['useImperativeHandle'] && useImperativeHandleOrigin;\r\n React['useMemo'] = React['useMemo'] && useMemoOrigin;\r\n React['useCallback'] = React['useCallback'] && useCallbackOrigin;\r\n // the following does not make an effect as memo calls happen on module load\r\n // so it is always set to memoIntercept\r\n React['memo'] = React['memo'] && memoOrigin as any;\r\n } else {\r\n // do not intercept if a hook is not defined in React\r\n // otherwise, it will enable 3rd party libs thinking the react runs at version 18\r\n React['useEffect'] = React['useEffect'] && useEffectIntercept;\r\n React['useLayoutEffect'] = React['useLayoutEffect'] && useLayoutEffectIntercept;\r\n React['useInsertionEffect'] = React['useLayoutEffect'] && useInsertionEffectIntercept;\r\n React['useImperativeHandle'] = React['useImperativeHandle'] && useImperativeHandleIntercept;\r\n React['useMemo'] = React['useMemo'] && useMemoIntercept;\r\n React['useCallback'] = React['useCallback'] && useCallbackIntercept;\r\n // the following does not make an effect as memo calls happen on module load\r\n // so it is always set to memoIntercept\r\n React['memo'] = React['memo'] && memoIntercept as any;\r\n if (configuration.interceptDependencyListsMode === 'development'\r\n && configuration.isDevelopmentMode) {\r\n configuration.hiddenInterceptDependencyListsModeDebug = true;\r\n }\r\n }\r\n}\r\n\r\nfunction reconnectDependencies(deps?: React.DependencyList, fromIntercept?: boolean): React.DependencyList | undefined {\r\n for (const i of deps || []) {\r\n if (i === Object(i)) {\r\n let state = (i as any)[self] as StateMethodsImpl | undefined\r\n if (state) {\r\n if (fromIntercept && configuration.hiddenInterceptDependencyListsModeDebug) {\r\n throw new StateInvalidUsageError(state.path, ErrorId.StateUsedInDependencyList)\r\n }\r\n state.reconnect()\r\n }\r\n }\r\n }\r\n return deps;\r\n}\r\n\r\nlet useEffectOrigin: (effect: React.EffectCallback, deps?: React.DependencyList) => void;\r\nexport function useHookstateEffect(effect: React.EffectCallback, deps?: React.DependencyList) {\r\n reconnectDependencies(deps)\r\n return useEffectOrigin(effect, deps)\r\n}\r\nfunction useEffectIntercept(effect: React.EffectCallback, deps?: React.DependencyList) {\r\n reconnectDependencies(deps, true)\r\n return useEffectOrigin(effect, deps)\r\n}\r\n\r\nlet useLayoutEffectOrigin: (effect: React.EffectCallback, deps?: React.DependencyList) => void;\r\nexport function useHookstateLayoutEffect(effect: React.EffectCallback, deps?: React.DependencyList) {\r\n reconnectDependencies(deps)\r\n return useLayoutEffectOrigin(effect, deps)\r\n}\r\nfunction useLayoutEffectIntercept(effect: React.EffectCallback, deps?: React.DependencyList) {\r\n reconnectDependencies(deps, true)\r\n return useLayoutEffectOrigin(effect, deps)\r\n}\r\n\r\nlet useInsertionEffectOrigin: (effect: React.EffectCallback, deps?: React.DependencyList) => void;\r\nexport function useHookstateInsertionEffect(effect: React.EffectCallback, deps?: React.DependencyList) {\r\n reconnectDependencies(deps)\r\n return useInsertionEffectOrigin(effect, deps)\r\n}\r\nfunction useInsertionEffectIntercept(effect: React.EffectCallback, deps?: React.DependencyList) {\r\n reconnectDependencies(deps, true)\r\n return useInsertionEffectOrigin(effect, deps)\r\n}\r\n\r\nlet useImperativeHandleOrigin: (ref: React.Ref | undefined, init: () => R, deps?: React.DependencyList) => void;\r\nexport function useHookstateImperativeHandle(ref: React.Ref | undefined, init: () => R, deps?: React.DependencyList): void {\r\n reconnectDependencies(deps)\r\n return useImperativeHandleOrigin(ref, init, deps)\r\n}\r\nfunction useImperativeHandleIntercept