{"version":3,"sources":["../src/api/helpers/clean-url.ts","../src/api/helpers/frequency.ts","../src/api/helpers/ical.ts","../src/models/errors/authentication.ts","../src/models/errors/discussions.ts","../src/decoders/domain.ts","../src/decoders/password-rules.ts","../src/decoders/security-modal.ts","../src/models/errors/security.ts","../src/models/errors/session.ts","../src/models/errors/unreachable.ts","../src/models/errors/upload.ts","../src/models/account-kind.ts","../src/models/assignment-difficulty.ts","../src/models/assignment-return-kind.ts","../src/models/attachment-kind.ts","../src/models/discussion-command.ts","../src/models/discussion-folder-kind.ts","../src/models/discussion-send-action.ts","../src/models/dish-kind.ts","../src/models/document-file-format.ts","../src/models/document-kind.ts","../src/models/double-auth-client-action.ts","../src/models/double-auth-mode.ts","../src/models/double-auth-server-action.ts","../src/models/entity-kind.ts","../src/models/entity-state.ts","../src/models/grade-kind.ts","../src/models/meal-kind.ts","../src/models/news-question-kind.ts","../src/models/news-view.ts","../src/models/notebook-observation-kind.ts","../src/models/resource-content-category.ts","../src/models/session-access-kind.ts","../src/models/tab-location.ts","../src/decoders/session-information.ts","../src/encoders/account-kind.ts","../src/api/session-information.ts","../src/api/private/aes.ts","../src/api/private/keys.ts","../src/core/response-function.ts","../src/core/request-function.ts","../src/decoders/pronote-date.ts","../src/decoders/holiday.ts","../src/decoders/period.ts","../src/decoders/instance-parameters.ts","../src/api/private/instance-parameters.ts","../src/api/private/identify.ts","../src/api/private/authenticate.ts","../src/decoders/user-authorizations.ts","../src/decoders/attachment.ts","../src/decoders/tab.ts","../src/decoders/user-resource.ts","../src/decoders/user-parameters.ts","../src/api/private/user-parameters.ts","../src/decoders/account-kind.ts","../src/decoders/authentication-qr.ts","../src/api/helpers/login.ts","../src/api/helpers/news-question-local-mutate.ts","../src/api/helpers/parse-timetable.ts","../src/api/presence.ts","../src/api/helpers/presence-interval.ts","../src/api/private/queue.ts","../src/api/helpers/session-handle.ts","../src/api/private/dates.ts","../src/api/helpers/week-number.ts","../src/decoders/account.ts","../src/api/account.ts","../src/api/assignment-remove-file.ts","../src/api/assignment-status.ts","../src/api/helpers/entity-id.ts","../src/core/request-upload.ts","../src/api/assignment-upload-file.ts","../src/decoders/subject.ts","../src/decoders/assignment-theme.ts","../src/decoders/assignment.ts","../src/api/private/homework.ts","../src/api/assignments.ts","../src/api/private/discussion-post-command.ts","../src/decoders/discussion.ts","../src/decoders/discussion-folder.ts","../src/api/discussions.ts","../src/decoders/discussion-draft-message.ts","../src/decoders/discussion-message.ts","../src/decoders/discussion-sent-message.ts","../src/decoders/discussion-messages.ts","../src/api/discussion-messages.ts","../src/api/discussion-create-draft.ts","../src/api/discussion-delete.ts","../src/api/discussion-read.ts","../src/decoders/discussion-recipient.ts","../src/api/discussion-recipients.ts","../src/api/discussion-remote-mutate-draft.ts","../src/api/discussion-remove-draft.ts","../src/api/discussion-restore-trash.ts","../src/encoders/discussion-send-action.ts","../src/api/discussion-send-draft.ts","../src/api/discussion-send-message.ts","../src/api/discussion-trash.ts","../src/decoders/skill.ts","../src/decoders/evaluation.ts","../src/encoders/period.ts","../src/api/evaluations.ts","../src/api/private/haversine.ts","../src/decoders/geolocated-instance.ts","../src/api/geolocation.ts","../src/api/gradebook-pdf.ts","../src/decoders/grade-value.ts","../src/decoders/subject-averages.ts","../src/decoders/grade.ts","../src/decoders/grades-overview.ts","../src/api/grades-overview.ts","../src/encoders/pronote-date.ts","../src/decoders/homepage-link.ts","../src/decoders/partner-ard-wallet.ts","../src/decoders/partner.ts","../src/decoders/partner-ard.ts","../src/decoders/homepage.ts","../src/api/homepage.ts","../src/decoders/instance.ts","../src/api/instance.ts","../src/decoders/food-allergen.ts","../src/decoders/food-label.ts","../src/decoders/food.ts","../src/decoders/meal.ts","../src/decoders/menu.ts","../src/decoders/week-menu.ts","../src/api/menus.ts","../src/decoders/new-discussion-recipient-function.ts","../src/decoders/new-discussion-recipient-sub-subject.ts","../src/decoders/new-discussion-recipient-subject.ts","../src/decoders/new-discussion-recipient.ts","../src/api/new-discussion-recipients.ts","../src/api/new-discussion.ts","../src/encoders/domain.ts","../src/api/private/news-remote-mutate.ts","../src/api/news-delete.ts","../src/api/news-read.ts","../src/api/news-information-acknowledge.ts","../src/api/news-survey-send.ts","../src/decoders/news-item.ts","../src/decoders/news-question-choice.ts","../src/decoders/news-question.ts","../src/decoders/news-information.ts","../src/decoders/news-category.ts","../src/decoders/news-survey.ts","../src/decoders/news.ts","../src/api/news.ts","../src/decoders/notebook-absence.ts","../src/decoders/notebook-delay.ts","../src/decoders/notebook-punishment.ts","../src/decoders/notebook-observation.ts","../src/decoders/notebook-precautionary-measure.ts","../src/decoders/notebook.ts","../src/api/notebook.ts","../src/api/partner-url.ts","../src/api/resource-assignments.ts","../src/decoders/resource-content.ts","../src/decoders/resource.ts","../src/api/resource.ts","../src/api/resources.ts","../src/api/security-check-custom-password.ts","../src/api/security-check-pin.ts","../src/api/security-save.ts","../src/api/security-source.ts","../src/api/private/property-case-insensitive.ts","../src/encoders/user-resource.ts","../src/api/helpers/timings.ts","../src/decoders/timetable-class.ts","../src/decoders/timetable-class-activity.ts","../src/decoders/timetable-class-detention.ts","../src/decoders/timetable-class-lesson.ts","../src/decoders/timetable.ts","../src/api/timetable.ts"],"names":["forge","pako","frequency","id","resource","timetable","defaultFetcher","account","message","instance","news","decoder","notebook"],"mappings":";;;;;AAAa,IAAA,QAAA,GAAW,CAAC,GAAwB,KAAA;AAC/C,EAAI,IAAA,UAAA,GAAa,IAAI,GAAA,CAAI,GAAG,CAAA,CAAA;AAE5B,EAAa,UAAA,GAAA,IAAI,GAAI,CAAA,CAAA,EAAG,UAAW,CAAA,QAAQ,CAAK,EAAA,EAAA,UAAA,CAAW,IAAI,CAAA,EAAG,UAAW,CAAA,QAAQ,CAAE,CAAA,CAAA,CAAA;AAGvF,EAAA,MAAM,KAAQ,GAAA,UAAA,CAAW,QAAS,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC3C,EAAA,IAAI,MAAM,KAAM,CAAA,MAAA,GAAS,CAAC,CAAE,CAAA,QAAA,CAAS,OAAO,CAAG,EAAA;AAC7C,IAAA,KAAA,CAAM,GAAI,EAAA,CAAA;AAAA,GACZ;AAGA,EAAW,UAAA,CAAA,QAAA,GAAW,KAAM,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAGpC,EAAO,OAAA,UAAA,CAAW,IAAK,CAAA,QAAA,CAAS,GAAG,CAAA,GAC/B,UAAW,CAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,CAAE,CAAA,CAAA,GAC3B,UAAW,CAAA,IAAA,CAAA;AACjB,EAAA;;;AChBa,IAAA,SAAA,GAAY,CAAC,OAAA,EAAwB,UAAkD,KAAA;AAClG,EAAA,OAAO,OAAQ,CAAA,QAAA,CAAS,eAAgB,CAAA,GAAA,CAAI,UAAU,CAAA,CAAA;AACxD,EAAA;;;ACFO,IAAM,gBAAmB,GAAA,CAAC,OAAwB,EAAA,SAAA,EAAmB,WAAW,WAAwB,KAAA;AAC7G,EAAA,MAAM,OAAU,GAAA,OAAA,CAAQ,QAAS,CAAA,OAAA,CAAQ,KAAK,GAAG,CAAA,CAAA;AACjD,EAAO,OAAA,CAAA,EAAG,QAAQ,WAAY,CAAA,GAAG,SAAS,QAAQ,CAAA,kBAAA,EAAqB,SAAS,CAAA,SAAA,EAAY,OAAO,CAAA,eAAA,CAAA,CAAA;AACrG,EAAA;;;ACLa,IAAA,mBAAA,GAAN,cAAkC,KAAM,CAAA;AAAA,EAC7C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,kFAAkF,CAAA,CAAA;AACxF,IAAA,IAAA,CAAK,IAAO,GAAA,qBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,iBAAA,GAAN,cAAgC,KAAM,CAAA;AAAA,EAC3C,YAAY,OAAiB,EAAA;AAC3B,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,mBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,iBAAA,GAAN,cAAgC,KAAM,CAAA;AAAA,EAC3C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,6EAA6E,CAAA,CAAA;AACnF,IAAA,IAAA,CAAK,IAAO,GAAA,mBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,oBAAA,GAAN,cAAmC,KAAM,CAAA;AAAA,EAC9C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,mCAAmC,CAAA,CAAA;AACzC,IAAA,IAAA,CAAK,IAAO,GAAA,sBAAA,CAAA;AAAA,GACd;AACF,EAAA;;;AC1Ba,IAAA,qBAAA,GAAN,cAAoC,KAAM,CAAA;AAAA,EAC/C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,wDAAwD,CAAA,CAAA;AAC9D,IAAA,IAAA,CAAK,IAAO,GAAA,uBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,8BAAA,GAAN,cAA6C,KAAM,CAAA;AAAA,EACxD,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,qDAAqD,CAAA,CAAA;AAC3D,IAAA,IAAA,CAAK,IAAO,GAAA,gCAAA,CAAA;AAAA,GACd;AACF,EAAA;;;ACFO,IAAM,YAAA,GAAe,CAAC,GAA0B,KAAA;AACrD,EAAA,GAAA,GAAM,IAAI,IAAK,EAAA,CAAA;AACf,EAAI,IAAA,GAAA,CAAI,CAAC,CAAA,KAAM,GAAO,IAAA,GAAA,CAAI,GAAI,CAAA,MAAA,GAAS,CAAC,CAAA,KAAM,GAAK,EAAA,OAAO,EAAC,CAAA;AAE3D,EAAM,GAAA,GAAA,GAAA,CAAI,KAAM,CAAA,CAAA,EAAG,CAAE,CAAA,CAAA,CAAA;AACrB,EAAA,IAAI,GAAI,CAAA,MAAA,KAAW,CAAG,EAAA,OAAO,EAAC,CAAA;AAE9B,EAAA,MAAM,SAAmB,EAAC,CAAA;AAE1B,EAAA,KAAA,MAAW,IAAQ,IAAA,GAAA,CAAI,KAAM,CAAA,GAAG,CAAG,EAAA;AACjC,IAAI,IAAA,IAAA,CAAK,QAAS,CAAA,IAAI,CAAG,EAAA;AACvB,MAAA,MAAM,CAAC,KAAA,EAAO,GAAG,CAAA,GAAI,IAAK,CAAA,KAAA,CAAM,IAAI,CAAA,CAAE,GAAI,CAAA,CAAC,CAAM,KAAA,QAAA,CAAS,CAAC,CAAC,CAAA,CAAA;AAC5D,MAAA,KAAA,IAAS,QAAQ,KAAO,EAAA,KAAA,IAAS,KAAK,KAAS,EAAA,EAAA,MAAA,CAAO,KAAK,KAAK,CAAA,CAAA;AAAA,KAE7D,MAAA,MAAA,CAAO,IAAK,CAAA,QAAA,CAAS,IAAI,CAAC,CAAA,CAAA;AAAA,GACjC;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA,CAAA;;;ACzBO,IAAM,mBAAA,GAAsB,CAAC,KAA8B,KAAA;AAChE,EAAO,OAAA;AAAA,IACL,WAAW,KAAM,CAAA,GAAA;AAAA,IACjB,WAAW,KAAM,CAAA,GAAA;AAAA,IACjB,KAAO,EAAA,YAAA,CAAa,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,GACpC,CAAA;AACF,CAAA,CAAA;;;ACLO,IAAM,mBAAsB,GAAA,CAAC,cAAqB,EAAA,QAAA,EAAe,eAA4C,KAAA;AAClH,EAAA,MAAM,OAAU,GAAA,YAAA,CAAa,cAAe,CAAA,iBAAA,CAAkB,CAAC,CAAA,CAAA;AAE/D,EAAO,OAAA;AAAA,IACL,sBAAwB,EAAA,YAAA,CAAa,cAAe,CAAA,cAAA,CAAe,CAAC,CAAA;AAAA,IACpE,qBAAqB,cAAe,CAAA,yBAAA;AAAA,IACpC,aAAA,EAAe,mBAAoB,CAAA,cAAA,CAAe,eAAe,CAAA;AAAA,IAEjE,oBAAsB,EAAA,OAAA,CAAQ,QAAS,CAAA,sBAAA,CAAuB,iCAAiC,CAAA;AAAA,IAC/F,sBAAwB,EAAA,OAAA,CAAQ,QAAS,CAAA,sBAAA,CAAuB,qBAAqB,CAAA;AAAA,IAErF,cAAgB,EAAA,OAAA,CAAQ,QAAS,CAAA,sBAAA,CAAuB,4BAA4B,CAAA;AAAA,IACpF,iBAAmB,EAAA,OAAA,CAAQ,QAAS,CAAA,sBAAA,CAAuB,qCAAqC,CAAA;AAAA,IAEhG,OAAS,EAAA;AAAA,MACP,cAAA;AAAA,MACA,QAAA;AAAA,MACA,eAAA;AAAA,KACF;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;ACrBa,IAAA,aAAA,GAAN,cAA4B,KAAM,CAAA;AAAA,EAChC,MAAA,CAAA;AAAA,EAEP,WAAA,CAAa,cAAqB,EAAA,QAAA,EAAe,eAA0B,EAAA;AACzE,IAAA,KAAA,CAAM,8CAA8C,CAAA,CAAA;AACpD,IAAA,IAAA,CAAK,IAAO,GAAA,eAAA,CAAA;AACZ,IAAA,IAAA,CAAK,MAAS,GAAA,mBAAA,CAAoB,cAAgB,EAAA,QAAA,EAAU,eAAe,CAAA,CAAA;AAAA,GAC7E;AACF,EAAA;AAEa,IAAA,0BAAA,GAAN,cAAyC,KAAM,CAAA;AAAA,EACpD,YAAa,KAAe,EAAA;AAC1B,IAAM,KAAA,CAAA,CAAA,wCAAA,EAA2C,KAAK,CAAa,WAAA,CAAA,CAAA,CAAA;AACnE,IAAA,IAAA,CAAK,IAAO,GAAA,4BAAA,CAAA;AAAA,GACd;AACF,EAAA;;;AClBa,IAAA,gBAAA,GAAN,cAA+B,KAAM,CAAA;AAAA,EAC1C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,oCAAoC,CAAA,CAAA;AAC1C,IAAA,IAAA,CAAK,IAAO,GAAA,kBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,mBAAA,GAAN,cAAkC,KAAM,CAAA;AAAA,EAC7C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,yBAAyB,CAAA,CAAA;AAC/B,IAAA,IAAA,CAAK,IAAO,GAAA,qBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAGa,IAAA,oBAAA,GAAN,cAAmC,KAAM,CAAA;AAAA,EAC9C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,mCAAmC,CAAA,CAAA;AACzC,IAAA,IAAA,CAAK,IAAO,GAAA,sBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,aAAA,GAAN,cAA4B,KAAM,CAAA;AAAA,EACvC,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,qCAAqC,CAAA,CAAA;AAC3C,IAAA,IAAA,CAAK,IAAO,GAAA,eAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,gBAAA,GAAN,cAA+B,KAAM,CAAA;AAAA,EAC1C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,0BAA0B,CAAA,CAAA;AAChC,IAAA,IAAA,CAAK,IAAO,GAAA,kBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,eAAA,GAAN,cAA8B,KAAM,CAAA;AAAA,EACzC,WAAA,CAAY,UAAU,gCAAkC,EAAA;AACtD,IAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AACb,IAAA,IAAA,CAAK,IAAO,GAAA,iBAAA,CAAA;AAAA,GACd;AACF,EAAA;;;ACzCa,IAAA,gBAAA,GAAN,cAA+B,KAAM,CAAA;AAAA,EAC1C,YAAY,EAAY,EAAA;AACtB,IAAM,KAAA,CAAA,CAAA,6BAAA,EAAgC,EAAE,CAAkE,gEAAA,CAAA,CAAA,CAAA;AAC1G,IAAA,IAAA,CAAK,IAAO,GAAA,kBAAA,CAAA;AAAA,GACd;AACF,EAAA;;;ACLa,IAAA,eAAA,GAAN,cAA8B,KAAM,CAAA;AAAA,EACzC,YAAY,cAAwB,EAAA;AAClC,IAAM,KAAA,CAAA,CAAA,mEAAA,EAAsE,cAAc,CAAQ,MAAA,CAAA,CAAA,CAAA;AAClG,IAAA,IAAA,CAAK,IAAO,GAAA,iBAAA,CAAA;AAAA,GACd;AACF,EAAA;AAEa,IAAA,iBAAA,GAAN,cAAgC,KAAM,CAAA;AAAA,EAC3C,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,wBAAwB,CAAA,CAAA;AAC9B,IAAA,IAAA,CAAK,IAAO,GAAA,mBAAA,CAAA;AAAA,GACd;AACF,EAAA;;;ACZO,IAAM,WAAc,GAAA;AAAA,EACzB,OAAS,EAAA,CAAA;AAAA,EACT,MAAQ,EAAA,CAAA;AAAA,EACR,OAAS,EAAA,CAAA;AACX,EAAA;;;ACJO,IAAM,oBAAuB,GAAA;AAAA,EAClC,IAAM,EAAA,CAAA;AAAA,EACN,IAAM,EAAA,CAAA;AAAA,EACN,MAAQ,EAAA,CAAA;AAAA,EACR,IAAM,EAAA,CAAA;AACR,EAAA;;;ACLO,IAAM,oBAAuB,GAAA;AAAA,EAClC,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,CAAA;AAAA,EACP,UAAY,EAAA,CAAA;AAAA,EACZ,KAAO,EAAA,CAAA;AAAA;AAAA,EAGP,cAAgB,EAAA,CAAA;AAClB,EAAA;;;ACRO,IAAM,cAAiB,GAAA;AAAA,EAC5B,IAAM,EAAA,CAAA;AAAA,EACN,IAAM,EAAA,CAAA;AACR,EAAA;;;ACHO,IAAM,iBAAoB,GAAA;AAAA,EAC/B,EAAI,EAAA,IAAA;AAAA,EACJ,KAAO,EAAA,OAAA;AAAA,EACP,QAAU,EAAA,UAAA;AAAA,EACV,WAAa,EAAA,aAAA;AAAA,EACb,UAAY,EAAA,YAAA;AAAA,EACZ,QAAU,EAAA,UAAA;AAAA,EACV,kBAAoB,EAAA,oBAAA;AAAA,EACpB,gBAAkB,EAAA,kBAAA;AAAA,EAClB,gBAAkB,EAAA,kBAAA;AAAA,EAClB,mBAAqB,EAAA,qBAAA;AAAA,EACrB,KAAO,EAAA,WAAA;AAAA,EACP,OAAS,EAAA,cAAA;AAAA,EACT,MAAQ,EAAA,aAAA;AAAA,EACR,SAAW,EAAA,WAAA;AAAA,EACX,IAAM,EAAA,MAAA;AAAA,EACN,MAAQ,EAAA,QAAA;AAAA,EACR,mBAAqB,EAAA,qBAAA;AAAA,EACrB,sBAAwB,EAAA,wBAAA;AAAA,EACxB,2BAA6B,EAAA,6BAAA;AAAA,EAC7B,qBAAuB,EAAA,uBAAA;AAAA,EACvB,iBAAmB,EAAA,mBAAA;AAAA,EACnB,eAAiB,EAAA,iBAAA;AAAA,EACjB,kBAAoB,EAAA,oBAAA;AACtB,EAAA;;;ACxBO,IAAM,oBAAuB,GAAA;AAAA,EAClC,gBAAkB,EAAA,CAAA;AAAA,EAClB,kBAAoB,EAAA,CAAA;AAAA,EACpB,gBAAkB,EAAA,CAAA;AAAA,EAClB,eAAiB,EAAA,CAAA;AAAA,EACjB,kBAAoB,EAAA,CAAA;AAAA,EACpB,iBAAmB,EAAA,CAAA;AAAA,EACnB,oBAAsB,EAAA,CAAA;AAAA,EACtB,cAAgB,EAAA,CAAA;AAAA,EAChB,cAAgB,EAAA,CAAA;AAAA,EAChB,eAAiB,EAAA,CAAA;AAAA,EACjB,sBAAwB,EAAA,EAAA;AAAA,EACxB,eAAiB,EAAA,EAAA;AAAA,EACjB,kBAAoB,EAAA,EAAA;AAAA,EACpB,qBAAuB,EAAA,EAAA;AAAA,EACvB,iCAAmC,EAAA,EAAA;AACrC,EAAA;;;AChBO,IAAM,oBAAuB,GAAA;AAAA,EAClC,IAAM,EAAA,CAAA;AAAA,EACN,YAAc,EAAA,CAAA;AAAA,EACd,oCAAsC,EAAA,CAAA;AAAA,EACtC,aAAe,EAAA,CAAA;AAAA,EACf,qCAAuC,EAAA,CAAA;AAAA,EACvC,KAAO,EAAA,CAAA;AACT,EAAA;;;ACPO,IAAM,QAAW,GAAA;AAAA,EACtB,KAAO,EAAA,CAAA;AAAA,EACP,IAAM,EAAA,CAAA;AAAA,EACN,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,CAAA;AAAA,EACP,OAAS,EAAA,CAAA;AAAA,EACT,OAAS,EAAA,CAAA;AACX,EAAA;;;ACPO,IAAM,kBAAqB,GAAA;AAAA,EAChC,OAAS,EAAA,CAAA;AAAA,EACT,IAAM,EAAA,CAAA;AAAA,EACN,GAAK,EAAA,CAAA;AAAA,EACL,KAAO,EAAA,CAAA;AAAA,EACP,OAAS,EAAA,CAAA;AAAA,EACT,KAAO,EAAA,CAAA;AAAA,EACP,KAAO,EAAA,CAAA;AAAA,EACP,KAAO,EAAA,CAAA;AAAA,EACP,SAAW,EAAA,CAAA;AAAA,EACX,QAAU,EAAA,CAAA;AACZ,EAAA;;;ACXO,IAAM,YAAe,GAAA;AAAA,EAC1B,GAAK,EAAA,CAAA;AAAA,EACL,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,CAAA;AAAA,EACP,UAAY,EAAA,CAAA;AAAA,EACZ,eAAiB,EAAA,CAAA;AACnB,EAAA;;;ACNO,IAAM,sBAAyB,GAAA;AAAA,EACpC,iCAAmC,EAAA,CAAA;AAAA,EACnC,qBAAuB,EAAA,CAAA;AAAA,EACvB,2BAA6B,EAAA,CAAA;AAAA,EAC7B,4BAA8B,EAAA,CAAA;AAAA,EAC9B,4BAA8B,EAAA,CAAA;AAAA,EAC9B,qCAAuC,EAAA,CAAA;AACzC,EAAA;;;ACPO,IAAM,cAAiB,GAAA;AAAA,EAC5B,oBAAsB,EAAA,CAAA;AAAA,EACtB,aAAe,EAAA,CAAA;AAAA,EACf,0BAA4B,EAAA,CAAA;AAAA,EAC5B,kBAAoB,EAAA,CAAA;AACtB,EAAA;;;ACLO,IAAM,sBAAyB,GAAA;AAAA,EACpC,gBAAkB,EAAA,CAAA;AAAA,EAClB,mCAAqC,EAAA,CAAA;AAAA;AAAA,EAErC,sCAAwC,EAAA,CAAA;AAAA,EACxC,gCAAkC,EAAA,CAAA;AAAA,EAClC,uCAAyC,EAAA,CAAA;AAAA,EACzC,oBAAsB,EAAA,CAAA;AAAA,EACtB,kCAAoC,EAAA,CAAA;AAAA,EACpC,mCAAqC,EAAA,CAAA;AAAA,EACrC,mCAAqC,EAAA,CAAA;AAAA,EACrC,kBAAoB,EAAA,CAAA;AAAA,EACpB,+BAAiC,EAAA,EAAA;AAAA,EACjC,oCAAsC,EAAA,EAAA;AACxC,EAAA;;;ACdO,IAAM,UAAa,GAAA;AAAA,EACxB,MAAQ,EAAA,CAAA;AAAA,EACR,MAAQ,EAAA,CAAA;AAAA,EACR,KAAO,EAAA,CAAA;AAAA,EACP,OAAS,EAAA,CAAA;AAAA,EACT,OAAS,EAAA,CAAA;AAAA,EACT,WAAa,EAAA,CAAA;AAAA,EACb,MAAQ,EAAA,CAAA;AAAA,EACR,WAAa,EAAA,CAAA;AAAA,EACb,UAAY,EAAA,CAAA;AAAA,EACZ,gBAAkB,EAAA,CAAA;AAAA,EAClB,aAAe,EAAA,EAAA;AAAA,EACf,MAAQ,EAAA,EAAA;AAAA,EACR,OAAS,EAAA,EAAA;AAAA,EACT,OAAS,EAAA,EAAA;AAAA,EACT,KAAO,EAAA,EAAA;AAAA,EACP,SAAW,EAAA,EAAA;AAAA,EACX,OAAS,EAAA,EAAA;AAAA,EACT,IAAM,EAAA,EAAA;AAAA,EACN,YAAc,EAAA,EAAA;AAAA,EACd,MAAQ,EAAA,EAAA;AAAA,EACR,KAAO,EAAA,EAAA;AAAA,EACP,UAAY,EAAA,EAAA;AAAA,EACZ,YAAc,EAAA,EAAA;AAAA,EACd,MAAQ,EAAA,EAAA;AAAA,EACR,aAAe,EAAA,EAAA;AAAA,EACf,UAAY,EAAA,EAAA;AAAA,EACZ,iBAAmB,EAAA,EAAA;AAAA,EACnB,MAAQ,EAAA,EAAA;AAAA,EACR,QAAU,EAAA,EAAA;AAAA,EACV,UAAY,EAAA,EAAA;AAAA,EACZ,KAAO,EAAA,EAAA;AAAA,EACP,WAAa,EAAA,EAAA;AAAA,EACb,aAAe,EAAA,EAAA;AAAA,EACf,qBAAuB,EAAA,EAAA;AAAA,EACvB,QAAU,EAAA,EAAA;AAAA,EACV,oBAAsB,EAAA,EAAA;AAAA,EACtB,kBAAoB,EAAA,EAAA;AAAA,EACpB,cAAgB,EAAA,EAAA;AAAA,EAChB,aAAe,EAAA,EAAA;AAAA,EACf,WAAa,EAAA,EAAA;AAAA,EACb,QAAU,EAAA,EAAA;AAAA,EACV,UAAY,EAAA,EAAA;AAAA,EACZ,QAAU,EAAA,EAAA;AAAA,EACV,aAAe,EAAA,EAAA;AAAA,EACf,eAAiB,EAAA,EAAA;AAAA,EACjB,WAAa,EAAA,EAAA;AAAA,EACb,0BAA4B,EAAA,EAAA;AAAA,EAC5B,aAAe,EAAA,EAAA;AAAA,EACf,aAAe,EAAA,EAAA;AAAA,EACf,iBAAmB,EAAA,EAAA;AAAA,EACnB,qBAAuB,EAAA,EAAA;AAAA,EACvB,MAAQ,EAAA,EAAA;AAAA,EACR,qBAAuB,EAAA,EAAA;AAAA,EACvB,cAAgB,EAAA,EAAA;AAAA,EAChB,wBAA0B,EAAA,EAAA;AAAA,EAC1B,GAAK,EAAA,EAAA;AAAA,EACL,YAAc,EAAA,EAAA;AAAA,EACd,UAAY,EAAA,EAAA;AAAA,EACZ,cAAgB,EAAA,EAAA;AAAA,EAChB,aAAe,EAAA,EAAA;AAAA,EACf,MAAQ,EAAA,EAAA;AAAA,EACR,eAAiB,EAAA,EAAA;AAAA,EACjB,8BAAgC,EAAA,EAAA;AAAA,EAChC,UAAY,EAAA,EAAA;AAAA,EACZ,oBAAsB,EAAA,EAAA;AAAA,EACtB,YAAc,EAAA,EAAA;AAAA,EACd,YAAc,EAAA,EAAA;AAAA,EACd,cAAgB,EAAA,EAAA;AAAA,EAChB,OAAS,EAAA,EAAA;AAAA,EACT,iBAAmB,EAAA,EAAA;AAAA,EACnB,oCAAsC,EAAA,EAAA;AAAA,EACtC,UAAY,EAAA,EAAA;AAAA,EACZ,oBAAsB,EAAA,EAAA;AAAA,EACtB,yBAA2B,EAAA,EAAA;AAAA,EAC3B,QAAU,EAAA,EAAA;AAAA,EACV,oBAAsB,EAAA,EAAA;AAAA,EACtB,8BAAgC,EAAA,EAAA;AAAA,EAChC,WAAa,EAAA,EAAA;AAAA,EACb,cAAgB,EAAA,EAAA;AAAA,EAChB,cAAgB,EAAA,EAAA;AAAA,EAChB,QAAU,EAAA,EAAA;AAAA,EACV,MAAQ,EAAA,EAAA;AAAA,EACR,0BAA4B,EAAA,EAAA;AAAA,EAC5B,WAAa,EAAA,EAAA;AAAA,EACb,gBAAkB,EAAA,EAAA;AAAA,EAClB,cAAgB,EAAA,EAAA;AAAA,EAChB,kBAAoB,EAAA,EAAA;AAAA,EACpB,YAAc,EAAA,EAAA;AAAA,EACd,sBAAwB,EAAA,EAAA;AAAA,EACxB,sBAAwB,EAAA,EAAA;AAAA,EACxB,yBAA2B,EAAA,EAAA;AAAA,EAC3B,WAAa,EAAA,EAAA;AAAA,EACb,eAAiB,EAAA,EAAA;AAAA,EACjB,iBAAmB,EAAA,EAAA;AAAA,EACnB,YAAc,EAAA,EAAA;AAAA,EACd,IAAM,EAAA,EAAA;AAAA,EACN,WAAa,EAAA,EAAA;AAAA,EACb,+BAAiC,EAAA,EAAA;AAAA,EACjC,gBAAkB,EAAA,EAAA;AAAA,EAClB,WAAa,EAAA,EAAA;AAAA,EACb,oBAAsB,EAAA,GAAA;AAAA,EACtB,iBAAmB,EAAA,GAAA;AAAA,EACnB,mBAAqB,EAAA,GAAA;AAAA,EACrB,gBAAkB,EAAA,GAAA;AAAA,EAClB,MAAQ,EAAA,GAAA;AAAA,EACR,gBAAkB,EAAA,GAAA;AAAA,EAClB,UAAY,EAAA,GAAA;AAAA,EACZ,gBAAkB,EAAA,GAAA;AAAA,EAClB,qBAAuB,EAAA,GAAA;AAAA,EACvB,mBAAqB,EAAA,GAAA;AACvB,EAAA;;;AC/GO,IAAM,WAAc,GAAA;AAAA,EACzB,IAAM,EAAA,CAAA;AAAA,EACN,QAAU,EAAA,CAAA;AAAA,EACV,YAAc,EAAA,CAAA;AAAA,EACd,QAAU,EAAA,CAAA;AAAA,EACV,qBAAuB,EAAA,CAAA;AACzB,EAAA;;;ACNO,IAAM,SAAY,GAAA;AAAA,EACvB,KAAO,EAAA,CAAA,CAAA;AAAA,EACP,KAAO,EAAA,CAAA;AAAA,EACP,MAAQ,EAAA,CAAA;AAAA,EACR,QAAU,EAAA,CAAA;AAAA,EACV,SAAW,EAAA,CAAA;AAAA,EACX,KAAO,EAAA,CAAA;AAAA,EACP,UAAY,EAAA,CAAA;AAAA,EACZ,UAAY,EAAA,CAAA;AAAA,EACZ,cAAgB,EAAA,CAAA;AAAA,EAChB,eAAiB,EAAA,CAAA;AACnB,EAAA;;;ACXO,IAAM,QAAW,GAAA;AAAA,EACtB,KAAO,EAAA,CAAA;AAAA,EACP,MAAQ,EAAA,CAAA;AACV,EAAA;;;ACHO,IAAM,gBAAmB,GAAA;AAAA;AAAA,EAE9B,eAAiB,EAAA,CAAA;AAAA;AAAA,EAEjB,UAAY,EAAA,CAAA;AAAA,EAEZ,SAAW,EAAA,CAAA;AAAA,EACX,YAAc,EAAA,CAAA;AAAA,EACd,cAAgB,EAAA,CAAA;AAClB,EAAA;;;ACTO,IAAM,QAAW,GAAA;AAAA;AAAA,EACtB,SAAW,EAAA,CAAA;AAAA,EACX,SAAW,EAAA,CAAA;AAAA,EACX,KAAO,EAAA,CAAA;AAAA,EACP,QAAU,EAAA,CAAA;AACZ,EAAA;;;ACLO,IAAM,uBAA0B,GAAA;AAAA;AAAA,EAErC,YAAc,EAAA,CAAA;AAAA;AAAA,EAGd,WAAa,EAAA,CAAA;AAAA;AAAA,EAGb,aAAe,EAAA,CAAA;AAAA;AAAA,EAGf,KAAO,EAAA,CAAA;AACT,EAAA;;;ACZO,IAAM,uBAA0B,GAAA;AAAA,EACrC,IAAM,EAAA,CAAA;AAAA;AAAA,EAEN,MAAQ,EAAA,CAAA;AAAA;AAAA,EAER,UAAY,EAAA,CAAA;AAAA;AAAA,EAEZ,GAAK,EAAA,CAAA;AAAA;AAAA,EAEL,kBAAoB,EAAA,CAAA;AAAA;AAAA,EAEpB,EAAI,EAAA,CAAA;AAAA;AAAA,EAEJ,EAAI,EAAA,CAAA;AAAA;AAAA,EAEJ,sBAAwB,EAAA,CAAA;AAAA;AAAA,EAExB,GAAK,EAAA,CAAA;AAAA;AAAA,EAEL,EAAI,EAAA,CAAA;AAAA;AAAA,EAEJ,KAAO,EAAA,EAAA;AACT,EAAA;;;ACtBO,IAAM,iBAAoB,GAAA;AAAA,EAC/B,OAAS,EAAA,CAAA;AAAA,EACT,kBAAoB,EAAA,CAAA;AAAA,EACpB,iBAAmB,EAAA,CAAA;AAAA,EACnB,wBAA0B,EAAA,CAAA;AAAA,EAC1B,uBAAyB,EAAA,CAAA;AAAA,EACzB,iBAAmB,EAAA,CAAA;AACrB,EAAA;;;ACPO,IAAM,WAAc,GAAA;AAAA,EACzB,MAAQ,EAAA,GAAA;AAAA,EACR,SAAW,EAAA,EAAA;AAAA,EACX,WAAa,EAAA,EAAA;AAAA,EACb,SAAW,EAAA,EAAA;AAAA,EACX,WAAa,EAAA,GAAA;AAAA,EACb,OAAS,EAAA,EAAA;AAAA,EACT,QAAU,EAAA,CAAA;AAAA,EACV,IAAM,EAAA,CAAA;AAAA,EACN,QAAU,EAAA,EAAA;AAAA,EACV,WAAa,EAAA,GAAA;AAAA,EACb,SAAW,EAAA,EAAA;AAAA,EACX,KAAO,EAAA,EAAA;AACT,EAAA;ACVA,IAAM,eAAkB,GAAA,kQAAA,CAAA;AACxB,IAAM,iBAAoB,GAAA,kQAAA,CAAA;AAEnB,IAAM,wBAAA,GAA2B,CAAC,OAAA,EAAc,IAAqC,KAAA;AAC1F,EAAA,MAAM,gBAAmB,GAAA,CAAC,OAAQ,CAAA,EAAA,IAAM,CAAC,OAAQ,CAAA,EAAA,CAAA;AAEjD,EAAO,OAAA;AAAA,IACL,GAAK,EAAA,IAAA;AAAA,IAEL,EAAA,EAAI,QAAS,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACtB,aAAa,OAAQ,CAAA,CAAA;AAAA,IACrB,IAAA,EAAM,QAAQ,CAAK,IAAA,KAAA;AAAA,IACnB,UAAA,EAAY,OAAQ,CAAA,CAAA,IAAK,iBAAkB,CAAA,OAAA;AAAA,IAE3C,UAAA,EAAY,gBAAmB,GAAA,eAAA,GAAkB,OAAQ,CAAA,EAAA;AAAA,IACzD,WAAA,EAAa,gBAAmB,GAAA,iBAAA,GAAoB,OAAQ,CAAA,EAAA;AAAA,IAC5D,gBAAA;AAAA,IAEA,KAAO,EAAAA,MAAA,CAAM,MAAO,CAAA,YAAA,CAAa,EAAE,CAAA;AAAA,IACnC,MAAQ,EAAA,EAAA;AAAA,IAER,cAAA,EAAgB,QAAQ,IAAQ,IAAA,KAAA;AAAA,IAChC,eAAA,EAAiB,QAAQ,IAAQ,IAAA,KAAA;AAAA,IACjC,IAAA,EAAM,QAAQ,IAAQ,IAAA,KAAA;AAAA,IACtB,IAAA,EAAM,QAAQ,IAAQ,IAAA,KAAA;AAAA,IACtB,KAAO,EAAA,CAAA;AAAA,GACT,CAAA;AACF,CAAA,CAAA;;;AC5BO,IAAM,uBAAA,GAA0B,CAAC,IAA8B,KAAA;AACpE,EAAI,IAAA,IAAA,CAAA;AAEJ,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,WAAY,CAAA,OAAA;AACf,MAAO,IAAA,GAAA,OAAA,CAAA;AACP,MAAA,MAAA;AAAA,IACF,KAAK,WAAY,CAAA,MAAA;AACf,MAAO,IAAA,GAAA,QAAA,CAAA;AACP,MAAA,MAAA;AAAA,IACF,KAAK,WAAY,CAAA,OAAA;AACf,MAAO,IAAA,GAAA,YAAA,CAAA;AACP,MAAA,MAAA;AAAA,GACJ;AAEA,EAAA,OAAO,UAAU,IAAI,CAAA,KAAA,CAAA,CAAA;AACvB,CAAA,CAAA;;;ACbO,IAAM,kBAAqB,GAAA,OAAO,OAKtC,EAAA,OAAA,GAAmB,cAAgD,KAAA;AACpE,EAAM,MAAA,GAAA,GAAM,IAAI,GAAI,CAAA,OAAA,CAAQ,OAAO,GAAM,GAAA,uBAAA,CAAwB,OAAQ,CAAA,IAAI,CAAC,CAAA,CAAA;AAC9E,EAAW,KAAA,MAAA,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAQ,CAAA,OAAA,CAAQ,MAAM,CAAG,EAAA;AACzD,IAAI,GAAA,CAAA,YAAA,CAAa,GAAI,CAAA,GAAA,EAAK,KAAK,CAAA,CAAA;AAAA,GACjC;AAEA,EAAA,MAAM,OAAmB,GAAA,EAAE,GAAK,EAAA,QAAA,EAAU,QAAS,EAAA,CAAA;AACnD,EAAyB,wBAAA,CAAA,OAAA,EAAS,QAAQ,OAAO,CAAA,CAAA;AAEjD,EAAA,MAAM,EAAE,OAAS,EAAA,IAAA,EAAS,GAAA,MAAM,QAAQ,OAAO,CAAA,CAAA;AAE/C,EAAI,IAAA;AAEF,IAAM,MAAA,YAAA,GAAe,KAAK,OAAQ,CAAA,KAAA,EAAO,EAAE,CAAE,CAAA,OAAA,CAAQ,QAAQ,EAAE,CAAA,CAAA;AAG/D,IAAA,MAAM,IAAO,GAAA,QAAA,CAAA;AACb,IAAA,MAAM,EAAK,GAAA,SAAA,CAAA;AAEX,IAAA,MAAM,eAAe,YAAa,CAAA,SAAA;AAAA,MAChC,YAAa,CAAA,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAK,CAAA,MAAA;AAAA,MAClC,YAAA,CAAa,QAAQ,EAAE,CAAA;AAAA,KACzB,CAAA;AAGA,IAAM,MAAA,mBAAA,GAAsB,aACzB,OAAQ,CAAA,kCAAA,EAAoC,QAAU,CACtD,CAAA,OAAA,CAAQ,OAAO,GAAI,CAAA,CAAA;AAEtB,IAAA,OAAO,yBAAyB,IAAK,CAAA,KAAA,CAAM,mBAAmB,CAAA,EAAG,QAAQ,IAAI,CAAA,CAAA;AAAA,WAExE,KAAO,EAAA;AACZ,IAAI,IAAA,IAAA,CAAK,QAAS,CAAA,+CAA+C,CAAG,EAAA;AAClE,MAAA,MAAM,IAAI,gBAAiB,EAAA,CAAA;AAAA,KAEpB,MAAA,IAAA,IAAA,CAAK,QAAS,CAAA,8BAA8B,CAAG,EAAA;AACtD,MAAA,MAAM,IAAI,oBAAqB,EAAA,CAAA;AAAA,KAExB,MAAA,IAAA,IAAA,CAAK,QAAS,CAAA,2CAAwC,CAAG,EAAA;AAChE,MAAA,MAAM,IAAI,aAAc,EAAA,CAAA;AAAA,KAC1B;AAEA,IAAA,MAAM,IAAI,oBAAqB,EAAA,CAAA;AAAA,GACjC;AACF,EAAA;ACpDO,IAAM,MAAN,MAAU;AAAA,EACf,OAAc,OAAA,CAAS,IAAc,EAAA,GAAA,EAA4B,EAAmC,EAAA;AAClG,IAAMA,GAAAA,GAAAA,MAAAA,CAAM,EAAG,CAAA,GAAA,CAAI,MAAO,EAAA,CAAE,OAAO,GAAI,CAAA,KAAA,EAAO,CAAA,CAAE,MAAO,EAAA,CAAA;AACvD,IAAK,EAAA,GAAA,EAAA,CAAG,QAAWA,GAAAA,MAAAA,CAAM,GAAG,GAAI,CAAA,MAAA,GAAS,MAAO,CAAA,EAAA,CAAG,OAAO,CAAA,CAAE,QAAWA,GAAAA,MAAAA,CAAM,KAAK,YAAa,EAAA,CAAE,YAAa,CAAA,CAAA,EAAG,EAAE,CAAA,CAAA;AAEnH,IAAM,MAAA,MAAA,GAASA,MAAM,CAAA,IAAA,CAAK,YAAaA,CAAAA,MAAAA,CAAM,KAAK,MAAO,CAAA,GAAA,CAAI,MAAO,CAAA,IAAI,CAA+B,CAAA,CAAA;AACvG,IAAA,MAAM,QAAWA,GAAAA,MAAAA,CAAM,MAAO,CAAA,cAAA,CAAe,WAAW,GAAG,CAAA,CAAA;AAE3D,IAAS,QAAA,CAAA,KAAA,CAAM,EAAE,EAAA,EAAI,CAAA,CAAA;AACrB,IAAA,QAAA,CAAS,OAAO,MAAM,CAAA,CAAA;AACtB,IAAA,QAAA,CAAS,MAAO,EAAA,CAAA;AAEhB,IAAO,OAAA,QAAA,CAAS,OAAO,KAAM,EAAA,CAAA;AAAA,GAC/B;AAAA,EAEA,OAAc,OAAA,CAAS,IAAuF,EAAA,GAAA,EAA4B,EAAmC,EAAA;AAC3K,IAAMA,GAAAA,GAAAA,MAAAA,CAAM,EAAG,CAAA,GAAA,CAAI,MAAO,EAAA,CAAE,OAAO,GAAI,CAAA,KAAA,EAAO,CAAA,CAAE,MAAO,EAAA,CAAA;AACvD,IAAK,EAAA,GAAA,EAAA,CAAG,QAAWA,GAAAA,MAAAA,CAAM,GAAG,GAAI,CAAA,MAAA,GAAS,MAAO,CAAA,EAAA,CAAG,OAAO,CAAA,CAAE,QAAWA,GAAAA,MAAAA,CAAM,KAAK,YAAa,EAAA,CAAE,YAAa,CAAA,CAAA,EAAG,EAAE,CAAA,CAAA;AAEnH,IAAOA,IAAAA,GAAAA,MAAAA,CAAM,IAAK,CAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AACnC,IAAA,MAAM,MAASA,GAAAA,MAAAA,CAAM,MAAO,CAAA,YAAA,CAAa,WAAW,GAAG,CAAA,CAAA;AAEvD,IAAO,MAAA,CAAA,KAAA,CAAM,EAAE,EAAA,EAAI,CAAA,CAAA;AACnB,IAAA,MAAA,CAAO,OAAO,IAAI,CAAA,CAAA;AAClB,IAAA,MAAA,CAAO,MAAO,EAAA,CAAA;AAEd,IAAO,OAAA,MAAA,CAAO,OAAO,KAAM,EAAA,CAAA;AAAA,GAC7B;AACF,CAAA,CAAA;ACtBO,IAAM,OAAU,GAAA,CAAC,OAAwB,EAAA,YAAA,GAAe,KAAgB,KAAA;AAC7E,EAAM,MAAA,EAAA,GAAKA,OAAM,IAAK,CAAA,YAAA,CAAa,eAAe,EAAK,GAAA,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAA;AAChF,EAAA,MAAM,MAAMA,MAAM,CAAA,IAAA,CAAK,YAAa,CAAA,OAAA,CAAQ,YAAY,MAAM,CAAA,CAAA;AAE9D,EAAO,OAAA,EAAE,IAAI,GAAI,EAAA,CAAA;AACnB,CAAA,CAAA;;;ACPO,IAAM,aAAN,MAAiB;AAAA,EACf,WAAA,CACG,SACD,IACP,EAAA;AAFQ,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AACD,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AAEP,IAAA,IAAA,CAAK,QAAQ,WAAY,CAAA,KAAA,EAAA,CAAA;AACzB,IAAA,MAAM,OAAU,GAAA,IAAA,CAAA;AAEhB,IAAI,IAAA;AACF,MAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,IAAI,CAAE,CAAA,UAAA,CAAA;AAElC,MAAA,IAAI,CAAC,IAAA,CAAK,OAAQ,CAAA,WAAA,CAAY,cAAgB,EAAA;AAC5C,QAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AAAA,OACf;AAEA,MAAA,IAAI,CAAC,IAAA,CAAK,OAAQ,CAAA,WAAA,CAAY,eAAiB,EAAA;AAC7C,QAAA,IAAA,CAAK,UAAW,EAAA,CAAA;AAAA,OAClB;AAEA,MAAI,IAAA,OAAO,IAAK,CAAA,IAAA,KAAS,QAAU,EAAA;AACjC,QAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAAA,OAClC;AAEA,MAAA,IAAI,OAAO,IAAA,CAAK,IAAM,EAAA,WAAA,EAAa,WAAW,WAAa,EAAA;AACzD,QAAA,MAAM,IAAI,eAAA,CAAgB,IAAK,CAAA,IAAA,CAAK,YAAY,aAAa,CAAA,CAAA;AAAA,OAC/D;AAAA,aAEK,KAAO,EAAA;AACZ,MAAI,IAAA,OAAA,CAAQ,QAAS,CAAA,iBAAiB,CAAG,EAAA;AACvC,QAAA,MAAM,IAAI,mBAAoB,EAAA,CAAA;AAAA,OAGvB,MAAA,IAAA,OAAA,CAAQ,QAAS,CAAA,mBAAmB,CAAG,EAAA;AAC9C,QAAA,MAAM,IAAI,gBAAiB,EAAA,CAAA;AAAA,OAC7B,MAAA,IAES,QAAQ,QAAS,CAAA,aAAa,KAAK,OAAQ,CAAA,QAAA,CAAS,gBAAgB,CAAG,EAAA;AAC9E,QAAA,MAAM,IAAI,oBAAqB,EAAA,CAAA;AAAA,OAGxB,MAAA,IAAA,OAAA,CAAQ,QAAS,CAAA,aAAa,CAAG,EAAA;AACxC,QAAA,MAAM,IAAI,gBAAiB,EAAA,CAAA;AAAA,OAIpB,MAAA,IAAA,OAAA,CAAQ,QAAS,CAAA,SAAS,CAAG,EAAA;AACpC,QAAA,MAAM,IAAI,iBAAkB,EAAA,CAAA;AAAA,OAC9B;AAEA,MAAM,MAAA,KAAA,CAAA;AAAA,KACR;AAAA,GACF;AAAA,EAEQ,OAAiB,GAAA;AACvB,IAAA,MAAM,EAAE,EAAI,EAAA,GAAA,EAAQ,GAAA,OAAA,CAAQ,KAAK,OAAO,CAAA,CAAA;AAExC,IAAA,IAAA,CAAK,OAAO,GAAI,CAAA,OAAA,CAAQ,IAAK,CAAA,IAAA,EAAM,KAAK,EAAE,CAAA,CAAA;AAE1C,IAAA,IAAI,CAAC,IAAA,CAAK,OAAQ,CAAA,WAAA,CAAY,eAAiB,EAAA;AAC7C,MAAA,IAAA,CAAK,IAAOA,GAAAA,MAAAA,CAAM,IAAK,CAAA,UAAA,CAAW,KAAK,IAAI,CAAA,CAAA;AAAA,KAC7C;AAAA,GACF;AAAA,EAEQ,UAAoB,GAAA;AAC1B,IAAA,MAAM,KAAQA,GAAAA,MAAAA,CAAM,IAAK,CAAA,UAAA,CAAW,KAAK,IAAI,CAAA,CAAA;AAC7C,IAAA,MAAM,UAAa,GAAA,IAAI,UAAW,CAAA,KAAA,CAAM,KAAK,KAAK,CAAA,CAAE,GAAI,CAAA,CAAC,IAAS,KAAA,IAAA,CAAK,UAAW,CAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AACrF,IAAA,IAAA,CAAK,OAAO,IAAK,CAAA,UAAA,CAAW,YAAY,EAAE,EAAA,EAAI,UAAU,CAAA,CAAA;AAAA,GAC1D;AACF,CAAA,CAAA;;;AC/DO,IAAM,YAAN,MAAgB;AAAA,EACd,WAAA,CACG,OAQD,EAAA,IAAA,EAKA,IACP,EAAA;AAdQ,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AAQD,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AAKA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA,CAAA;AAAA,GACN;AAAA;AAAA;AAAA;AAAA;AAAA,EAMI,OAAW,GAAA;AAChB,IAAA,IAAA,CAAK,QAAQ,WAAY,CAAA,KAAA,EAAA,CAAA;AAEzB,IAAM,MAAA,KAAA,GAAQ,KAAK,aAAc,EAAA,CAAA;AACjC,IAAM,MAAA,GAAA,GAAM,IAAI,GAAI,CAAA,CAAA,EAAG,KAAK,OAAQ,CAAA,WAAA,CAAY,GAAG,CAAkB,eAAA,EAAA,IAAA,CAAK,QAAQ,WAAY,CAAA,WAAW,IAAI,IAAK,CAAA,OAAA,CAAQ,YAAY,EAAE,CAAA,CAAA,EAAI,KAAK,CAAE,CAAA,CAAA,CAAA;AAEnJ,IAAA,IAAI,CAAC,IAAA,CAAK,OAAQ,CAAA,WAAA,CAAY,eAAiB,EAAA;AAC7C,MAAA,IAAA,CAAK,QAAS,EAAA,CAAA;AAAA,KAChB;AAEA,IAAA,IAAI,CAAC,IAAA,CAAK,OAAQ,CAAA,WAAA,CAAY,cAAgB,EAAA;AAC5C,MAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AAAA,KACf;AAEA,IAAO,OAAA,EAAE,OAAO,GAAI,EAAA,CAAA;AAAA,GACtB;AAAA,EAEQ,IAAQ,GAAA;AACd,IAAA,OAAO,QAAQ,IAAK,CAAA,OAAA,EAAS,KAAK,OAAQ,CAAA,WAAA,CAAY,UAAU,CAAC,CAAA,CAAA;AAAA,GACnE;AAAA,EAEQ,aAAyB,GAAA;AAC/B,IAAA,MAAM,EAAE,GAAA,EAAK,EAAG,EAAA,GAAI,KAAK,IAAK,EAAA,CAAA;AAC9B,IAAO,OAAA,GAAA,CAAI,QAAQ,IAAK,CAAA,OAAA,CAAQ,YAAY,KAAM,CAAA,QAAA,EAAY,EAAA,GAAA,EAAK,EAAE,CAAA,CAAA;AAAA,GACvE;AAAA,EAEQ,SAAqB,GAAA;AAC3B,IAAOA,OAAAA,MAAAA,CAAM,KAAK,UAAW,CAAA,IAAA,CAAK,UAAU,IAAK,CAAA,IAAI,KAAK,EAAE,CAAA,CAAA;AAAA,GAC9D;AAAA,EAEQ,QAAkB,GAAA;AACxB,IAAM,MAAA,MAAA,GAASA,OAAM,IAAK,CAAA,YAAA,CAAa,KAAK,SAAU,EAAC,EAAE,KAAM,EAAA,CAAA;AAG/D,IAAA,MAAM,WAAWC,IAAK,CAAA,UAAA,CAAW,QAAQ,EAAE,KAAA,EAAO,GAAG,CAAA,CAAA;AACrD,IAAA,MAAM,KAAQ,GAAA,KAAA,CAAM,IAAK,CAAA,QAAQ,EAAE,GAAI,CAAA,CAAC,IAAS,KAAA,MAAA,CAAO,YAAa,CAAA,IAAI,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA,CAAA;AAGnF,IAAA,IAAA,CAAK,IAAOD,GAAAA,MAAAA,CAAM,IAAK,CAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAAA,GACzC;AAAA,EAEQ,OAAiB,GAAA;AACvB,IAAA,MAAM,EAAE,GAAA,EAAK,EAAG,EAAA,GAAI,KAAK,IAAK,EAAA,CAAA;AAE9B,IAAA,MAAM,IAAO,GAAA,CAAC,IAAK,CAAA,OAAA,CAAQ,WAAY,CAAA,eAAA,GAEnCA,MAAM,CAAA,IAAA,CAAK,UAAW,CAAA,IAAA,CAAK,IAAI,CAAA,GAC/B,KAAK,SAAU,EAAA,CAAA;AAEnB,IAAA,IAAA,CAAK,IAAO,GAAA,GAAA,CAAI,OAAQ,CAAA,IAAA,EAAM,KAAK,EAAE,CAAA,CAAA;AAAA,GACvC;AAAA,EAEA,MAAa,IAA6B,GAAA;AACxC,IAAA,OAAO,IAAK,CAAA,OAAA,CAAQ,KAAM,CAAA,IAAA,CAAK,YAAY;AACzC,MAAM,MAAA,OAAA,GAAU,KAAK,OAAQ,EAAA,CAAA;AAE7B,MAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,QAC1C,KAAK,OAAQ,CAAA,GAAA;AAAA,QACb,MAAQ,EAAA,MAAA;AAAA,QACR,OAAS,EAAA;AAAA,UACP,cAAgB,EAAA,kBAAA;AAAA,SAClB;AAAA,QACA,OAAA,EAAS,KAAK,SAAU,CAAA;AAAA,UACtB,OAAA,EAAS,IAAK,CAAA,OAAA,CAAQ,WAAY,CAAA,EAAA;AAAA,UAClC,aAAa,OAAQ,CAAA,KAAA;AAAA,UACrB,KAAK,IAAK,CAAA,IAAA;AAAA,UACV,YAAY,IAAK,CAAA,IAAA;AAAA,SAClB,CAAA;AAAA,OACF,CAAA,CAAA;AAED,MAAA,OAAO,IAAI,UAAA,CAAW,IAAK,CAAA,OAAA,EAAS,SAAS,OAAO,CAAA,CAAA;AAAA,KACrD,CAAA,CAAA;AAAA,GACH;AACF,CAAA,CAAA;;;ACxGA,IAAM,aAAgB,GAAA,uBAAA,CAAA;AACtB,IAAM,uBAA0B,GAAA,yCAAA,CAAA;AAChC,IAAM,wBAA2B,GAAA,mCAAA,CAAA;AACjC,IAAM,oBAAA,GAAA,iBAA2B,IAAA,IAAA,EAAO,EAAA,WAAA,GAAc,QAAS,EAAA,CAAE,KAAM,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAEpE,IAAM,iBAAA,GAAoB,CAAC,SAA4B,KAAA;AAC5D,EAAI,IAAA,aAAA,CAAc,IAAK,CAAA,SAAS,CAAG,EAAA;AACjC,IAAM,MAAA,CAAC,GAAK,EAAA,KAAA,EAAO,IAAI,CAAA,GAAI,UAAU,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAC1D,IAAA,OAAO,IAAI,IAAA,CAAK,IAAM,EAAA,KAAA,GAAQ,GAAG,GAAG,CAAA,CAAA;AAAA,GAG7B,MAAA,IAAA,uBAAA,CAAwB,IAAK,CAAA,SAAS,CAAG,EAAA;AAChD,IAAA,MAAM,CAAC,IAAM,EAAA,IAAI,CAAK,GAAA,SAAA,CAAU,MAAM,GAAG,CAAA,CAAA;AACzC,IAAM,MAAA,CAAC,GAAK,EAAA,KAAA,EAAO,IAAI,CAAA,GAAI,KAAK,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AACrD,IAAM,MAAA,CAAC,KAAO,EAAA,OAAA,EAAS,OAAO,CAAA,GAAI,KAAK,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAE5D,IAAA,MAAM,SAAS,IAAI,IAAA,CAAK,IAAM,EAAA,KAAA,GAAQ,GAAG,GAAG,CAAA,CAAA;AAC5C,IAAO,MAAA,CAAA,QAAA,CAAS,KAAO,EAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AACvC,IAAO,OAAA,MAAA,CAAA;AAAA,GAGA,MAAA,IAAA,wBAAA,CAAyB,IAAK,CAAA,SAAS,CAAG,EAAA;AACjD,IAAA,MAAM,CAAC,IAAM,EAAA,IAAI,CAAK,GAAA,SAAA,CAAU,MAAM,GAAG,CAAA,CAAA;AACzC,IAAM,MAAA,CAAC,GAAK,EAAA,KAAA,EAAO,IAAI,CAAA,GAAI,KAAK,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AACrD,IAAM,MAAA,CAAC,OAAO,OAAO,CAAA,GAAI,KAAK,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AAEnD,IAAA,MAAM,MAAS,GAAA,IAAI,IAAK,CAAA,QAAA,CAAS,CAAG,EAAA,oBAAoB,CAAG,EAAA,IAAI,CAAE,CAAA,CAAA,EAAG,KAAQ,GAAA,CAAA,EAAG,GAAG,CAAA,CAAA;AAClF,IAAO,MAAA,CAAA,QAAA,CAAS,OAAO,OAAO,CAAA,CAAA;AAC9B,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAEA,EAAM,MAAA,IAAI,iBAAiB,mBAAmB,CAAA,CAAA;AAChD,CAAA,CAAA;;;AC/BO,IAAM,aAAA,GAAgB,CAAC,OAA0B,KAAA;AACtD,EAAO,OAAA;AAAA,IACL,IAAI,OAAQ,CAAA,CAAA;AAAA,IACZ,MAAM,OAAQ,CAAA,CAAA;AAAA,IACd,SAAW,EAAA,iBAAA,CAAkB,OAAQ,CAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IAChD,OAAS,EAAA,iBAAA,CAAkB,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,GAC9C,CAAA;AACF,CAAA,CAAA;;;ACPO,IAAM,YAAA,GAAe,CAAC,MAAwB,KAAA;AACnD,EAAO,OAAA;AAAA,IACL,IAAI,MAAO,CAAA,CAAA;AAAA,IACX,MAAM,MAAO,CAAA,CAAA;AAAA,IACb,MAAM,MAAO,CAAA,CAAA;AAAA,IAEb,SAAW,EAAA,iBAAA,CAAkB,MAAO,CAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IAC/C,OAAS,EAAA,iBAAA,CAAkB,MAAO,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,GAC7C,CAAA;AACF,CAAA,CAAA;;;ACNO,IAAM,wBAAA,GAA2B,CAAC,UAAwC,KAAA;AAC/E,EAAM,MAAA,eAAA,uBAAsB,GAA2B,EAAA,CAAA;AAEvD,EAAA,KAAA,MAAW,SAAa,IAAA,CAAC,CAAG,EAAA,CAAC,CAAG,EAAA;AAC9B,IAAA,MAAME,aAAY,YAAa,CAAA,UAAA,CAAW,QAAQ,kBAAmB,CAAA,SAAS,EAAE,CAAC,CAAA,CAAA;AACjF,IAAA,KAAA,MAAW,QAAQA,UAAW,EAAA;AAC5B,MAAA,eAAA,CAAgB,IAAI,IAAM,EAAA;AAAA,QACxB,KAAO,EAAA,UAAA,CAAW,OAAQ,CAAA,kBAAA,CAAmB,SAAS,CAAA;AAAA,QACtD,SAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACH;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,OAAA,EAAS,WAAW,OAAQ,CAAA,SAAA,CAAU,MAAM,GAAG,CAAA,CAAE,IAAI,MAAM,CAAA;AAAA,IAC3D,eAAiB,EAAA,iBAAA,CAAkB,UAAW,CAAA,OAAA,CAAQ,UAAU,CAAC,CAAA;AAAA,IACjE,WAAa,EAAA,iBAAA,CAAkB,UAAW,CAAA,OAAA,CAAQ,aAAa,CAAC,CAAA;AAAA,IAChE,SAAW,EAAA,iBAAA,CAAkB,UAAW,CAAA,OAAA,CAAQ,aAAa,CAAC,CAAA;AAAA,IAC9D,QAAU,EAAA,iBAAA,CAAkB,UAAW,CAAA,OAAA,CAAQ,aAAa,CAAC,CAAA;AAAA,IAE7D,qBAAqB,UAAW,CAAA,cAAA;AAAA,IAChC,OAAA,EAAS,WAAW,OAAQ,CAAA,cAAA,CAAe,EAAE,GAAI,CAAA,CAAC,MAAgB,KAAA,MAAA,CAAO,CAAC,CAAA;AAAA,IAC1E,OAAS,EAAA,UAAA,CAAW,OAAQ,CAAA,aAAA,CAAc,IAAI,YAAY,CAAA;AAAA,IAC1D,UAAU,UAAW,CAAA,OAAA,CAAQ,gBAAiB,CAAA,CAAA,CAAE,IAAI,aAAa,CAAA;AAAA,IACjE,eAAA;AAAA,IACA,YAAA,EAAc,WAAW,OAAQ,CAAA,aAAA;AAAA,GACnC,CAAA;AACF,CAAA,CAAA;;;AC5BO,IAAM,kBAAqB,GAAA,OAAO,OAAwB,EAAA,mBAAA,GAAqC,IAAsC,KAAA;AAC1I,EAAM,MAAA,MAAA,GAASF,MAAM,CAAA,GAAA,CAAI,GAAI,CAAA,YAAA;AAAA,IAC3B,IAAIA,MAAM,CAAA,IAAA,CAAK,WAAW,OAAQ,CAAA,WAAA,CAAY,YAAY,EAAE,CAAA;AAAA,IAC5D,IAAIA,MAAM,CAAA,IAAA,CAAK,WAAW,OAAQ,CAAA,WAAA,CAAY,aAAa,EAAE,CAAA;AAAA,GAC/D,CAAA;AAEA,EAAM,MAAA,KAAA,GAAQ,QAAQ,WAAY,CAAA,KAAA,CAAA;AAClC,EAAI,IAAA,IAAA,CAAA;AAEJ,EAAI,IAAA,OAAA,CAAQ,YAAY,gBAAkB,EAAA;AACxC,IAAOA,IAAAA,GAAAA,MAAAA,CAAM,IAAK,CAAA,QAAA,CAAS,OAAQ,CAAA,WAAA,CAAY,IAAO,GAAA,MAAA,CAAO,OAAQ,CAAA,KAAK,CAAI,GAAA,KAAA,EAAO,EAAE,CAAA,CAAA;AAAA,GAEpF,MAAA;AACH,IAAA,IAAA,GAAOA,OAAM,IAAK,CAAA,QAAA,CAAS,MAAO,CAAA,OAAA,CAAQ,KAAK,CAAC,CAAA,CAAA;AAAA,GAClD;AAEA,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,oBAAsB,EAAA;AAAA,IAC3D,OAAS,EAAA;AAAA,MACP,cAAgB,EAAA,mBAAA;AAAA,MAChB,IAAM,EAAA,IAAA;AAAA,KACR;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAO,OAAA,wBAAA,CAAyB,QAAS,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AACvD,CAAA,CAAA;;;AC3BO,IAAM,QAAA,GAAW,OAAO,OAAA,EAAwB,UAQnC,KAAA;AAClB,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,gBAAkB,EAAA;AAAA,IACvD,OAAS,EAAA;AAAA,MACP,cAAgB,EAAA,CAAA;AAAA;AAAA,MAChB,WAAA,EAAa,QAAQ,WAAY,CAAA,WAAA;AAAA,MACjC,aAAa,UAAW,CAAA,QAAA;AAAA,MACxB,SAAS,UAAW,CAAA,MAAA;AAAA,MACpB,eAAiB,EAAA,KAAA;AAAA,MACjB,wBAAwB,UAAW,CAAA,yBAAA;AAAA,MACnC,oBAAsB,EAAA,KAAA;AAAA,MACtB,6BAA6B,UAAW,CAAA,gCAAA;AAAA,MACxC,kCAAkC,UAAW,CAAA,iBAAA;AAAA,MAC7C,iBAAiB,UAAW,CAAA,UAAA;AAAA,MAC5B,aAAe,EAAA,EAAA;AAAA,KACjB;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,SAAS,IAAK,CAAA,OAAA,CAAA;AACvB,CAAA,CAAA;;;AC3BO,IAAM,YAAA,GAAe,OAAO,OAAA,EAAwB,SAAsB,KAAA;AAC/E,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,kBAAoB,EAAA;AAAA,IACzD,OAAS,EAAA;AAAA,MACP,SAAW,EAAA,CAAA;AAAA;AAAA,MACX,SAAA;AAAA,MACA,MAAA,EAAQ,QAAQ,WAAY,CAAA,WAAA;AAAA,KAC9B;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAM,MAAA,IAAA,GAAO,SAAS,IAAK,CAAA,OAAA,CAAA;AAG3B,EAAA,IAAI,OAAO,IAAK,CAAA,KAAA,KAAU,QAAY,IAAA,IAAA,CAAK,UAAU,CAAG,EAAA;AACtD,IAAA,QAAQ,KAAK,KAAO;AAAA,MAClB,KAAK,CAAA;AACH,QAAA,MAAM,IAAI,mBAAoB,EAAA,CAAA;AAAA,MAEhC,KAAK,CAAA,CAAA;AAAA;AAAA,MACL,KAAK,CAAA,CAAA;AAAA;AAAA,MACL,KAAK,CAAA,CAAA;AAAA;AAAA,MACL,KAAK,CAAA,CAAA;AAAA;AAAA,MACL,KAAK,CAAA,CAAA;AAAA;AAAA,MACL,KAAK,CAAA;AACH,QAAA,MAAM,IAAI,iBAAkB,EAAA,CAAA;AAAA,MAE9B,KAAK,CAAA,CAAA;AAAA;AAAA,MACL,KAAK,EAAA;AACH,QAAA,MAAM,IAAI,oBAAqB,EAAA,CAAA;AAAA,MAEjC,KAAK,CAAA;AACH,QAAI,IAAA,OAAO,IAAK,CAAA,YAAA,KAAiB,WAAa,EAAA;AAC5C,UAAI,IAAA,KAAA,GAAgB,IAAK,CAAA,YAAA,CAAa,OAAW,IAAA,QAAA,CAAA;AAEjD,UAAI,IAAA,IAAA,CAAK,aAAa,KAAO,EAAA;AAC3B,YAAA,KAAA,IAAS,CAAG,EAAA,IAAA,CAAK,YAAa,CAAA,KAAK,IAAI,KAAK,CAAA,CAAA,CAAA;AAAA,WAC9C;AAEA,UAAM,MAAA,IAAI,kBAAkB,KAAK,CAAA,CAAA;AAAA,SACnC;AAAA,KACJ;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA,CAAA;;;AC7CO,IAAM,wBAAA,GAA2B,CAAC,IAAA,EAAW,IAAoC,KAAA;AACtF,EAAM,MAAA,kBAAA,GAAqB,KAAK,cAAkB,IAAA,KAAA,CAAA;AAClD,EAAA,MAAM,UAAa,GAAA,kBAAA,IAAsB,EAAE,IAAA,CAAK,kBAAsB,IAAA,KAAA,CAAA,CAAA;AACtE,EAAM,MAAA,mBAAA,GAAsB,UAAe,KAAA,IAAA,CAAK,wBAA4B,IAAA,KAAA,CAAA,CAAA;AAC5E,EAAM,MAAA,qBAAA,GAAwB,UAAe,KAAA,IAAA,CAAK,qBAAyB,IAAA,KAAA,CAAA,CAAA;AAC3E,EAAM,MAAA,sBAAA,GAAyB,UAAe,KAAA,IAAA,CAAK,oBAAwB,IAAA,KAAA,CAAA,CAAA;AAC3E,EAAM,MAAA,sBAAA,GAAyB,UAAe,KAAA,IAAA,CAAK,yBAA6B,IAAA,KAAA,CAAA,CAAA;AAEhF,EAAA,MAAM,YAA2B,EAAC,CAAA;AAElC,EAAI,IAAA,IAAA,CAAK,SAAS,CAAG,EAAA;AACnB,IAAM,MAAA,QAAA,GAAW,CAAC,GAAmB,KAAA;AACnC,MAAA,IAAI,OAAO,GAAK,EAAA;AACd,QAAU,SAAA,CAAA,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAAA,OACtB;AAEA,MAAA,IAAI,YAAY,GAAK,EAAA;AACnB,QAAI,GAAA,CAAA,MAAA,CAAO,QAAQ,QAAQ,CAAA,CAAA;AAAA,OAC7B;AAAA,KACF,CAAA;AAEA,IAAA,IAAA,CAAK,QAAQ,QAAQ,CAAA,CAAA;AAAA,GACvB;AAEA,EAAO,OAAA;AAAA,IACL,kBAAA;AAAA,IACA,UAAA;AAAA,IACA,mBAAA;AAAA,IACA,qBAAA;AAAA,IACA,sBAAA;AAAA,IACA,sBAAA;AAAA,IAEA,2BAAA,EAA6B,KAAK,qBAAyB,IAAA,KAAA;AAAA,IAC3D,6BAA6B,IAAK,CAAA,sBAAA;AAAA,IAElC,IAAM,EAAA,SAAA;AAAA,GACR,CAAA;AACF,CAAA,CAAA;;;AClCO,IAAM,mBAAmB,CAAC,UAAA,EAAiB,OAAwB,EAAA,UAAA,GAAa,EAAmB,KAAA;AACxG,EAAM,MAAA,IAAA,GAAO,WAAW,CAAK,IAAA,EAAA,CAAA;AAC7B,EAAA,MAAM,OAAO,UAAW,CAAA,CAAA,CAAA;AACxB,EAAA,MAAMG,MAAK,UAAW,CAAA,CAAA,CAAA;AACtB,EAAI,IAAA,GAAA,CAAA;AAEJ,EAAI,IAAA,IAAA,KAAS,eAAe,IAAM,EAAA;AAChC,IAAA,GAAA,GAAM,WAAW,GAAO,IAAA,IAAA,CAAA;AAAA,GAErB,MAAA;AACH,IAAA,MAAM,EAAE,EAAA,EAAI,GAAI,EAAA,GAAI,QAAQ,OAAO,CAAA,CAAA;AAGnC,IAAM,MAAA,IAAA,GAAO,KAAK,SAAU,CAAA;AAAA,MAC1B,CAAGA,EAAAA,GAAAA;AAAA,MACH,KAAO,EAAA,IAAA;AAAA;AAAA,MAGP,GAAG,UAAA;AAAA,KACJ,CAAA,CAAA;AAED,IAAA,MAAM,SAAY,GAAA,GAAA,CAAI,OAAQ,CAAA,IAAA,EAAM,KAAK,EAAE,CAAA,CAAA;AAC3C,IAAA,GAAA,GAAM,CAAG,EAAA,OAAA,CAAQ,WAAY,CAAA,GAAG,CAAqB,kBAAA,EAAA,SAAS,CAAI,CAAA,EAAA,kBAAA,CAAmB,IAAI,CAAC,CAAY,SAAA,EAAA,OAAA,CAAQ,YAAY,EAAE,CAAA,CAAA,CAAA;AAAA,GAC9H;AAEA,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,IAAA;AAAA,IACA,GAAA;AAAA,IACA,EAAAA,EAAAA,GAAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;AClCO,IAAM,SAAA,GAAY,CAAC,GAAA,EAAU,eAAmC,KAAA;AACrE,EAAM,MAAA,IAAA,GAAO,CAACA,GAAe,KAAA,eAAA,CAAgB,KAAK,CAAC,EAAA,KAAO,EAAG,CAAA,EAAA,KAAOA,GAAE,CAAA,CAAA;AAEtE,EAAA,MAAM,gBAAgB,GAAI,CAAA,gBAAA,IAAoB,KAAK,GAAI,CAAA,gBAAA,CAAiB,EAAE,CAAC,CAAA,CAAA;AAC3E,EAAA,MAAM,OAAU,GAAA,GAAA,CAAI,aAAc,CAAA,CAAA,CAAE,GAAI,CAAA,CAAC,EAAY,KAAA,IAAA,CAAK,EAAG,CAAA,CAAC,CAAC,CAAA,CAAE,OAAO,OAAO,CAAA,CAAA;AAE/E,EAAO,OAAA;AAAA,IACL,aAAA;AAAA,IACA,UAAU,GAAI,CAAA,CAAA;AAAA,IACd,OAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;ACTO,IAAM,kBAAA,GAAqB,CAACC,SAAAA,EAAe,OAAyC,KAAA;AACzF,EAAA,IAAI,cAAoC,GAAA,IAAA,CAAA;AAExC,EAAA,IAAIA,UAAS,SAAW,EAAA;AACtB,IAAA,cAAA,GAAiB,gBAAiB,CAAA;AAAA,MAChC,CAAG,EAAA,CAAA;AAAA,MACH,GAAGA,SAAS,CAAA,CAAA;AAAA,MACZ,CAAG,EAAA,WAAA;AAAA,OACF,OAAO,CAAA,CAAA;AAAA,GACZ;AAEA,EAAM,MAAA,IAAA,uBAAkC,GAAI,EAAA,CAAA;AAE5C,EAAA,KAAA,MAAW,GAAOA,IAAAA,SAAAA,CAAS,wBAA0B,EAAA,CAAA,IAAK,EAAI,EAAA;AAC5D,IAAK,IAAA,CAAA,GAAA,CAAI,IAAI,CAAG,EAAA,SAAA,CAAU,KAAK,OAAQ,CAAA,QAAA,CAAS,OAAO,CAAC,CAAA,CAAA;AAAA,GAC1D;AAEA,EAAO,OAAA;AAAA,IACL,IAAIA,SAAS,CAAA,CAAA;AAAA,IACb,MAAMA,SAAS,CAAA,CAAA;AAAA,IACf,MAAMA,SAAS,CAAA,CAAA;AAAA,IACf,iBAAA,EAAmBA,SAAS,CAAA,aAAA,CAAc,CAAE,CAAA,CAAA;AAAA,IAC5C,SAAA,EAAWA,UAAS,YAAc,EAAA,CAAA;AAAA,IAClC,cAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA,EAAYA,UAAS,YAAgB,IAAA,KAAA;AAAA,IACrC,UAAA,EAAYA,UAAS,UAAc,IAAA,KAAA;AAAA,IACnC,UAAA,EAAYA,UAAS,WAAe,IAAA,KAAA;AAAA,GACtC,CAAA;AACF,CAAA,CAAA;;;AC7BO,IAAM,oBAAA,GAAuB,CAAC,UAAA,EAAiB,OAA2C,KAAA;AAC/F,EAAI,IAAA,SAAA,CAAA;AAEJ,EAAQ,QAAA,OAAA,CAAQ,YAAY,WAAa;AAAA,IACvC,KAAK,WAAY,CAAA,OAAA,CAAA;AAAA,IACjB,KAAK,WAAY,CAAA,OAAA;AACf,MAAY,SAAA,GAAA,CAAC,WAAW,SAAS,CAAA,CAAA;AACjC,MAAA,MAAA;AAAA,IACF,KAAK,WAAY,CAAA,MAAA;AACf,MAAA,SAAA,GAAY,WAAW,SAAU,CAAA,eAAA,CAAA;AACjC,MAAA,MAAA;AAAA,GACJ;AAEA,EAAO,OAAA;AAAA,IACL,EAAA,EAAI,WAAW,SAAU,CAAA,CAAA;AAAA,IACzB,IAAA,EAAM,WAAW,SAAU,CAAA,CAAA;AAAA,IAC3B,IAAA,EAAM,WAAW,SAAU,CAAA,CAAA;AAAA,IAC3B,SAAA,EAAW,UAAU,GAAI,CAAA,CAACA,cAAa,kBAAmBA,CAAAA,SAAAA,EAAU,OAAO,CAAC,CAAA;AAAA,IAC5E,cAAgB,EAAA,wBAAA,CAAyB,UAAW,CAAA,aAAA,EAAe,WAAW,YAAY,CAAA;AAAA,GAC5F,CAAA;AACF,CAAA,CAAA;;;ACnBO,IAAM,cAAA,GAAiB,OAAO,OAAoD,KAAA;AACvF,EAAA,MAAM,UAAU,IAAI,SAAA,CAAU,OAAS,EAAA,uBAAA,EAAyB,EAAE,CAAA,CAAA;AAClE,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,oBAAqB,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AAC5D,CAAA,CAAA;;;ACJO,IAAM,yBAAA,GAA4B,CAAC,IAA8B,KAAA;AACtE,EAAM,MAAA,QAAA,GAAW,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC/B,EAAA,QAAA,CAAS,GAAI,EAAA,CAAA;AAEb,EAAQ,QAAA,QAAA,CAAS,KAAO;AAAA,IACtB,KAAK,OAAA;AAAS,MAAA,OAAO,WAAY,CAAA,OAAA,CAAA;AAAA,IACjC,KAAK,QAAA;AAAU,MAAA,OAAO,WAAY,CAAA,MAAA,CAAA;AAAA,IAClC,KAAK,YAAA;AAAc,MAAA,OAAO,WAAY,CAAA,OAAA,CAAA;AAAA,IACtC;AAAS,MAAM,MAAA,IAAI,iBAAiB,2BAA2B,CAAA,CAAA;AAAA,GACjE;AACF,CAAA,CAAA;;;ACZO,IAAM,sBAAA,GAAyB,CAAC,EAA8B,KAAA;AACnE,EAAA,MAAM,MAAM,EAAG,CAAA,GAAA,CAAA;AAEf,EAAA,MAAM,SAAoB,GAAA,GAAA,CAAI,WAAY,CAAA,GAAG,CAAI,GAAA,CAAA,CAAA;AACjD,EAAA,MAAM,IAAO,GAAA,GAAA,CAAI,SAAU,CAAA,CAAA,EAAG,YAAY,CAAC,CAAA,CAAA;AAC3C,EAAM,MAAA,QAAA,GAAW,GAAI,CAAA,SAAA,CAAU,SAAS,CAAA,CAAA;AAExC,EAAO,OAAA;AAAA,IACL,IAAA,EAAM,0BAA0B,QAAQ,CAAA;AAAA,IACxC,GAAK,EAAA,IAAA;AAAA,IACL,OAAO,EAAG,CAAA,KAAA;AAAA,IACV,UAAU,EAAG,CAAA,KAAA;AAAA,GACf,CAAA;AACF,CAAA,CAAA;;;ACFA,IAAM,WAAc,GAAA;AAAA;AAAA,EAElB,EAAI,EAAA,CAAA;AAAA;AAAA,EAEJ,KAAO,EAAA,IAAA;AACT,CAAA,CAAA;AAEa,IAAA,gBAAA,GAAmB,OAAO,OAAA,EAAwB,IAO5B,KAAA;AACjC,EAAM,MAAA,IAAA,GAAO,QAAS,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAE9B,EAAQ,OAAA,CAAA,WAAA,GAAc,MAAM,kBAAmB,CAAA;AAAA,IAC7C,IAAA;AAAA,IACA,MAAM,IAAK,CAAA,IAAA;AAAA,IACX,SAAS,EAAC;AAAA;AAAA,IACV,MAAQ,EAAA;AAAA,MACN,GAAG,WAAA;AAAA,MACH,KAAO,EAAA,sCAAA;AAAA,KACT;AAAA,GACF,EAAG,QAAQ,OAAO,CAAA,CAAA;AAElB,EAAA,OAAA,CAAQ,QAAW,GAAA,MAAM,kBAAmB,CAAA,OAAA,EAAS,KAAK,mBAAmB,CAAA,CAAA;AAE7E,EAAM,MAAA,QAAA,GAAW,MAAM,QAAA,CAAS,OAAS,EAAA;AAAA,IACvC,UAAU,IAAK,CAAA,QAAA;AAAA,IACf,YAAY,IAAK,CAAA,UAAA;AAAA,IAEjB,gCAAkC,EAAA,IAAA;AAAA,IAClC,yBAA2B,EAAA,KAAA;AAAA,IAC3B,iBAAmB,EAAA,KAAA;AAAA,IACnB,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAqB,oBAAA,CAAA,IAAA,EAAM,YAAY,QAAQ,CAAA,CAAA;AAC/C,EAAA,MAAM,MAAM,mBAAoB,CAAA,QAAA,EAAU,IAAK,CAAA,QAAA,EAAU,KAAK,QAAQ,CAAA,CAAA;AAEtE,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,OAAS,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,EAAA,MAAM,cAAiB,GAAA,MAAM,YAAa,CAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAC5D,EAAgB,eAAA,CAAA,OAAA,EAAS,gBAAgB,GAAG,CAAA,CAAA;AAE5C,EAAI,IAAA,gBAAA,CAAiB,cAAc,CAAG,EAAA;AACpC,IAAA,OAAO,mBAAmB,OAAS,EAAA;AAAA,MACjC,OAAO,cAAe,CAAA,yBAAA;AAAA,MACtB,QAAA,EAAU,QAAS,CAAA,KAAA,IAAS,IAAK,CAAA,QAAA;AAAA,MACjC,YAAY,IAAK,CAAA,UAAA;AAAA,KAClB,CAAA,CAAA;AAAA,SAES,OAAA,mBAAA,CAAoB,SAAS,cAAgB,EAAA,QAAA,EAAU,KAAK,QAAQ,CAAA,CAAA;AAClF,EAAA;AAEa,IAAA,UAAA,GAAa,OAAO,OAAA,EAAwB,IAOtB,KAAA;AACjC,EAAM,MAAA,IAAA,GAAO,QAAS,CAAA,IAAA,CAAK,GAAG,CAAA,CAAA;AAE9B,EAAQ,OAAA,CAAA,WAAA,GAAc,MAAM,kBAAmB,CAAA;AAAA,IAC7C,IAAA;AAAA,IACA,MAAM,IAAK,CAAA,IAAA;AAAA,IACX,OAAA,EAAS,CAAC,eAAe,CAAA;AAAA,IACzB,MAAQ,EAAA,WAAA;AAAA,GACV,EAAG,QAAQ,OAAO,CAAA,CAAA;AAElB,EAAA,OAAA,CAAQ,QAAW,GAAA,MAAM,kBAAmB,CAAA,OAAA,EAAS,KAAK,mBAAmB,CAAA,CAAA;AAE7E,EAAM,MAAA,QAAA,GAAW,MAAM,QAAA,CAAS,OAAS,EAAA;AAAA,IACvC,UAAU,IAAK,CAAA,QAAA;AAAA,IACf,YAAY,IAAK,CAAA,UAAA;AAAA,IAEjB,gCAAkC,EAAA,KAAA;AAAA,IAClC,yBAA2B,EAAA,IAAA;AAAA,IAC3B,iBAAmB,EAAA,KAAA;AAAA,IACnB,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAqB,oBAAA,CAAA,IAAA,EAAM,SAAS,QAAQ,CAAA,CAAA;AAC5C,EAAA,MAAM,MAAM,mBAAoB,CAAA,QAAA,EAAU,IAAK,CAAA,QAAA,EAAU,KAAK,KAAK,CAAA,CAAA;AAEnE,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,OAAS,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,EAAA,MAAM,cAAiB,GAAA,MAAM,YAAa,CAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAC5D,EAAgB,eAAA,CAAA,OAAA,EAAS,gBAAgB,GAAG,CAAA,CAAA;AAE5C,EAAI,IAAA,gBAAA,CAAiB,cAAc,CAAG,EAAA;AACpC,IAAA,MAAM,IAAI,aAAA,CAAc,cAAgB,EAAA,QAAA,EAAU,KAAK,QAAQ,CAAA,CAAA;AAAA,GACjE;AAEA,EAAA,OAAO,mBAAoB,CAAA,OAAA,EAAS,cAAgB,EAAA,QAAA,EAAU,KAAK,QAAQ,CAAA,CAAA;AAC7E,EAAA;AAEa,IAAA,WAAA,GAAc,OAAO,OAAA,EAAwB,IAKvB,KAAA;AACjC,EAAM,MAAA,EAAA,GAAK,sBAAuB,CAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AACzC,EAAA,MAAM,GAAMJ,GAAAA,MAAAA,CAAM,IAAK,CAAA,YAAA,CAAa,KAAK,GAAG,CAAA,CAAA;AAE5C,EAAA,MAAM,OAAO,CAAC,IAAA,KAA+B,GAAI,CAAA,OAAA,CAAQA,OAAM,IAAK,CAAA,UAAA,CAAW,EAAG,CAAA,IAAI,CAAC,CAAG,EAAA,GAAA,EAAKA,MAAM,CAAA,IAAA,CAAK,cAAc,CAAA,CAAA;AAExH,EAAA,MAAM,IAAO,GAAA;AAAA,IACX,QAAA,EAAU,KAAK,UAAU,CAAA;AAAA,IACzB,KAAA,EAAO,KAAK,OAAO,CAAA;AAAA,GACrB,CAAA;AAEA,EAAQ,OAAA,CAAA,WAAA,GAAc,MAAM,kBAAmB,CAAA;AAAA,IAC7C,MAAM,EAAG,CAAA,GAAA;AAAA,IACT,MAAM,EAAG,CAAA,IAAA;AAAA,IACT,OAAA,EAAS,CAAC,eAAe,CAAA;AAAA,IACzB,MAAQ,EAAA,WAAA;AAAA,GACV,EAAG,QAAQ,OAAO,CAAA,CAAA;AAElB,EAAA,OAAA,CAAQ,QAAW,GAAA,MAAM,kBAAmB,CAAA,OAAA,EAAS,KAAK,mBAAmB,CAAA,CAAA;AAE7E,EAAM,MAAA,QAAA,GAAW,MAAM,QAAA,CAAS,OAAS,EAAA;AAAA,IACvC,UAAU,IAAK,CAAA,QAAA;AAAA,IACf,YAAY,IAAK,CAAA,UAAA;AAAA,IAEjB,gCAAkC,EAAA,IAAA;AAAA,IAClC,yBAA2B,EAAA,KAAA;AAAA,IAC3B,iBAAmB,EAAA,IAAA;AAAA,IACnB,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAqB,oBAAA,CAAA,IAAA,EAAM,SAAS,QAAQ,CAAA,CAAA;AAC5C,EAAA,MAAM,MAAM,mBAAoB,CAAA,QAAA,EAAU,IAAK,CAAA,QAAA,EAAU,KAAK,KAAK,CAAA,CAAA;AAEnE,EAAA,MAAM,SAAY,GAAA,cAAA,CAAe,OAAS,EAAA,QAAA,EAAU,GAAG,CAAA,CAAA;AACvD,EAAA,MAAM,cAAiB,GAAA,MAAM,YAAa,CAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAC5D,EAAgB,eAAA,CAAA,OAAA,EAAS,gBAAgB,GAAG,CAAA,CAAA;AAE5C,EAAI,IAAA,gBAAA,CAAiB,cAAc,CAAG,EAAA;AACpC,IAAA,OAAO,mBAAmB,OAAS,EAAA;AAAA,MACjC,OAAO,cAAe,CAAA,yBAAA;AAAA,MACtB,QAAA,EAAU,QAAS,CAAA,KAAA,IAAS,IAAK,CAAA,QAAA;AAAA,MACjC,YAAY,IAAK,CAAA,UAAA;AAAA,KAClB,CAAA,CAAA;AAAA,SAES,OAAA,mBAAA,CAAoB,SAAS,cAAgB,EAAA,QAAA,EAAU,KAAK,QAAQ,CAAA,CAAA;AAClF,EAAA;AAEA,IAAM,kBAAA,GAAqB,CAAC,OAAA,EAAwB,IAIjB,KAAA;AAGjC,EAAA,OAAO,WAAW,OAAS,EAAA;AAAA,IACzB,GAAA,EAAK,QAAQ,WAAY,CAAA,GAAA;AAAA,IACzB,IAAA,EAAM,QAAQ,WAAY,CAAA,WAAA;AAAA,IAC1B,UAAU,IAAK,CAAA,QAAA;AAAA,IACf,OAAO,IAAK,CAAA,KAAA;AAAA,IACZ,YAAY,IAAK,CAAA,UAAA;AAAA,IACjB,mBAAA,EAAqB,QAAQ,QAAS,CAAA,mBAAA;AAAA,GACvC,CAAA,CAAA;AACH,CAAA,CAAA;AAOA,IAAM,mBAAsB,GAAA,CAAC,QAAe,EAAA,QAAA,EAAkB,GAAgB,KAAA;AAC5E,EAAM,MAAA,IAAA,GAAOA,OAAM,EAAG,CAAA,MAAA,CAAO,QAC1B,CAAA,MAAA,CAAO,QAAS,CAAA,IAAA,IAAQ,EAAE,CAAA,CAC1B,OAAOA,MAAM,CAAA,IAAA,CAAK,WAAW,GAAG,CAAC,EACjC,MAAO,EAAA,CACP,KAAM,EAAA,CACN,WAAY,EAAA,CAAA;AAEf,EAAA,OAAOA,MAAM,CAAA,IAAA,CAAK,YAAa,CAAA,QAAA,GAAW,IAAI,CAAA,CAAA;AAChD,CAAA,CAAA;AAEA,IAAM,oBAAuB,GAAA,CAAC,IAA+D,EAAA,WAAA,EAAmC,QAAwB,KAAA;AACtJ,EAAI,IAAA,QAAA,CAAS,gBAAgB,CAAG,EAAA;AAC9B,IAAK,IAAA,CAAA,QAAA,GAAW,IAAK,CAAA,QAAA,CAAS,WAAY,EAAA,CAAA;AAAA,GAC5C;AAEA,EAAI,IAAA,QAAA,CAAS,gBAAgB,CAAG,EAAA;AAC9B,IAAA,IAAA,CAAK,WAAW,CAAA,GAAI,IAAK,CAAA,WAAW,EAAG,WAAY,EAAA,CAAA;AAAA,GACrD;AACF,CAAA,CAAA;AAWA,IAAM,cAAiB,GAAA,CAAC,OAAwB,EAAA,QAAA,EAAe,GAA6C,KAAA;AAC1G,EAAA,MAAM,KAAKA,MAAM,CAAA,IAAA,CAAK,YAAa,CAAA,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAA;AAE5D,EAAI,IAAA;AACF,IAAM,MAAA,KAAA,GAAQA,MAAM,CAAA,IAAA,CAAK,UAAW,CAAA,GAAA,CAAI,QAAQ,QAAS,CAAA,SAAA,EAAW,GAAK,EAAA,EAAE,CAAC,CAAA,CAAA;AAG5E,IAAA,MAAM,WAAc,GAAA,IAAI,KAAM,CAAA,KAAA,CAAM,MAAM,CAAA,CAAA;AAC1C,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,KAAM,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACxC,MAAI,IAAA,CAAA,GAAI,MAAM,CAAG,EAAA;AACf,QAAA,WAAA,CAAY,IAAK,CAAA,KAAA,CAAM,MAAO,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,OAClC;AAAA,KACF;AAEA,IAAA,MAAM,WAAWA,MAAM,CAAA,IAAA,CAAK,WAAW,WAAY,CAAA,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAC3D,IAAA,OAAO,GAAI,CAAA,OAAA,CAAQ,QAAU,EAAA,GAAA,EAAK,EAAE,CAAA,CAAA;AAAA,GAEhC,CAAA,MAAA;AACJ,IAAA,MAAM,IAAI,mBAAoB,EAAA,CAAA;AAAA,GAChC;AACF,CAAA,CAAA;AAEA,IAAM,eAAkB,GAAA,CAAC,OAAwB,EAAA,cAAA,EAAqB,GAA2C,KAAA;AAC/G,EAAA,MAAM,KAAKA,MAAM,CAAA,IAAA,CAAK,YAAa,CAAA,OAAA,CAAQ,YAAY,KAAK,CAAA,CAAA;AAC5D,EAAA,MAAM,mBAAmB,GAAI,CAAA,OAAA,CAAQ,cAAe,CAAA,GAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AAChE,EAAA,MAAM,UAAU,gBAAiB,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,IAAI,CAAC,IAAA,KAAS,MAAO,CAAA,YAAA,CAAa,SAAS,IAAI,CAAC,CAAC,CAAA,CAAE,KAAK,EAAE,CAAA,CAAA;AAEtG,EAAA,OAAA,CAAQ,YAAY,MAAS,GAAA,OAAA,CAAA;AAC/B,CAAA,CAAA;AAEA,IAAM,gBAAmB,GAAA,CAAC,cAAiC,KAAA,OAAA,CAAQ,eAAe,iBAAiB,CAAA,CAAA;AAE5F,IAAM,mBAAsB,GAAA,OAAO,OAAwB,EAAA,cAAA,EAAqB,UAAe,eAA0D,KAAA;AAC9J,EAAQ,OAAA,CAAA,IAAA,GAAO,MAAM,cAAA,CAAe,OAAO,CAAA,CAAA;AAE3C,EAAO,OAAA;AAAA,IACL,OAAO,cAAe,CAAA,yBAAA;AAAA,IACtB,QAAA,EAAU,SAAS,KAAS,IAAA,eAAA;AAAA,IAC5B,IAAA,EAAM,QAAQ,WAAY,CAAA,WAAA;AAAA,IAC1B,GAAA,EAAK,QAAQ,WAAY,CAAA,GAAA;AAAA,IACzB,mBAAA,EAAqB,QAAQ,QAAS,CAAA,mBAAA;AAAA,GACxC,CAAA;AACF,EAAA;;;AChQO,IAAM,uBAIT,GAAA,CACF,QACA,EAAA,OAAA,EACA,SACS,KAAA;AACT,EAAA,IACE,SAAS,IAAS,KAAA,gBAAA,CAAiB,aACnC,QAAS,CAAA,IAAA,KAAS,iBAAiB,eACnC,EAAA;AACA,IAAA,QAAA,CAAS,eAAkB,GAAA,OAAA,CAAA;AAAA,GAExB,MAAA;AACH,IAAA,QAAA,CAAS,eAAkB,GAAA,OAAA,CAAA;AAC3B,IAAA,QAAA,CAAS,eAAkB,GAAA,SAAA,CAAA;AAAA,GAC7B;AAEA,EAAS,QAAA,CAAA,QAAA,GAAW,OAAO,OAAY,KAAA,WAAA,CAAA;AACvC,EAAA,QAAA,CAAS,UAAa,GAAA,QAAA,CAAS,QAAW,mBAAA,IAAI,MAAS,GAAA,KAAA,CAAA,CAAA;AACzD,EAAA;;;ACXa,IAAA,cAAA,GAAiB,CAAC,OAAA,EAAwBK,UAAsB,EAAA;AAAA,EAC3E,6BAAgC,GAAA,KAAA;AAAA,EAChC,sBAAsBA,UAAU,CAAA,mBAAA;AAAA,EAChC,kBAAqB,GAAA,IAAA;AACvB,CAAY,KAAA;AACV,EAAA,MAAM,UAAUA,UAAU,CAAA,OAAA,CAAA;AAE1B,EAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,IAAA,KAAA,MAAW,WAAW,OAAS,EAAA;AAC7B,MAAA,IAAI,OAAQ,CAAA,EAAA,KAAO,QAAY,IAAA,OAAA,CAAQ,QAAU,EAAA;AAC/C,QAAA,OAAA,CAAQ,QAAW,GAAA,KAAA,CAAA;AAAA,OACrB;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,CAAC,kBAAoB,EAAA;AACvB,IAAA,KAAA,MAAW,WAAW,OAAS,EAAA;AAC7B,MACE,IAAA,OAAA,CAAQ,OAAO,QACf,IAAA,OAAA,CAAQ,aAAa,KACrB,IAAA,CAAC,QAAQ,QACT,IAAA;AAAA;AAAA,QACE,CAAA;AAAA;AAAA;AAAA;AAAA,QAGA,CAAA;AAAA;AAAA,QACA,CAAA;AAAA;AAAA,OACA,CAAA,QAAA,CAAS,OAAQ,CAAA,IAAI,CACvB,EAAA;AACA,QAAA,OAAA,CAAQ,QAAW,GAAA,KAAA,CAAA;AAAA,OACrB;AAAA,KACF;AAAA,GACF;AAEA,EAAI,IAAA,mBAAA,IAAuB,CAAC,6BAA+B,EAAA;AACzD,IAAA,IAAI,sBAAyB,GAAA,IAAA,CAAA;AAC7B,IAAA,OAAO,sBAAwB,EAAA;AAC7B,MAAyB,sBAAA,GAAA,wCAAA,CAAyC,SAAS,OAAO,CAAA,CAAA;AAAA,KACpF;AAAA,GACF;AAIA,EAAAA,UAAAA,CAAU,UAAU,OAAQ,CAAA,MAAA,CAAO,CAAC,YAAiB,KAAA,YAAA,CAAa,aAAa,KAAK,CAAA,CAAA;AAGpF,EAAA,KAAA,MAAW,WAAW,OAAS,EAAA;AAC7B,IAAA,OAAO,OAAQ,CAAA,QAAA,CAAA;AAAA,GACjB;AACF,EAAA;AAEA,IAAM,wBAAA,GAA2B,CAAC,OAAA,EAAwB,UAAuC,KAAA;AAC/F,EAAM,MAAA,YAAA,GAAe,QAAQ,QAAS,CAAA,YAAA,CAAA;AAEtC,EAAA,MAAM,kBAAqB,GAAA,IAAA,CAAK,KAAM,CAAA,UAAA,CAAW,gBAAgB,YAAY,CAAA,CAAA;AAC7E,EAAA,IAAI,gBAAmB,GAAA,UAAA,CAAW,aAAgB,GAAA,UAAA,CAAW,WAAc,GAAA,CAAA,CAAA;AAE3E,EAAA,IAAI,IAAK,CAAA,KAAA,CAAM,gBAAmB,GAAA,YAAY,MAAM,kBAAoB,EAAA;AACtE,IAAmB,gBAAA,GAAA,kBAAA,GAAqB,eAAe,YAAe,GAAA,CAAA,CAAA;AAAA,GACxE;AAEA,EAAO,OAAA,gBAAA,CAAA;AACT,CAAA,CAAA;AAEA,IAAM,6BAAgC,GAAA,CACpC,OACA,EAAA,SAAA,EACA,YACA,aACG,KAAA;AACH,EAAM,MAAA,mBAAA,GAAsB,CAAC,UAAU,CAAA,CAAA;AAEvC,EAAA,MAAM,qBAAqB,SAAU,CAAA,aAAA,CAAA;AACrC,EAAM,MAAA,gBAAA,GAAmB,wBAAyB,CAAA,OAAA,EAAS,SAAS,CAAA,CAAA;AAEpE,EAAA,KAAA,IAAS,oBAAuB,GAAA,kBAAA,EAAoB,oBAAwB,IAAA,gBAAA,EAAkB,oBAAwB,EAAA,EAAA;AACpH,IAAM,MAAA,cAAA,GAAiB,cAAc,oBAAoB,CAAA,CAAA;AAEzD,IAAI,IAAA,OAAO,mBAAmB,WAAa,EAAA;AACzC,MACE,IAAA,cAAA,KAAmB,cACnB,CAAC,mBAAA,CAAoB,SAAS,cAAc,CAAA,EACxB,mBAAA,CAAA,IAAA,CAAK,cAAc,CAAA,CAAA;AAAA,KAC3C;AAAA,GACF;AAEA,EAAO,OAAA,mBAAA,CAAA;AACT,CAAA,CAAA;AAEA,IAAM,wCAAA,GAA2C,CAAC,OAAA,EAAwB,OAA2B,KAAA;AAEnG,EAAA,MAAM,uBAAiD,EAAC,CAAA;AAExD,EAAA,KAAA,IAAS,UAAa,GAAA,CAAA,EAAG,UAAa,GAAA,OAAA,CAAQ,QAAQ,UAAc,EAAA,EAAA;AAClE,IAAM,MAAA,YAAA,GAAe,QAAQ,UAAU,CAAA,CAAA;AAEvC,IAAI,IAAA,EAAE,aAAa,UAAc,IAAA,oBAAA,CAAA,uBAA4C,YAAa,CAAA,UAAU,IAAI,EAAC,CAAA;AACzG,IAAM,MAAA,aAAA,GAAgB,oBAAqB,CAAA,YAAA,CAAa,UAAU,CAAA,CAAA;AAElE,IAAA,MAAM,qBAAqB,YAAa,CAAA,aAAA,CAAA;AACxC,IAAM,MAAA,gBAAA,GAAmB,wBAAyB,CAAA,OAAA,EAAS,YAAY,CAAA,CAAA;AAEvE,IAAI,IAAA,YAAA,CAAa,aAAa,KAAO,EAAA;AACnC,MAAA,KAAA,IAAS,oBAAuB,GAAA,kBAAA,EAAoB,oBAAwB,IAAA,gBAAA,EAAkB,oBAAwB,EAAA,EAAA;AACpH,QAAA,IAAI,OAAO,aAAA,CAAc,oBAAoB,CAAA,KAAM,WAAa,EAAA;AAC9D,UAAA,aAAA,CAAc,oBAAoB,CAAI,GAAA,UAAA,CAAA;AAAA,SAEnC,MAAA;AACH,UAAA,MAAM,0BAA6B,GAAA,6BAAA;AAAA,YACjC,OAAA;AAAA,YACA,YAAA;AAAA,YACA,UAAA;AAAA,YACA,aAAA;AAAA,WACF,CAAA;AAEA,UAAA,IAAI,mBAAsB,GAAA,KAAA,CAAA;AAC1B,UAAA,IAAI,iBAAoB,GAAA,KAAA,CAAA;AAExB,UAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,0BAAA,CAA2B,QAAQ,CAAK,EAAA,EAAA;AAC1D,YAAA,MAAM,iBAAoB,GAAA,OAAA,CAAQ,0BAA2B,CAAA,CAAC,CAAC,CAAA,CAAA;AAE/D,YAAA,IAAI,CAAC,iBAAmB,EAAA;AACtB,cAAA,iBAAA,GAAoB,EAAE,iBAAA,CAAkB,EAAO,KAAA,QAAA,IAAY,iBAAkB,CAAA,QAAA,CAAA,CAAA;AAAA,aAC/E;AAEA,YAAA,IAAI,CAAC,mBAAqB,EAAA;AACxB,cAAsB,mBAAA,GAAA,iBAAA,CAAkB,EAAO,KAAA,QAAA,IAAY,iBAAkB,CAAA,QAAA,CAAA;AAAA,aAC/E;AAAA,WACF;AAEA,UAAA,IAAI,qBAAqB,mBAAqB,EAAA;AAC5C,YAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,0BAAA,CAA2B,QAAQ,CAAK,EAAA,EAAA;AAC1D,cAAA,MAAM,iBAAoB,GAAA,OAAA,CAAQ,0BAA2B,CAAA,CAAC,CAAC,CAAA,CAAA;AAE/D,cAAA,IAAI,iBAAqB,IAAA,iBAAA,CAAkB,EAAO,KAAA,QAAA,IAAY,kBAAkB,QAAU,EAAA;AACxF,gBAAA,iBAAA,CAAkB,QAAW,GAAA,KAAA,CAAA;AAC7B,gBAAO,OAAA,IAAA,CAAA;AAAA,eACT;AAAA,aACF;AAAA,WACF;AAEA,UAAA,MAAA;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA,CAAA;;;AC/Ja,IAAA,QAAA,GAAW,OAAO,OAA0C,KAAA;AACvE,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,UAAY,EAAA;AAAA,IACjD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,QAAS,EAAA;AAAA,GAC7C,CAAA,CAAA;AAED,EAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AACrB,EAAA;;;ACFO,IAAM,wBAAwB,CAAC,OAAA,EAAwB,QAAW,GAAA,CAAA,GAAI,KAAK,GAAe,KAAA;AAC/F,EAAA,qBAAA,CAAsB,OAAO,CAAA,CAAA;AAC7B,EAAA,OAAA,CAAQ,WAAW,WAAY,CAAA,MAAM,QAAS,CAAA,OAAO,GAAG,QAAQ,CAAA,CAAA;AAClE,EAAA;AAEa,IAAA,qBAAA,GAAwB,CAAC,OAAiC,KAAA;AACrE,EAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,IAAA,aAAA,CAAc,QAAQ,QAAQ,CAAA,CAAA;AAC9B,IAAA,OAAA,CAAQ,QAAW,GAAA,IAAA,CAAA;AAAA,GACrB;AACF,EAAA;;;ACXO,IAAM,QAAN,MAAY;AAAA,EACT,QAAqB,EAAC,CAAA;AAAA,EACtB,cAA0B,GAAA,KAAA,CAAA;AAAA,EAE3B,KAAwB,OAAuC,EAAA;AACpE,IAAA,OAAO,IAAI,OAAA,CAAW,CAAC,OAAA,EAAS,MAAW,KAAA;AACzC,MAAA,IAAA,CAAK,MAAM,IAAK,CAAA;AAAA,QACd,OAAA;AAAA,QACA,OAAA;AAAA,QACA,MAAA;AAAA,OACD,CAAA,CAAA;AAGD,MAAI,IAAA,CAAC,KAAK,cAAgB,EAAA;AACxB,QAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AAAA,OACf;AAAA,KACD,CAAA,CAAA;AAAA,GACH;AAAA,EAEQ,OAAU,GAAA;AAChB,IAAI,IAAA,IAAA,CAAK,gBAAuB,OAAA,KAAA,CAAA;AAEhC,IAAM,MAAA,IAAA,GAAO,IAAK,CAAA,KAAA,CAAM,KAAM,EAAA,CAAA;AAC9B,IAAI,IAAA,CAAC,MAAa,OAAA,KAAA,CAAA;AAElB,IAAA,IAAA,CAAK,cAAiB,GAAA,IAAA,CAAA;AAEtB,IAAA,IAAA,CAAK,OAAQ,EAAA,CACV,IAAK,CAAA,CAAC,KAAU,KAAA;AACf,MAAA,IAAA,CAAK,QAAQ,KAAK,CAAA,CAAA;AAClB,MAAA,IAAA,CAAK,cAAiB,GAAA,KAAA,CAAA;AACtB,MAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AAAA,KACd,CAAA,CACA,KAAM,CAAA,CAAC,GAAQ,KAAA;AACd,MAAA,IAAA,CAAK,OAAO,GAAG,CAAA,CAAA;AACf,MAAA,IAAA,CAAK,cAAiB,GAAA,KAAA,CAAA;AACtB,MAAA,IAAA,CAAK,OAAQ,EAAA,CAAA;AAAA,KACd,CAAA,CAAA;AAEH,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACF,CAAA,CAAA;;;AC3Ca,IAAA,mBAAA,GAAsB,CAAC,OAAA,GAAmBC,cAAkC,KAAA;AACvF,EAAO,OAAA;AAAA;AAAA,IAEL,WAAa,EAAA,IAAA;AAAA;AAAA,IAEb,QAAU,EAAA,IAAA;AAAA;AAAA,IAEV,IAAM,EAAA,IAAA;AAAA,IAEN,KAAA,EAAO,IAAI,KAAM,EAAA;AAAA,IACjB,OAAA;AAAA,IAEA,QAAU,EAAA,IAAA;AAAA,GACZ,CAAA;AACF,EAAA;;;ACVO,IAAM,UAAA,GAAa,CAAC,IAAuB,KAAA;AAChD,EAAA,OAAO,KAAK,OAAQ,EAAA,GAAI,IAAK,CAAA,iBAAA,KAAsB,EAAK,GAAA,GAAA,CAAA;AAC1D,CAAA,CAAA;AAEO,IAAM,UAAA,GAAa,CAAC,IAAqB,KAAA;AAC9C,EAAA,OAAO,IAAI,IAAA,CAAK,UAAW,CAAA,IAAI,CAAC,CAAA,CAAA;AAClC,CAAA,CAAA;;;ACZa,IAAA,qBAAA,GAAwB,CAAC,eAAA,EAAuB,QAA2B,KAAA;AACtF,EAAA,MAAM,QAAW,GAAA,IAAA,CAAK,KAAO,CAAA,CAAA,UAAA,CAAW,eAAe,CAAA,GAAI,UAAW,CAAA,QAAQ,CAAM,KAAA,GAAA,GAAO,EAAK,GAAA,EAAA,GAAK,EAAG,CAAA,CAAA,CAAA;AACxG,EAAA,OAAO,CAAI,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,GAAW,CAAC,CAAA,CAAA;AACpC,EAAA;;;ACCO,IAAM,aAAA,GAAgB,CAACC,QAAAA,EAAc,OAAoC,KAAA;AAC9E,EAAA,MAAM,cAAcA,QAAQ,CAAA,YAAA,CAAA;AAC5B,EAAI,IAAA,SAAA,CAAA;AAEJ,EAAA,IAAI,OAAQ,CAAA,QAAA,CAAS,OAAQ,CAAA,CAAC,KAAK,IAAM,EAAA;AACvC,IAAA,SAAA,GAAYA,QAAQ,CAAA,IAAA,EAAM,KAAM,CAAA,CAAA,CAAE,CAAC,CAAG,EAAA,SAAA,CAAA;AAAA,GACxC;AAEA,EAAO,OAAA;AAAA,IACL,OAAS,EAAA;AAAA,MACP,WAAY,CAAA,QAAA;AAAA,MACZ,WAAY,CAAA,QAAA;AAAA,MACZ,WAAY,CAAA,QAAA;AAAA,MACZ,WAAY,CAAA,QAAA;AAAA,KACd;AAAA,IAEA,YAAY,WAAY,CAAA,UAAA;AAAA,IACxB,UAAU,WAAY,CAAA,QAAA;AAAA,IACtB,SAAS,WAAY,CAAA,IAAA;AAAA,IACrB,MAAM,WAAY,CAAA,KAAA;AAAA,IAElB,OAAO,WAAY,CAAA,KAAA;AAAA,IACnB,OAAO,CAAI,CAAA,EAAA,WAAA,CAAY,YAAY,CAAA,EAAG,YAAY,iBAAiB,CAAA,CAAA;AAAA,IAEnE,KAAK,WAAY,CAAA,SAAA;AAAA,IACjB,SAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;AC7Ba,IAAA,OAAA,GAAU,OAAO,OAA6C,KAAA;AACzE,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,gBAAkB,EAAA;AAAA,IACvD,WAAa,EAAA;AAAA,MACX,QAAQ,WAAY,CAAA,OAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMtB;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,aAAc,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AACrD,EAAA;;;ACfa,IAAA,oBAAA,GAAuB,OAAO,OAAA,EAAwB,YAAwC,KAAA;AACzG,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,uBAAyB,EAAA;AAAA,IAC9D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,eAAe,CAAC;AAAA,QACd,GAAG,WAAY,CAAA,QAAA;AAAA,QACf,GAAA,EAAK,EAAE,CAAA,EAAG,YAAa,EAAA;AAAA,OACxB,CAAA;AAAA,KACH;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AACrB,EAAA;;;ACbO,IAAM,gBAAmB,GAAA,OAAO,OAAwB,EAAA,YAAA,EAAsB,IAAiC,KAAA;AACpH,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,oBAAsB,EAAA;AAAA,IAC3D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,UAAU,CAAC;AAAA,QACT,GAAG,WAAY,CAAA,YAAA;AAAA,QACf,OAAS,EAAA,IAAA;AAAA,QACT,CAAG,EAAA,YAAA;AAAA,OACJ,CAAA;AAAA,KACH;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AACrB,EAAA;;;ACbA,IAAI,EAAK,GAAA,CAAA,GAAA,CAAA;AAEF,IAAM,iBAAiB,MAAc;AAC1C,EAAM,EAAA,IAAA,CAAA,CAAA;AACN,EAAO,OAAA,EAAA,CAAA;AACT,CAAA,CAAA;;;ACJO,IAAM,gBAAN,MAAoB;AAAA,EAQlB,WACG,CAAA,OAAA,EACD,YACP,EAAA,IAAA,EACO,QACP,EAAA;AAJQ,IAAA,IAAA,CAAA,OAAA,GAAA,OAAA,CAAA;AACD,IAAA,IAAA,CAAA,YAAA,GAAA,YAAA,CAAA;AAEA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA,CAAA;AAEP,IAAA,OAAA,CAAQ,WAAY,CAAA,KAAA,EAAA,CAAA;AAEpB,IAAA,MAAM,EAAE,EAAA,EAAI,GAAI,EAAA,GAAI,QAAQ,OAAO,CAAA,CAAA;AACnC,IAAK,IAAA,CAAA,KAAA,GAAQ,IAAI,OAAQ,CAAA,OAAA,CAAQ,YAAY,KAAM,CAAA,QAAA,EAAY,EAAA,GAAA,EAAK,EAAE,CAAA,CAAA;AAEtE,IAAM,MAAA,IAAA,GAAO,IAAI,QAAS,EAAA,CAAA;AAC1B,IAAK,IAAA,CAAA,MAAA,CAAO,aAAe,EAAA,IAAA,CAAK,KAAK,CAAA,CAAA;AACrC,IAAA,IAAA,CAAK,OAAO,eAAiB,EAAA,OAAA,CAAQ,WAAY,CAAA,EAAA,CAAG,UAAU,CAAA,CAAA;AAC9D,IAAK,IAAA,CAAA,MAAA,CAAO,cAAc,YAAY,CAAA,CAAA;AACtC,IAAK,IAAA,CAAA,MAAA,CAAO,WAAa,EAAA,IAAA,CAAK,EAAE,CAAA,CAAA;AAChC,IAAK,IAAA,CAAA,MAAA,CAAO,OAAO,EAAE,CAAA,CAAA;AAErB,IAAK,IAAA,CAAA,MAAA,CAAO,SAAW,EAAA,IAAA,EAAM,QAAQ,CAAA,CAAA;AAErC,IAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACZ,IAAK,IAAA,CAAA,GAAA,GAAM,OAAQ,CAAA,WAAA,CAAY,GAAM,GAAA,CAAA,mBAAA,EAAsB,OAAQ,CAAA,WAAA,CAAY,WAAW,CAAA,CAAA,EAAI,OAAQ,CAAA,WAAA,CAAY,EAAE,CAAA,CAAA,CAAA;AACpH,IAAA,IAAA,CAAK,QAAQ,qBAAqB,CAAA,GAAI,CAAyB,sBAAA,EAAA,SAAA,CAAU,QAAQ,CAAC,CAAA,CAAA,CAAA,CAAA;AAAA,GACpF;AAAA,EA9BO,KAAA,CAAA;AAAA,EACA,EAAK,GAAA,CAAA,YAAA,EAAe,IAAK,CAAA,GAAA,EAAK,CAAA,CAAA,CAAA;AAAA,EAE7B,GAAA,CAAA;AAAA,EACA,IAAA,CAAA;AAAA,EACA,UAAkC,EAAC,CAAA;AAAA,EA2B3C,MAAa,IAAuB,GAAA;AAGlC,IAAA,MAAM,WAAW,MAAM,IAAI,SAAS,IAAK,CAAA,IAAI,EAAE,IAAK,EAAA,CAAA;AACpD,IAAA,IAAA,CAAK,OAAQ,CAAA,cAAc,CAAI,GAAA,CAAA,8BAAA,EAAiC,QAC7D,CAAA,KAAA,CAAM,IAAI,CAAA,CAAE,CAAC,CAAA,CACb,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA,CAAA;AAEX,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AAEZ,IAAA,OAAO,UAAU,CAAG,EAAA;AAClB,MAAA,MAAM,QAAW,GAAA,MAAM,IAAK,CAAA,OAAA,CAAQ,OAAQ,CAAA;AAAA,QAC1C,GAAK,EAAA,IAAI,GAAI,CAAA,IAAA,CAAK,GAAG,CAAA;AAAA,QACrB,MAAQ,EAAA,MAAA;AAAA,QACR,OAAS,EAAA,QAAA;AAAA,QACT,SAAS,IAAK,CAAA,OAAA;AAAA,OACf,CAAA,CAAA;AAED,MAAA,MAAM,IAAO,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AACxC,MAAA,KAAA,GAAQ,IAAK,CAAA,IAAA,CAAA;AAAA,KACf;AAGA,IAAA,IAAA,CAAK,QAAQ,WAAY,CAAA,KAAA,EAAA,CAAA;AAEzB,IAAI,IAAA,KAAA,KAAU,CAAK,IAAA,KAAA,KAAU,CAAG,EAAA;AAC9B,MAAA,MAAM,IAAI,iBAAkB,EAAA,CAAA;AAAA,KAC9B;AAAA,GACF;AACF,CAAA,CAAA;;;AC7DO,IAAM,oBAAuB,GAAA,OAAO,OAAwB,EAAA,YAAA,EAAsB,MAAoB,QAAoC,KAAA;AAI/I,EAAM,MAAA,QAAA,GAA+B,IAAK,CAAA,IAAA,IAAQ,IAAK,CAAA,UAAA,CAAA;AACvD,EAAM,MAAA,WAAA,GAAc,OAAQ,CAAA,IAAA,CAAK,cAAe,CAAA,2BAAA,CAAA;AAChD,EAAA,IAAI,OAAO,QAAA,KAAa,QAAY,IAAA,QAAA,GAAW,WAAa,EAAA;AAC1D,IAAM,MAAA,IAAI,gBAAgB,WAAW,CAAA,CAAA;AAAA,GACvC;AAGA,EAAA,MAAM,aAAa,IAAI,aAAA,CAAc,OAAS,EAAA,uBAAA,EAAyB,MAAM,QAAQ,CAAA,CAAA;AACrF,EAAA,MAAM,WAAW,IAAK,EAAA,CAAA;AAGtB,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,uBAAyB,EAAA;AAAA,IAC9D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,eAAe,CAAC;AAAA,QACd,GAAG,WAAY,CAAA,QAAA;AAAA,QACf,GAAG,YAAa,CAAA,IAAA;AAAA,QAChB,CAAG,EAAA,QAAA;AAAA,QACH,GAAG,cAAe,EAAA;AAAA,QAClB,WAAW,UAAW,CAAA,EAAA;AAAA,QACtB,GAAA,EAAK,EAAE,CAAA,EAAG,YAAa,EAAA;AAAA,OACxB,CAAA;AAAA,KACH;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AACrB,EAAA;;;ACnCO,IAAM,aAAA,GAAgB,CAAC,OAA0B,KAAA;AACtD,EAAO,OAAA;AAAA,IACL,IAAI,OAAQ,CAAA,CAAA;AAAA,IACZ,MAAM,OAAQ,CAAA,CAAA;AAAA,IACd,QAAA,EAAU,QAAQ,gBAAoB,IAAA,KAAA;AAAA,GACxC,CAAA;AACF,CAAA,CAAA;;;ACLO,IAAM,qBAAA,GAAwB,CAAC,KAAiC,MAAA;AAAA,EACrE,IAAI,KAAM,CAAA,CAAA;AAAA,EACV,MAAM,KAAM,CAAA,CAAA;AAAA,EACZ,OAAS,EAAA,aAAA,CAAc,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AACxC,CAAA,CAAA,CAAA;;;ACDO,IAAM,gBAAA,GAAmB,CAAC,UAAA,EAAiB,OAAuC,KAAA;AACvF,EAAO,OAAA;AAAA,IACL,IAAI,UAAW,CAAA,CAAA;AAAA,IACf,OAAS,EAAA,aAAA,CAAc,UAAW,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC3C,WAAA,EAAa,WAAW,UAAW,CAAA,CAAA;AAAA,IACnC,iBAAiB,UAAW,CAAA,WAAA;AAAA,IAC5B,MAAM,UAAW,CAAA,OAAA;AAAA,IACjB,QAAU,EAAA,iBAAA,CAAkB,UAAW,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,IAC/C,WAAA,EAAa,UAAW,CAAA,gBAAA,CAAiB,CAAE,CAAA,GAAA,CAAI,CAAC,UAAoB,KAAA,gBAAA,CAAiB,UAAY,EAAA,OAAO,CAAC,CAAA;AAAA,IACzG,YAAY,UAAW,CAAA,gBAAA;AAAA,IACvB,QAAQ,UAAW,CAAA,KAAA;AAAA,IACnB,MAAA,EAAQ,WAAW,WAAY,CAAA,CAAA,CAAE,IAAI,CAAC,KAAA,KAAe,qBAAsB,CAAA,KAAK,CAAC,CAAA;AAAA,IACjF,MAAQ,EAAA;AAAA,MACN,IAAA,EAAM,UAAW,CAAA,UAAA,IAAc,oBAAqB,CAAA,IAAA;AAAA,MACpD,SAAA,EAAW,WAAW,SAAa,IAAA,KAAA;AAAA,MACnC,UAAU,UAAW,CAAA,aAAA,IAAiB,iBAAiB,UAAW,CAAA,aAAA,CAAc,GAAG,OAAO,CAAA;AAAA,KAC5F;AAAA,IACA,UAAA,EAAY,UAAW,CAAA,cAAA,EAAgB,CAAE,CAAA,CAAA;AAAA,GAC3C,CAAA;AACF,CAAA,CAAA;;;ACpBO,IAAM,gBAAmB,GAAA,OAAO,OAAwB,EAAA,GAAA,EAAkB,YAAoB,mBAA+C,KAAA;AAClJ,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,mBAAqB,EAAA;AAAA,IAC1D,WAAA,EAAa,EAAE,MAAA,EAAQ,GAAI,EAAA;AAAA,IAC3B,OAAS,EAAA;AAAA,MACP,OAAS,EAAA;AAAA,QACP,EAAI,EAAA,CAAA;AAAA,QACJ,CAAA,EAAG,OAAO,mBAAA,KAAwB,QAAW,GAAA,CAAA,CAAA,EAAI,UAAU,CAAK,EAAA,EAAA,mBAAmB,CAAM,CAAA,CAAA,GAAA,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,CAAA;AAAA,OACzG;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,SAAS,IAAK,CAAA,OAAA,CAAA;AACvB,CAAA,CAAA;AAEO,IAAM,qBAAwB,GAAA,OAAO,OAAwB,EAAA,GAAA,EAAkB,WAAiB,OAAgC,KAAA;AACrI,EAAA,SAAA,GAAY,WAAW,SAAS,CAAA,CAAA;AAChC,EAAA,OAAA,GAAU,WAAW,OAAO,CAAA,CAAA;AAE5B,EAAA,MAAM,eAAkB,GAAA,qBAAA,CAAsB,SAAW,EAAA,OAAA,CAAQ,SAAS,WAAW,CAAA,CAAA;AACrF,EAAA,MAAM,aAAgB,GAAA,qBAAA,CAAsB,OAAS,EAAA,OAAA,CAAQ,SAAS,WAAW,CAAA,CAAA;AAEjF,EAAA,OAAO,gBAAiB,CAAA,OAAA,EAAS,GAAK,EAAA,eAAA,EAAiB,aAAa,CAAA,CAAA;AACtE,CAAA,CAAA;;;ACxBA,IAAM,OAAA,GAAU,CAAC,OAAA,EAAwB,IAAiC,KAAA;AACxE,EAAO,OAAA,IAAA,CAAK,mBAAmB,CAAE,CAAA,GAAA,CAAI,CAAC,QAAkB,KAAA,gBAAA,CAAiB,QAAU,EAAA,OAAO,CAAC,CAAA,CAAA;AAC7F,CAAA,CAAA;AAEO,IAAM,mBAAsB,GAAA,OAAO,OAAwB,EAAA,UAAA,EAAoB,mBAA6D,KAAA;AACjJ,EAAA,MAAM,QAAQ,MAAM,gBAAA,CAAiB,SAAS,WAAY,CAAA,WAAA,EAAa,YAAY,mBAAmB,CAAA,CAAA;AACtG,EAAO,OAAA,OAAA,CAAQ,SAAS,KAAK,CAAA,CAAA;AAC/B,EAAA;AAEO,IAAM,wBAA2B,GAAA,OAAO,OAAwB,EAAA,SAAA,EAAiB,OAA8C,KAAA;AACpI,EAAA,MAAM,QAAQ,MAAM,qBAAA,CAAsB,SAAS,WAAY,CAAA,WAAA,EAAa,WAAW,OAAO,CAAA,CAAA;AAE9F,EAAA,OAAO,OAAQ,CAAA,OAAA,EAAS,KAAK,CAAA,CAAE,MAAO,CAAA,CAAC,QAAa,KAAA,SAAA,IAAa,QAAS,CAAA,QAAA,IAAY,QAAS,CAAA,QAAA,IAAY,OAAO,CAAA,CAAA;AACpH,EAAA;;;ACdO,IAAM,qBAAwB,GAAA,OAAO,OAAwB,EAAA,OAAA,EAAiC,KAA8B,KAAA;AACjI,EAAI,IAAA,OAAA,CAAA;AAEJ,EAAA,QAAQ,OAAS;AAAA,IACf,KAAK,iBAAkB,CAAA,SAAA;AACrB,MAAU,OAAA,GAAA;AAAA,QACR,QAAU,EAAA,OAAA;AAAA,QACV,SAAW,EAAA,OAAO,KAAM,CAAA,EAAA,KAAO,QAAW,GAAA;AAAA,UACxC,GAAG,WAAY,CAAA,QAAA;AAAA,UACf,GAAG,KAAM,CAAA,EAAA;AAAA,SACP,GAAA;AAAA,UACF,GAAG,WAAY,CAAA,YAAA;AAAA,UACf,GAAG,KAAM,CAAA,EAAA;AAAA,SACX;AAAA,QAEA,SAAS,KAAM,CAAA,OAAA;AAAA,QAEf,kBAAoB,EAAA;AAAA,UAClB,CAAG,EAAA,CAAA;AAAA,UACH,GAAG,KAAM,CAAA,cAAA;AAAA,SACX;AAAA,QAEA,oBAAoB,EAAC;AAAA,QACrB,eAAe,EAAC;AAAA,QAChB,KAAO,EAAA,EAAA;AAAA,OACT,CAAA;AACA,MAAA,MAAA;AAAA,IACF,KAAK,EAAA;AACH,MAAU,OAAA,GAAA;AAAA,QACR,QAAU,EAAA,OAAA;AAAA,QACV,MAAQ,EAAA;AAAA,UACN,CAAG,EAAA,CAAA;AAAA,UACH,GAAG,KAAM,CAAA,MAAA;AAAA,SACX;AAAA,QAEA,SAAW,EAAA;AAAA,UACT,GAAG,KAAM,CAAA,EAAA;AAAA,SACX;AAAA,QAEA,SAAS,KAAM,CAAA,OAAA;AAAA,QACf,oBAAoB,EAAC;AAAA,QACrB,eAAe,EAAC;AAAA,QAEhB,kBAAoB,EAAA;AAAA,UAClB,CAAG,EAAA,CAAA;AAAA,UACH,GAAG,KAAM,CAAA,cAAA;AAAA,SACX;AAAA,OACF,CAAA;AACA,MAAA,MAAA;AAAA,IACF;AACE,MAAU,OAAA,GAAA;AAAA,QACR,QAAU,EAAA,OAAA;AAAA,QACV,0BAA0B,KAAM,CAAA,WAAA;AAAA,OAClC,CAAA;AAAA,GACJ;AAEA,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,eAAiB,EAAA;AAAA,IACtD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAC/C,OAAS,EAAA,OAAA;AAAA,GACV,CAAA,CAAA;AAED,EAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AACrB,CAAA,CAAA;;;AC9DO,IAAM,gBAAmB,GAAA,CAAC,UAAiB,EAAA,OAAA,EAA6B,KAAyC,KAAA;AACtH,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,SAAS,UAAW,CAAA,UAAA;AAAA,IACpB,kBAAkB,UAAW,CAAA,WAAA;AAAA,IAC7B,eAAe,UAAW,CAAA,MAAA;AAAA,IAC1B,qBAAA,EAAuB,UAAW,CAAA,uBAAA,CAAwB,CAAE,CAAA,CAAA;AAAA,IAC5D,WAAA,EAAa,WAAW,wBAAyB,CAAA,CAAA;AAAA,IACjD,cAAA,EAAgB,WAAW,YAAgB,IAAA,CAAA;AAAA,IAC3C,OAAA,EAAS,WAAW,KAAS,IAAA,EAAA;AAAA,IAC7B,gBAAA,EAAkB,WAAW,cAAkB,IAAA,CAAA;AAAA,IAC/C,sBAAA,EAAwB,WAAW,QAAY,IAAA,CAAA;AAAA,IAC/C,MAAA,EAAQ,WAAW,KAAS,IAAA,KAAA;AAAA,IAC5B,OAAA,EAAS,UAAW,CAAA,eAAA,EAAiB,CAClC,CAAA,GAAA;AAAA,MAAI,CAAC,YACJ,OAAQ,CAAA,IAAA,CAAK,CAAC,OAAY,KAAA,OAAA,CAAQ,EAAO,KAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,KAEnD,CAAA,MAAA,CAAO,OAAO,CAAA,IAAK,EAAC;AAAA,GACzB,CAAA;AACF,CAAA,CAAA;;;ACpBO,IAAM,sBAAA,GAAyB,CAAC,MAAkC,KAAA;AACvE,EAAO,OAAA;AAAA;AAAA,IACL,IAAI,MAAO,CAAA,CAAA;AAAA,IACX,MAAM,MAAO,CAAA,CAAA;AAAA,IACb,MAAM,MAAO,CAAA,CAAA;AAAA,GACf,CAAA;AACF,CAAA,CAAA;;;ACFa,IAAA,WAAA,GAAc,OAAO,OAAwB,EAAA,KAAA,GAA2B,EAAC,CAAE,EAAA,IAA8B,KAAA;AACpH,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,iBAAmB,EAAA;AAAA,IACxD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,MAAQ,EAAA,IAAA;AAAA,MACR,WAAa,EAAA,IAAA;AAAA,MACb,iCAAmC,EAAA,IAAA;AAAA,KACrC;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAM,MAAA,IAAA,GAAO,SAAS,IAAK,CAAA,OAAA,CAAA;AAE3B,EAAA,MAAM,OAAU,GAAA,IAAA,CAAK,eAAgB,CAAA,CAAA,CAAE,IAAI,sBAAsB,CAAA,CAAA;AAEjE,EAAA,MAAM,QAAsB,IAAK,CAAA,eAAA,CAAgB,CAC9C,CAAA,MAAA,CAAO,CAAC,UAAoB,KAAA;AAC3B,IAAM,MAAA,YAAA,GAAA,CAAgB,UAAW,CAAA,UAAA,IAAc,CAAO,MAAA,CAAA,CAAA;AACtD,IAAM,MAAA,eAAA,GAAkB,UAAW,CAAA,uBAAA,EAAyB,CAAE,CAAA,CAAA,CAAA;AAC9D,IAAO,OAAA,UAAA,CAAW,oBAAoB,eAAmB,IAAA,YAAA,CAAA;AAAA,GAC1D,EACA,GAAI,CAAA,CAAC,eAAoB,gBAAiB,CAAA,UAAA,EAAY,OAAS,EAAA,KAAK,CAAC,CAAA,CAAA;AAIxE,EAAA,KAAA,CAAM,EAAE,MAAS,GAAA,CAAA,CAAA;AACjB,EAAM,KAAA,CAAA,CAAA,CAAE,IAAK,CAAA,GAAG,KAAK,CAAA,CAAA;AAErB,EAAW,KAAA,MAAA,IAAA,IAAQ,MAAM,CAAG,EAAA;AAC1B,IAAI,IAAA,IAAA,CAAK,yBAAyB,KAAO,EAAA;AAEvC,MAAA,MAAA,CAAO,MAAO,CAAA,KAAA,CAAM,IAAK,CAAA,qBAAqB,GAAG,IAAI,CAAA,CAAA;AAAA,KAElD,MAAA;AAEH,MAAM,KAAA,CAAA,IAAA,CAAK,qBAAqB,CAAI,GAAA,IAAA,CAAA;AAAA,KACtC;AAAA,GACF;AAGA,EAAA,KAAA,MAAW,OAAO,KAAO,EAAA;AACvB,IAAA,IAAI,QAAQ,GAAK,EAAA,SAAA;AACjB,IAAI,IAAA,CAAC,MAAM,CAAE,CAAA,IAAA,CAAK,CAAC,IAAS,KAAA,IAAA,CAAK,qBAA0B,KAAA,GAAG,CAAG,EAAA;AAC/D,MAAA,OAAO,MAAM,GAAG,CAAA,CAAA;AAAA,KAClB;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,OAAA;AAAA;AAAA;AAAA,IAGA,OAAO,KAAM,CAAA,CAAA;AAAA,GACf,CAAA;AACF,EAAA;;;AC1DO,IAAM,4BAAA,GAA+B,CAAC,KAAuC,KAAA;AAClF,EAAM,MAAA,MAAA,GAAkB,MAAM,OAAW,IAAA,KAAA,CAAA;AAEzC,EAAO,OAAA;AAAA,IACL,YAAA,EAAc,KAAM,CAAA,iBAAA,CAAkB,CAAE,CAAA,CAAA;AAAA,IACxC,cAAA,EAAgB,KAAM,CAAA,aAAA,CAAc,CAAE,CAAA,CAAA;AAAA,IACtC,OAAS,EAAA,MAAA,GAAS,KAAM,CAAA,OAAA,CAAQ,IAAI,KAAM,CAAA,OAAA;AAAA,IAC1C,MAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;ACNA,IAAM,YAAA,GAAe,CAAC,IAA6B,KAAA;AACjD,EAAI,IAAA,IAAA,CAAA;AAEJ,EAAA,QAAQ,IAAM;AAAA,IACZ,KAAK,YAAA;AACH,MAAA,IAAA,GAAO,UAAW,CAAA,OAAA,CAAA;AAClB,MAAA,MAAA;AAAA,IACF,KAAK,WAAA;AACH,MAAA,IAAA,GAAO,UAAW,CAAA,QAAA,CAAA;AAClB,MAAA,MAAA;AAAA,IACF;AACE,MAAA,IAAA,GAAO,UAAW,CAAA,OAAA,CAAA;AAAA,GACtB;AAEA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA,CAAA;AAEO,IAAM,uBAAA,GAA0B,CAAC,OAAA,EAAc,OAA8C,KAAA;AAClG,EAAI,IAAA,MAAA,CAAA;AAEJ,EAAA,IAAI,QAAQ,aAAkB,KAAA,KAAA;AAC5B,IAAS,MAAA,GAAA,EAAE,MAAM,OAAQ,CAAA,aAAA,EAAe,MAAM,YAAa,CAAA,OAAA,CAAQ,WAAW,CAAE,EAAA,CAAA;AAElF,EAAI,IAAA,QAAA,CAAA;AAEJ,EAAA,IAAI,QAAQ,aAAkB,KAAA,KAAA;AAC5B,IAAW,QAAA,GAAA,KAAA,CAAA,CAAA;AAAA,OACJ,IAAA,OAAO,QAAQ,aAAkB,KAAA,QAAA;AACxC,IAAW,QAAA,GAAA,EAAE,MAAM,OAAQ,CAAA,aAAA,EAAe,MAAM,YAAa,CAAA,OAAA,CAAQ,WAAW,CAAE,EAAA,CAAA;AAEpF,EAAO,OAAA;AAAA,IACL,IAAI,OAAQ,CAAA,CAAA;AAAA,IACZ,SAAS,OAAQ,CAAA,OAAA,GAAU,OAAQ,CAAA,OAAA,CAAQ,IAAI,OAAQ,CAAA,OAAA;AAAA,IACvD,YAAc,EAAA,iBAAA,CAAkB,OAAQ,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,IAC9C,MAAA;AAAA,IAAQ,QAAA;AAAA,IACR,mBAAmB,OAAQ,CAAA,WAAA;AAAA,IAC3B,kBAAA,EAAA,CAAqB,OAAQ,CAAA,QAAA,IAAY,CAAK,IAAA,CAAA;AAAA;AAAA,IAC9C,KAAO,EAAA,OAAA,CAAQ,oBAAsB,EAAA,CAAA,CAAE,GAAI,CAAA,CAAC,UAAoB,KAAA,gBAAA,CAAiB,UAAY,EAAA,OAAO,CAAC,CAAA,IAAK,EAAC;AAAA,GAC7G,CAAA;AACF,CAAA,CAAA;;;ACzCO,IAAM,2BAA8B,GAAA,CAAC,OAAc,EAAA,OAAA,EAAwB,KAA0D,KAAA;AAC1I,EAAA,MAAM,sBAA2C,EAAC,CAAA;AAClD,EAAM,MAAA,cAAA,GAAyB,OAAQ,CAAA,aAAA,CAAc,CAAE,CAAA,CAAA,CAAA;AAEvD,EAAA,IAAI,QAAQ,yBAA2B,EAAA;AACrC,IAAW,KAAA,MAAA,kBAAA,IAAsB,OAAQ,CAAA,yBAAA,CAA0B,CAAG,EAAA;AACpE,MAAM,MAAA,OAAA,GAAU,uBAAwB,CAAA,kBAAA,EAAoB,OAAO,CAAA,CAAA;AACnE,MAAA,mBAAA,CAAoB,KAAK,OAAO,CAAA,CAAA;AAAA,KAClC;AAAA,GACF;AAEA,EAAA,IAAI,aAAa,KAAM,CAAA,IAAA,CAAK,CAACC,QAAYA,KAAAA,QAAAA,CAAQ,OAAO,cAAc,CAAA,CAAA;AAEtE,EAAO,OAAA;AAAA,IACL,GAAG,uBAAwB,CAAA,OAAA,EAAS,OAAO,CAAA;AAAA,IAC3C,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;AClBO,IAAM,wBAAA,GAA2B,CAAC,QAAA,EAAe,OAA+C,KAAA;AACrG,EAAA,MAAM,QAAQ,QAAS,CAAA,SAAA,CAAA;AACvB,EAAA,MAAM,QAAiC,EAAC,CAAA;AACxC,EAAA,MAAM,SAAmC,EAAC,CAAA;AAC1C,EAAM,MAAA,qBAAA,GAAgC,QAAS,CAAA,kBAAA,CAAmB,CAAE,CAAA,CAAA,CAAA;AAEpE,EAAW,KAAA,MAAA,OAAA,IAAW,QAAS,CAAA,aAAA,CAAc,CAAG,EAAA;AAC9C,IAAA,IAAI,QAAQ,SAAW,EAAA,MAAA,CAAO,IAAK,CAAA,4BAAA,CAA6B,OAAO,CAAC,CAAA,CAAA;AAAA,eAC7D,IAAK,CAAA,2BAAA,CAA4B,OAAS,EAAA,OAAA,EAAS,KAAK,CAAC,CAAA,CAAA;AAAA,GACtE;AAEA,EAAM,KAAA,CAAA,IAAA,CAAK,CAAC,CAAA,EAAG,CAAM,KAAA,CAAA,CAAE,YAAa,CAAA,OAAA,EAAY,GAAA,CAAA,CAAE,YAAa,CAAA,OAAA,EAAS,CAAA,CAAA;AAExE,EAAA,IAAI,KAAO,EAAA;AACT,IAAM,MAAA,MAAA,GAAS,KAAM,CAAA,CAAA,CAAE,OAAW,IAAA,KAAA,CAAA;AAElC,IAAA,MAAA,CAAO,IAAK,CAAA;AAAA,MACV,MAAA;AAAA,MACA,SAAS,MAAS,GAAA,KAAA,CAAM,EAAE,OAAU,GAAA,KAAA,CAAM,EAAE,OAAQ,CAAA,CAAA;AAAA,MACpD,YAAA,EAAc,MAAM,CAAE,CAAA,CAAA;AAAA,MACtB,cAAgB,EAAA,qBAAA;AAAA,KACjB,CAAA,CAAA;AAAA,GACH;AAEA,EAAA,MAAM,UAA+C,GAAA,QAAA,CAAS,YAAa,CAAA,CAAA,CAAE,IAAK,CAAA,CAAC,MAAgB,KAAA,MAAA,CAAO,CAAE,CAAA,UAAA,CAAW,SAAS,CAAC,CAAG,EAAA,CAAA,CAAA;AACpI,EAAA,MAAM,4BAA+B,GAAA,UAAA,KAAe,oBAAqB,CAAA,qCAAA,IACpC,eAAe,oBAAqB,CAAA,oCAAA,CAAA;AAEzE,EAAO,OAAA;AAAA,IACL,KAAA;AAAA,IACA,MAAA;AAAA,IACA,qBAAA;AAAA,IACA,UAAA;AAAA,IACA,4BAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;AC1BO,IAAM,kBAAqB,GAAA,OAAO,OAAwB,EAAA,UAAA,EAAwB,aAAa,KAAuC,KAAA;AAC3I,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,eAAiB,EAAA;AAAA,IACtD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,0BAA0B,UAAW,CAAA,WAAA;AAAA,MACrC,cAAgB,EAAA,UAAA;AAAA,MAChB,aAAe,EAAA,CAAA;AAAA;AAAA,KACjB;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,MAAM,QAAW,GAAA,wBAAA,CAAyB,QAAS,CAAA,IAAA,CAAK,SAAS,OAAO,CAAA,CAAA;AAExE,EAAA,IAAI,CAAC,UAAW,CAAA,QAAA;AACd,IAAA,UAAA,CAAW,QAAW,GAAA,QAAA,CAAA;AAAA;AAEtB,IAAO,MAAA,CAAA,MAAA,CAAO,UAAW,CAAA,QAAA,EAAU,QAAQ,CAAA,CAAA;AAE7C,EAAO,OAAA,QAAA,CAAA;AACT,EAAA;;;AC3Ba,IAAA,qBAAA,GAAwB,OAAO,OAAwB,EAAA,UAAA,EAAwB,SAAiB,OAAU,GAAA,UAAA,CAAW,UAAU,qBAAyC,KAAA;AACnL,EAAM,MAAA,qBAAA,CAAsB,OAAS,EAAA,iBAAA,CAAkB,SAAW,EAAA;AAAA,IAChE,IAAI,cAAe,EAAA;AAAA,IACnB,OAAA;AAAA,IACA,cAAgB,EAAA,OAAA;AAAA,GACjB,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,CAAY,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAC3C,EAAM,MAAA,kBAAA,CAAmB,SAAS,UAAU,CAAA,CAAA;AAC9C,EAAA;;;ACXa,IAAA,gBAAA,GAAmB,OAAO,OAAA,EAAwB,UAA0C,KAAA;AACvG,EAAM,MAAA,qBAAA,CAAsB,OAAS,EAAA,iBAAA,CAAkB,MAAQ,EAAA;AAAA,IAC7D,aAAa,UAAW,CAAA,WAAA;AAAA,GACzB,CAAA,CAAA;AAGD,EAAM,MAAA,WAAA,CAAY,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAC7C,EAAA;;;ACJa,IAAA,cAAA,GAAiB,OAAO,OAAA,EAAwB,UAA2B,KAAA;AACtF,EAAM,MAAA,kBAAA,CAAmB,OAAS,EAAA,UAAA,EAAY,IAAI,CAAA,CAAA;AACpD,EAAA;;;ACPO,IAAM,yBAAA,GAA4B,CAAC,SAAyC,MAAA;AAAA,EACjF,IAAI,SAAU,CAAA,CAAA;AAAA,EACd,MAAM,SAAU,CAAA,CAAA;AAAA,EAChB,MAAM,SAAU,CAAA,CAAA;AAAA,EAChB,gBAAA,EAAkB,UAAU,SAAa,IAAA,KAAA;AAC3C,CAAA,CAAA,CAAA;;;ACGa,IAAA,oBAAA,GAAuB,OAAO,OAAA,EAAwB,UAAgE,KAAA;AACjI,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,qBAAuB,EAAA;AAAA,IAC5D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,OAAS,EAAA,EAAE,CAAG,EAAA,UAAA,CAAW,qBAAsB,EAAA;AAAA,MAC/C,oBAAsB,EAAA,IAAA;AAAA,MACtB,uBAAyB,EAAA,KAAA;AAAA,KAC3B;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,SAAS,IAAK,CAAA,OAAA,CAAQ,SAAU,CAAA,CAAA,CAAE,IAAI,yBAAyB,CAAA,CAAA;AACxE,EAAA;;;ACdO,IAAM,2BAA8B,GAAA,OAAO,OAAwB,EAAA,UAAA,EAAwB,KAAiD,KAAA;AACjJ,EAAM,MAAA,qBAAA,CAAsB,OAAS,EAAA,iBAAA,CAAkB,SAAW,EAAA;AAAA,IAChE,IAAI,KAAM,CAAA,YAAA;AAAA,IACV,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,gBAAgB,KAAM,CAAA,cAAA;AAAA,GACvB,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,CAAY,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAC3C,EAAM,MAAA,kBAAA,CAAmB,SAAS,UAAU,CAAA,CAAA;AAC9C,EAAA;;;ACbO,IAAM,qBAAwB,GAAA,OAAO,OAAwB,EAAA,UAAA,EAAwB,KAAiD,KAAA;AAC3I,EAAM,MAAA,qBAAA,CAAsB,OAAS,EAAA,iBAAA,CAAkB,MAAQ,EAAA;AAAA,IAC7D,aAAa,CAAC,EAAE,CAAG,EAAA,KAAA,CAAM,cAAc,CAAA;AAAA,GACxC,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,CAAY,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAC3C,EAAM,MAAA,kBAAA,CAAmB,SAAS,UAAU,CAAA,CAAA;AAC9C,EAAA;;;ACRa,IAAA,sBAAA,GAAyB,OAAO,OAAA,EAAwB,UAA0C,KAAA;AAC7G,EAAM,MAAA,qBAAA,CAAsB,OAAS,EAAA,iBAAA,CAAkB,OAAS,EAAA;AAAA,IAC9D,aAAa,UAAW,CAAA,WAAA;AAAA,GACzB,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,CAAY,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAC7C,EAAA;;;ACRO,IAAM,0BAAA,GAA6B,CAAC,MAAA,EAA8B,yBAA6D,KAAA;AACpI,EAAA,IACE,MAAW,KAAA,oBAAA,CAAqB,oCAChC,IAAA,yBAAA,WACS,oBAAqB,CAAA,YAAA,CAAA;AAEhC,EAAA,IACE,MAAW,KAAA,oBAAA,CAAqB,qCAChC,IAAA,yBAAA,WACS,oBAAqB,CAAA,aAAA,CAAA;AAEhC,EAAO,OAAA,MAAA,CAAA;AACT,CAAA,CAAA;;;ACRO,IAAM,sBAAsB,OAAO,OAAA,EAAwB,UAAwB,EAAA,KAAA,EAA+B,4BAA4B,KAAyB,KAAA;AAC5K,EAAI,IAAA,OAAO,UAAW,CAAA,QAAA,EAAU,UAAe,KAAA,WAAA;AAC7C,IAAA,MAAM,IAAI,qBAAsB,EAAA,CAAA;AAElC,EAAM,MAAA,qBAAA,CAAsB,SAAS,EAAI,EAAA;AAAA,IACvC,MAAQ,EAAA,0BAAA,CAA2B,UAAW,CAAA,QAAA,CAAS,YAAY,yBAAyB,CAAA;AAAA,IAC5F,SAAS,KAAM,CAAA,OAAA;AAAA,IACf,IAAI,KAAM,CAAA,YAAA;AAAA,IACV,gBAAgB,KAAM,CAAA,cAAA;AAAA,GACvB,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,CAAY,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAC3C,EAAM,MAAA,kBAAA,CAAmB,SAAS,UAAU,CAAA,CAAA;AAC9C,EAAA;;;ACZa,IAAA,qBAAA,GAAwB,OACnC,OAAA,EACA,UACA,EAAA,OAAA,EACA,4BAA4B,KAC5B,EAAA,OAAA,GAAU,UAAW,CAAA,QAAA,EAAU,qBACb,KAAA;AAClB,EAAA,IAAI,CAAC,UAAW,CAAA,QAAA;AACd,IAAA,MAAM,IAAI,8BAA+B,EAAA,CAAA;AAE3C,EAAI,IAAA,OAAO,UAAW,CAAA,QAAA,CAAS,UAAe,KAAA,WAAA;AAC5C,IAAA,MAAM,IAAI,qBAAsB,EAAA,CAAA;AAElC,EAAA,MAAM,MAAS,GAAA,0BAAA,CAA2B,UAAW,CAAA,QAAA,CAAS,YAAY,yBAAyB,CAAA,CAAA;AACnG,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,eAAiB,EAAA;AAAA,IACtD,OAAS,EAAA;AAAA,MACP,OAAS,EAAA,OAAA,CAAQ,IAAK,CAAA,cAAA,CAAe,2BAA8B,GAAA;AAAA,QACjE,EAAI,EAAA,EAAA;AAAA,QACJ,CAAG,EAAA,OAAA;AAAA,OACD,GAAA,OAAA;AAAA,MAEJ,MAAQ,EAAA,EAAE,CAAG,EAAA,CAAA,EAAG,GAAG,MAAO,EAAA;AAAA,MAC1B,SAAW,EAAA;AAAA,QACT,GAAG,cAAe,EAAA;AAAA,QAClB,GAAG,WAAY,CAAA,QAAA;AAAA,OACjB;AAAA,MACA,eAAiB,EAAA,CAAA;AAAA,MACjB,kBAAoB,EAAA;AAAA,QAClB,CAAG,EAAA,CAAA;AAAA,QACH,CAAG,EAAA,OAAA;AAAA,OACL;AAAA,MAEA,eAAe,EAAC;AAAA,KAClB;AAAA,IAEA,WAAa,EAAA;AAAA,MACX,QAAQ,WAAY,CAAA,WAAA;AAAA,KACtB;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AAEnB,EAAM,MAAA,WAAA,CAAY,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAC3C,EAAM,MAAA,kBAAA,CAAmB,SAAS,UAAU,CAAA,CAAA;AAC9C,EAAA;;;AC/Ca,IAAA,eAAA,GAAkB,OAAO,OAAA,EAAwB,UAA0C,KAAA;AACtG,EAAM,MAAA,qBAAA,CAAsB,OAAS,EAAA,iBAAA,CAAkB,KAAO,EAAA;AAAA,IAC5D,aAAa,UAAW,CAAA,WAAA;AAAA,GACzB,CAAA,CAAA;AAED,EAAM,MAAA,WAAA,CAAY,OAAS,EAAA,UAAA,CAAW,KAAK,CAAA,CAAA;AAC7C,EAAA;;;ACRO,IAAM,WAAA,GAAc,CAAC,KAAsB,KAAA;AAChD,EAAO,OAAA;AAAA,IACL,IAAI,KAAM,CAAA,CAAA;AAAA,IAEV,OAAO,KAAM,CAAA,CAAA;AAAA,IACb,cAAc,KAAM,CAAA,YAAA;AAAA,IAEpB,aAAa,KAAM,CAAA,WAAA;AAAA,IAEnB,QAAA,EAAU,KAAM,CAAA,OAAA,CAAQ,CAAE,CAAA,CAAA;AAAA,IAC1B,UAAA,EAAY,KAAM,CAAA,OAAA,CAAQ,CAAE,CAAA,CAAA;AAAA,IAE5B,MAAA,EAAQ,KAAM,CAAA,IAAA,EAAM,CAAE,CAAA,CAAA;AAAA,IACtB,QAAA,EAAU,KAAM,CAAA,IAAA,EAAM,CAAE,CAAA,CAAA;AAAA,IAExB,OAAO,KAAM,CAAA,KAAA;AAAA,IAEb,QAAA,EAAU,KAAM,CAAA,MAAA,CAAO,CAAE,CAAA,CAAA;AAAA,IACzB,UAAA,EAAY,KAAM,CAAA,MAAA,CAAO,CAAE,CAAA,CAAA;AAAA,IAC3B,cAAgB,EAAA,KAAA,CAAM,MAAO,CAAA,CAAA,CAAE,WAAY,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAI,CAAA,CAAC,MAAgB,KAAA,MAAA,CAAO,MAAM,CAAA;AAAA,GAC1F,CAAA;AACF,CAAA,CAAA;;;AClBO,IAAM,gBAAA,GAAmB,CAAC,UAAgC,KAAA;AAC/D,EAAA,MAAM,MAAkB,GAAA,UAAA,CAAW,yBAA0B,CAAA,CAAA,CAAE,IAAI,WAAW,CAAA,CAAA;AAC9E,EAAA,MAAA,CAAO,KAAK,CAAC,MAAA,EAAQ,WAAW,MAAO,CAAA,KAAA,GAAQ,OAAO,KAAK,CAAA,CAAA;AAE3D,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,MAAM,UAAW,CAAA,CAAA;AAAA,IACjB,IAAI,UAAW,CAAA,CAAA;AAAA,IACf,OAAA,EAAS,UAAW,CAAA,QAAA,CAAS,CAAE,CAAA,CAAA;AAAA,IAC/B,aAAa,UAAW,CAAA,WAAA;AAAA,IACxB,aAAa,UAAW,CAAA,UAAA;AAAA,IACxB,OAAS,EAAA,aAAA,CAAc,UAAW,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC3C,MAAA,EAAQ,WAAW,YAAa,CAAA,CAAA,CAAE,IAAI,CAAC,KAAA,KAAe,MAAM,CAAC,CAAA;AAAA,IAC7D,IAAM,EAAA,iBAAA,CAAkB,UAAW,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,GAC3C,CAAA;AACF,CAAA,CAAA;;;ACjBO,IAAM,YAAA,GAAe,CAAC,MAAwB,KAAA;AACnD,EAAO,OAAA;AAAA,IACL,GAAG,MAAO,CAAA,EAAA;AAAA,IACV,GAAG,MAAO,CAAA,IAAA;AAAA,IACV,GAAG,MAAO,CAAA,IAAA;AAAA,GACZ,CAAA;AACF,CAAA,CAAA;;;ACJa,IAAA,WAAA,GAAc,OAAO,OAAA,EAAwB,MAA+C,KAAA;AACvG,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,sBAAwB,EAAA;AAAA,IAC7D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,OAAA,EAAS,aAAa,MAAM,CAAA;AAAA,KAC9B;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AAEpC,EAAA,OAAO,SAAS,IAAK,CAAA,OAAA,CAAQ,gBAAiB,CAAA,CAAA,CAC3C,IAAI,gBAAgB,CAAA,CAAA;AACzB,EAAA;;;ACjBA,IAAM,CAAI,GAAA,OAAA,CAAA;AAGV,IAAM,OAAA,GAAU,CAAC,CAAA,KAAsB,CAAI,GAAA,CAAA,CAAA;AAC3C,IAAM,KAAU,GAAA,CAAC,CAAsB,KAAA,CAAA,GAAI,KAAK,EAAK,GAAA,GAAA,CAAA;AACrD,IAAM,GAAA,GAAU,CAAC,CAAsB,KAAA,OAAA,CAAQ,KAAK,GAAI,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AAQvD,IAAM,SAAA,GAAY,CAAC,CAAA,EAA+B,CAA0C,KAAA;AACjG,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,CAAE,CAAA,CAAC,CAAC,CAAA,CAAA;AACvB,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,CAAE,CAAA,CAAC,CAAC,CAAA,CAAA;AACvB,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,CAAE,CAAA,CAAC,CAAC,CAAA,CAAA;AACvB,EAAA,MAAM,IAAO,GAAA,KAAA,CAAM,CAAE,CAAA,CAAC,CAAC,CAAA,CAAA;AAEvB,EAAA,MAAM,EAAK,GAAA,GAAA,CAAI,IAAO,GAAA,IAAI,IAAI,IAAK,CAAA,GAAA,CAAI,IAAI,CAAA,GAAI,KAAK,GAAI,CAAA,IAAI,CAAI,GAAA,GAAA,CAAI,OAAO,IAAI,CAAA,CAAA;AAC/E,EAAA,OAAO,IAAI,CAAI,GAAA,IAAA,CAAK,KAAK,IAAK,CAAA,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AACxC,CAAA,CAAA;;;ACnBO,IAAM,wBAAA,GAA2B,CAACC,SAAAA,EAAe,QAA6D,KAAA;AACnH,EAAM,MAAA,QAAA,GAAW,UAAWA,CAAAA,SAAAA,CAAS,GAAG,CAAA,CAAA;AACxC,EAAM,MAAA,SAAA,GAAY,UAAWA,CAAAA,SAAAA,CAAS,IAAI,CAAA,CAAA;AAE1C,EAAO,OAAA;AAAA,IACL,GAAA,EAAKA,SAAS,CAAA,GAAA,CAAI,WAAY,EAAA;AAAA,IAC9B,IAAA,EAAMA,SAAS,CAAA,OAAA,CACZ,IAAK,EAAA,CACL,OAAQ,CAAA,SAAA,EAAW,YAAS,CAAA,CAC5B,OAAQ,CAAA,OAAA,EAAS,UAAO,CAAA;AAAA,IAE3B,QAAA;AAAA,IAAU,SAAA;AAAA,IACV,UAAA,EAAY,QAASA,CAAAA,SAAAA,CAAS,EAAE,CAAA;AAAA,IAEhC,UAAU,SAAU,CAAA,QAAA,EAAU,CAAC,QAAA,EAAU,SAAS,CAAC,CAAA;AAAA,GACrD,CAAA;AACF,CAAA,CAAA;;;ACfO,IAAM,WAAc,GAAA,OAAO,QAG/B,EAAA,OAAA,GAAmBH,cAAuD,KAAA;AAC3E,EAAA,MAAM,OAAO,CAAuC,oCAAA,EAAA,QAAA,CAAS,QAAQ,CAAA,UAAA,EAAa,SAAS,SAAS,CAAA,EAAA,CAAA,CAAA;AAEpG,EAAM,MAAA,QAAA,GAAW,MAAM,OAAQ,CAAA;AAAA,IAC7B,GAAA,EAAK,IAAI,GAAA,CAAI,iDAAiD,CAAA;AAAA,IAC9D,MAAQ,EAAA,MAAA;AAAA,IACR,OAAS,EAAA,IAAA;AAAA,IACT,OAAA,EAAS,EAAE,cAAA,EAAgB,iDAAkD,EAAA;AAAA,GAC9E,CAAA,CAAA;AAED,EAAA,IAAI,QAAS,CAAA,OAAA,KAAY,IAAM,EAAA,OAAO,EAAC,CAAA;AACvC,EAAA,MAAM,SAAY,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAG7C,EAAA,MAAM,SAAoC,SAAU,CAAA,GAAA;AAAA,IAAI,CAACG,cACvD,wBAAyBA,CAAAA,SAAAA,EAAU,CAAC,QAAS,CAAA,QAAA,EAAU,QAAS,CAAA,SAAS,CAAC,CAAA;AAAA,GAC5E,CAAA;AAGA,EAAO,MAAA,CAAA,IAAA;AAAA,IAAK,CAAC,GAAG,CAAM,KAAA,CAAA,CAAE,WAAW,CAAE,CAAA,QAAA,GACjC,CACA,GAAA,CAAA,CAAE,QAAW,GAAA,CAAA,CAAE,WACb,CACA,CAAA,GAAA,CAAA,CAAE,OAAO,CAAE,CAAA,IAAA,GACT,IACA,CAAE,CAAA,IAAA,GAAO,CAAE,CAAA,IAAA,GACT,CACA,CAAA,GAAA,CAAA;AAAA,GACV,CAAA;AAEA,EAAO,OAAA,MAAA,CAAA;AACT,EAAA;;;AC9Ba,IAAA,YAAA,GAAe,OAAO,OAAA,EAAwB,MAAoC,KAAA;AAC7F,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,eAAiB,EAAA;AAAA,IACtD,OAAS,EAAA;AAAA,MACP,mBAAqB,EAAA,KAAA;AAAA,MACrB,kBAAoB,EAAA,CAAA;AAAA,MAEpB,OAAS,EAAA;AAAA;AAAA,QACP,qBAAuB,EAAA,KAAA;AAAA,QACvB,SAAW,EAAA,KAAA;AAAA,QACX,eAAiB,EAAA,KAAA;AAAA,QACjB,iBAAmB,EAAA,EAAA;AAAA,QACnB,iBAAmB,EAAA,EAAA;AAAA,QACnB,YAAc,EAAA,IAAA;AAAA,QACd,QAAU,EAAA,IAAA;AAAA,QACV,YAAc,EAAA,GAAA;AAAA,QACd,eAAiB,EAAA,CAAA;AAAA,QACjB,gBAAkB,EAAA,GAAA;AAAA,QAClB,mBAAqB,EAAA,CAAA;AAAA,OACvB;AAAA,MAEA,OAAA,EAAS,aAAa,MAAM,CAAA;AAAA,KAC9B;AAAA,IAEA,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,SAAU,EAAA;AAAA,GAC9C,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAO,OAAA,OAAA,CAAQ,YAAY,GAAM,GAAA,GAAA,GAAM,UAAU,QAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,GAAA,CAAI,CAAC,CAAA,CAAA;AAC9E,EAAA;;;AClCO,IAAM,gBAAA,GAAmB,CAAC,KAAuC,KAAA;AACtE,EAAA,IAAI,OAAkB,SAAU,CAAA,KAAA,CAAA;AAChC,EAAI,IAAA,KAAA,CAAA;AAGJ,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAE7B,IAAA,IAAI,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,UAAU,CAAG,EAAA;AAChC,MAAA,IAAA,GAAO,SAAS,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAAA,KACrC;AAGA,IAAA,KAAA,GAAQ,UAAW,CAAA,KAAA,CAAM,OAAQ,CAAA,GAAA,EAAK,GAAG,CAAC,CAAA,CAAA;AAE1C,IAAA,IAAI,IAAS,KAAA,SAAA,CAAU,UAAc,IAAA,IAAA,KAAS,UAAU,cAAgB,EAAA;AACtE,MAAQ,KAAA,GAAA,CAAA,CAAA;AAAA,KACV;AAAA,GAIF,MAAA,IACS,OAAO,KAAA,KAAU,QAAU,EAAA;AAClC,IAAQ,KAAA,GAAA,KAAA,CAAA;AAAA,GAEL,MAAA,MAAM,IAAI,gBAAA,CAAiB,kBAAkB,CAAA,CAAA;AAElD,EAAO,OAAA;AAAA,IACL,IAAA;AAAA,IACA,MAAQ,EAAA,KAAA;AAAA,GACV,CAAA;AACF,CAAA,CAAA;;;AC5BO,IAAM,qBAAA,GAAwB,CAAC,OAAkC,KAAA;AACtE,EAAO,OAAA;AAAA,IACL,SAAS,OAAQ,CAAA,QAAA,IAAY,gBAAiB,CAAA,OAAA,CAAQ,SAAS,CAAC,CAAA;AAAA,IAChE,OAAO,OAAQ,CAAA,cAAA,IAAkB,gBAAiB,CAAA,OAAA,CAAQ,eAAe,CAAC,CAAA;AAAA,IAC1E,cAAc,OAAQ,CAAA,uBAAA,IAA2B,gBAAiB,CAAA,OAAA,CAAQ,wBAAwB,CAAC,CAAA;AAAA,IACnG,aAAe,EAAA,gBAAA,CAAiB,OAAQ,CAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IACnD,GAAK,EAAA,gBAAA,CAAiB,OAAQ,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,IACtC,GAAK,EAAA,gBAAA,CAAiB,OAAQ,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,IACtC,OAAA,EAAS,cAAc,OAAO,CAAA;AAAA,IAC9B,iBAAiB,OAAQ,CAAA,OAAA;AAAA,GAC3B,CAAA;AACF,CAAA,CAAA;;;ACTO,IAAM,WAAA,GAAc,CAAC,KAAA,EAAY,OAAkC,KAAA;AACxE,EAAA,MAAMN,MAAK,KAAM,CAAA,CAAA,CAAA;AACjB,EAAA,MAAM,UAAU,KAAM,CAAA,QAAA,CAAA;AAEtB,EAAA,MAAM,aAAa,CAAC,GAAA,EAAa,UAAkB,KAAM,CAAA,GAAG,KAAK,gBAAiB,CAAA;AAAA,IAChF,GAAG,cAAe,CAAA,IAAA;AAAA,IAClB,CAAA,EAAG,MAAM,GAAG,CAAA;AAAA,IACZ,CAAGA,EAAAA,GAAAA;AAAA,GACF,EAAA,OAAA,EAAS,EAAE,CAAA,EAAG,OAAO,CAAA,CAAA;AAExB,EAAO,OAAA;AAAA,IACL,EAAAA,EAAAA,GAAAA;AAAA,IACA,KAAO,EAAA,gBAAA,CAAiB,KAAM,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,IACpC,KAAO,EAAA,gBAAA,CAAiB,KAAM,CAAA,MAAA,CAAO,CAAC,CAAA;AAAA,IACtC,YAAc,EAAA,gBAAA,CAAiB,KAAM,CAAA,eAAA,CAAgB,CAAC,CAAA;AAAA,IACtD,IAAM,EAAA,iBAAA,CAAkB,KAAM,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,IACpC,OAAS,EAAA,aAAA,CAAc,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACtC,SAAS,KAAM,CAAA,OAAA,IAAW,gBAAiB,CAAA,KAAA,CAAM,QAAQ,CAAC,CAAA;AAAA,IAC1D,GAAK,EAAA,gBAAA,CAAiB,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACrC,GAAK,EAAA,gBAAA,CAAiB,KAAM,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACrC,aAAa,KAAM,CAAA,WAAA;AAAA,IACnB,SAAS,KAAM,CAAA,WAAA;AAAA,IACf,oBAAoB,KAAM,CAAA,kBAAA;AAAA,IAC1B,OAAA;AAAA,IACA,UAAA,EAAY,KAAM,CAAA,aAAA,IAAiB,CAAC,OAAA;AAAA,IACpC,WAAW,KAAM,CAAA,eAAA;AAAA,IACjB,WAAA,EAAa,UAAW,CAAA,cAAA,EAAgB,aAAa,CAAA;AAAA,IACrD,cAAA,EAAgB,UAAW,CAAA,gBAAA,EAAkB,eAAe,CAAA;AAAA,GAC9D,CAAA;AACF,CAAA,CAAA;;;AC9BO,IAAM,oBAAA,GAAuB,CAAC,QAAA,EAAe,OAA2C,KAAA;AAC7F,EAAO,OAAA;AAAA,IACL,MAAA,EAAQ,QAAS,CAAA,YAAA,CAAa,CAAE,CAAA,GAAA,CAAI,CAAC,KAAe,KAAA,WAAA,CAAY,KAAO,EAAA,OAAO,CAAC,CAAA;AAAA,IAC/E,gBAAkB,EAAA,QAAA,CAAS,aAAc,CAAA,CAAA,CAAE,IAAI,qBAAqB,CAAA;AAAA,IACpE,cAAc,QAAS,CAAA,iBAAA,IAAqB,gBAAiB,CAAA,QAAA,CAAS,kBAAkB,CAAC,CAAA;AAAA,IACzF,gBAAgB,QAAS,CAAA,WAAA,IAAe,gBAAiB,CAAA,QAAA,CAAS,YAAY,CAAC,CAAA;AAAA,GACjF,CAAA;AACF,CAAA,CAAA;;;ACHa,IAAA,cAAA,GAAiB,OAAO,OAAA,EAAwB,MAA4C,KAAA;AACvG,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,gBAAkB,EAAA;AAAA,IACvD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,MAAO,EAAA;AAAA,IAE1C,OAAS,EAAA;AAAA,MACP,OAAA,EAAS,aAAa,MAAM,CAAA;AAAA,KAC9B;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,oBAAqB,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AAC5D,EAAA;;;ACdO,IAAM,iBAAA,GAAoB,CAAC,IAAuB,KAAA;AACvD,EAAM,MAAA,GAAA,GAAM,KAAK,OAAQ,EAAA,CAAA;AACzB,EAAM,MAAA,KAAA,GAAS,IAAK,CAAA,QAAA,EAAa,GAAA,CAAA,CAAA;AACjC,EAAM,MAAA,IAAA,GAAO,KAAK,WAAY,EAAA,CAAA;AAE9B,EAAM,MAAA,KAAA,GAAQ,KAAK,QAAS,EAAA,CAAA;AAC5B,EAAM,MAAA,OAAA,GAAU,KAAK,UAAW,EAAA,CAAA;AAChC,EAAM,MAAA,OAAA,GAAU,KAAK,UAAW,EAAA,CAAA;AAEhC,EAAO,OAAA,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,CAAA;AAC/D,CAAA,CAAA;;;ACdO,IAAM,kBAAA,GAAqB,CAAC,IAA4B,KAAA;AAC7D,EAAO,OAAA;AAAA,IACL,aAAa,IAAK,CAAA,WAAA;AAAA,IAClB,MAAM,IAAK,CAAA,CAAA;AAAA,IACX,KAAK,IAAK,CAAA,GAAA;AAAA,GACZ,CAAA;AACF,CAAA,CAAA;;;ACNO,IAAM,sBAAA,GAAyB,CAAC,MAAmC,MAAA;AAAA,EACxE,MAAM,MAAO,CAAA,mBAAA;AAAA,EACb,aAAa,MAAO,CAAA,gBAAA;AAAA,EACpB,SAAS,MAAO,CAAA,WAAA;AAAA;AAAA,EAEhB,SAAS,QAAS,CAAA,MAAA,CAAO,YAAY,OAAQ,CAAA,GAAA,EAAK,GAAG,CAAC,CAAA;AAAA,EACtD,oBAAoB,MAAO,CAAA,SAAA;AAC7B,CAAA,CAAA,CAAA;;;ACRO,IAAM,gBAAgB,CAAC,OAAA,MAA2B,EAAE,GAAA,EAAK,QAAQ,GAAI,EAAA,CAAA,CAAA;;;ACGrE,IAAM,gBAAA,GAAmB,CAAC,OAA6B,KAAA;AAC5D,EAAO,OAAA;AAAA,IACL,GAAG,cAAc,OAAO,CAAA;AAAA,IACxB,gBAAgB,OAAQ,CAAA,iBAAA;AAAA,IACxB,OAAS,EAAA,OAAA,CAAQ,YAAa,CAAA,CAAA,CAAE,IAAI,sBAAsB,CAAA;AAAA,GAC5D,CAAA;AACF,CAAA,CAAA;;;ACLO,IAAM,cAAA,GAAiB,CAAC,IAAwB,KAAA;AACrD,EAAA,MAAM,QAAQ,EAAC,CAAA;AAEf,EAAI,IAAA,gBAAA,CAAA;AACJ,EAAI,IAAA,UAAA,CAAA;AAEJ,EAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,IAAa,UAAA,GAAA,gBAAA,CAAiB,KAAK,aAAa,CAAA,CAAA;AAAA,GAClD;AAEA,EAAA,KAAA,MAAW,IAAQ,IAAA,IAAA,CAAK,SAAU,CAAA,UAAA,CAAW,CAAG,EAAA;AAC9C,IAAA,IAAI,SAAS,IAAM,EAAA;AACjB,MAAI,IAAA,IAAA,CAAK,GAAI,CAAA,cAAA,KAAmB,WAAa,EAAA;AAC3C,QAAA,gBAAA,GAAmB,cAAc,IAAI,CAAA,CAAA;AAAA,OACvC;AAAA,KAEG,MAAA;AACH,MAAM,KAAA,CAAA,IAAA,CAAK,kBAAmB,CAAA,IAAI,CAAC,CAAA,CAAA;AAAA,KACrC;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,gBAAA;AAAA,IAEA,KAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;ACtBO,IAAM,WAAW,OAAO,OAAA,EAAwB,GAAM,GAAA,OAAA,CAAQ,SAAS,eAAuC,KAAA;AACnH,EAAA,MAAM,UAAa,GAAA,qBAAA,CAAsB,GAAK,EAAA,OAAA,CAAQ,SAAS,WAAW,CAAA,CAAA;AAC1E,EAAM,MAAA,IAAA,GAAO,kBAAkB,GAAG,CAAA,CAAA;AAElC,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,aAAe,EAAA;AAAA,IACpD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,QAAS,EAAA;AAAA,IAE5C,OAAS,EAAA;AAAA,MACP,mBAAqB,EAAA,IAAA;AAAA,MAErB,UAAY,EAAA;AAAA,QACV,EAAI,EAAA,CAAA;AAAA,QACJ,CAAG,EAAA,IAAA;AAAA,OACL;AAAA,MAEA,aAAe,EAAA,UAAA;AAAA,MAEf,eAAiB,EAAA;AAAA,QACf,aAAe,EAAA,UAAA;AAAA,OACjB;AAAA,MAEA,iBAAmB,EAAA;AAAA,QACjB,aAAe,EAAA,UAAA;AAAA,OACjB;AAAA,MAEA,SAAW,EAAA;AAAA,QACT,aAAe,EAAA,UAAA;AAAA,OACjB;AAAA,MAEA,UAAY,EAAA;AAAA,QACV,aAAe,EAAA,UAAA;AAAA,OACjB;AAAA,MAEA,SAAW,EAAA;AAAA,QACT,aAAe,EAAA,UAAA;AAAA,OACjB;AAAA,MAEA,aAAe,EAAA;AAAA,QACb,IAAM,EAAA;AAAA,UACJ,EAAI,EAAA,CAAA;AAAA,UACJ,CAAG,EAAA,IAAA;AAAA,SACL;AAAA,OACF;AAAA,MAEA,4BAA8B,EAAA;AAAA,QAC5B,IAAM,EAAA;AAAA,UACJ,EAAI,EAAA,CAAA;AAAA,UACJ,CAAG,EAAA,IAAA;AAAA,SACL;AAAA,OACF;AAAA,MAEA,YAAc,EAAA;AAAA,QACZ,aAAe,EAAA,UAAA;AAAA,OACjB;AAAA,MAEA,GAAK,EAAA;AAAA,QACH,aAAe,EAAA,UAAA;AAAA,OACjB;AAAA,MAEA,UAAY,EAAA;AAAA,QACV,IAAM,EAAA;AAAA,UACJ,EAAI,EAAA,CAAA;AAAA,UACJ,CAAG,EAAA,IAAA;AAAA,SACL;AAAA,OACF;AAAA,MAEA,cAAgB,EAAA;AAAA,QACd,IAAM,EAAA;AAAA,UACJ,EAAI,EAAA,CAAA;AAAA,UACJ,CAAG,EAAA,IAAA;AAAA,SACL;AAAA,OACF;AAAA,MAEA,aAAe,EAAA;AAAA,QACb,KAAK,EAAC;AAAA,OACR;AAAA,MAEA,aAAe,EAAA;AAAA,QACb,IAAM,EAAA;AAAA,UACJ,EAAI,EAAA,CAAA;AAAA,UACJ,CAAG,EAAA,IAAA;AAAA,SACL;AAAA,OACF;AAAA,MAEA,gBAAkB,EAAA;AAAA,QAChB,IAAM,EAAA;AAAA,UACJ,EAAI,EAAA,CAAA;AAAA,UACJ,CAAG,EAAA,IAAA;AAAA,SACL;AAAA,OACF;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAO,OAAA,cAAA,CAAe,QAAS,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAC7C,EAAA;;;ACvGO,IAAM,cAAA,GAAiB,CAACM,SAA4B,KAAA;AACzD,EAAI,IAAA,MAAA,CAAA;AACJ,EAAI,IAAA,QAAA,CAAA;AAEJ,EAAIA,IAAAA,SAAAA,CAAS,IAAI,KAAO,EAAA;AACtB,IAAA,MAAA,GAASA,UAAS,GAAI,CAAA,MAAA,CAAA;AACtB,IAAA,QAAA,GAAWA,UAAS,GAAI,CAAA,QAAA,CAAA;AAAA,GAC1B;AAEA,EAAO,OAAA;AAAA,IACL,MAAMA,SAAS,CAAA,OAAA;AAAA,IACf,SAASA,SAAS,CAAA,OAAA;AAAA,IAClB,IAAM,EAAA,IAAI,IAAKA,CAAAA,SAAAA,CAAS,IAAI,CAAA;AAAA,IAC5B,QAAUA,EAAAA,SAAAA,CAAS,OAAQ,CAAA,GAAA,CAAI,CAACF,QAAkB,MAAA;AAAA,MAChD,MAAMA,QAAQ,CAAA,GAAA;AAAA,MACd,MAAMA,QAAQ,CAAA,GAAA;AAAA,KACd,CAAA,CAAA;AAAA,IAEF,MAAA;AAAA,IAAQ,QAAA;AAAA,GACV,CAAA;AACF,CAAA,CAAA;;;ACjBO,IAAM,QAAW,GAAA,OAAO,GAAa,EAAA,OAAA,GAAmBD,cAAsC,KAAA;AACnG,EAAA,GAAA,GAAM,SAAS,GAAG,CAAA,CAAA;AAClB,EAAO,GAAA,IAAA,6DAAA,CAAA;AAEP,EAAA,MAAM,UAAmB,EAAE,GAAA,EAAK,IAAI,GAAA,CAAI,GAAG,CAAE,EAAA,CAAA;AAC7C,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,OAAO,CAAA,CAAA;AACtC,EAAA,MAAMG,SAAW,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAC5C,EAAA,OAAO,eAAeA,SAAQ,CAAA,CAAA;AAChC,EAAA;;;ACXO,IAAM,kBAAA,GAAqB,CAAC,QAAiC,MAAA;AAAA,EAClE,MAAM,QAAS,CAAA,CAAA;AAAA,EACf,OAAO,QAAS,CAAA,OAAA;AAClB,CAAA,CAAA,CAAA;;;ACHO,IAAM,eAAA,GAAkB,CAAC,KAA2B,MAAA;AAAA,EACzD,MAAM,KAAM,CAAA,CAAA;AAAA,EACZ,OAAO,KAAM,CAAA,OAAA;AACf,CAAA,CAAA,CAAA;;;ACDO,IAAM,UAAA,GAAa,CAAC,IAAoB,KAAA;AAC7C,EAAO,OAAA;AAAA,IACL,MAAM,IAAK,CAAA,CAAA;AAAA,IACX,SAAW,EAAA,IAAA,CAAK,0BAA2B,CAAA,CAAA,CAAE,IAAI,kBAAkB,CAAA;AAAA,IACnE,MAAQ,EAAA,IAAA,CAAK,uBAAwB,CAAA,CAAA,CAAE,IAAI,eAAe,CAAA;AAAA,GAC5D,CAAA;AACF,CAAA,CAAA;;;ACPO,IAAM,UAAA,GAAa,CAAC,IAAoB,KAAA;AAC7C,EAAA,MAAM,SAAS,IAAK,CAAA,UAAA,CAAW,EAAE,MAAO,CAAA,CAAC,KAAU,IAAc,KAAA;AAC/D,IAAI,IAAA,GAAA,CAAA;AAEJ,IAAA,QAAQ,KAAK,CAAG;AAAA,MACd,KAAK,QAAS,CAAA,KAAA;AACZ,QAAM,GAAA,GAAA,OAAA,CAAA;AACN,QAAA,MAAA;AAAA,MACF,KAAK,QAAS,CAAA,IAAA;AACZ,QAAM,GAAA,GAAA,MAAA,CAAA;AACN,QAAA,MAAA;AAAA,MACF,KAAK,QAAS,CAAA,IAAA;AACZ,QAAM,GAAA,GAAA,MAAA,CAAA;AACN,QAAA,MAAA;AAAA,MACF,KAAK,QAAS,CAAA,KAAA;AACZ,QAAM,GAAA,GAAA,OAAA,CAAA;AACN,QAAA,MAAA;AAAA,MACF,KAAK,QAAS,CAAA,OAAA;AACZ,QAAM,GAAA,GAAA,SAAA,CAAA;AACN,QAAA,MAAA;AAAA,MACF,KAAK,QAAS,CAAA,OAAA;AACZ,QAAM,GAAA,GAAA,SAAA,CAAA;AACN,QAAA,MAAA;AAAA,MACF;AACE,QAAM,MAAA,IAAI,iBAAiB,YAAY,CAAA,CAAA;AAAA,KAC3C;AAEA,IAAA,GAAA,CAAI,GAAG,CAAI,GAAA,IAAA,CAAK,aAAc,CAAA,CAAA,CAAE,IAAI,UAAU,CAAA,CAAA;AAC9C,IAAO,OAAA,GAAA,CAAA;AAAA,GACT,EAAG,EAAE,CAAA,CAAA;AAEL,EAAO,OAAA;AAAA,IACL,MAAM,IAAK,CAAA,CAAA;AAAA,IACX,GAAG,MAAA;AAAA,GACL,CAAA;AACF,CAAA,CAAA;;;AClCO,IAAM,UAAA,GAAa,CAAC,IAAoB,KAAA;AAC7C,EAAA,IAAI,UAAU,IAAK,CAAA,UAAA,CAAW,EAAE,MAAO,CAAA,CAAC,KAAU,IAAc,KAAA;AAC9D,IAAI,IAAA,GAAA,CAAA;AAEJ,IAAA,QAAQ,KAAK,CAAG;AAAA,MACd,KAAK,QAAS,CAAA,KAAA;AACZ,QAAM,GAAA,GAAA,OAAA,CAAA;AACN,QAAA,MAAA;AAAA,MACF,KAAK,QAAS,CAAA,MAAA;AACZ,QAAM,GAAA,GAAA,QAAA,CAAA;AACN,QAAA,MAAA;AAAA,MACF;AACE,QAAM,MAAA,IAAI,iBAAiB,YAAY,CAAA,CAAA;AAAA,KAC3C;AAEA,IAAI,GAAA,CAAA,GAAG,CAAI,GAAA,UAAA,CAAW,IAAI,CAAA,CAAA;AAC1B,IAAO,OAAA,GAAA,CAAA;AAAA,GACT,EAAG,EAAE,CAAA,CAAA;AAEL,EAAO,OAAA;AAAA,IACL,IAAM,EAAA,iBAAA,CAAkB,IAAK,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,IACnC,GAAG,OAAA;AAAA,GACL,CAAA;AACF,CAAA,CAAA;;;ACrBO,IAAM,cAAA,GAAiB,CAAC,IAAyB,MAAA;AAAA,EACtD,eAAe,IAAK,CAAA,aAAA;AAAA,EACpB,gBAAgB,IAAK,CAAA,aAAA;AAAA,EAErB,IAAM,EAAA,IAAA,CAAK,UAAW,CAAA,CAAA,CAAE,IAAI,UAAU,CAAA;AAAA,EACtC,KAAO,EAAA,YAAA,CAAa,IAAK,CAAA,iBAAA,CAAkB,CAAC,CAAA;AAAA,EAE5C,SAAW,EAAA,IAAA,CAAK,eAAgB,CAAA,CAAA,CAAE,IAAI,kBAAkB,CAAA;AAAA,EACxD,MAAQ,EAAA,IAAA,CAAK,WAAY,CAAA,CAAA,CAAE,IAAI,eAAe,CAAA;AAChD,CAAA,CAAA,CAAA;;;ACVO,IAAM,QAAQ,OAAO,OAAA,EAAwB,IAAO,mBAAA,IAAI,MAA8B,KAAA;AAC3F,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,WAAa,EAAA;AAAA,IAClD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,KAAM,EAAA;AAAA,IACzC,OAAS,EAAA;AAAA,MACP,IAAM,EAAA;AAAA,QACJ,EAAI,EAAA,CAAA;AAAA,QACJ,CAAA,EAAG,kBAAkB,IAAI,CAAA;AAAA,OAC3B;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAO,OAAA,cAAA,CAAe,QAAS,CAAA,IAAA,CAAK,OAAO,CAAA,CAAA;AAC7C,EAAA;;;AChBO,IAAM,oCAAA,GAAuC,CAAC,EAA4C,KAAA;AAC/F,EAAO,OAAA;AAAA,IACL,IAAI,EAAG,CAAA,CAAA;AAAA,IACP,MAAM,EAAG,CAAA,CAAA;AAAA,GACX,CAAA;AACF,CAAA,CAAA;;;ACLO,IAAM,sCAAA,GAAyC,CAAC,GAA+C,KAAA;AACpG,EAAO,OAAA;AAAA,IACL,IAAI,GAAI,CAAA,CAAA;AAAA,IACR,MAAM,GAAI,CAAA,CAAA;AAAA,IACV,MAAM,GAAI,CAAA,cAAA;AAAA,GACZ,CAAA;AACF,CAAA,CAAA;;;ACNO,IAAM,mCAAA,GAAsC,CAAC,OAAA,EAAc,GAAgF,KAAA;AAChJ,EAAO,OAAA;AAAA,IACL,IAAI,OAAQ,CAAA,CAAA;AAAA,IACZ,MAAM,OAAQ,CAAA,CAAA;AAAA,IACd,GAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;ACHO,IAAM,4BAAA,GAA+B,CAAC,SAA2C,KAAA;AACtF,EAAA,MAAM,WAA4C,EAAC,CAAA;AACnD,EAAA,IAAI,UAAU,eAAiB,EAAA;AAC7B,IAAM,MAAA,GAAA,GAA0C,SAAU,CAAA,eAAA,CAAgB,CACvE,CAAA,MAAA,CAAO,CAAC,CAAA,KAAW,CAAE,CAAA,iBAAiB,CACtC,CAAA,GAAA,CAAI,sCAAsC,CAAA,CAAA;AAE7C,IAAWL,KAAAA,MAAAA,SAAAA,IAAY,SAAU,CAAA,eAAA,CAAgB,CAAG,EAAA;AAClD,MAAA,IAAIA,UAAS,iBAAmB,EAAA,SAAA;AAChC,MAAA,QAAA,CAAS,IAAK,CAAA,mCAAA,CAAoCA,SAAU,EAAA,GAAA,CAAI,MAAO,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,IAASA,KAAAA,SAAAA,CAAS,CAAC,CAAC,CAAC,CAAA,CAAA;AAAA,KACvG;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,IAAI,SAAU,CAAA,CAAA;AAAA,IACd,MAAM,SAAU,CAAA,CAAA;AAAA,IAChB,MAAM,SAAU,CAAA,CAAA;AAAA,IAEhB,QAAA;AAAA,IACA,UAAU,SAAU,CAAA,QAAA,IAAY,oCAAqC,CAAA,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,IACzF,WAAA,EAAa,UAAU,YAAgB,IAAA,KAAA;AAAA,GACzC,CAAA;AACF,CAAA,CAAA;;;ACdO,IAAM,uBAA0B,GAAA,OAAO,OAAwB,EAAA,IAAA,EAAoB,IAA6D,KAAA;AAErJ,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,kCAAoC,EAAA;AAAA,IACzE,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,aAAe,EAAA;AAAA,QACb,GAAG,IAAK,CAAA,IAAA;AAAA,QACR,GAAG,IAAK,CAAA,IAAA;AAAA,QACR,GAAG,IAAK,CAAA,EAAA;AAAA,OACV;AAAA,MAEA,MAAQ,EAAA;AAAA,QACN,CAAG,EAAA,CAAA;AAAA,QACH,CAAG,EAAA,IAAA;AAAA,OACL;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,QAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,gCAAA,CAAiC,CAC3D,CAAA,MAAA,CAAO,CAAC,SAAA,KAAmB,SAAU,CAAA,cAAc,CACnD,CAAA,GAAA,CAAI,4BAA4B,CAAA,CAAA;AACrC,EAAA;;;AC1BO,IAAM,aAAgB,GAAA,OAC3B,OACA,EAAA,OAAA,EACA,SACA,UACkB,KAAA;AAClB,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,eAAiB,EAAA;AAAA,IACtD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,WAAY,EAAA;AAAA,IAE/C,OAAS,EAAA;AAAA,MACP,OAAS,EAAA,OAAA,CAAQ,IAAK,CAAA,cAAA,CAAe,2BAA8B,GAAA;AAAA,QACjE,EAAI,EAAA,EAAA;AAAA,QACJ,CAAG,EAAA,OAAA;AAAA,OACD,GAAA,OAAA;AAAA,MAEJ,KAAO,EAAA,OAAA;AAAA,MACP,wBAA0B,EAAA,KAAA;AAAA,MAC1B,eAAe,EAAC;AAAA,MAChB,kBAAoB,EAAA,UAAA,CAAW,GAAI,CAAA,CAAC,SAAe,MAAA;AAAA,QACjD,GAAG,WAAY,CAAA,YAAA;AAAA,QACf,GAAG,SAAU,CAAA,IAAA;AAAA,QACb,GAAG,SAAU,CAAA,EAAA;AAAA,OACb,CAAA,CAAA;AAAA,KACJ;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AACrB,EAAA;;;AC/BO,IAAM,YAAA,GAAe,CAAC,OAA8B,KAAA;AACzD,EAAI,IAAA,OAAA,CAAQ,MAAW,KAAA,CAAA,EAAU,OAAA,IAAA,CAAA;AACjC,EAAM,MAAA,MAAA,GAAS,CAAC,GAAG,OAAO,CAAA,CAAE,KAAK,CAAC,CAAA,EAAG,CAAM,KAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAChD,EAAA,MAAM,SAAmB,EAAC,CAAA;AAC1B,EAAI,IAAA,IAAA,GAAO,OAAO,CAAC,CAAA,CAAA;AACnB,EAAA,IAAI,KAAQ,GAAA,IAAA,CAAA;AAEZ,EAAA,KAAA,IAAS,KAAQ,GAAA,CAAA,EAAG,KAAQ,GAAA,MAAA,CAAO,QAAQ,KAAS,EAAA,EAAA;AAClD,IAAA,IAAI,MAAO,CAAA,KAAK,CAAI,GAAA,IAAA,KAAS,CAAG,EAAA;AAC9B,MAAA,IAAI,UAAU,IAAM,EAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAAA,kBACpC,IAAK,CAAA,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,IAAI,CAAE,CAAA,CAAA,CAAA;AACpC,MAAA,KAAA,GAAQ,OAAO,KAAK,CAAA,CAAA;AAAA,KACtB;AAEA,IAAA,IAAA,GAAO,OAAO,KAAK,CAAA,CAAA;AAAA,GACrB;AAEA,EAAA,IAAI,UAAU,IAAM,EAAA,MAAA,CAAO,IAAK,CAAA,KAAA,CAAM,UAAU,CAAA,CAAA;AAAA,cACpC,IAAK,CAAA,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,IAAI,CAAE,CAAA,CAAA,CAAA;AAEpC,EAAA,OAAO,CAAI,CAAA,EAAA,MAAA,CAAO,IAAK,CAAA,GAAG,CAAC,CAAA,CAAA,CAAA,CAAA;AAC7B,CAAA,CAAA;;;ACjBO,IAAM,gBAAmB,GAAA,OAAO,OAAwB,EAAA,IAAA,EAAoC,OAAU,GAAA;AAAA,EAC3G,MAAQ,EAAA,KAAA;AAAA,EACR,UAAY,EAAA,IAAA;AAAA,EACZ,cAAgB,EAAA,KAAA;AAClB,CAAM,KAAA;AACJ,EAAA,MAAM,OAAW,GAAA,OAAA,CAAQ,cAAkB,IAAA,OAAA,CAAQ,SAAU,EAAC,GAC1D,IAAK,CAAA,EAAA,KAAO,aAAgB,GAAA,CAAC,IAAK,CAAA,QAAQ,IAAI,IAAK,CAAA,SAAA,CAAA;AAEvD,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,kBAAoB,EAAA;AAAA,IACzD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,IAAK,EAAA;AAAA,IAExC,OAAS,EAAA;AAAA,MACP,iBAAiB,CAAC;AAAA,QAChB,GAAG,IAAK,CAAA,EAAA;AAAA,QACR,CAAA,EAAG,KAAK,KAAS,IAAA,EAAA;AAAA,QAEjB,WAAA,EAAa,KAAK,MAAO,CAAA,CAAA;AAAA,QACzB,QAAQ,IAAK,CAAA,MAAA;AAAA,QAEb,iBAAmB,EAAA,IAAA;AAAA,QAEnB,cAAgB,EAAA,OAAA,CAAQ,GAAI,CAAA,CAAC,MAAY,MAAA;AAAA,UACvC,GAAG,MAAO,CAAA,EAAA;AAAA,UACV,GAAG,MAAO,CAAA,SAAA;AAAA,UACV,cAAc,MAAO,CAAA,IAAA;AAAA,UAErB,OAAS,EAAA;AAAA,YACP,CAAA,EAAG,QAAS,CAAA,MAAA,CAAO,QAAQ,CAAA;AAAA,YAC3B,KAAO,EAAA,IAAA;AAAA;AAAA;AAAA,YAIP,aAAA,EAAgB,MAAO,CAAA,IAAA,KAAS,gBAAiB,CAAA,eAAA,IAAmB,MAAO,CAAA,IAAA,KAAS,gBAAiB,CAAA,SAAA,GACjG,MAAO,CAAA,eAAA,IAAmB,EAC1B,GAAA;AAAA;AAAA,cACA,EAAI,EAAA,CAAA;AAAA,cACJ,CAAG,EAAA,YAAA,CAAa,MAAO,CAAA,eAAA,IAAmB,EAAE,CAAA;AAAA,aAC9C;AAAA;AAAA,YAGF,kBAAqB,EAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,CAAO,CAAC,MAAA,KAAW,MAAO,CAAA,WAAW,CAAE,CAAA,MAAA,GAAS,CAChF,GAAA,MAAA,CAAO,eACP,GAAA,KAAA,CAAA;AAAA,YAEJ,aAAa,MAAO,CAAA,QAAA;AAAA,YACpB,oBAAoB,MAAO,CAAA,YAAA;AAAA,YAC3B,iBAAmB,EAAA,IAAA;AAAA,WACrB;AAAA,SACA,CAAA,CAAA;AAAA,QAEF,kBAAoB,EAAA,CAAC,OAAQ,CAAA,MAAA,IAAU,OAAQ,CAAA,cAAA;AAAA,QAC/C,GAAK,EAAA,CAAC,OAAQ,CAAA,MAAA,IAAU,OAAQ,CAAA,UAAA;AAAA,QAChC,SAAW,EAAA,CAAC,OAAQ,CAAA,cAAA,IAAkB,OAAQ,CAAA,MAAA;AAAA,QAC9C,eAAiB,EAAA,KAAA;AAAA,OAClB,CAAA;AAAA,MAED,eAAiB,EAAA,KAAA;AAAA,KACnB;AAAA,GACD,CAAA,CAAA;AAED,EAAA,MAAM,QAAQ,IAAK,EAAA,CAAA;AACrB,CAAA,CAAA;;;AChEa,IAAA,UAAA,GAAa,OAAO,OAAA,EAAwB,IAAsD,KAAA;AAC7G,EAAM,MAAA,gBAAA,CAAiB,SAAS,IAAM,EAAA;AAAA,IACpC,cAAgB,EAAA,KAAA;AAAA,IAChB,UAAY,EAAA,KAAA;AAAA,IACZ,MAAQ,EAAA,IAAA;AAAA,GACT,CAAA,CAAA;AACH,EAAA;;;ACNO,IAAM,QAAW,GAAA,OAAO,OAAwB,EAAA,IAAA,EAAoC,IAAkB,KAAA;AAE3G,EAAI,IAAA,IAAA,CAAK,SAAS,IAAM,EAAA;AACtB,IAAA,OAAA;AAAA,GACF;AAGA,EAAM,MAAA,gBAAA,CAAiB,SAAS,IAAM,EAAA;AAAA,IACpC,cAAgB,EAAA,IAAA;AAAA,IAChB,UAAY,EAAA,IAAA;AAAA,IACZ,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA,CAAA;AAGD,EAAA,IAAA,CAAK,IAAO,GAAA,IAAA,CAAA;AACd,EAAA;;;ACPO,IAAM,0BAA6B,GAAA,OAAO,OAAwB,EAAA,WAAA,EAA8B,iBAAiB,IAAwB,KAAA;AAC9I,EAAI,IAAA,CAAC,WAAY,CAAA,iBAAA,IAAqB,WAAY,CAAA,YAAA;AAChD,IAAO,OAAA,QAAA,CAAS,OAAS,EAAA,WAAA,EAAa,cAAc,CAAA,CAAA;AAGtD,EAAwB,uBAAA,CAAA,WAAA,CAAY,UAAU,EAAE,CAAA,CAAA;AAEhD,EAAM,MAAA,gBAAA,CAAiB,SAAS,WAAa,EAAA;AAAA,IAC3C,UAAY,EAAA,cAAA;AAAA,IACZ,cAAgB,EAAA,KAAA;AAAA,IAChB,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAI,IAAA,cAAA;AACF,IAAA,WAAA,CAAY,IAAO,GAAA,IAAA,CAAA;AACvB,EAAA;;;ACrBO,IAAM,cAAiB,GAAA,OAAO,OAAwB,EAAA,MAAA,EAAoB,iBAAiB,IAAwB,KAAA;AACxH,EAAM,MAAA,gBAAA,CAAiB,SAAS,MAAQ,EAAA;AAAA,IACtC,UAAY,EAAA,cAAA;AAAA,IACZ,cAAgB,EAAA,KAAA;AAAA,IAChB,MAAQ,EAAA,KAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAI,IAAA,cAAA;AACF,IAAA,MAAA,CAAO,IAAO,GAAA,IAAA,CAAA;AAClB,EAAA;;;ACfO,IAAM,cAAA,GAAiB,CAAC,IAAA,EAAW,UAAyC,KAAA;AACjF,EAAO,OAAA;AAAA,IACL,IAAI,IAAK,CAAA,CAAA;AAAA,IACT,OAAO,IAAK,CAAA,CAAA;AAAA,IACZ,QAAA,EAAU,UAAW,CAAA,IAAA,CAAK,CAAC,QAAA,KAAa,SAAS,EAAO,KAAA,IAAA,CAAK,SAAU,CAAA,CAAA,CAAE,CAAC,CAAA;AAAA,IAE1E,YAAc,EAAA,iBAAA,CAAkB,IAAK,CAAA,YAAA,CAAa,CAAC,CAAA;AAAA,IACnD,SAAW,EAAA,iBAAA,CAAkB,IAAK,CAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IAC7C,OAAS,EAAA,iBAAA,CAAkB,IAAK,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAEzC,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,MAAA,EAAQ,KAAK,MAAO,CAAA,CAAA;AAAA,IAEpB,MAAM,IAAK,CAAA,GAAA;AAAA,GACb,CAAA;AACF,CAAA,CAAA;;;AChBO,IAAM,wBAAA,GAA2B,CAAC,MAAoC,KAAA;AAC3E,EAAO,OAAA;AAAA,IACL,OAAO,MAAO,CAAA,CAAA;AAAA,IACd,UAAU,MAAO,CAAA,IAAA;AAAA,IACjB,WAAA,EAAa,CAAC,CAAC,MAAO,CAAA,eAAA;AAAA,GACxB,CAAA;AACF,CAAA,CAAA;;;ACFO,IAAM,kBAAA,GAAqB,CAAC,QAAA,EAAe,OAAyC,KAAA;AACzF,EAAA,MAAM,OAAyB,QAAS,CAAA,YAAA,CAAA;AACxC,EAAM,MAAA,QAAA,GAAoB,QAAS,CAAA,OAAA,CAAQ,CAAE,CAAA,WAAA,CAAA;AAE7C,EAAI,IAAA,eAAA,CAAA;AACJ,EAAI,IAAA,eAAA,CAAA;AAEJ,EAAA,IAAI,QAAY,IAAA,QAAA,CAAS,OAAQ,CAAA,CAAA,CAAE,aAAe,EAAA;AAChD,IAAA,IAAI,OAAO,QAAA,CAAS,OAAQ,CAAA,CAAA,CAAE,kBAAkB,QAAU,EAAA;AACxD,MAAkB,eAAA,GAAA,QAAA,CAAS,QAAQ,CAAE,CAAA,aAAA,CAAA;AAAA,KAElC,MAAA;AACH,MAAA,eAAA,GAAkB,YAAa,CAAA,QAAA,CAAS,OAAQ,CAAA,CAAA,CAAE,cAAc,CAAC,CAAA,CAAA;AACjE,MAAkB,eAAA,GAAA,QAAA,CAAS,QAAQ,CAAE,CAAA,kBAAA,CAAA;AAAA,KACvC;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,IAAI,QAAS,CAAA,CAAA;AAAA,IACb,WAAW,QAAS,CAAA,CAAA;AAAA,IACpB,OAAO,QAAS,CAAA,KAAA;AAAA,IAChB,UAAU,QAAS,CAAA,IAAA;AAAA,IACnB,IAAA;AAAA,IAEA,eAAe,QAAS,CAAA,aAAA;AAAA,IACxB,6BAA6B,QAAS,CAAA,WAAA;AAAA,IACtC,gBAAgB,QAAS,CAAA,iBAAA;AAAA,IACzB,OAAA,EAAS,SAAS,KAAM,CAAA,CAAA;AAAA,IAExB,WAAA,EAAa,QAAS,CAAA,kBAAA,CAAmB,CAAE,CAAA,GAAA,CAAI,CAAC,UAAoB,KAAA,gBAAA,CAAiB,UAAY,EAAA,OAAO,CAAC,CAAA;AAAA,IAEzG,QAAA,EAAU,QAAS,CAAA,OAAA,CAAQ,CAAE,CAAA,CAAA;AAAA,IAC7B,QAAA;AAAA,IAEA,YAAA,EAAc,QAAS,CAAA,OAAA,CAAQ,CAAE,CAAA,kBAAA;AAAA,IACjC,UAAA,EAAY,QAAS,CAAA,OAAA,CAAQ,CAAE,CAAA,SAAA,EAAW,CAAK,IAAA,iBAAA,CAAkB,QAAS,CAAA,OAAA,CAAQ,CAAE,CAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IAE/F,OAAA,EAAS,IAAS,KAAA,gBAAA,CAAiB,SAAY,GAAA,KAAK,QAAS,CAAA,UAAA,CAAW,CAAE,CAAA,GAAA,CAAI,wBAAwB,CAAA;AAAA,IAEtG,eAAA;AAAA,IACA,eAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;AC5CO,IAAM,qBAAwB,GAAA,CAAC,WAAkB,EAAA,OAAA,EAAwB,UAAgD,KAAA;AAC9H,EAAO,OAAA;AAAA,IACL,EAAI,EAAA,aAAA;AAAA,IACJ,GAAG,cAAe,CAAA,WAAA,EAAa,UAAU,CAAA;AAAA,IACzC,UAAU,kBAAmB,CAAA,WAAA,CAAY,eAAe,CAAE,CAAA,CAAC,GAAG,OAAO,CAAA;AAAA,IAErE,IAAI,WAAe,GAAA;AACjB,MAAA,OAAO,KAAK,QAAS,CAAA,WAAA,CAAA;AAAA,KACvB;AAAA,IAEA,IAAI,YAAgB,GAAA;AAClB,MAAA,OAAO,KAAK,QAAS,CAAA,QAAA,CAAA;AAAA,KACvB;AAAA,IAEA,IAAI,gBAAoB,GAAA;AACtB,MAAA,OAAO,KAAK,QAAS,CAAA,UAAA,CAAA;AAAA,KACvB;AAAA,IAEA,IAAI,iBAAqB,GAAA;AACvB,MAAA,OAAO,KAAK,QAAS,CAAA,YAAA,CAAA;AAAA,KACvB;AAAA,IAEA,IAAI,OAAW,GAAA;AACb,MAAA,OAAO,KAAK,QAAS,CAAA,OAAA,CAAA;AAAA,KACvB;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;AC5BO,IAAM,kBAAA,GAAqB,CAAC,QAAgC,KAAA;AACjE,EAAO,OAAA;AAAA,IACL,IAAI,QAAS,CAAA,CAAA;AAAA,IACb,MAAM,QAAS,CAAA,CAAA;AAAA,IACf,OAAA,EAAS,SAAS,SAAa,IAAA,KAAA;AAAA,GACjC,CAAA;AACF,CAAA,CAAA;;;ACJO,IAAM,gBAAmB,GAAA,CAAC,MAAa,EAAA,OAAA,EAAwB,UAA2C,KAAA;AAC/G,EAAO,OAAA;AAAA,IACL,EAAI,EAAA,QAAA;AAAA,IACJ,GAAG,cAAe,CAAA,MAAA,EAAQ,UAAU,CAAA;AAAA,IAEpC,SAAA,EAAW,MAAO,CAAA,cAAA,CAAe,CAAE,CAAA,GAAA,CAAI,CAAC,QAAkB,KAAA,kBAAA,CAAmB,QAAU,EAAA,OAAO,CAAC,CAAA;AAAA,IAC/F,aAAa,MAAO,CAAA,cAAA;AAAA,GACtB,CAAA;AACF,CAAA,CAAA;;;ACPO,IAAM,UAAA,GAAa,CAACM,KAAAA,EAAW,OAAiC,KAAA;AACrE,EAAA,MAAM,UAA6BA,GAAAA,KAAAA,CAAK,eAAgB,CAAA,CAAA,CAAE,IAAI,kBAAkB,CAAA,CAAA;AAEhF,EAAO,OAAA;AAAA,IACL,UAAA;AAAA,IACA,KAAA,EAAOA,MAAK,aAAc,CAAA,CAAC,EAAE,eAAgB,CAAA,CAAA,CAAE,GAAI,CAAA,CAAC,IAAc,KAAA;AAChE,MAAIC,IAAAA,QAAAA,CAAAA;AAEJ,MAAI,IAAA,IAAA,CAAK,cAAgB,EAAAA,QAAU,GAAA,qBAAA,CAAA;AAAA,WAC1B,IAAA,IAAA,CAAK,UAAY,EAAAA,QAAU,GAAA,gBAAA,CAAA;AAAA,WAC/B,MAAM,IAAI,gBAAA,CAAiB,YAAY,CAAA,CAAA;AAE5C,MAAOA,OAAAA,QAAAA,CAAQ,IAAM,EAAA,OAAA,EAAS,UAAU,CAAA,CAAA;AAAA,KACzC,CAAA;AAAA,GACH,CAAA;AACF,CAAA,CAAA;;;ACfa,IAAA,IAAA,GAAO,OAAO,OAA0C,KAAA;AACnE,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,gBAAkB,EAAA;AAAA,IACvD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,IAAK,EAAA;AAAA,IAExC,OAAS,EAAA;AAAA,MACP,aAAe,EAAA;AAAA,QACb,EAAI,EAAA,EAAA;AAAA,QACJ,CAAG,EAAA,YAAA,CAAa,CAAC,CAAC,CAAC,CAAA;AAAA,OACrB;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,UAAW,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AAClD,EAAA;;;AChBO,IAAM,qBAAA,GAAwB,CAAC,OAAkC,KAAA;AACtE,EAAM,MAAA,CAAC,WAAa,EAAA,aAAa,CAAK,GAAA,OAAA,CAAQ,UAAqB,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AACxF,EAAA,MAAM,kBAAkB,OAAQ,CAAA,sBAAA,CAAA;AAEhC,EAAO,OAAA;AAAA,IACL,IAAI,OAAQ,CAAA,IAAA;AAAA,IACZ,SAAW,EAAA,iBAAA,CAAkB,OAAQ,CAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IAChD,OAAS,EAAA,iBAAA,CAAkB,OAAQ,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC5C,WAAW,OAAQ,CAAA,QAAA;AAAA,IACnB,QAAQ,OAAQ,CAAA,OAAA;AAAA,IAChB,WAAA;AAAA,IAAa,aAAA;AAAA,IACb,YAAY,OAAQ,CAAA,QAAA;AAAA,IACpB,sBAAsB,OAAQ,CAAA,oBAAA;AAAA,IAC9B,uBAAuB,OAAQ,CAAA,MAAA;AAAA,IAC/B,eAAA;AAAA,IACA,QAAQ,CAAC,eAAA,IAAmB,QAAQ,WAAY,CAAA,CAAA,CAAE,CAAC,CAAE,CAAA,CAAA;AAAA,GACvD,CAAA;AACF,CAAA,CAAA;;;ACjBO,IAAM,mBAAA,GAAsB,CAAC,KAA8B,KAAA;AAChE,EAAA,MAAM,kBAAkB,KAAM,CAAA,sBAAA,CAAA;AAC9B,EAAA,MAAM,YAAY,KAAM,CAAA,QAAA,CAAA;AAExB,EAAO,OAAA;AAAA,IACL,IAAI,KAAM,CAAA,CAAA;AAAA,IACV,IAAM,EAAA,iBAAA,CAAkB,KAAM,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,IACpC,SAAS,KAAM,CAAA,KAAA;AAAA,IACf,SAAA;AAAA,IACA,aAAA,EAAe,aAAa,KAAM,CAAA,aAAA;AAAA,IAClC,sBAAsB,KAAM,CAAA,oBAAA;AAAA,IAC5B,uBAAuB,KAAM,CAAA,MAAA;AAAA,IAC7B,eAAA;AAAA,IACA,QAAQ,CAAC,eAAA,IAAmB,MAAM,WAAY,CAAA,CAAA,CAAE,CAAC,CAAE,CAAA,CAAA;AAAA,GACrD,CAAA;AACF,CAAA,CAAA;;;ACdO,IAAM,wBAAA,GAA2B,CAAC,UAAA,EAAiB,OAA+C,KAAA;AACvG,EAAO,OAAA;AAAA,IACL,IAAI,UAAW,CAAA,CAAA;AAAA,IACf,KAAA,EAAO,UAAW,CAAA,MAAA,CAAO,CAAE,CAAA,CAAA;AAAA,IAC3B,OAAA,EAAS,WAAW,WAAY,CAAA,CAAA,CAAE,IAAI,CAAC,KAAA,KAAe,MAAM,CAAC,CAAA;AAAA,IAE7D,WAAW,UAAW,CAAA,eAAA;AAAA,IACtB,cAAA,EAAgB,CAAC,UAAW,CAAA,SAAA;AAAA,IAE5B,UAAU,UAAW,CAAA,aAAA;AAAA,IACrB,iBAAA,EAAmB,UAAW,CAAA,YAAA,CAAa,CAAE,CAAA,GAAA,CAAI,CAAC,QAAkB,KAAA,gBAAA,CAAiB,QAAU,EAAA,OAAO,CAAC,CAAA;AAAA,IAEvG,eAAe,UAAW,CAAA,aAAA;AAAA,IAC1B,sBAAA,EAAwB,UAAW,CAAA,sBAAA,CAAuB,CAAE,CAAA,GAAA,CAAI,CAAC,QAAkB,KAAA,gBAAA,CAAiB,QAAU,EAAA,OAAO,CAAC,CAAA;AAAA,IAEtH,KAAA,EAAO,UAAW,CAAA,SAAA,CAAU,CAAE,CAAA,CAAA;AAAA,IAC9B,SAAW,EAAA,iBAAA,CAAkB,UAAW,CAAA,WAAA,CAAY,CAAC,CAAA;AAAA,IAErD,iBAAiB,UAAW,CAAA,KAAA;AAAA,GAC9B,CAAA;AACF,CAAA,CAAA;;;ACpBO,IAAM,yBAAA,GAA4B,CAAC,WAA0C,KAAA;AAClF,EAAI,IAAA,OAAA,CAAA;AAEJ,EAAI,IAAA,GAAA,IAAO,YAAY,OAAQ,CAAA,CAAA,IAAK,YAAY,OAAQ,CAAA,CAAA,CAAE,MAAM,GAAK,EAAA;AACnE,IAAU,OAAA,GAAA,aAAA,CAAc,WAAY,CAAA,OAAA,CAAQ,CAAC,CAAA,CAAA;AAAA,GAC/C;AAEA,EAAO,OAAA;AAAA,IACL,IAAI,WAAY,CAAA,CAAA;AAAA,IAChB,IAAM,EAAA,iBAAA,CAAkB,WAAY,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,IAE1C,QAAQ,WAAY,CAAA,MAAA;AAAA,IACpB,sBAAsB,WAAY,CAAA,iBAAA;AAAA,IAElC,MAAM,WAAY,CAAA,CAAA;AAAA,IAClB,MAAM,WAAY,CAAA,gBAAA;AAAA,IAClB,SAAA,EAAW,WAAY,CAAA,QAAA,CAAS,CAAE,CAAA,CAAA;AAAA,IAElC,OAAA;AAAA,IACA,QAAQ,WAAY,CAAA,WAAA;AAAA,GACtB,CAAA;AACF,CAAA,CAAA;;;ACpBO,IAAM,kCAAA,GAAqC,CAAC,IAAA,EAAW,OAAyD,KAAA;AACrH,EAAO,OAAA;AAAA,IACL,IAAI,IAAK,CAAA,CAAA;AAAA,IACT,KAAA,EAAO,IAAK,CAAA,MAAA,CAAO,CAAE,CAAA,CAAA;AAAA,IACrB,UAAU,IAAK,CAAA,WAAA;AAAA,IACf,OAAA,EAAS,KAAK,WAAY,CAAA,CAAA,CAAE,IAAI,CAAC,KAAA,KAAe,MAAM,CAAC,CAAA;AAAA,IAEvD,WAAW,IAAK,CAAA,eAAA;AAAA,IAEhB,eAAe,IAAK,CAAA,aAAA;AAAA,IACpB,sBAAA,EAAwB,IAAK,CAAA,sBAAA,CAAuB,CAAE,CAAA,GAAA,CAAI,CAAC,QAAkB,KAAA,gBAAA,CAAiB,QAAU,EAAA,OAAO,CAAC,CAAA;AAAA,IAEhH,aAAA,EAAe,IAAK,CAAA,QAAA,CAAS,CAAE,CAAA,CAAA;AAAA,IAC/B,KAAA,EAAO,IAAK,CAAA,SAAA,CAAU,CAAE,CAAA,CAAA;AAAA,IACxB,SAAW,EAAA,iBAAA,CAAkB,IAAK,CAAA,WAAA,CAAY,CAAC,CAAA;AAAA,IAC/C,SAAW,EAAA,iBAAA,CAAkB,IAAK,CAAA,SAAA,CAAU,CAAC,CAAA;AAAA,IAC7C,OAAS,EAAA,iBAAA,CAAkB,IAAK,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IACzC,kBAAoB,EAAA,YAAA,CAAa,IAAK,CAAA,aAAA,CAAc,CAAC,CAAA;AAAA,GACvD,CAAA;AACF,CAAA,CAAA;;;ACjBO,IAAM,cAAA,GAAiB,CAACC,SAAAA,EAAe,OAAqC,KAAA;AACjF,EAAA,MAAM,WAA8B,EAAC,CAAA;AACrC,EAAA,MAAM,SAA0B,EAAC,CAAA;AACjC,EAAA,MAAM,cAAoC,EAAC,CAAA;AAC3C,EAAA,MAAM,eAAsC,EAAC,CAAA;AAC7C,EAAA,MAAM,wBAAwD,EAAC,CAAA;AAE/D,EAAW,KAAA,MAAA,IAAA,IAAQA,SAAS,CAAA,aAAA,CAAc,CAAG,EAAA;AAC3C,IAAA,QAAQ,KAAK,CAAG;AAAA,MACd,KAAK,EAAA;AACH,QAAS,QAAA,CAAA,IAAA,CAAK,qBAAsB,CAAA,IAAI,CAAC,CAAA,CAAA;AACzC,QAAA,MAAA;AAAA,MACF,KAAK,EAAA;AACH,QAAO,MAAA,CAAA,IAAA,CAAK,mBAAoB,CAAA,IAAI,CAAC,CAAA,CAAA;AACrC,QAAA,MAAA;AAAA,MACF,KAAK,EAAA;AACH,QAAA,WAAA,CAAY,IAAK,CAAA,wBAAA,CAAyB,IAAM,EAAA,OAAO,CAAC,CAAA,CAAA;AACxD,QAAA,MAAA;AAAA,MACF,KAAK,EAAA;AACH,QAAa,YAAA,CAAA,IAAA,CAAK,yBAA0B,CAAA,IAAI,CAAC,CAAA,CAAA;AACjD,QAAA,MAAA;AAAA,MACF,KAAK,EAAA;AACH,QAAA,qBAAA,CAAsB,IAAK,CAAA,kCAAA,CAAmC,IAAM,EAAA,OAAO,CAAC,CAAA,CAAA;AAC5E,QAAA,MAAA;AAAA,KACJ;AAAA,GACF;AAOA,EAAO,OAAA;AAAA,IACL,QAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;ACxCa,IAAA,QAAA,GAAW,OAAO,OAAA,EAAwB,MAAsC,KAAA;AAC3F,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,cAAgB,EAAA;AAAA,IACrD,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,QAAS,EAAA;AAAA,IAE5C,OAAS,EAAA;AAAA,MACP,OAAA,EAAS,aAAa,MAAM,CAAA;AAAA,MAE5B,SAAW,EAAA;AAAA,QACT,EAAI,EAAA,CAAA;AAAA,QACJ,CAAA,EAAG,iBAAkB,CAAA,MAAA,CAAO,SAAS,CAAA;AAAA,OACvC;AAAA,MAEA,OAAS,EAAA;AAAA,QACP,EAAI,EAAA,CAAA;AAAA,QACJ,CAAA,EAAG,iBAAkB,CAAA,MAAA,CAAO,OAAO,CAAA;AAAA,OACrC;AAAA,KACF;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,cAAe,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AACtD,EAAA;;;ACxBa,IAAA,UAAA,GAAa,OAAO,OAAA,EAAwB,OAAsC,KAAA;AAC7F,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,qBAAuB,EAAA;AAAA,IAC5D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,QAAS,EAAA;AAAA,IAE5C,OAAS,EAAA;AAAA,MACP,KAAK,OAAQ,CAAA,GAAA;AAAA,KACf;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAO,OAAA,QAAA,CAAS,IAAK,CAAA,aAAA,CAAc,MAAO,CAAA,CAAA,CAAA;AAC5C,EAAA;;;ACPa,IAAA,mBAAA,GAAsB,OAAO,OAAA,EAAwB,UAAmD,KAAA;AACnH,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,oBAAsB,EAAA;AAAA,IAC3D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,SAAU,EAAA;AAAA,IAE7C,OAAS,EAAA;AAAA,MACP,OAAS,EAAA,IAAA;AAAA,MACT,cAAA,EAAgB,EAAE,CAAA,EAAG,UAAW,EAAA;AAAA,KAClC;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AAEpC,EAAA,OAAO,QAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,EAAE,CAAC,CAAA,CAAE,kBAAmB,CAAA,CAAA,CACtE,IAAI,CAAC,UAAA,KAAoB,gBAAiB,CAAA,UAAA,EAAY,OAAO,CAAC,CAAA,CAAA;AACnE,EAAA;;;ACjBO,IAAM,qBAAA,GAAwB,CAAC,OAAA,EAAc,OAA4C,KAAA;AAC9F,EAAO,OAAA;AAAA,IACL,IAAI,OAAQ,CAAA,CAAA;AAAA,IACZ,OAAO,OAAQ,CAAA,CAAA;AAAA,IACf,WAAA,EAAa,QAAQ,UAAW,CAAA,CAAA;AAAA,IAChC,QAAA,EAAU,OAAQ,CAAA,SAAA,CAAU,CAAE,CAAA,CAAA;AAAA,IAC9B,KAAA,EAAO,OAAQ,CAAA,gBAAA,CAAiB,CAAE,CAAA,GAAA,CAAI,CAAC,UAAoB,KAAA,gBAAA,CAAiB,UAAY,EAAA,OAAO,CAAC,CAAA;AAAA,IAChG,MAAA,EAAQ,QAAQ,WAAY,CAAA,CAAA,CAAE,IAAI,CAAC,KAAA,KAAe,qBAAsB,CAAA,KAAK,CAAC,CAAA;AAAA;AAAA,IAE9E,gBAAgB,OAAQ,CAAA,gBAAA;AAAA,GAC1B,CAAA;AACF,CAAA,CAAA;;;ACVO,IAAM,cAAA,GAAiB,CAACR,SAAAA,EAAe,OAAqC,KAAA;AACjF,EAAO,OAAA;AAAA,IACL,IAAIA,SAAS,CAAA,CAAA;AAAA,IACb,SAAW,EAAA,iBAAA,CAAkBA,SAAS,CAAA,IAAA,CAAK,CAAC,CAAA;AAAA,IAC5C,OAAS,EAAA,iBAAA,CAAkBA,SAAS,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAC7C,OAAS,EAAA,aAAA,CAAcA,SAAS,CAAA,OAAA,CAAQ,CAAC,CAAA;AAAA,IAEzC,cAAA,EAAgB,OAAOA,SAAAA,CAAS,OAAY,KAAA,WAAA;AAAA,IAC5C,oBAAoBA,SAAS,CAAA,OAAA,EAAS,KAAK,iBAAkBA,CAAAA,SAAAA,CAAS,QAAQ,CAAC,CAAA;AAAA,IAE/E,QAAA,EAAUA,UAAS,gBAAiB,CAAA,CAAA,CAAE,IAAI,CAAC,OAAA,KAAiB,QAAQ,CAAC,CAAA;AAAA,IACrE,MAAA,EAAQA,UAAS,YAAa,CAAA,CAAA,CAAE,IAAI,CAAC,KAAA,KAAe,MAAM,CAAC,CAAA;AAAA,IAE3D,iBAAiBA,SAAS,CAAA,WAAA;AAAA,IAC1B,QAAA,EAAUA,SAAS,CAAA,aAAA,CAAc,CAAE,CAAA,GAAA,CAAI,CAAC,OAAiB,KAAA,qBAAA,CAAsB,OAAS,EAAA,OAAO,CAAC,CAAA;AAAA,GAClG,CAAA;AACF,CAAA,CAAA;;;ACjBa,IAAA,QAAA,GAAW,OAAO,OAAA,EAAwB,UAA0C,KAAA;AAC/F,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,oBAAsB,EAAA;AAAA,IAC3D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,SAAU,EAAA;AAAA,IAE7C,OAAS,EAAA;AAAA,MACP,cAAA,EAAgB,EAAE,CAAA,EAAG,UAAW,EAAA;AAAA,KAClC;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AAEpC,EAAA,MAAMA,YAAW,QAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,mBAAA,CAAoB,EAAE,CAAC,CAAA,CAAA;AAC9D,EAAO,OAAA,cAAA,CAAeA,WAAU,OAAO,CAAA,CAAA;AACzC,EAAA;;;ACbA,IAAMO,QAAAA,GAAU,CAAC,OAAA,EAAwB,IAA+B,KAAA;AACtE,EAAO,OAAA,IAAA,CAAK,oBAAoB,CAAE,CAAA,GAAA,CAAI,CAACP,SAAkB,KAAA,cAAA,CAAeA,SAAU,EAAA,OAAO,CAAC,CAAA,CAAA;AAC5F,CAAA,CAAA;AAEO,IAAM,iBAAoB,GAAA,OAAO,OAAwB,EAAA,UAAA,EAAoB,mBAAsD,KAAA;AACxI,EAAA,MAAM,QAAQ,MAAM,gBAAA,CAAiB,SAAS,WAAY,CAAA,SAAA,EAAW,YAAY,mBAAmB,CAAA,CAAA;AACpG,EAAOO,OAAAA,QAAAA,CAAQ,SAAS,KAAK,CAAA,CAAA;AAC/B,EAAA;AAEO,IAAM,sBAAyB,GAAA,OAAO,OAAwB,EAAA,SAAA,EAAiB,OAAuC,KAAA;AAC3H,EAAA,MAAM,QAAQ,MAAM,qBAAA,CAAsB,SAAS,WAAY,CAAA,SAAA,EAAW,WAAW,OAAO,CAAA,CAAA;AAC5F,EAAA,OAAOA,QAAQ,CAAA,OAAA,EAAS,KAAK,CAAA,CAAE,MAAO,CAAA,CAAC,MAAW,KAAA,SAAA,IAAa,MAAO,CAAA,OAAA,IAAW,MAAO,CAAA,OAAA,IAAW,OAAO,CAAA,CAAA;AAC5G,EAAA;;;ACXa,IAAA,2BAAA,GAA8B,OAAO,OAAA,EAAwB,WAA0C,KAAA;AAClH,EAAM,MAAA,IAAA,GAAO,QAAQ,OAAO,CAAA,CAAA;AAE5B,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,8BAAgC,EAAA;AAAA,IACrE,OAAS,EAAA;AAAA,MACP,QAAQ,sBAAuB,CAAA,mCAAA;AAAA,MAC/B,YAAY,GAAI,CAAA,OAAA,CAAQ,aAAa,IAAK,CAAA,GAAA,EAAK,KAAK,EAAE,CAAA;AAAA,KACxD;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAO,OAAA,QAAA,CAAS,KAAK,OAAQ,CAAA,MAAA,CAAA;AAC/B,EAAA;;;ACZa,IAAA,gBAAA,GAAmB,OAAO,OAAA,EAAwB,GAAkC,KAAA;AAC/F,EAAM,MAAA,IAAA,GAAO,QAAQ,OAAO,CAAA,CAAA;AAE5B,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,8BAAgC,EAAA;AAAA,IACrE,OAAS,EAAA;AAAA,MACP,QAAQ,sBAAuB,CAAA,gBAAA;AAAA,MAC/B,SAAS,GAAI,CAAA,OAAA,CAAQ,KAAK,IAAK,CAAA,GAAA,EAAK,KAAK,EAAE,CAAA;AAAA,KAC7C;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAO,OAAA,QAAA,CAAS,KAAK,OAAQ,CAAA,MAAA,CAAA;AAC/B,EAAA;;;ACZO,IAAM,YAAe,GAAA,OAAO,OAAwB,EAAA,MAAA,EAAuB,OAK7D,KAAA;AACnB,EAAA,MAAM,IAAY,GAAA;AAAA,IAChB,QAAQ,sBAAuB,CAAA,gCAAA;AAAA,GACjC,CAAA;AAEA,EAAM,MAAA,IAAA,GAAO,QAAQ,OAAO,CAAA,CAAA;AAE5B,EAAI,IAAA,OAAO,OAAQ,CAAA,IAAA,KAAS,QAAU,EAAA;AACpC,IAAA,IAAA,CAAK,OAAO,OAAQ,CAAA,IAAA,CAAA;AAAA,GACtB;AAEA,EAAA,IAAI,QAAQ,QAAU,EAAA;AACpB,IAAK,IAAA,CAAA,UAAA,GAAa,IAAI,OAAQ,CAAA,OAAA,CAAQ,UAAU,IAAK,CAAA,GAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AAAA,GACnE;AAEA,EAAA,IAAI,QAAQ,GAAK,EAAA;AACf,IAAK,IAAA,CAAA,OAAA,GAAU,IAAI,OAAQ,CAAA,OAAA,CAAQ,KAAK,IAAK,CAAA,GAAA,EAAK,KAAK,EAAE,CAAA,CAAA;AAAA,GAC3D;AAEA,EAAA,IAAI,QAAQ,UAAY,EAAA;AACtB,IAAA,IAAA,CAAK,kBAAqB,GAAA,IAAA,CAAA;AAC1B,IAAA,IAAA,CAAK,oBAAoB,OAAQ,CAAA,UAAA,CAAA;AAAA,GACnC;AAEA,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,8BAAgC,EAAA;AAAA,IACrE,OAAS,EAAA,IAAA;AAAA,GACV,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,IAAA,CAAK,OAAQ,CAAA,yBAAA,CAAA;AAEpC,EAAA,IAAI,KAAO,EAAA;AACT,IAAO,MAAA,CAAA,OAAA,CAAQ,eAAe,yBAA4B,GAAA,KAAA,CAAA;AAAA,GAC5D;AACF,EAAA;;;ACtCa,IAAA,cAAA,GAAiB,OAAO,OAAA,EAAwB,MAAqC,KAAA;AAChG,EAAA,MAAM,KAAQ,GAAA,EAAA,CAAA;AACd,EAAA,IAAI,OAAO,MAAS,GAAA,KAAA,EAAa,MAAA,IAAI,2BAA2B,KAAK,CAAA,CAAA;AAErE,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,8BAAgC,EAAA;AAAA,IACrE,OAAS,EAAA;AAAA,MACP,QAAQ,sBAAuB,CAAA,sCAAA;AAAA,MAC/B,OAAS,EAAA,MAAA;AAAA,KACX;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAO,OAAA,QAAA,CAAS,KAAK,OAAQ,CAAA,SAAA,CAAA;AAC/B,EAAA;;;ACnBO,IAAM,uBAAA,GAA0B,CAAC,IAAA,EAAc,KAAoB,KAAA;AACxE,EAAO,OAAA;AAAA,IACL,CAAC,IAAI,GAAG,KAAA;AAAA,IACR,CAAC,IAAK,CAAA,CAAC,CAAE,CAAA,WAAA,KAAgB,IAAK,CAAA,SAAA,CAAU,CAAC,CAAC,GAAG,KAAA;AAAA,GAC/C,CAAA;AACF,CAAA,CAAA;;;ACFO,IAAM,kBAAA,GAAqB,CAACP,SAAiC,MAAA;AAAA,EAClE,GAAGA,SAAS,CAAA,IAAA;AAAA,EACZ,GAAGA,SAAS,CAAA,IAAA;AAAA,EACZ,GAAGA,SAAS,CAAA,EAAA;AACd,CAAA,CAAA,CAAA;;;ACLO,IAAM,0BAAA,GAA6B,CACxC,EAAE,QAAA,EAAU,EAAE,OAAQ,EAAA,IACtB,QACuC,KAAA;AACvC,EAAI,IAAA,QAAA,GAAW,QAAQ,MAAQ,EAAA;AAC7B,IAAW,QAAA,GAAA,QAAA,IAAY,QAAQ,MAAS,GAAA,CAAA,CAAA,CAAA;AAAA,GAC1C;AAEA,EAAM,MAAA,SAAA,GAAY,QAAQ,QAAQ,CAAA,CAAA;AAElC,EAAM,MAAA,CAAC,OAAO,OAAO,CAAA,GAAI,UAAU,KAAM,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,MAAM,CAAA,CAAA;AACxD,EAAO,OAAA,EAAE,OAAO,OAAQ,EAAA,CAAA;AAC1B,CAAA,CAAA;;;ACTO,IAAM,oBAAA,GAAuB,CAAC,IAAA,EAAW,OAA2C,KAAA;AACzF,EAAA,MAAM,SAAY,GAAA,iBAAA,CAAkB,IAAK,CAAA,WAAA,CAAY,CAAC,CAAA,CAAA;AACtD,EAAA,MAAM,gBAAgB,IAAK,CAAA,KAAA,CAAA;AAC3B,EAAA,MAAM,cAAc,IAAK,CAAA,KAAA,CAAA;AACzB,EAAI,IAAA,OAAA,CAAA;AAEJ,EAAA,IAAI,OAAO,IAAA,CAAK,cAAgB,EAAA,CAAA,KAAM,QAAU,EAAA;AAC9C,IAAU,OAAA,GAAA,iBAAA,CAAkB,IAAK,CAAA,cAAA,CAAe,CAAC,CAAA,CAAA;AAAA,GAE9C,MAAA;AACH,IAAA,MAAM,QAAW,GAAA,aAAA,GAAgB,OAAQ,CAAA,QAAA,CAAS,eAAe,WAAc,GAAA,CAAA,CAAA;AAC/E,IAAM,MAAA,OAAA,GAAU,0BAA2B,CAAA,OAAA,EAAS,QAAQ,CAAA,CAAA;AAE5D,IAAU,OAAA,GAAA,IAAI,KAAK,SAAS,CAAA,CAAA;AAC5B,IAAA,OAAA,CAAQ,QAAS,CAAA,OAAA,CAAQ,KAAO,EAAA,OAAA,CAAQ,OAAO,CAAA,CAAA;AAAA,GACjD;AAEA,EAAO,OAAA;AAAA,IACL,IAAI,IAAK,CAAA,CAAA;AAAA,IACT,iBAAiB,IAAK,CAAA,WAAA;AAAA,IACtB,OAAO,IAAK,CAAA,IAAA;AAAA,IACZ,SAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAY,EAAA,qBAAA,CAAsB,SAAW,EAAA,OAAA,CAAQ,SAAS,WAAW,CAAA;AAAA,GAC3E,CAAA;AACF,CAAA,CAAA;;;AC7BO,IAAM,4BAAA,GAA+B,CAAC,IAAA,EAAW,OAAmD,KAAA;AACzG,EAAO,OAAA;AAAA,IACL,EAAI,EAAA,UAAA;AAAA,IACJ,GAAG,oBAAqB,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA,IAErC,OAAO,IAAK,CAAA,KAAA;AAAA,IACZ,YAAY,IAAK,CAAA,eAAA;AAAA,IACjB,kBAAkB,IAAK,CAAA,YAAA;AAAA,IACvB,eAAe,IAAK,CAAA,OAAA;AAAA,GACtB,CAAA;AACF,CAAA,CAAA;;;ACVO,IAAM,6BAAA,GAAgC,CAAC,IAAA,EAAW,OAAoD,KAAA;AAC3G,EAAI,IAAA,KAAA,CAAA;AAEJ,EAAA,MAAM,gBAA0B,EAAC,CAAA;AACjC,EAAA,MAAM,eAAyB,EAAC,CAAA;AAChC,EAAA,MAAM,aAAuB,EAAC,CAAA;AAE9B,EAAA,IAAI,mBAAmB,IAAM,EAAA;AAC3B,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,aAAA,CAAc,CAAG,EAAA;AACvC,MAAA,MAAM,QAAQ,IAAK,CAAA,CAAA,CAAA;AAEnB,MAAA,IAAI,KAAK,UAAY,EAAA;AACnB,QAAQ,KAAA,GAAA,KAAA,CAAA;AAAA,OACV,MAAA,IACS,OAAO,IAAM,EAAA;AACpB,QAAA,QAAQ,KAAK,CAAG;AAAA,UACd,KAAK,CAAA;AACH,YAAA,YAAA,CAAa,KAAK,KAAK,CAAA,CAAA;AACvB,YAAA,MAAA;AAAA,UACF,KAAK,EAAA;AACH,YAAA,aAAA,CAAc,KAAK,KAAK,CAAA,CAAA;AACxB,YAAA,MAAA;AAAA,UACF,KAAK,EAAA;AACH,YAAA,UAAA,CAAW,KAAK,KAAK,CAAA,CAAA;AACrB,YAAA,MAAA;AAAA,SACJ;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA;AAAA,IACL,EAAI,EAAA,WAAA;AAAA,IACJ,GAAG,oBAAqB,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA,IAErC,KAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;ACtCO,IAAM,0BAAA,GAA6B,CAAC,IAAA,EAAW,OAAiD,KAAA;AACrG,EAAA,MAAM,oBAA8B,EAAC,CAAA;AACrC,EAAA,MAAM,eAAyB,EAAC,CAAA;AAChC,EAAA,MAAM,gBAA0B,EAAC,CAAA;AACjC,EAAA,MAAM,aAAuB,EAAC,CAAA;AAC9B,EAAA,MAAM,aAAuB,EAAC,CAAA;AAC9B,EAAI,IAAA,OAAA,CAAA;AACJ,EAAI,IAAA,gBAAA,CAAA;AAEJ,EAAA,IAAI,KAAK,WAAa,EAAA;AACpB,IAAW,KAAA,MAAA,gBAAA,IAAoB,IAAK,CAAA,WAAA,CAAY,CAAG,EAAA;AACjD,MAAkB,iBAAA,CAAA,IAAA,CAAK,iBAAiB,GAAG,CAAA,CAAA;AAAA,KAC7C;AAAA,GACF;AAEA,EAAA,IAAI,KAAK,aAAe,EAAA;AACtB,IAAW,KAAA,MAAA,IAAA,IAAQ,IAAK,CAAA,aAAA,CAAc,CAAG,EAAA;AACvC,MAAA,QAAQ,KAAK,CAAG;AAAA,QACd,KAAK,EAAA;AACH,UAAA,OAAA,GAAU,cAAc,IAAI,CAAA,CAAA;AAC5B,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAa,YAAA,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AACxB,UAAA,MAAA;AAAA,QACF,KAAK,EAAA;AACH,UAAc,aAAA,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AACzB,UAAA,MAAA;AAAA,QACF,KAAK,EAAA;AACH,UAAW,UAAA,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AACtB,UAAA,MAAA;AAAA,QACF,KAAK,CAAA;AACH,UAAW,UAAA,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,CAAA;AACtB,UAAA,MAAA;AAAA,OACJ;AAAA,KACF;AAAA,GACF;AAEA,EAAI,IAAA,IAAA,CAAK,OAAW,IAAA,IAAA,CAAK,cAAgB,EAAA;AACvC,IAAmB,gBAAA,GAAA,IAAA,CAAK,eAAe,CAAE,CAAA,CAAA,CAAA;AAAA,GAC3C;AAEA,EAAO,OAAA;AAAA,IACL,EAAI,EAAA,QAAA;AAAA,IACJ,GAAG,oBAAqB,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA,IACrC,MAAM,IAAK,CAAA,CAAA;AAAA,IACX,QAAQ,IAAK,CAAA,MAAA;AAAA,IACb,QAAA,EAAU,KAAK,SAAa,IAAA,KAAA;AAAA,IAC5B,QAAA,EAAU,KAAK,aAAiB,IAAA,KAAA;AAAA,IAChC,IAAM,EAAA,IAAA,CAAK,cAAgB,EAAA,CAAA,CAAE,SAAa,IAAA,KAAA;AAAA,IAC1C,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,gBAAA;AAAA,GACF,CAAA;AACF,CAAA,CAAA;;;ACxDA,IAAM,wBAAA,GAA2B,CAAC,IAAuB,KAAA;AACvD,EAAO,OAAA,sBAAA,IAA0B,QAAQ,IAAK,CAAA,oBAAA,CAAA;AAChD,CAAA,CAAA;AAEA,IAAM,yBAAA,GAA4B,CAAC,IAAuB,KAAA;AACxD,EAAA,OAAO,YAAgB,IAAA,IAAA,IAAQ,OAAO,IAAA,CAAK,UAAe,KAAA,WAAA,CAAA;AAC5D,CAAA,CAAA;AAEO,IAAM,eAAA,GAAkB,CAACC,UAAAA,EAAgB,OAAsC,KAAA;AACpF,EAAO,OAAA;AAAA,IACL,UAAUA,UAAU,CAAA,QAAA;AAAA,IACpB,mBAAA,EAAqBA,WAAU,eAAmB,IAAA,IAAA;AAAA,IAElD,UAAUA,UAAU,CAAA,UAAA,IAAc,EAAI,EAAA,GAAA,CAAI,CAAC,IAAc,KAAA;AACvD,MAAI,IAAA,wBAAA,CAAyB,IAAI,CAAG,EAAA;AAClC,QAAO,OAAA,4BAAA,CAA6B,MAAM,OAAO,CAAA,CAAA;AAAA,OACnD;AAEA,MAAI,IAAA,yBAAA,CAA0B,IAAI,CAAG,EAAA;AACnC,QAAO,OAAA,6BAAA,CAA8B,MAAM,OAAO,CAAA,CAAA;AAAA,OACpD;AAEA,MAAO,OAAA,0BAAA,CAA2B,MAAM,OAAO,CAAA,CAAA;AAAA,KAChD,CAAA,CACE,IAAK,CAAA,CAAC,CAAmB,EAAA,CAAA,KACxB,CAAE,CAAA,SAAA,CAAU,OAAQ,EAAA,GAAI,CAAE,CAAA,SAAA,CAAU,SACrC,CAAA;AAAA,GACL,CAAA;AACF,CAAA,CAAA;;;AC1BA,IAAM,YAAY,OAAO,OAAA,EAAwB,KAAe,EAAA,UAAA,GAAa,EAA2B,KAAA;AACtG,EAAA,MAAM,OAAU,GAAA,IAAI,SAAU,CAAA,OAAA,EAAS,mBAAqB,EAAA;AAAA,IAC1D,WAAa,EAAA,EAAE,MAAQ,EAAA,WAAA,CAAY,SAAU,EAAA;AAAA,IAE7C,OAAS,EAAA;AAAA,MACP,YAAc,EAAA,KAAA;AAAA,MACd,gBAAkB,EAAA,KAAA;AAAA,MAElB,iBAAmB,EAAA,KAAA;AAAA,MACnB,8BAAgC,EAAA,KAAA;AAAA,MAEhC,qBAAuB,EAAA,IAAA;AAAA,MACvB,oBAAsB,EAAA,IAAA;AAAA,MACtB,mBAAqB,EAAA,IAAA;AAAA,MACrB,mBAAqB,EAAA,IAAA;AAAA,MACrB,kBAAoB,EAAA,IAAA;AAAA,MACpB,iBAAmB,EAAA,IAAA;AAAA,MAEnB,GAAK,EAAA,EAAE,CAAG,EAAA,EAAA,EAAI,GAAG,iBAAkB,EAAA;AAAA,MAEnC,GAAG,wBAAwB,WAAa,EAAA,kBAAA,CAAmB,QAAQ,IAAK,CAAA,SAAA,CAAU,KAAK,CAAC,CAAC,CAAA;AAAA,MACzF,GAAG,UAAA;AAAA,KACL;AAAA,GACD,CAAA,CAAA;AAED,EAAM,MAAA,QAAA,GAAW,MAAM,OAAA,CAAQ,IAAK,EAAA,CAAA;AACpC,EAAA,OAAO,eAAgB,CAAA,QAAA,CAAS,IAAK,CAAA,OAAA,EAAS,OAAO,CAAA,CAAA;AACvD,CAAA,CAAA;AAEO,IAAM,iBAAoB,GAAA,OAAO,OAAwB,EAAA,UAAA,EAAoB,QAAQ,CAA0B,KAAA;AACpH,EAAA,OAAO,UAAU,OAAS,EAAA,KAAA,EAAO,uBAAwB,CAAA,eAAA,EAAiB,UAAU,CAAC,CAAA,CAAA;AACvF,EAAA;AAEO,IAAM,yBAAyB,OAAO,OAAA,EAAwB,SAAiB,EAAA,OAAA,EAAgB,QAAQ,CAA0B,KAAA;AACtI,EAAO,OAAA,SAAA,CAAU,SAAS,KAAO,EAAA;AAAA,IAC/B,GAAG,wBAAwB,WAAa,EAAA;AAAA,MACtC,EAAI,EAAA,CAAA;AAAA,MACJ,CAAA,EAAG,kBAAkB,SAAS,CAAA;AAAA,KAC/B,CAAA;AAAA,IAED,GAAI,OAAW,IAAA,uBAAA,CAAwB,SAAW,EAAA;AAAA,MAChD,EAAI,EAAA,CAAA;AAAA,MACJ,CAAA,EAAG,kBAAkB,OAAO,CAAA;AAAA,KAC7B,CAAA;AAAA,GACF,CAAA,CAAA;AACH","file":"index.mjs","sourcesContent":["export const cleanURL = (url: string): string => {\n  let pronoteURL = new URL(url);\n  // Clean any unwanted data from URL.\n  pronoteURL = new URL(`${pronoteURL.protocol}//${pronoteURL.host}${pronoteURL.pathname}`);\n\n  // Clear the last path if we're not main selection menu.\n  const paths = pronoteURL.pathname.split(\"/\");\n  if (paths[paths.length - 1].includes(\".html\")) {\n    paths.pop();\n  }\n\n  // Rebuild URL with cleaned paths.\n  pronoteURL.pathname = paths.join(\"/\");\n\n  // Return rebuilt URL without trailing slash.\n  return pronoteURL.href.endsWith(\"/\")\n    ? pronoteURL.href.slice(0, -1)\n    : pronoteURL.href;\n};\n","import type { SessionHandle, WeekFrequency } from \"~/models\";\n\nexport const frequency = (session: SessionHandle, weekNumber: number): WeekFrequency | undefined => {\n  return session.instance.weekFrequencies.get(weekNumber);\n};\n","import type { SessionHandle } from \"~/models\";\n\nexport const timetableICalURL = (session: SessionHandle, iCalToken: string, fileName = \"timetable\"): string => {\n  const version = session.instance.version.join(\".\");\n  return `${session.information.url}/ical/${fileName}.ics?icalsecurise=${iCalToken}&version=${version}&param=266f3d32`;\n};\n","export class BadCredentialsError extends Error {\n  constructor() {\n    super(\"Unable to resolve the challenge, make sure the credentials or token are corrects\");\n    this.name = \"BadCredentialsError\";\n  }\n}\n\nexport class AuthenticateError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"AuthenticateError\";\n  }\n}\n\nexport class AccessDeniedError extends Error {\n  constructor() {\n    super(\"You do not have access to this area or your authorizations are insufficient\");\n    this.name = \"AccessDeniedError\";\n  }\n}\n\nexport class AccountDisabledError extends Error {\n  constructor() {\n    super(\"Your account has been deactivated\");\n    this.name = \"AccountDisabledError\";\n  }\n}\n","export class DiscussionActionError extends Error {\n  constructor() {\n    super(\"You can't send a message or a draft in this discussion\");\n    this.name = \"DiscussionActionError\";\n  }\n}\n\nexport class DiscussionMessagesMissingError extends Error {\n  constructor() {\n    super(\"You should request messages before sending anything\");\n    this.name = \"DiscussionMessagesMissingError\";\n  }\n}\n","/**\n * @example\n * const V1 = \"[1,3..4,6]\";\n * const V2 = \"[1,3,6]\";\n * const V3 = \"[1..6]\";\n *\n * console.log(decodeDomain(V1)); // [1, 3, 4, 6]\n * console.log(decodeDomain(V2)); // [1, 3, 6]\n * console.log(decodeDomain(V3)); // [1, 2, 3, 4, 5, 6]\n */\nexport const decodeDomain = (api: string): number[] => {\n  api = api.trim();\n  if (api[0] !== \"[\" || api[api.length - 1] !== \"]\") return [];\n\n  api = api.slice(1, -1);\n  if (api.length === 0) return [];\n\n  const output: number[] = [];\n\n  for (const part of api.split(\",\")) {\n    if (part.includes(\"..\")) {\n      const [start, end] = part.split(\"..\").map((n) => parseInt(n));\n      for (let index = start; index <= end; index++) output.push(index);\n    }\n    else output.push(parseInt(part));\n  }\n\n  return output;\n};\n","import type { PasswordRules } from \"~/models\";\nimport { decodeDomain } from \"./domain\";\n\nexport const decodePasswordRules = (rules: any): PasswordRules => {\n  return {\n    maxLength: rules.max,\n    minLength: rules.min,\n    rules: decodeDomain(rules.regles.V)\n  };\n};\n","import { decodeDomain } from \"./domain\";\nimport { decodePasswordRules } from \"./password-rules\";\nimport { DoubleAuthClientAction, type DoubleAuthMode, type SecurityModal } from \"~/models\";\n\nexport const decodeSecurityModal = (authentication: any, identity: any, initialUsername?: string): SecurityModal => {\n  const actions = decodeDomain(authentication.actionsDoubleAuth.V) as DoubleAuthClientAction[];\n\n  return {\n    availableSecurityModes: decodeDomain(authentication.modesPossibles.V) as DoubleAuthMode[],\n    defaultSecurityMode: authentication.modeSecurisationParDefaut,\n    passwordRules: decodePasswordRules(authentication.reglesSaisieMDP),\n\n    shouldCustomPassword: actions.includes(DoubleAuthClientAction.AIHMSC_PersonnalisationMotDePasse),\n    shouldCustomDoubleAuth: actions.includes(DoubleAuthClientAction.AIHMSC_ChoixStrategie),\n\n    shouldEnterPIN: actions.includes(DoubleAuthClientAction.AIHMSC_SaisieCodePINetSource),\n    shouldEnterSource: actions.includes(DoubleAuthClientAction.AIHMSC_SaisieSourcePourNotifSeulement),\n\n    context: {\n      authentication,\n      identity,\n      initialUsername\n    }\n  };\n};\n","import { decodeSecurityModal } from \"~/decoders/security-modal\";\nimport type { SecurityModal } from \"../security-modal\";\n\nexport class SecurityError extends Error {\n  public handle: SecurityModal;\n\n  constructor (authentication: any, identity: any, initialUsername?: string) {\n    super(\"You're asked to custom your security methods\");\n    this.name = \"SecurityError\";\n    this.handle = decodeSecurityModal(authentication, identity, initialUsername);\n  }\n}\n\nexport class SecuritySourceTooLongError extends Error {\n  constructor (limit: number) {\n    super(`The source name is too long, limited to ${limit} characters`);\n    this.name = \"SecuritySourceTooLongError\";\n  }\n}\n","export class SuspendedIPError extends Error {\n  constructor() {\n    super(\"Your IP address has been suspended\");\n    this.name = \"SuspendedIPError\";\n  }\n}\n\nexport class SessionExpiredError extends Error {\n  constructor() {\n    super(\"The session has expired\");\n    this.name = \"SessionExpiredError\";\n  }\n}\n\n\nexport class PageUnavailableError extends Error {\n  constructor() {\n    super(\"The requested page does not exist\");\n    this.name = \"PageUnavailableError\";\n  }\n}\n\nexport class BusyPageError extends Error {\n  constructor() {\n    super(\"The site is temporarily unavailable\");\n    this.name = \"BusyPageError\";\n  }\n}\n\nexport class RateLimitedError extends Error {\n  constructor() {\n    super(\"You've been rate-limited\");\n    this.name = \"RateLimitedError\";\n  }\n}\n\nexport class ServerSideError extends Error {\n  constructor(message = \"An error occurred, server-side\") {\n    super(message);\n    this.name = \"ServerSideError\";\n  }\n}\n","export class UnreachableError extends Error {\n  constructor(fn: string) {\n    super(`Unreachable code reached in '${fn}' function, please open an issue on GitHub (LiterateInk/Pawnote)`);\n    this.name = \"UnreachableError\";\n  }\n}\n","export class UploadSizeError extends Error {\n  constructor(maxSizeInBytes: number) {\n    super(`The file you are trying to upload is too large, maximum allowed is ${maxSizeInBytes} bytes`);\n    this.name = \"UploadSizeError\";\n  }\n}\n\nexport class UploadFailedError extends Error {\n  constructor() {\n    super(\"The file upload failed\");\n    this.name = \"UploadFailedError\";\n  }\n}\n","export const AccountKind = {\n  STUDENT: 6,\n  PARENT: 7,\n  TEACHER: 8\n} as const;\n\nexport type AccountKind = typeof AccountKind[keyof typeof AccountKind];\n","export const AssignmentDifficulty = {\n  None: 0,\n  Easy: 1,\n  Medium: 2,\n  Hard: 3\n} as const;\n\nexport type AssignmentDifficulty = typeof AssignmentDifficulty[keyof typeof AssignmentDifficulty];\n","export const AssignmentReturnKind = {\n  None: 0,\n  Paper: 1,\n  FileUpload: 2,\n  Kiosk: 3,\n\n  /** Only available since version 2024. */\n  AudioRecording: 4\n} as const;\n\nexport type AssignmentReturnKind = typeof AssignmentReturnKind[keyof typeof AssignmentReturnKind];\n","export const AttachmentKind = {\n  Link: 0,\n  File: 1\n} as const;\n\nexport type AttachmentKind = typeof AttachmentKind[keyof typeof AttachmentKind];\n","export const DiscussionCommand = {\n  lu: \"lu\",\n  nonLu: \"nonLu\",\n  archiver: \"archiver\",\n  desarchiver: \"desarchiver\",\n  transferer: \"transferer\",\n  signaler: \"signaler\",\n  modifierCategories: \"modifierCategories\",\n  fermerDiscussion: \"fermerDiscussion\",\n  ouvrirDiscussion: \"ouvrirDiscussion\",\n  signalerSuppression: \"signalerSuppression\",\n  Trash: \"corbeille\",\n  Restore: \"restauration\",\n  Delete: \"suppression\",\n  brouillon: \"brouillon\",\n  plus: \"plus\",\n  purger: \"purger\",\n  discussionEnFenetre: \"discussionEnFenetre\",\n  entrerSortirDiscussion: \"entrerSortirDiscussion\",\n  modificationObjetDiscussion: \"modificationObjetDiscussion\",\n  afficherDestinataires: \"afficherDestinataires\",\n  copierContenuVisu: \"copierContenuVisu\",\n  repondreMessage: \"repondreMessage\",\n  afficherDiscussion: \"afficherDiscussion\"\n} as const;\n\nexport type DiscussionCommand = typeof DiscussionCommand[keyof typeof DiscussionCommand];\n","export const DiscussionFolderKind = {\n  OCEM_Utilisateur: 0,\n  OCEM_Pre_Reception: 1,\n  OCEM_Pre_Archive: 2,\n  OCEM_Pre_Envoye: 3,\n  OCEM_Pre_Brouillon: 4,\n  OCEM_Pre_Poubelle: 5,\n  OCEM_Pre_Signalement: 6,\n  OCEM_Expl_Bleu: 7,\n  OCEM_Expl_Vert: 8,\n  OCEM_Expl_Rouge: 9,\n  OCEM_Pre_CarnetLiaison: 10,\n  OCEM_Pre_Alerte: 11,\n  OCEM_Pre_ContactVS: 12,\n  OCEM_Pre_Conversation: 13,\n  OCEM_Pre_InvisiblePlageDesactivee: 14\n} as const;\n\nexport type DiscussionFolderKind = typeof DiscussionFolderKind[keyof typeof DiscussionFolderKind];\n","export const DiscussionSendAction = {\n  Send: 0,\n  SendEveryone: 1,\n  SendEveryoneExceptParentsAndStudents: 3,\n  ReplyEveryone: 2,\n  ReplyEveryoneExceptParentsAndStudents: 4,\n  Close: 5\n} as const;\n\nexport type DiscussionSendAction = typeof DiscussionSendAction[keyof typeof DiscussionSendAction];\n","export const DishKind = {\n  Entry: 0,\n  Main: 1,\n  Side: 2,\n  Drink: 3,\n  Dessert: 4,\n  Fromage: 5\n} as const;\n\nexport type DishKind = typeof DishKind[keyof typeof DishKind];\n","export const DocumentFileFormat = {\n  UNKNOWN: 0,\n  TEXT: 1,\n  PDF: 2,\n  EXCEL: 3,\n  ARCHIVE: 4,\n  IMAGE: 5,\n  SOUND: 6,\n  VIDEO: 7,\n  DIAPORAMA: 8,\n  GEOGEBRA: 9\n} as const;\n\nexport type DocumentFileFormat = typeof DocumentFileFormat[keyof typeof DocumentFileFormat];\n","export const DocumentKind = {\n  URL: 0,\n  FILE: 1,\n  CLOUD: 2,\n  KIOSK_LINK: 3,\n  CONFERENCE_LINK: 4\n} as const;\n\nexport type DocumentKind = typeof DocumentKind[keyof typeof DocumentKind];\n","export const DoubleAuthClientAction = {\n  AIHMSC_PersonnalisationMotDePasse: 0,\n  AIHMSC_ChoixStrategie: 1,\n  AIHMSC_ChoixCodePINetSource: 2,\n  AIHMSC_SaisieCodePINetSource: 3,\n  AIHMSC_ReinitCodePINetSource: 4,\n  AIHMSC_SaisieSourcePourNotifSeulement: 5\n} as const;\n\nexport type DoubleAuthClientAction = typeof DoubleAuthClientAction[keyof typeof DoubleAuthClientAction];\n","export const DoubleAuthMode = {\n  MGDA_PasEncoreChoisi: 0,\n  MGDA_Inactive: 1,\n  MGDA_NotificationSeulement: 2,\n  MGDA_SaisieCodePIN: 3\n} as const;\n\nexport type DoubleAuthMode = typeof DoubleAuthMode[keyof typeof DoubleAuthMode];\n","export const DoubleAuthServerAction = {\n  csch_VerifierPIN: 0,\n  csch_VerifierMotDePassePersonnalise: 1, // set a new password when asked at login\n\n  csch_LibellesSourceConnexionDejaConnus: 2,\n  csch_EnregistrerChoixUtilisateur: 3,\n  csch_AffecterModeDoubleAuthentification: 4,\n  csch_AffecterCodePIN: 5,\n  csch_RenommerSourceConnexionConnue: 6,\n  csch_SupprimerSourceConnexionConnue: 7,\n  csch_AffecterMotDePassePersonnalise: 8,\n  csch_ModifierLogin: 9,\n  csch_DemandeReinitialisationPIN: 10,\n  csch_VerifierCodeReinitialisationPIN: 11\n} as const;\n\nexport type DoubleAuthServerAction = typeof DoubleAuthServerAction[keyof typeof DoubleAuthServerAction];\n","export const EntityKind = {\n  Aucune: 0,\n  Classe: 1,\n  Group: 2,\n  Teacher: 3,\n  Student: 4,\n  Responsable: 5,\n  Niveau: 6,\n  Orientation: 7,\n  Specialite: 8,\n  OptionSpecialite: 9,\n  Etablissement: 10,\n  Period: 11,\n  Service: 12,\n  Absence: 13,\n  Delay: 14,\n  Exclusion: 15,\n  Subject: 16,\n  Room: 17,\n  CoEnseignant: 18,\n  Suivis: 19,\n  Cours: 20,\n  Infirmerie: 21,\n  AbsenceRepas: 22,\n  Pilier: 23,\n  ElementPilier: 24,\n  Competence: 25,\n  _DisciplineBrevet: 26,\n  Palier: 27,\n  SousItem: 28,\n  Evaluation: 29,\n  Stage: 30,\n  SousMatiere: 31,\n  MaitreDeStage: 32,\n  InspecteurPedagogique: 33,\n  Personal: 34,\n  EvaluationHistorique: 35,\n  DossierProgression: 36,\n  ContenuDeCours: 37,\n  TravailAFaire: 38,\n  Progression: 39,\n  Dispense: 40,\n  Punishment: 41,\n  Sanction: 42,\n  Communication: 43,\n  AbsenceInternat: 44,\n  Observation: 45,\n  ObservationProfesseurEleve: 46,\n  ConvocationVS: 47,\n  DocumentJoint: 48,\n  InternetCategorie: 49,\n  DocJointEtablissement: 50,\n  Option: 51,\n  ProgrammationPunition: 52,\n  ReportPunition: 53,\n  DisciplineLivretScolaire: 54,\n  QCM: 55,\n  ExecutionQCM: 56,\n  QCMEditeur: 57,\n  PartieDeClasse: 58,\n  DocJointEleve: 59,\n  Devoir: 60,\n  InternetEnumere: 61,\n  AppreciationBulletinCompetence: 62,\n  Entreprise: 63,\n  DomaineProfessionnel: 64,\n  OffreDeStage: 65,\n  SujetDeStage: 66,\n  DocumentCasier: 67,\n  Message: 68,\n  PossessionMessage: 69,\n  RelationMessageDocJointEtablissement: 70,\n  Engagement: 71,\n  PrecautionaryMeasure: 72,\n  SousCategorieObjetDossier: 73,\n  Incident: 74,\n  ProtagonisteIncident: 75,\n  RelationIncidentFichierExterne: 76,\n  RegimeEleve: 77,\n  RepasAPreparer: 78,\n  SessionDeStage: 79,\n  Materiel: 80,\n  Bourse: 81,\n  RelationTravailAFaireEleve: 82,\n  LieuDossier: 83,\n  ElementProgramme: 84,\n  ChapitreEltPgm: 85,\n  EltPgmTravailleCDT: 86,\n  Appreciation: 87,\n  ExecutionDevoirKiosque: 88,\n  PanierRessourceKiosque: 89,\n  RessourceNumeriqueKiosque: 90,\n  MetaMatiere: 91,\n  EvaluationSujet: 92,\n  EvaluationCorrige: 93,\n  LibelleCours: 94,\n  Site: 95,\n  QuestionQCM: 96,\n  RelationElevePilierDeCompetence: 97,\n  QuestionCopieQCM: 98,\n  Coordonnees: 99,\n  ResponsablePostulant: 100,\n  ExecutionQCMEleve: 101,\n  DocJointInscription: 102,\n  CategorieDossier: 103,\n  MEFGEP: 104,\n  AutreOrientation: 105,\n  Commission: 106,\n  ReponseEducative: 107,\n  SuiviReponseEducative: 108,\n  NatureDocumentEleve: 109\n} as const;\n\nexport type EntityKind = typeof EntityKind[keyof typeof EntityKind];\n","export const EntityState = {\n  NONE: 0,\n  CREATION: 1,\n  MODIFICATION: 2,\n  DELETION: 3,\n  CHILDREN_MODIFICATION: 4\n} as const;\n\nexport type EntityState = typeof EntityState[keyof typeof EntityState];\n","export const GradeKind = {\n  Error: -1,\n  Grade: 0,\n  Absent: 1,\n  Exempted: 2,\n  NotGraded: 3,\n  Unfit: 4,\n  Unreturned: 5,\n  AbsentZero: 6,\n  UnreturnedZero: 7,\n  Congratulations: 8\n} as const;\n\nexport type GradeKind = typeof GradeKind[keyof typeof GradeKind];\n","export const MealKind = {\n  Lunch: 0,\n  Dinner: 1\n} as const;\n\nexport type MealKind = typeof MealKind[keyof typeof MealKind];\n","export const NewsQuestionKind = {\n  /** Text from an information news. */\n  InformationText: 0,\n  /** Question where there's only text (only from an survey news). */\n  SurveyText: 5,\n\n  TextInput: 1,\n  UniqueChoice: 2,\n  MultipleChoice: 3\n} as const;\n\nexport type NewsQuestionKind = typeof NewsQuestionKind[keyof typeof NewsQuestionKind];\n","export const NewsView = { // TODO: use this in function parameters instead of constant [0] !!\n  Reception: 0,\n  Broadcast: 1,\n  Draft: 2,\n  Template: 3\n} as const;\n\nexport type NewsView = typeof NewsView[keyof typeof NewsView];\n","export const NotebookObservationKind = {\n  /** @original `OVS_DefautCarnet` */\n  LogBookIssue: 0,\n\n  /** @original `OVS_ObservationParent` */\n  Observation: 1,\n\n  /** @original `OVS_Encouragement` */\n  Encouragement: 2,\n\n  /** @original `OVS_Autres` */\n  Other: 3\n} as const;\n\nexport type NotebookObservationKind = typeof NotebookObservationKind[keyof typeof NotebookObservationKind];\n","export const ResourceContentCategory = {\n  NONE: 0,\n  /** Corresponds to \"Cours\" */\n  LESSON: 1,\n  /** Corresponds to \"Correction\" */\n  CORRECTION: 2,\n  /** Corresponds to \"Devoir sur table\" */\n  DST: 3,\n  /** Corresponds to \"Interrogation orale\" */\n  ORAL_INTERROGATION: 4,\n  /** Corresponds to \"Travaux dirigés\" */\n  TD: 5,\n  /** Corresponds to \"Travaux pratiques\" */\n  TP: 6,\n  /** Corresponds to \"Évaluation de compétences\" */\n  EVALUATION_COMPETENCES: 7,\n  /** Corresponds to \"EPI\" */\n  EPI: 8,\n  /** Corresponds to \"AP\" */\n  AP: 9,\n  /** Corresponds to \"Visio\" */\n  VISIO: 12\n} as const;\n\nexport type ResourceContentCategory = typeof ResourceContentCategory[keyof typeof ResourceContentCategory];\n","export const SessionAccessKind = {\n  ACCOUNT: 0,\n  ACCOUNT_CONNECTION: 1,\n  DIRECT_CONNECTION: 2,\n  TOKEN_ACCOUNT_CONNECTION: 3,\n  TOKEN_DIRECT_CONNECTION: 4,\n  COOKIE_CONNECTION: 5\n} as const;\n\nexport type SessionAccessKind = typeof SessionAccessKind[keyof typeof SessionAccessKind];\n","export const TabLocation = {\n  Grades: 198,\n  Resources: 89,\n  Assignments: 88,\n  Timetable: 16,\n  Evaluations: 201,\n  Account: 49,\n  Presence: 7,\n  News: 8,\n  Notebook: 19,\n  Discussions: 131,\n  Gradebook: 13,\n  Menus: 10\n} as const;\n\nexport type TabLocation = typeof TabLocation[keyof typeof TabLocation];\n","import { SessionAccessKind, type SessionInformation } from \"~/models\";\nimport forge from \"node-forge\";\n\nconst RSA_MODULO_1024 = \"B99B77A3D72D3A29B4271FC7B7300E2F791EB8948174BE7B8024667E915446D4EEA0C2424B8D1EBF7E2DDFF94691C6E994E839225C627D140A8F1146D1B0B5F18A09BBD3D8F421CA1E3E4796B301EEBCCF80D81A32A1580121B8294433C38377083C5517D5921E8A078CDC019B15775292EFDA2C30251B1CCABE812386C893E5\";\nconst RSA_EXPONENT_1024 = \"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010001\";\n\nexport const decodeSessionInformation = (session: any, base: string): SessionInformation => {\n  const rsaFromConstants = !session.MR && !session.ER;\n\n  return {\n    url: base,\n\n    id: parseInt(session.h),\n    accountKind: session.a,\n    demo: session.d ?? false,\n    accessKind: session.g ?? SessionAccessKind.ACCOUNT,\n\n    rsaModulus: rsaFromConstants ? RSA_MODULO_1024 : session.MR,\n    rsaExponent: rsaFromConstants ? RSA_EXPONENT_1024 : session.ER,\n    rsaFromConstants,\n\n    aesIV: forge.random.getBytesSync(16),\n    aesKey: \"\",\n\n    skipEncryption: session.sCrA ?? false,\n    skipCompression: session.sCoA ?? false,\n    http: session.http ?? false,\n    poll: session.poll ?? false,\n    order: 0\n  };\n};\n","import { AccountKind } from \"~/models\";\n\nexport const encodeAccountKindToPath = (kind: AccountKind): string => {\n  let name: string;\n\n  switch (kind) {\n    case AccountKind.STUDENT:\n      name = \"eleve\";\n      break;\n    case AccountKind.PARENT:\n      name = \"parent\";\n      break;\n    case AccountKind.TEACHER:\n      name = \"professeur\";\n      break;\n  }\n\n  return `mobile.${name}.html`;\n};\n","import { defaultFetcher, type Fetcher, type Request, setCookiesArrayToRequest } from \"@literate.ink/utilities\";\nimport { decodeSessionInformation } from \"~/decoders/session-information\";\nimport { encodeAccountKindToPath } from \"~/encoders/account-kind\";\nimport { BusyPageError, PageUnavailableError, SuspendedIPError, type AccountKind, type SessionInformation } from \"~/models\";\n\nexport const sessionInformation = async (options: {\n  base: string\n  kind: AccountKind,\n  params: Record<string, any>,\n  cookies: string[]\n}, fetcher: Fetcher = defaultFetcher): Promise<SessionInformation> => {\n  const url = new URL(options.base + \"/\" + encodeAccountKindToPath(options.kind));\n  for (const [key, value] of Object.entries(options.params)) {\n    url.searchParams.set(key, value);\n  }\n\n  const request: Request = { url, redirect: \"manual\" };\n  setCookiesArrayToRequest(request, options.cookies);\n\n  const { content: html } = await fetcher(request);\n\n  try {\n    // Remove all spaces and line breaks.\n    const body_cleaned = html.replace(/ /ug, \"\").replace(/\\n/ug, \"\");\n\n    // Find the relaxed JSON of the session.\n    const from = \"Start(\";\n    const to = \")}catch\";\n\n    const relaxed_data = body_cleaned.substring(\n      body_cleaned.indexOf(from) + from.length,\n      body_cleaned.indexOf(to)\n    );\n\n    // Convert the relaxed JSON to something we can parse.\n    const session_data_string = relaxed_data\n      .replace(/(['\"])?([a-z0-9A-Z_]+)(['\"])?:/gu, \"\\\"$2\\\": \")\n      .replace(/'/gu, \"\\\"\");\n\n    return decodeSessionInformation(JSON.parse(session_data_string), options.base);\n  }\n  catch (error) {\n    if (html.includes(\"Votre adresse IP est provisoirement suspendue\")) {\n      throw new SuspendedIPError();\n    }\n    else if (html.includes(\"Le site n'est pas disponible\")) {\n      throw new PageUnavailableError();\n    }\n    else if (html.includes(\"Le site est momentanément indisponible\")) {\n      throw new BusyPageError();\n    }\n\n    throw new PageUnavailableError();\n  }\n};\n","import forge from \"node-forge\";\n\nexport class AES {\n  public static decrypt (data: string, key: forge.util.ByteBuffer, iv: forge.util.ByteBuffer): string {\n    key = forge.md.md5.create().update(key.bytes()).digest();\n    iv = iv.length() ? forge.md.md5.create().update(iv.bytes()).digest() : forge.util.createBuffer().fillWithByte(0, 16);\n\n    const buffer = forge.util.createBuffer(forge.util.binary.hex.decode(data) as forge.util.ArrayBufferView);\n    const decipher = forge.cipher.createDecipher(\"AES-CBC\", key);\n\n    decipher.start({ iv });\n    decipher.update(buffer);\n    decipher.finish();\n\n    return decipher.output.bytes();\n  }\n\n  public static encrypt (data: string | ArrayBuffer | forge.util.ArrayBufferView | forge.util.ByteStringBuffer, key: forge.util.ByteBuffer, iv: forge.util.ByteBuffer): string {\n    key = forge.md.md5.create().update(key.bytes()).digest();\n    iv = iv.length() ? forge.md.md5.create().update(iv.bytes()).digest() : forge.util.createBuffer().fillWithByte(0, 16);\n\n    data = forge.util.createBuffer(data);\n    const cipher = forge.cipher.createCipher(\"AES-CBC\", key);\n\n    cipher.start({ iv });\n    cipher.update(data);\n    cipher.finish();\n\n    return cipher.output.toHex();\n  }\n}\n","import { SessionHandle } from \"~/models\";\nimport forge from \"node-forge\";\n\ntype Keys = {\n  iv: forge.util.ByteBuffer;\n  key: forge.util.ByteBuffer;\n};\n\nexport const aesKeys = (session: SessionHandle, forceEmptyIV = false): Keys => {\n  const iv = forge.util.createBuffer(forceEmptyIV ? \"\" : session.information.aesIV);\n  const key = forge.util.createBuffer(session.information.aesKey);\n\n  return { iv, key };\n};\n","import { AccessDeniedError, PageUnavailableError, RateLimitedError, ServerSideError, SessionExpiredError, SuspendedIPError, type SessionHandle } from \"~/models\";\nimport forge from \"node-forge\";\nimport { AES } from \"../api/private/aes\";\nimport pako from \"pako\";\nimport { aesKeys } from \"../api/private/keys\";\n\nexport class ResponseFN {\n  public constructor (\n    private session: SessionHandle,\n    public data: any\n  ) {\n    this.session.information.order++;\n    const content = data;\n\n    try {\n      this.data = JSON.parse(this.data).donneesSec;\n\n      if (!this.session.information.skipEncryption) {\n        this.decrypt();\n      }\n\n      if (!this.session.information.skipCompression) {\n        this.decompress();\n      }\n\n      if (typeof this.data === \"string\") {\n        this.data = JSON.parse(this.data);\n      }\n\n      if (typeof this.data?._Signature_?.Erreur !== \"undefined\") {\n        throw new ServerSideError(this.data._Signature_.MessageErreur);\n      }\n    }\n    catch (error) {\n      if (content.includes(\"La page a expir\")) {\n        throw new SessionExpiredError();\n      }\n\n      else if (content.includes(\"Votre adresse IP \")) {\n        throw new SuspendedIPError();\n      }\n\n      else if (content.includes(\"La page dem\") || content.includes(\"Impossible d'a\")) {\n        throw new PageUnavailableError();\n      }\n\n      else if (content.includes(\"Vous avez d\")) {\n        throw new RateLimitedError();\n      }\n\n      // \"Accès refusé\", we just trying to prevent using accents.\n      else if (content.includes(\"s refus\")) {\n        throw new AccessDeniedError();\n      }\n\n      throw error;\n    }\n  }\n\n  private decrypt (): void {\n    const { iv, key } = aesKeys(this.session);\n\n    this.data = AES.decrypt(this.data, key, iv);\n\n    if (!this.session.information.skipCompression) {\n      this.data = forge.util.bytesToHex(this.data);\n    }\n  }\n\n  private decompress (): void {\n    const bytes = forge.util.hexToBytes(this.data);\n    const compressed = new Uint8Array(Array.from(bytes).map((char) => char.charCodeAt(0)));\n    this.data = pako.inflateRaw(compressed, { to: \"string\" });\n  }\n}\n","import type { SessionHandle } from \"~/models\";\nimport forge from \"node-forge\";\nimport pako from \"pako\";\nimport { AES } from \"../api/private/aes\";\nimport { ResponseFN } from \"./response-function\";\nimport { aesKeys } from \"../api/private/keys\";\n\n/**\n * Abstraction to make requests to function API\n * of PRONOTE.\n */\nexport class RequestFN {\n  public constructor (\n    private session: SessionHandle,\n\n    /**\n     * Function name.\n     *\n     * This is used by the server to\n     * determine the function to call.\n     */\n    public name: string,\n\n    /**\n     * Data given to the \"secure\" property.\n     */\n    public data: any\n  ) {}\n\n  /**\n   * Make the order generation, encryption and compression.\n   * @returns The order and the URL to send the request to.\n   */\n  public process () {\n    this.session.information.order++;\n\n    const order = this.generateOrder();\n    const url = new URL(`${this.session.information.url}/appelfonction/${this.session.information.accountKind}/${this.session.information.id}/${order}`);\n\n    if (!this.session.information.skipCompression) {\n      this.compress();\n    }\n\n    if (!this.session.information.skipEncryption) {\n      this.encrypt();\n    }\n\n    return { order, url };\n  }\n\n  private keys () {\n    return aesKeys(this.session, this.session.information.order === 1);\n  }\n\n  private generateOrder (): string {\n    const { key, iv } = this.keys();\n    return AES.encrypt(this.session.information.order.toString(), key, iv);\n  }\n\n  private stringify (): string {\n    return forge.util.encodeUtf8(JSON.stringify(this.data) || \"\");\n  }\n\n  private compress (): void {\n    const buffer = forge.util.createBuffer(this.stringify()).toHex();\n\n    // We compress it using zlib, level 6, without headers.\n    const deflated = pako.deflateRaw(buffer, { level: 6 });\n    const bytes = Array.from(deflated).map((byte) => String.fromCharCode(byte)).join(\"\");\n\n    // We output it to HEX.\n    this.data = forge.util.bytesToHex(bytes);\n  }\n\n  private encrypt (): void {\n    const { key, iv } = this.keys();\n\n    const data = !this.session.information.skipCompression\n      // If the data has been compressed, we get the bytes from HEX.\n      ? forge.util.hexToBytes(this.data)\n      : this.stringify();\n\n    this.data = AES.encrypt(data, key, iv);\n  }\n\n  public async send (): Promise<ResponseFN> {\n    return this.session.queue.push(async () => {\n      const payload = this.process();\n\n      const response = await this.session.fetcher({\n        url: payload.url,\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\"\n        },\n        content: JSON.stringify({\n          session: this.session.information.id,\n          numeroOrdre: payload.order,\n          nom: this.name,\n          donneesSec: this.data\n        })\n      });\n\n      return new ResponseFN(this.session, response.content);\n    });\n  }\n}\n","import { UnreachableError } from \"~/models\";\n\nconst SHORT_DATE_RE = /^\\d{2}\\/\\d{2}\\/\\d{4}$/;\nconst LONG_DATE_LONG_HOURS_RE = /^\\d{2}\\/\\d{2}\\/\\d{4} \\d{2}:\\d{2}:\\d{2}$/;\nconst LONG_DATE_SHORT_HOURS_RE = /^\\d{2}\\/\\d{2}\\/\\d{2} \\d{2}h\\d{2}$/;\nconst YEAR_FIRST_TWO_CHARS = new Date().getFullYear().toString().slice(0, 2);\n\nexport const decodePronoteDate = (formatted: string): Date => {\n  if (SHORT_DATE_RE.test(formatted)) {\n    const [day, month, year] = formatted.split(\"/\").map(Number);\n    return new Date(year, month - 1, day);\n  }\n\n  else if (LONG_DATE_LONG_HOURS_RE.test(formatted)) {\n    const [date, time] =  formatted.split(\" \");\n    const [day, month, year] = date.split(\"/\").map(Number);\n    const [hours, minutes, seconds] = time.split(\":\").map(Number);\n\n    const output = new Date(year, month - 1, day);\n    output.setHours(hours, minutes, seconds);\n    return output;\n  }\n\n  else if (LONG_DATE_SHORT_HOURS_RE.test(formatted)) {\n    const [date, time] =  formatted.split(\" \");\n    const [day, month, year] = date.split(\"/\").map(Number);\n    const [hours, minutes] = time.split(\"h\").map(Number);\n\n    const output = new Date(parseInt(`${YEAR_FIRST_TWO_CHARS}${year}`), month - 1, day);\n    output.setHours(hours, minutes);\n    return output;\n  }\n\n  throw new UnreachableError(\"decodePronoteDate\");\n};\n","import type { Holiday } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\n\nexport const decodeHoliday = (holiday: any): Holiday => {\n  return {\n    id: holiday.N,\n    name: holiday.L,\n    startDate: decodePronoteDate(holiday.dateDebut.V),\n    endDate: decodePronoteDate(holiday.dateFin.V)\n  };\n};\n","import type { Period } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\n\nexport const decodePeriod = (period: any): Period => {\n  return {\n    id: period.N,\n    kind: period.G,\n    name: period.L,\n\n    startDate: decodePronoteDate(period.dateDebut.V),\n    endDate: decodePronoteDate(period.dateFin.V)\n  };\n};\n","import type { InstanceParameters, WeekFrequency } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeDomain } from \"./domain\";\nimport { decodeHoliday } from \"./holiday\";\nimport { decodePeriod } from \"./period\";\n\nexport const decodeInstanceParameters = (parameters: any): InstanceParameters => {\n  const weekFrequencies = new Map<number, WeekFrequency>();\n\n  for (const fortnight of [1, 2]) {\n    const frequency = decodeDomain(parameters.General.DomainesFrequences[fortnight].V);\n    for (const week of frequency) {\n      weekFrequencies.set(week, {\n        label: parameters.General.LibellesFrequences[fortnight],\n        fortnight\n      });\n    }\n  }\n\n  return {\n    version: parameters.General.versionPN.split(\".\").map(Number),\n    nextBusinessDay: decodePronoteDate(parameters.General.JourOuvre.V),\n    firstMonday: decodePronoteDate(parameters.General.PremierLundi.V),\n    firstDate: decodePronoteDate(parameters.General.PremiereDate.V),\n    lastDate: decodePronoteDate(parameters.General.DerniereDate.V),\n\n    navigatorIdentifier: parameters.identifiantNav,\n    endings: parameters.General.ListeHeuresFin.V.map((ending: any) => ending.L),\n    periods: parameters.General.ListePeriodes.map(decodePeriod),\n    holidays: parameters.General.listeJoursFeries.V.map(decodeHoliday),\n    weekFrequencies,\n    blocksPerDay: parameters.General.PlacesParJour\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport type { SessionHandle, InstanceParameters } from \"~/models\";\nimport forge from \"node-forge\";\nimport { decodeInstanceParameters } from \"~/decoders/instance-parameters\";\n\nexport const instanceParameters = async (session: SessionHandle, navigatorIdentifier: string | null = null): Promise<InstanceParameters> => {\n  const rsaKey = forge.pki.rsa.setPublicKey(\n    new forge.jsbn.BigInteger(session.information.rsaModulus, 16),\n    new forge.jsbn.BigInteger(session.information.rsaExponent, 16)\n  );\n\n  const aesIV = session.information.aesIV;\n  let uuid: string;\n\n  if (session.information.rsaFromConstants) {\n    uuid = forge.util.encode64(session.information.http ? rsaKey.encrypt(aesIV) : aesIV, 64);\n  }\n  else {\n    uuid = forge.util.encode64(rsaKey.encrypt(aesIV));\n  }\n\n  const request = new RequestFN(session, \"FonctionParametres\", {\n    donnees: {\n      identifiantNav: navigatorIdentifier,\n      Uuid: uuid\n    }\n  });\n\n  const response = await request.send();\n  return decodeInstanceParameters(response.data.donnees);\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport type { SessionHandle } from \"~/models\";\n\nexport const identify = async (session: SessionHandle, parameters: {\n  requestFirstMobileAuthentication: boolean,\n  reuseMobileAuthentication: boolean,\n  requestFromQRCode: boolean,\n  useCAS: boolean\n\n  username: string\n  deviceUUID: string\n}): Promise<any> => {\n  const request = new RequestFN(session, \"Identification\", {\n    donnees: {\n      genreConnexion: 0, // NOTE: Probably the `accessKind` property, not sure though.\n      genreEspace: session.information.accountKind,\n      identifiant: parameters.username,\n      pourENT: parameters.useCAS,\n      enConnexionAuto: false,\n      enConnexionAppliMobile: parameters.reuseMobileAuthentication,\n      demandeConnexionAuto: false,\n      demandeConnexionAppliMobile: parameters.requestFirstMobileAuthentication,\n      demandeConnexionAppliMobileJeton: parameters.requestFromQRCode,\n      uuidAppliMobile: parameters.deviceUUID,\n      loginTokenSAV: \"\"\n    }\n  });\n\n  const response = await request.send();\n  return response.data.donnees;\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { AccessDeniedError, AccountDisabledError, AuthenticateError, BadCredentialsError, type SessionHandle } from \"~/models\";\n\nexport const authenticate = async (session: SessionHandle, challenge: string) => {\n  const request = new RequestFN(session, \"Authentification\", {\n    donnees: {\n      connexion: 0, // NOTE: Probably the `accessKind` property, not sure though.\n      challenge,\n      espace: session.information.accountKind\n    }\n  });\n\n  const response = await request.send();\n  const data = response.data.donnees;\n\n  // Handle potential errors.\n  if (typeof data.Acces === \"number\" && data.Acces !== 0) {\n    switch (data.Acces) {\n      case 1: // EGenreErreurAcces.Identification\n        throw new BadCredentialsError();\n\n      case 2: // EGenreErreurAcces.Autorisation\n      case 3: // EGenreErreurAcces.ConnexionClasse\n      case 4: // EGenreErreurAcces.AucuneRessource\n      case 5: // EGenreErreurAcces.Connexion\n      case 7: // EGenreErreurAcces.FonctionAccompagnant\n      case 8: // EGenreErreurAcces.AccompagnantAucunEleve\n        throw new AccessDeniedError();\n\n      case 6: // EGenreErreurAcces.BloqueeEleve\n      case 10: // EGenreErreurAcces.CompteDesactive\n        throw new AccountDisabledError();\n\n      case 9: // EGenreErreurAcces.Message\n        if (typeof data.AccesMessage !== \"undefined\") {\n          let error: string = data.AccesMessage.message ?? \"(none)\";\n\n          if (data.AccesMessage.titre) {\n            error += `${data.AccesMessage.titre} ${error}`;\n          }\n\n          throw new AuthenticateError(error);\n        }\n    }\n  }\n\n  return data;\n};\n","import type { TabLocation, UserAuthorizations } from \"~/models\";\n\nexport const decodeUserAuthorizations = (data: any, tabs: any[]): UserAuthorizations => {\n  const canReadDiscussions = data.AvecDiscussion ?? false;\n  const canDiscuss = canReadDiscussions && !(data.discussionInterdit ?? false);\n  const canDiscussWithStaff = canDiscuss && (data.AvecDiscussionPersonnels ?? false);\n  const canDiscussWithParents = canDiscuss && (data.AvecDiscussionParents ?? false);\n  const canDiscussWithStudents = canDiscuss && (data.AvecDiscussionEleves ?? false);\n  const canDiscussWithTeachers = canDiscuss && (data.AvecDiscussionProfesseurs ?? false);\n\n  const locations: TabLocation[] = [];\n\n  if (tabs.length > 0) {\n    const traverse = (obj: any): void => {\n      if (\"G\" in obj) {\n        locations.push(obj.G);\n      }\n\n      if (\"Onglet\" in obj) {\n        obj.Onglet.forEach(traverse);\n      }\n    };\n\n    tabs.forEach(traverse);\n  }\n\n  return {\n    canReadDiscussions,\n    canDiscuss,\n    canDiscussWithStaff,\n    canDiscussWithParents,\n    canDiscussWithStudents,\n    canDiscussWithTeachers,\n\n    hasAdvancedDiscussionEditor: data.AvecDiscussionAvancee ?? false,\n    maxAssignmentFileUploadSize: data.tailleMaxRenduTafEleve,\n\n    tabs: locations\n  };\n};\n","import { AES } from \"~/api/private/aes\";\nimport { aesKeys } from \"~/api/private/keys\";\nimport { AttachmentKind, type SessionHandle } from \"~/models\";\nimport type { Attachment } from \"~/models/attachment\";\n\nexport const decodeAttachment = (attachment: any, session: SessionHandle, parameters = {}): Attachment => {\n  const name = attachment.L ?? \"\";\n  const kind = attachment.G;\n  const id = attachment.N;\n  let url: string;\n\n  if (kind === AttachmentKind.Link) {\n    url = attachment.url ?? name;\n  }\n  else {\n    const { iv, key } = aesKeys(session);\n\n    // Create an entity of the attachment.\n    const data = JSON.stringify({\n      N: id,\n      Actif: true,\n\n      // Depending on the case, this could be customized.\n      ...parameters\n    });\n\n    const encrypted = AES.encrypt(data, key, iv);\n    url = `${session.information.url}/FichiersExternes/${encrypted}/${encodeURIComponent(name)}?Session=${session.information.id}`;\n  }\n\n  return {\n    kind,\n    name,\n    url,\n    id\n  };\n};\n","import type { Period, Tab } from \"~/models\";\n\nexport const decodeTab = (tab: any, instancePeriods: Period[]): Tab => {\n  const find = (id: string) => instancePeriods.find((p2) => p2.id === id);\n\n  const defaultPeriod = tab.periodeParDefaut && find(tab.periodeParDefaut.V.N);\n  const periods = tab.listePeriodes.V.map((p1: any) => find(p1.N)).filter(Boolean);\n\n  return {\n    defaultPeriod,\n    location: tab.G,\n    periods\n  };\n};\n","import type { Attachment, SessionHandle, Tab, TabLocation, UserResource } from \"~/models\";\nimport { decodeAttachment } from \"./attachment\";\nimport { decodeTab } from \"./tab\";\n\nexport const decodeUserResource = (resource: any, session: SessionHandle): UserResource => {\n  let profilePicture: Attachment | null = null;\n\n  if (resource.avecPhoto) {\n    profilePicture = decodeAttachment({\n      G: 1,\n      N: resource.N,\n      L: \"photo.jpg\"\n    }, session);\n  }\n\n  const tabs: Map<TabLocation, Tab> = new Map();\n\n  for (const tab of resource.listeOngletsPourPeriodes?.V ?? []) {\n    tabs.set(tab.G, decodeTab(tab, session.instance.periods));\n  }\n\n  return {\n    id: resource.N,\n    kind: resource.G,\n    name: resource.L,\n    establishmentName: resource.Etablissement.V.L,\n    className: resource.classeDEleve?.L,\n    profilePicture,\n    tabs,\n    isDirector: resource.estDirecteur ?? false,\n    isDelegate: resource.estDelegue ?? false,\n    isMemberCA: resource.estMembreCA ?? false\n  };\n};\n","import { AccountKind, type SessionHandle, type UserParameters } from \"~/models\";\nimport { decodeUserAuthorizations } from \"./user-authorizations\";\nimport { decodeUserResource } from \"./user-resource\";\n\nexport const decodeUserParameters = (parameters: any, session: SessionHandle): UserParameters => {\n  let resources: Array<any>;\n\n  switch (session.information.accountKind) {\n    case AccountKind.STUDENT:\n    case AccountKind.TEACHER:\n      resources = [parameters.ressource];\n      break;\n    case AccountKind.PARENT:\n      resources = parameters.ressource.listeRessources;\n      break;\n  }\n\n  return {\n    id: parameters.ressource.N,\n    kind: parameters.ressource.G,\n    name: parameters.ressource.L,\n    resources: resources.map((resource) => decodeUserResource(resource, session)),\n    authorizations: decodeUserAuthorizations(parameters.autorisations, parameters.listeOnglets)\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeUserParameters } from \"~/decoders/user-parameters\";\nimport type { SessionHandle } from \"~/models\";\nimport { UserParameters } from \"~/models/user-parameters\";\n\nexport const userParameters = async (session: SessionHandle): Promise<UserParameters> => {\n  const request = new RequestFN(session, \"ParametresUtilisateur\", {});\n  const response = await request.send();\n  return decodeUserParameters(response.data.donnees, session);\n};\n","import { AccountKind, UnreachableError } from \"~/models\";\n\n/**\n * @param path mobile.eleve.html or eleve.html, both works.\n */\nexport const decodeAccountKindFromPath = (path: string): AccountKind => {\n  const segments = path.split(\".\");\n  segments.pop(); // remove .html\n\n  switch (segments.pop()) {\n    case \"eleve\": return AccountKind.STUDENT;\n    case \"parent\": return AccountKind.PARENT;\n    case \"professeur\": return AccountKind.TEACHER;\n    default: throw new UnreachableError(\"decodeAccountKindFromPath\");\n  }\n};\n","import type { AuthenticationQR } from \"~/models\";\nimport { decodeAccountKindFromPath } from \"./account-kind\";\n\nexport const decodeAuthenticationQr = (qr: any): AuthenticationQR => {\n  const url = qr.url as string;\n\n  const kindIndex: number = url.lastIndexOf(\"/\") + 1;\n  const base = url.substring(0, kindIndex - 1);\n  const kindPath = url.substring(kindIndex);\n\n  return {\n    kind: decodeAccountKindFromPath(kindPath),\n    url: base,\n    token: qr.jeton,\n    username: qr.login\n  };\n};\n","import { type AccountKind, type RefreshInformation, type SessionHandle, BadCredentialsError, DoubleAuthClientAction, DoubleAuthMode, SecurityError } from \"~/models\";\nimport { sessionInformation } from \"../session-information\";\nimport { instanceParameters } from \"../private/instance-parameters\";\nimport { cleanURL } from \"./clean-url\";\nimport { identify } from \"../private/identify\";\nimport forge from \"node-forge\";\nimport { AES } from \"../private/aes\";\nimport { authenticate } from \"../private/authenticate\";\nimport { userParameters } from \"../private/user-parameters\";\nimport { decodeAuthenticationQr } from \"~/decoders/authentication-qr\";\n\n/**\n * base parameters for `sessionInformation` call.\n */\nconst BASE_PARAMS = {\n  /** bypass the user-agent restriction */\n  fd: 1,\n  /** bypass the CAS if setup */\n  login: true\n};\n\nexport const loginCredentials = async (session: SessionHandle, auth: {\n  url: string\n  username: string\n  password: string\n  kind: AccountKind\n  deviceUUID: string\n  navigatorIdentifier?: string\n}): Promise<RefreshInformation> => {\n  const base = cleanURL(auth.url);\n\n  session.information = await sessionInformation({\n    base,\n    kind: auth.kind,\n    cookies: [], // none\n    params: {\n      ...BASE_PARAMS,\n      bydlg: \"A6ABB224-12DD-4E31-AD3E-8A39A1C2C335\"\n    }\n  }, session.fetcher);\n\n  session.instance = await instanceParameters(session, auth.navigatorIdentifier);\n\n  const identity = await identify(session, {\n    username: auth.username,\n    deviceUUID: auth.deviceUUID,\n\n    requestFirstMobileAuthentication: true,\n    reuseMobileAuthentication: false,\n    requestFromQRCode: false,\n    useCAS: false\n  });\n\n  transformCredentials(auth, \"password\", identity);\n  const key = createMiddlewareKey(identity, auth.username, auth.password);\n\n  const challenge = solveChallenge(session, identity, key);\n  const authentication = await authenticate(session, challenge);\n  switchToAuthKey(session, authentication, key);\n\n  if (hasSecurityModal(authentication)) {\n    return switchToTokenLogin(session, {\n      token: authentication.jetonConnexionAppliMobile,\n      username: identity.login ?? auth.username,\n      deviceUUID: auth.deviceUUID\n    });\n  }\n  else return finishLoginManually(session, authentication, identity, auth.username);\n};\n\nexport const loginToken = async (session: SessionHandle, auth: {\n  url: string\n  username: string\n  token: string\n  kind: AccountKind\n  deviceUUID: string\n  navigatorIdentifier?: string\n}): Promise<RefreshInformation> => {\n  const base = cleanURL(auth.url);\n\n  session.information = await sessionInformation({\n    base,\n    kind: auth.kind,\n    cookies: [\"appliMobile=1\"],\n    params: BASE_PARAMS\n  }, session.fetcher);\n\n  session.instance = await instanceParameters(session, auth.navigatorIdentifier);\n\n  const identity = await identify(session, {\n    username: auth.username,\n    deviceUUID: auth.deviceUUID,\n\n    requestFirstMobileAuthentication: false,\n    reuseMobileAuthentication: true,\n    requestFromQRCode: false,\n    useCAS: false\n  });\n\n  transformCredentials(auth, \"token\", identity);\n  const key = createMiddlewareKey(identity, auth.username, auth.token);\n\n  const challenge = solveChallenge(session, identity, key);\n  const authentication = await authenticate(session, challenge);\n  switchToAuthKey(session, authentication, key);\n\n  if (hasSecurityModal(authentication)) {\n    throw new SecurityError(authentication, identity, auth.username);\n  }\n\n  return finishLoginManually(session, authentication, identity, auth.username);\n};\n\nexport const loginQrCode = async (session: SessionHandle, info: {\n  deviceUUID: string\n  pin: string\n  qr: any\n  navigatorIdentifier?: string\n}): Promise<RefreshInformation> => {\n  const qr = decodeAuthenticationQr(info.qr);\n  const pin = forge.util.createBuffer(info.pin);\n\n  const read = (prop: \"token\" | \"username\") => AES.decrypt(forge.util.encodeUtf8(qr[prop]), pin, forge.util.createBuffer());\n\n  const auth = {\n    username: read(\"username\"),\n    token: read(\"token\")\n  };\n\n  session.information = await sessionInformation({\n    base: qr.url,\n    kind: qr.kind,\n    cookies: [\"appliMobile=1\"],\n    params: BASE_PARAMS\n  }, session.fetcher);\n\n  session.instance = await instanceParameters(session, info.navigatorIdentifier);\n\n  const identity = await identify(session, {\n    username: auth.username,\n    deviceUUID: info.deviceUUID,\n\n    requestFirstMobileAuthentication: true,\n    reuseMobileAuthentication: false,\n    requestFromQRCode: true,\n    useCAS: false\n  });\n\n  transformCredentials(auth, \"token\", identity);\n  const key = createMiddlewareKey(identity, auth.username, auth.token);\n\n  const challenge = solveChallenge(session, identity, key);\n  const authentication = await authenticate(session, challenge);\n  switchToAuthKey(session, authentication, key);\n\n  if (hasSecurityModal(authentication)) {\n    return switchToTokenLogin(session, {\n      token: authentication.jetonConnexionAppliMobile,\n      username: identity.login ?? auth.username,\n      deviceUUID: info.deviceUUID\n    });\n  }\n  else return finishLoginManually(session, authentication, identity, auth.username);\n};\n\nconst switchToTokenLogin = (session: SessionHandle, auth: {\n  token: string,\n  username: string,\n  deviceUUID: string\n}): Promise<RefreshInformation> => {\n  // TODO: Add and call logout function for current `session`.\n\n  return loginToken(session, {\n    url: session.information.url,\n    kind: session.information.accountKind,\n    username: auth.username,\n    token: auth.token,\n    deviceUUID: auth.deviceUUID,\n    navigatorIdentifier: session.instance.navigatorIdentifier\n  });\n};\n\n/**\n * @param identity\n * @param username Username to authenticate with.\n * @param mod Could be the password or the token.\n */\nconst createMiddlewareKey = (identity: any, username: string, mod: string) => {\n  const hash = forge.md.sha256.create()\n    .update(identity.alea ?? \"\")\n    .update(forge.util.encodeUtf8(mod))\n    .digest()\n    .toHex()\n    .toUpperCase();\n\n  return forge.util.createBuffer(username + hash);\n};\n\nconst transformCredentials = (auth: { username: string, token?: string, password?: string }, modProperty: \"token\" | \"password\", identity: any): void => {\n  if (identity.modeCompLog === 1) {\n    auth.username = auth.username.toLowerCase();\n  }\n\n  if (identity.modeCompMdp === 1) {\n    auth[modProperty] = auth[modProperty]!.toLowerCase();\n  }\n};\n\n/**\n * Resolve the authentication challenge.\n * Should be sent to the authenticate function.\n *\n * @param session Handle containing session information.\n * @param identity Response from `identify()` request.\n\n * @returns\n */\nconst solveChallenge = (session: SessionHandle, identity: any, key: forge.util.ByteStringBuffer): string => {\n  const iv = forge.util.createBuffer(session.information.aesIV);\n\n  try {\n    const bytes = forge.util.decodeUtf8(AES.decrypt(identity.challenge, key, iv));\n\n    // Modify the plain text by removing every second character.\n    const unscrambled = new Array(bytes.length);\n    for (let i = 0; i < bytes.length; i += 1) {\n      if (i % 2 === 0) {\n        unscrambled.push(bytes.charAt(i));\n      }\n    }\n\n    const solution = forge.util.encodeUtf8(unscrambled.join(\"\"));\n    return AES.encrypt(solution, key, iv);\n  }\n  catch {\n    throw new BadCredentialsError();\n  }\n};\n\nconst switchToAuthKey = (session: SessionHandle, authentication: any, key: forge.util.ByteStringBuffer): void => {\n  const iv = forge.util.createBuffer(session.information.aesIV);\n  const authKeyDecrypted = AES.decrypt(authentication.cle, key, iv);\n  const authKey = authKeyDecrypted.split(\",\").map((char) => String.fromCharCode(parseInt(char))).join(\"\");\n\n  session.information.aesKey = authKey;\n};\n\nconst hasSecurityModal = (authentication: any): boolean => Boolean(authentication.actionsDoubleAuth);\n\nexport const finishLoginManually = async (session: SessionHandle, authentication: any, identity: any, initialUsername?: string): Promise<RefreshInformation> => {\n  session.user = await userParameters(session);\n\n  return {\n    token: authentication.jetonConnexionAppliMobile,\n    username: identity.login ?? initialUsername,\n    kind: session.information.accountKind,\n    url: session.information.url,\n    navigatorIdentifier: session.instance.navigatorIdentifier\n  };\n};\n","import { NewsQuestion } from \"~/models/news-question\";\nimport { NewsQuestionKind } from \"~/models/news-question-kind\";\n\nexport const newsQuestionLocalMutate: {\n  (question: NewsQuestion, textInputAnswer?: string): void;\n  (question: NewsQuestion, selectedAnswers?: number[], otherFieldTextValue?: string): void;\n  (question: NewsQuestion, answers?: number[] | string, textInput?: string): void;\n} = (\n  question: NewsQuestion,\n  answers?: number[] | string,\n  textInput?: string\n): void => {\n  if (\n    question.kind === NewsQuestionKind.TextInput ||\n    question.kind === NewsQuestionKind.InformationText\n  ) {\n    question.textInputAnswer = answers as string | undefined;\n  }\n  else {\n    question.selectedAnswers = answers as number[] | undefined;\n    question.textInputAnswer = textInput;\n  }\n\n  question.answered = typeof answers !== \"undefined\";\n  question.answerDate = question.answered ? new Date() : undefined;\n};\n","import type { SessionHandle, Timetable, TimetableClass } from \"~/models\";\ntype temp = Array<(Timetable[\"classes\"][number] & { _visible?: boolean })>;\n\n/**\n * Mutates the original timetable object to parse it.\n * This method is using the official PRONOTE way to parse the timetable.\n *\n * ## Why this isn't the responsibility of the internal `decodeTimetable()` ?\n *\n * Simply because it may be too overkill and not everyone would want this.\n * We must provide the data as is and let the user decide what to do with it.\n *\n * That's why we provide this helper function to parse the timetable.\n */\nexport const parseTimetable = (session: SessionHandle, timetable: Timetable, {\n  withSuperposedCanceledClasses = false,\n  withCanceledClasses = timetable.withCanceledClasses,\n  withPlannedClasses = true\n}): void => {\n  const classes = timetable.classes as temp;\n\n  if (!withCanceledClasses) {\n    for (const current of classes) {\n      if (current.is === \"lesson\" && current.canceled) {\n        current._visible = false;\n      }\n    }\n  }\n\n  if (!withPlannedClasses) {\n    for (const current of classes) {\n      if (\n        current.is === \"lesson\" &&\n        current._visible !== false &&\n        !current.canceled &&\n        [ // TODO: cerate TimetableClassLessonKind enum\n          0, // EnseignementNormal\n          // 1, // ConseilDeClasse\n          // 2, // EnseignementRemplacement\n          3, // EnseignementHistorique\n          4 // EnseignementSuppleant\n        ].includes(current.kind)\n      ) {\n        current._visible = false;\n      }\n    }\n  }\n\n  if (withCanceledClasses && !withSuperposedCanceledClasses) {\n    let foundInvisibleCanceled = true;\n    while (foundInvisibleCanceled) {\n      foundInvisibleCanceled = makeSuperimposedCanceledClassesInvisible(session, classes);\n    }\n  }\n\n\n  // @ts-expect-error : we mutate the property even if it's readonly.\n  timetable.classes = classes.filter((currentClass) => currentClass._visible !== false);\n\n  // Cleanup.\n  for (const current of classes) {\n    delete current._visible;\n  }\n};\n\nconst getClassEndBlockPosition = (session: SessionHandle, givenClass: TimetableClass): number => {\n  const blocksPerDay = session.instance.blocksPerDay;\n\n  const startBlockPosition = Math.floor(givenClass.blockPosition / blocksPerDay);\n  let endBlockPosition = givenClass.blockPosition + givenClass.blockLength - 1;\n\n  if (Math.floor(endBlockPosition / blocksPerDay) !== startBlockPosition) {\n    endBlockPosition = startBlockPosition * blocksPerDay + blocksPerDay - 1;\n  }\n\n  return endBlockPosition;\n};\n\nconst getSuperimposedClassesIndexes = (\n  session: SessionHandle,\n  classItem: TimetableClass,\n  classIndex: number,\n  busyPositions: number[]\n) => {\n  const classesSuperimposed = [classIndex];\n\n  const startBlockPosition = classItem.blockPosition;\n  const endBlockPosition = getClassEndBlockPosition(session, classItem);\n\n  for (let currentBlockPosition = startBlockPosition; currentBlockPosition <= endBlockPosition; currentBlockPosition++) {\n    const busyClassIndex = busyPositions[currentBlockPosition];\n\n    if (typeof busyClassIndex !== \"undefined\") {\n      if (\n        busyClassIndex !== classIndex &&\n        !classesSuperimposed.includes(busyClassIndex)\n      ) classesSuperimposed.push(busyClassIndex);\n    }\n  }\n\n  return classesSuperimposed;\n};\n\nconst makeSuperimposedCanceledClassesInvisible = (session: SessionHandle, classes: temp): boolean => {\n  /** key = week number, value */\n  const busyPositionsPerWeek: Record<number, number[]> = {};\n\n  for (let classIndex = 0; classIndex < classes.length; classIndex++) {\n    const currentClass = classes[classIndex];\n\n    if (!(currentClass.weekNumber in busyPositionsPerWeek)) busyPositionsPerWeek[currentClass.weekNumber] = [];\n    const busyPositions = busyPositionsPerWeek[currentClass.weekNumber];\n\n    const startBlockPosition = currentClass.blockPosition;\n    const endBlockPosition = getClassEndBlockPosition(session, currentClass);\n\n    if (currentClass._visible !== false) {\n      for (let currentBlockPosition = startBlockPosition; currentBlockPosition <= endBlockPosition; currentBlockPosition++) {\n        if (typeof busyPositions[currentBlockPosition] === \"undefined\") {\n          busyPositions[currentBlockPosition] = classIndex;\n        }\n        else {\n          const superimposedClassesIndexes = getSuperimposedClassesIndexes(\n            session,\n            currentClass,\n            classIndex,\n            busyPositions\n          );\n\n          let withCanceledClasses = false;\n          let withNormalClasses = false;\n\n          for (let j = 0; j < superimposedClassesIndexes.length; j++) {\n            const superimposedClass = classes[superimposedClassesIndexes[j]];\n\n            if (!withNormalClasses) {\n              withNormalClasses = !(superimposedClass.is === \"lesson\" && superimposedClass.canceled);\n            }\n\n            if (!withCanceledClasses) {\n              withCanceledClasses = superimposedClass.is === \"lesson\" && superimposedClass.canceled;\n            }\n          }\n\n          if (withNormalClasses && withCanceledClasses) {\n            for (let j = 0; j < superimposedClassesIndexes.length; j++) {\n              const superimposedClass = classes[superimposedClassesIndexes[j]];\n\n              if (superimposedClass && superimposedClass.is === \"lesson\" && superimposedClass.canceled) {\n                superimposedClass._visible = false;\n                return true;\n              }\n            }\n          }\n\n          break;\n        }\n      }\n    }\n  }\n\n  return false;\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { TabLocation, type SessionHandle } from \"~/models\";\n\nexport const presence = async (session: SessionHandle): Promise<void> => {\n  const request = new RequestFN(session, \"Presence\", {\n    _Signature_: { onglet: TabLocation.Presence }\n  });\n\n  await request.send();\n};\n","import { SessionHandle } from \"~/models\";\nimport { presence } from \"../presence\";\n\n/**\n * @param interval Custom interval (in ms) for `Presence` requests.\n * Defaults to 2 minutes: same value as from Pronote.\n */\nexport const startPresenceInterval = (session: SessionHandle, interval = 2 * 60 * 1000): void => {\n  clearPresenceInterval(session);\n  session.presence = setInterval(() => presence(session), interval);\n};\n\nexport const clearPresenceInterval = (session: SessionHandle): void => {\n  if (session.presence) {\n    clearInterval(session.presence);\n    session.presence = null;\n  }\n};\n","interface QueueItem {\n  promise: () => Promise<unknown>\n  resolve: (value: any) => void\n  reject: (error?: any) => void\n}\n\nexport class Queue {\n  private queue: QueueItem[] = [];\n  private pendingPromise: boolean = false;\n\n  public push<T extends unknown>(promise: () => Promise<T>): Promise<T> {\n    return new Promise<T>((resolve, reject) => {\n      this.queue.push({\n        promise,\n        resolve,\n        reject\n      });\n\n      // Attempt to dequeue only if nothing is pending\n      if (!this.pendingPromise) {\n        this.dequeue();\n      }\n    });\n  }\n\n  private dequeue() {\n    if (this.pendingPromise) return false; // Ensure only one pending promise\n\n    const item = this.queue.shift();\n    if (!item) return false;\n\n    this.pendingPromise = true; // Mark that a promise is now pending\n\n    item.promise()\n      .then((value) => {\n        item.resolve(value);\n        this.pendingPromise = false; // Clear pending state after resolve\n        this.dequeue(); // Start the next item in the queue\n      })\n      .catch((err) => {\n        item.reject(err);\n        this.pendingPromise = false; // Clear pending state after reject\n        this.dequeue(); // Start the next item in the queue\n      });\n\n    return true;\n  }\n}\n","import type { SessionHandle } from \"~/models\";\nimport { defaultFetcher, type Fetcher } from \"@literate.ink/utilities\";\nimport { Queue } from \"~/api/private/queue\";\n\nexport const createSessionHandle = (fetcher: Fetcher = defaultFetcher): SessionHandle => {\n  return {\n    // @ts-expect-error : we want null as initializer\n    information: null,\n    // @ts-expect-error : we want null as initializer\n    instance: null,\n    // @ts-expect-error : we want null as initializer\n    user: null,\n\n    queue: new Queue(),\n    fetcher,\n\n    presence: null\n  };\n};\n","export const setDayToStart = (date: Date): void => {\n  date.setHours(0, 0, 0, 0);\n};\n\nexport const setDayToEnd = (date: Date): void => {\n  date.setHours(23, 59, 59, 999);\n};\n\nexport const getUTCTime = (date: Date): number => {\n  return date.getTime() + date.getTimezoneOffset() * 60 * 1000;\n};\n\nexport const getUTCDate = (date: Date): Date => {\n  return new Date(getUTCTime(date));\n};\n","import { getUTCTime } from \"~/api/private/dates\";\n\nexport const translateToWeekNumber = (dateToTranslate: Date, startDay: Date): number => {\n  const daysDiff = Math.floor((getUTCTime(dateToTranslate) - getUTCTime(startDay)) / (1000 * 60 * 60 * 24));\n  return 1 + Math.floor(daysDiff / 7);\n};\n","import type { Account, SessionHandle } from \"~/models\";\n\n/**\n * Get more information on the user\n * such email, phone, address and INE if the user is a student.\n */\nexport const decodeAccount = (account: any, session: SessionHandle): Account => {\n  const information = account.Informations;\n  let iCalToken: string | undefined;\n\n  if (session.instance.version[0] >= 2024) {\n    iCalToken = account.iCal?.liste.V[0]?.paramICal;\n  }\n\n  return {\n    address: [\n      information.adresse1,\n      information.adresse2,\n      information.adresse3,\n      information.adresse4\n    ],\n\n    postalCode: information.codePostal,\n    province: information.province,\n    country: information.pays,\n    city: information.ville,\n\n    email: information.eMail,\n    phone: `+${information.indicatifTel}${information.telephonePortable}`,\n\n    INE: information.numeroINE,\n    iCalToken\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeAccount } from \"~/decoders/account\";\nimport { type Account, type SessionHandle, TabLocation } from \"~/models\";\n\nexport const account = async (session: SessionHandle): Promise<Account> => {\n  const request = new RequestFN(session, \"PageInfosPerso\", {\n    _Signature_: {\n      onglet: TabLocation.Account\n      // TODO: Check if this is required in older version. On 2024, we apparently don't need it anymore.\n      // ressource: {\n      //   G: 4,\n      //   N: input.userID\n      // }\n    }\n  });\n\n  const response = await request.send();\n  return decodeAccount(response.data.donnees, session);\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { EntityState, TabLocation, type SessionHandle } from \"~/models\";\n\nexport const assignmentRemoveFile = async (session: SessionHandle, assignmentID: string): Promise<void> => {\n  const request = new RequestFN(session, \"SaisieTAFARendreEleve\", {\n    _Signature_: { onglet: TabLocation.Assignments },\n\n    donnees: {\n      listeFichiers: [{\n        E: EntityState.DELETION,\n        TAF: { N: assignmentID }\n      }]\n    }\n  });\n\n  await request.send();\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { EntityState, SessionHandle, TabLocation } from \"~/models\";\n\nexport const assignmentStatus = async (session: SessionHandle, assignmentID: string, done: boolean): Promise<void> => {\n  const request = new RequestFN(session, \"SaisieTAFFaitEleve\", {\n    _Signature_: { onglet: TabLocation.Assignments },\n\n    donnees: {\n      listeTAF: [{\n        E: EntityState.MODIFICATION,\n        TAFFait: done,\n        N: assignmentID\n      }]\n    }\n  });\n\n  await request.send();\n};\n","/**\n * Defaults to `-1000`, used to generate IDs for newly created objects.\n * Whenever an object is created using this ID, it should be decremented by `1`.\n */\nlet id = -1000;\n\nexport const createEntityID = (): number => {\n  id -= 1;\n  return id;\n};\n","import type { FormDataFile } from \"@literate.ink/utilities\";\nimport { UploadFailedError, type SessionHandle } from \"~/models\";\nimport { aesKeys } from \"~/api/private/keys\";\nimport { AES } from \"~/api/private/aes\";\n\nexport class RequestUpload {\n  public order: string;\n  public id = `selecfile_1_${Date.now()}`;\n\n  private url: string;\n  private form: FormData;\n  private headers: Record<string, string> = {};\n\n  public constructor (\n    private session: SessionHandle,\n    public functionName: string,\n    file: FormDataFile,\n    public fileName: string\n  ) {\n    session.information.order++;\n\n    const { iv, key } = aesKeys(session);\n    this.order = AES.encrypt(session.information.order.toString(), key, iv);\n\n    const form = new FormData();\n    form.append(\"numeroOrdre\", this.order);\n    form.append(\"numeroSession\", session.information.id.toString());\n    form.append(\"nomRequete\", functionName);\n    form.append(\"idFichier\", this.id);\n    form.append(\"md5\", \"\");\n    // @ts-expect-error : trust me.\n    form.append(\"files[]\", file, fileName);\n\n    this.form = form;\n    this.url = session.information.url + `/uploadfilesession/${session.information.accountKind}/${session.information.id}`;\n    this.headers[\"Content-Disposition\"] = `attachment; filename=\"${encodeURI(fileName)}\"`;\n  }\n\n  public async send (): Promise<void> {\n    // Please, see the following comment to understand.\n    // https://github.com/oven-sh/bun/issues/7917#issuecomment-1872454367\n    const textBody = await new Response(this.form).text();\n    this.headers[\"Content-Type\"] = `multipart/form-data; boundary=${textBody\n      .split(\"\\n\")[0]\n      .slice(2)}`;\n\n    let state = 3; // Set to UPLOADING by default.\n\n    while (state === 3) { // UPLOADING\n      const response = await this.session.fetcher({\n        url: new URL(this.url),\n        method: \"POST\",\n        content: textBody,\n        headers: this.headers\n      });\n\n      const json = JSON.parse(response.content);\n      state = json.etat;\n    }\n\n    // Even if there's an error, it bumped.\n    this.session.information.order++;\n\n    if (state === 0 || state === 2) { // UNKNOWN or ERROR\n      throw new UploadFailedError();\n    }\n  }\n}\n","import { UploadSizeError, TabLocation, type SessionHandle, DocumentKind, EntityState } from \"~/models\";\nimport type { FormDataFile } from \"@literate.ink/utilities\";\nimport { createEntityID } from \"~/api/helpers/entity-id\";\nimport { RequestUpload } from \"~/core/request-upload\";\nimport { RequestFN } from \"~/core/request-function\";\n\nexport const assignmentUploadFile = async (session: SessionHandle, assignmentID: string, file: FormDataFile, fileName: string): Promise<void> => {\n  // Check if the file can be uploaded.\n  // Otherwise we'll get an error during the upload.\n  // @ts-expect-error : trust the process.\n  const fileSize: number | undefined = file.size || file.byteLength;\n  const maxFileSize = session.user.authorizations.maxAssignmentFileUploadSize;\n  if (typeof fileSize === \"number\" && fileSize > maxFileSize) {\n    throw new UploadSizeError(maxFileSize);\n  }\n\n  // Ask to the server to store the file for us.\n  const fileUpload = new RequestUpload(session, \"SaisieTAFARendreEleve\", file, fileName);\n  await fileUpload.send();\n\n  // Now we can link the file to the assignment.\n  const request = new RequestFN(session, \"SaisieTAFARendreEleve\", {\n    _Signature_: { onglet: TabLocation.Assignments },\n\n    donnees: {\n      listeFichiers: [{\n        E: EntityState.CREATION,\n        G: DocumentKind.FILE,\n        L: fileName,\n        N: createEntityID(),\n        idFichier: fileUpload.id,\n        TAF: { N: assignmentID }\n      }]\n    }\n  });\n\n  await request.send();\n};\n","import type { Subject } from \"~/models\";\n\nexport const decodeSubject = (subject: any): Subject => {\n  return {\n    id: subject.N,\n    name: subject.L,\n    inGroups: subject.estServiceGroupe ?? false\n  };\n};\n","import type { AssignmentTheme } from \"~/models\";\nimport { decodeSubject } from \"./subject\";\n\nexport const decodeAssignmentTheme = (theme: any): AssignmentTheme => ({\n  id: theme.N,\n  name: theme.L,\n  subject: decodeSubject(theme.Matiere.V)\n});\n","import { type Assignment, type SessionHandle, AssignmentReturnKind } from \"~/models\";\nimport { decodeSubject } from \"./subject\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeAttachment } from \"./attachment\";\nimport { decodeAssignmentTheme } from \"./assignment-theme\";\n\nexport const decodeAssignment = (assignment: any, session: SessionHandle): Assignment => {\n  return {\n    id: assignment.N,\n    subject: decodeSubject(assignment.Matiere.V),\n    description: assignment.descriptif.V,\n    backgroundColor: assignment.CouleurFond,\n    done: assignment.TAFFait,\n    deadline: decodePronoteDate(assignment.PourLe.V),\n    attachments: assignment.ListePieceJointe.V.map((attachment: any) => decodeAttachment(attachment, session)),\n    difficulty: assignment.niveauDifficulte,\n    length: assignment.duree,\n    themes: assignment.ListeThemes.V.map((theme: any) => decodeAssignmentTheme(theme)),\n    return: {\n      kind: assignment.genreRendu ?? AssignmentReturnKind.None,\n      canUpload: assignment.peuRendre ?? false,\n      uploaded: assignment.documentRendu && decodeAttachment(assignment.documentRendu.V, session)\n    },\n    resourceID: assignment.cahierDeTextes?.V.N\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { type SessionHandle, TabLocation } from \"~/models\";\nimport { getUTCDate } from \"./dates\";\nimport { translateToWeekNumber } from \"../helpers/week-number\";\n\nexport const homeworkFromWeek = async (session: SessionHandle, tab: TabLocation, weekNumber: number, extendsToWeekNumber?: number): Promise<any> => {\n  const request = new RequestFN(session, \"PageCahierDeTexte\", {\n    _Signature_: { onglet: tab },\n    donnees: {\n      domaine: {\n        _T: 8,\n        V: typeof extendsToWeekNumber === \"number\" ? `[${weekNumber}..${extendsToWeekNumber}]` : `[${weekNumber}]`\n      }\n    }\n  });\n\n  const response = await request.send();\n  return response.data.donnees;\n};\n\nexport const homeworkFromIntervals = async (session: SessionHandle, tab: TabLocation, startDate: Date, endDate: Date): Promise<any> => {\n  startDate = getUTCDate(startDate);\n  endDate = getUTCDate(endDate);\n\n  const startWeekNumber = translateToWeekNumber(startDate, session.instance.firstMonday);\n  const endWeekNumber = translateToWeekNumber(endDate, session.instance.firstMonday);\n\n  return homeworkFromWeek(session, tab, startWeekNumber, endWeekNumber);\n};\n","import { type SessionHandle, type Assignment, TabLocation } from \"~/models\";\nimport { decodeAssignment } from \"~/decoders/assignment\";\nimport { homeworkFromIntervals, homeworkFromWeek } from \"./private/homework\";\n\nconst decoder = (session: SessionHandle, data: any): Array<Assignment> => {\n  return data.ListeTravauxAFaire.V.map((homework: any) => decodeAssignment(homework, session));\n};\n\nexport const assignmentsFromWeek = async (session: SessionHandle, weekNumber: number, extendsToWeekNumber?: number): Promise<Array<Assignment>> => {\n  const reply = await homeworkFromWeek(session, TabLocation.Assignments, weekNumber, extendsToWeekNumber);\n  return decoder(session, reply);\n};\n\nexport const assignmentsFromIntervals = async (session: SessionHandle, startDate: Date, endDate: Date): Promise<Array<Assignment>> => {\n  const reply = await homeworkFromIntervals(session, TabLocation.Assignments, startDate, endDate);\n  // Only keep items assignments are in the intervals.\n  return decoder(session, reply).filter((homework) => startDate <= homework.deadline && homework.deadline <= endDate);\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { DiscussionCommand, EntityState, TabLocation, type SessionHandle } from \"~/models\";\n\nexport const discussionPostCommand = async (session: SessionHandle, command: DiscussionCommand | \"\", extra: any): Promise<void> => {\n  let payload;\n\n  switch (command) {\n    case DiscussionCommand.brouillon:\n      payload = {\n        commande: command,\n        brouillon: typeof extra.id === \"number\" ? {\n          E: EntityState.CREATION,\n          N: extra.id\n        } : {\n          E: EntityState.MODIFICATION,\n          N: extra.id\n        },\n\n        contenu: extra.content,\n\n        messagePourReponse: {\n          G: 0,\n          N: extra.replyMessageID\n        },\n\n        listeDestinataires: [],\n        listeFichiers: [],\n        objet: \"\"\n      };\n      break;\n    case \"\":\n      payload = {\n        commande: command,\n        bouton: {\n          N: 0,\n          G: extra.button\n        },\n\n        brouillon: {\n          N: extra.id\n        },\n\n        contenu: extra.content,\n        listeDestinataires: [],\n        listeFichiers: [],\n\n        messagePourReponse: {\n          G: 0,\n          N: extra.replyMessageID\n        }\n      };\n      break;\n    default:\n      payload = {\n        commande: command,\n        listePossessionsMessages: extra.possessions\n      };\n  }\n\n  const request = new RequestFN(session, \"SaisieMessage\", {\n    _Signature_: { onglet: TabLocation.Discussions },\n    donnees: payload\n  });\n\n  await request.send();\n};\n","import type { _DiscussionsCache } from \"~/api/private/discussions-cache\";\nimport type { Discussion, DiscussionFolder } from \"~/models\";\n\nexport const decodeDiscussion = (discussion: any, folders: DiscussionFolder[], cache: _DiscussionsCache): Discussion => {\n  return {\n    cache,\n    creator: discussion.initiateur,\n    dateAsFrenchText: discussion.libelleDate,\n    recipientName: discussion.public,\n    participantsMessageID: discussion.messagePourParticipants.V.N,\n    possessions: discussion.listePossessionsMessages.V,\n    numberOfDrafts: discussion.nbBrouillons ?? 0,\n    subject: discussion.objet ?? \"\",\n    numberOfMessages: discussion.nombreMessages ?? 0,\n    numberOfMessagesUnread: discussion.nbNonLus ?? 0,\n    closed: discussion.ferme ?? false,\n    folders: discussion.listeEtiquettes?.V\n      .map((current: any) =>\n        folders.find((decoded) => decoded.id === current.N)\n      )\n      .filter(Boolean) ?? []\n  };\n};\n","import type { DiscussionFolder } from \"~/models\";\n\nexport const decodeDiscussionFolder = (folder: any): DiscussionFolder => {\n  return { // just an entity\n    id: folder.N,\n    name: folder.L,\n    kind: folder.G\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeDiscussion } from \"~/decoders/discussion\";\nimport { decodeDiscussionFolder } from \"~/decoders/discussion-folder\";\nimport { type Discussion, type Discussions, TabLocation, type SessionHandle } from \"~/models\";\nimport type { _DiscussionsCache } from \"./private/discussions-cache\";\n\nexport const discussions = async (session: SessionHandle, cache: _DiscussionsCache = {_:[]}): Promise<Discussions> => {\n  const request = new RequestFN(session, \"ListeMessagerie\", {\n    _Signature_: { onglet: TabLocation.Discussions },\n\n    donnees: {\n      avecLu: true,\n      avecMessage: true,\n      possessionMessageDiscussionUnique: null\n    }\n  });\n\n  const response = await request.send();\n  const data = response.data.donnees;\n\n  const folders = data.listeEtiquettes.V.map(decodeDiscussionFolder);\n\n  const items: Discussion[] = data.listeMessagerie.V\n    .filter((discussion: any) => {\n      const hasZeroDepth = (discussion.profondeur || 0) === 0;\n      const hasParticipants = discussion.messagePourParticipants?.V.N;\n      return discussion.estUneDiscussion && hasParticipants && hasZeroDepth;\n    })\n    .map((discussion: any) => decodeDiscussion(discussion, folders, cache));\n\n  // This is a trick to keep the reference to the items\n  // in the cache, while updating the items.\n  cache._.length = 0;\n  cache._.push(...items);\n\n  for (const item of cache._) {\n    if (item.participantsMessageID in cache) {\n      // Mutate the reference directly in cache.\n      Object.assign(cache[item.participantsMessageID], item);\n    }\n    else {\n      // Create the reference in cache.\n      cache[item.participantsMessageID] = item;\n    }\n  }\n\n  // Delete outdated keys, in case there are any.\n  for (const key in cache) {\n    if (key === \"_\") continue;\n    if (!cache._.find((item) => item.participantsMessageID === key)) {\n      delete cache[key];\n    }\n  }\n\n  return {\n    folders,\n    // Instead of returning the items, we return\n    // the reference to the items in the cache.\n    items: cache._\n  };\n};\n","import type { DiscussionDraftMessage } from \"~/models\";\n\nexport const decodeDiscussionDraftMessage = (draft: any): DiscussionDraftMessage => {\n  const isHTML: boolean = draft.estHTML ?? false;\n\n  return {\n    possessionID: draft.possessionMessage.V.N,\n    replyMessageID: draft.messageSource.V.N,\n    content: isHTML ? draft.contenu.V : draft.contenu,\n    isHTML\n  };\n};\n","import { DiscussionMessage, EntityKind, SessionHandle } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { DiscussionMessageRecipient } from \"~/models/discussion-message-recipient\";\nimport { decodeAttachment } from \"./attachment\";\n\nconst hintToEntity = (hint: string): EntityKind => {\n  let type: EntityKind;\n\n  switch (hint) {\n    case \"Professeur\":\n      type = EntityKind.Teacher;\n      break;\n    case \"Personnel\":\n      type = EntityKind.Personal;\n      break;\n    default:\n      type = EntityKind.Student;\n  }\n\n  return type;\n};\n\nexport const decodeDiscussionMessage = (message: any, session: SessionHandle): DiscussionMessage => {\n  let author: DiscussionMessageRecipient | undefined;\n\n  if (message.public_gauche !== \"Moi\")\n    author = { name: message.public_gauche, kind: hintToEntity(message.hint_gauche) };\n\n  let receiver: DiscussionMessageRecipient | undefined;\n\n  if (message.public_droite === \"Moi\")\n    receiver = undefined;\n  else if (typeof message.public_droite === \"string\")\n    receiver = { name: message.public_droite, kind: hintToEntity(message.hint_droite) };\n\n  return {\n    id: message.N,\n    content: message.estHTML ? message.contenu.V : message.contenu,\n    creationDate: decodePronoteDate(message.date.V),\n    author, receiver,\n    partialVisibility: message.estUnAparte,\n    amountOfRecipients: (message.nbPublic ?? 1) + 1, // `+1` because the author is also a recipient.\n    files: message.listeDocumentsJoints?.V.map((attachment: any) => decodeAttachment(attachment, session)) ?? []\n  };\n};\n","import { DiscussionMessage, DiscussionSentMessage, SessionHandle } from \"~/models\";\nimport { decodeDiscussionMessage } from \"./discussion-message\";\n\nexport const decodeDiscussionSentMessage = (message: any, session: SessionHandle, sents: DiscussionSentMessage[]): DiscussionSentMessage => {\n  const transferredMessages: DiscussionMessage[] = [];\n  const replyMessageID: string = message.messageSource.V.N;\n\n  if (message.listeMessagesPourContexte) {\n    for (const transferredMessage of message.listeMessagesPourContexte.V) {\n      const decoded = decodeDiscussionMessage(transferredMessage, session);\n      transferredMessages.push(decoded);\n    }\n  }\n\n  let replyingTo = sents.find((message) => message.id === replyMessageID);\n\n  return {\n    ...decodeDiscussionMessage(message, session),\n    transferredMessages,\n    replyMessageID,\n    replyingTo\n  };\n};\n","import { DiscussionDraftMessage, DiscussionMessages, DiscussionSendAction, DiscussionSentMessage, SessionHandle } from \"~/models\";\nimport { decodeDiscussionDraftMessage } from \"./discussion-draft-message\";\nimport { decodeDiscussionSentMessage } from \"./discussion-sent-message\";\n\nexport const decodeDiscussionMessages = (messages: any, session: SessionHandle): DiscussionMessages => {\n  const draft = messages.brouillon;\n  const sents: DiscussionSentMessage[] = [];\n  const drafts: DiscussionDraftMessage[] = [];\n  const defaultReplyMessageID: string = messages.messagePourReponse.V.N;\n\n  for (const message of messages.listeMessages.V) {\n    if (message.brouillon) drafts.push(decodeDiscussionDraftMessage(message));\n    else sents.push(decodeDiscussionSentMessage(message, session, sents));\n  }\n\n  sents.sort((a, b) => b.creationDate.getTime() - a.creationDate.getTime());\n\n  if (draft) {\n    const isHTML = draft.V.estHTML ?? false;\n\n    drafts.push({\n      isHTML,\n      content: isHTML ? draft.V.contenu : draft.V.contenu.V,\n      possessionID: draft.V.N,\n      replyMessageID: defaultReplyMessageID\n    });\n  }\n\n  const sendAction: DiscussionSendAction | undefined = messages.listeBoutons.V.find((button: any) => button.L.startsWith(\"Envoyer\"))?.G;\n  const canIncludeStudentsAndParents = sendAction === DiscussionSendAction.ReplyEveryoneExceptParentsAndStudents\n                                    || sendAction === DiscussionSendAction.SendEveryoneExceptParentsAndStudents;\n\n  return {\n    sents,\n    drafts,\n    defaultReplyMessageID,\n    sendAction,\n    canIncludeStudentsAndParents\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeDiscussionMessages } from \"~/decoders/discussion-messages\";\nimport { type Discussion, DiscussionMessages, type SessionHandle, TabLocation } from \"~/models\";\n\n/**\n * Fetches the messages and writes them in the discussion.\n * By default it won't mark the messages as read even after fetching them.\n *\n * You can change this behavior by setting `markAsRead` to `true`.\n * There's no other way to mark the messages as read.\n *\n * @param markAsRead Whether to mark the messages as read after fetching them.\n */\nexport const discussionMessages = async (session: SessionHandle, discussion: Discussion, markAsRead = false): Promise<DiscussionMessages> => {\n  const request = new RequestFN(session, \"ListeMessages\", {\n    _Signature_: { onglet: TabLocation.Discussions },\n\n    donnees: {\n      listePossessionsMessages: discussion.possessions,\n      marquerCommeLu: markAsRead,\n      nbMessagesVus: 0 // fetch all messages\n    }\n  });\n\n  const response = await request.send();\n  const messages = decodeDiscussionMessages(response.data.donnees, session);\n\n  if (!discussion.messages) // setup the reference\n    discussion.messages = messages;\n  else // mutate the reference\n    Object.assign(discussion.messages, messages);\n\n  return messages;\n};\n","import { type Discussion, DiscussionCommand, type SessionHandle } from \"~/models\";\nimport { discussionPostCommand } from \"./private/discussion-post-command\";\nimport { createEntityID } from \"./helpers/entity-id\";\nimport { discussions } from \"./discussions\";\nimport { discussionMessages } from \"./discussion-messages\";\n\nexport const discussionCreateDraft = async (session: SessionHandle, discussion: Discussion, content: string, replyTo = discussion.messages?.defaultReplyMessageID): Promise<void> => {\n  await discussionPostCommand(session, DiscussionCommand.brouillon, {\n    id: createEntityID(),\n    content,\n    replyMessageID: replyTo\n  });\n\n  await discussions(session, discussion.cache);\n  await discussionMessages(session, discussion);\n};\n","import { Discussion, DiscussionCommand, SessionHandle } from \"~/models\";\nimport { discussions } from \"./discussions\";\nimport { discussionPostCommand } from \"./private/discussion-post-command\";\n\nexport const discussionDelete = async (session: SessionHandle, discussion: Discussion): Promise<void> => {\n  await discussionPostCommand(session, DiscussionCommand.Delete, {\n    possessions: discussion.possessions\n  });\n\n  // Will also remove the reference in the cache.\n  await discussions(session, discussion.cache);\n};\n","import { Discussion, SessionHandle } from \"~/models\";\nimport { discussionMessages } from \"./discussion-messages\";\n\n/**\n * Mark a discussion as read.\n * @remark Shortcut of `discussionMessages` but here we don't return anything.\n */\nexport const discussionRead = async (session: SessionHandle, discussion: Discussion) => {\n  await discussionMessages(session, discussion, true);\n};\n","import type { DiscussionRecipient } from \"~/models\";\n\nexport const decodeDiscussionRecipient = (recipient: any): DiscussionRecipient => ({\n  id: recipient.N,\n  name: recipient.L,\n  kind: recipient.G,\n  disallowMessages: recipient.refusMess ?? false\n});\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeDiscussionRecipient } from \"~/decoders/discussion-recipient\";\nimport { Discussion, DiscussionRecipient, SessionHandle, TabLocation } from \"~/models\";\n\n/**\n * Fetches the recipients of the discussion.\n *\n * A recipient is someone who is part of the discussion.\n * They don't have to send a message to be considered as a recipient.\n */\nexport const discussionRecipients = async (session: SessionHandle, discussion: Discussion): Promise<Array<DiscussionRecipient>> => {\n  const request = new RequestFN(session, \"SaisiePublicMessage\", {\n    _Signature_: { onglet: TabLocation.Discussions },\n\n    donnees: {\n      message: { N: discussion.participantsMessageID },\n      estPublicParticipant: true,\n      estDestinatairesReponse: false\n    }\n  });\n\n  const response = await request.send();\n  return response.data.donnees.listeDest.V.map(decodeDiscussionRecipient);\n};\n","import { Discussion, DiscussionCommand, type DiscussionDraftMessage, type SessionHandle } from \"~/models\";\nimport { discussionPostCommand } from \"./private/discussion-post-command\";\nimport { discussions } from \"./discussions\";\nimport { discussionMessages } from \"./discussion-messages\";\n\n/**\n * Send local changes to the object\n * to the server.\n */\nexport const discussionRemoteMutateDraft = async (session: SessionHandle, discussion: Discussion, draft: DiscussionDraftMessage): Promise<void> => {\n  await discussionPostCommand(session, DiscussionCommand.brouillon, {\n    id: draft.possessionID,\n    content: draft.content,\n    replyMessageID: draft.replyMessageID\n  });\n\n  await discussions(session, discussion.cache);\n  await discussionMessages(session, discussion);\n};\n","import { Discussion, DiscussionCommand, DiscussionDraftMessage, DiscussionMessages, SessionHandle } from \"~/models\";\nimport { discussionPostCommand } from \"./private/discussion-post-command\";\nimport { discussions } from \"./discussions\";\nimport { discussionMessages } from \"./discussion-messages\";\n\nexport const discussionRemoveDraft = async (session: SessionHandle, discussion: Discussion, draft: DiscussionDraftMessage): Promise<void> => {\n  await discussionPostCommand(session, DiscussionCommand.Delete, {\n    possessions: [{ N: draft.possessionID }]\n  });\n\n  await discussions(session, discussion.cache);\n  await discussionMessages(session, discussion);\n};\n","import { Discussion, DiscussionCommand, SessionHandle } from \"~/models\";\nimport { discussions } from \"./discussions\";\nimport { discussionPostCommand } from \"./private/discussion-post-command\";\n\nexport const discussionRestoreTrash = async (session: SessionHandle, discussion: Discussion): Promise<void> => {\n  await discussionPostCommand(session, DiscussionCommand.Restore, {\n    possessions: discussion.possessions\n  });\n\n  await discussions(session, discussion.cache);\n};\n","import { DiscussionSendAction } from \"~/models\";\n\nexport const encodeDiscussionSendAction = (action: DiscussionSendAction, includeParentsAndStudents: boolean): DiscussionSendAction => {\n  if (\n    action === DiscussionSendAction.SendEveryoneExceptParentsAndStudents &&\n    includeParentsAndStudents\n  ) action = DiscussionSendAction.SendEveryone;\n\n  if (\n    action === DiscussionSendAction.ReplyEveryoneExceptParentsAndStudents &&\n    includeParentsAndStudents\n  ) action = DiscussionSendAction.ReplyEveryone;\n\n  return action;\n};\n","import { type Discussion, DiscussionActionError, type DiscussionDraftMessage, type SessionHandle } from \"~/models\";\nimport { discussionPostCommand } from \"./private/discussion-post-command\";\nimport { encodeDiscussionSendAction } from \"~/encoders/discussion-send-action\";\nimport { discussions } from \"./discussions\";\nimport { discussionMessages } from \"./discussion-messages\";\n\nexport const discussionSendDraft = async (session: SessionHandle, discussion: Discussion, draft: DiscussionDraftMessage, includeParentsAndStudents = false): Promise<void> => {\n  if (typeof discussion.messages?.sendAction === \"undefined\")\n    throw new DiscussionActionError();\n\n  await discussionPostCommand(session, \"\", {\n    button: encodeDiscussionSendAction(discussion.messages.sendAction, includeParentsAndStudents),\n    content: draft.content,\n    id: draft.possessionID,\n    replyMessageID: draft.replyMessageID\n  });\n\n  await discussions(session, discussion.cache);\n  await discussionMessages(session, discussion);\n};\n","import { type Discussion, DiscussionActionError, DiscussionMessagesMissingError, EntityState, type SessionHandle, TabLocation } from \"~/models\";\nimport { encodeDiscussionSendAction } from \"~/encoders/discussion-send-action\";\nimport { RequestFN } from \"~/core/request-function\";\nimport { discussionMessages } from \"./discussion-messages\";\nimport { createEntityID } from \"./helpers/entity-id\";\nimport { discussions } from \"./discussions\";\n\nexport const discussionSendMessage = async (\n  session: SessionHandle,\n  discussion: Discussion,\n  content: string,\n  includeParentsAndStudents = false,\n  replyTo = discussion.messages?.defaultReplyMessageID\n): Promise<void> => {\n  if (!discussion.messages)\n    throw new DiscussionMessagesMissingError();\n\n  if (typeof discussion.messages.sendAction === \"undefined\")\n    throw new DiscussionActionError();\n\n  const action = encodeDiscussionSendAction(discussion.messages.sendAction, includeParentsAndStudents);\n  const request = new RequestFN(session, \"SaisieMessage\", {\n    donnees: {\n      contenu: session.user.authorizations.hasAdvancedDiscussionEditor ? {\n        _T: 21,\n        V: content\n      } : content,\n\n      bouton: { N: 0, G: action },\n      brouillon: {\n        N: createEntityID(),\n        E: EntityState.CREATION\n      },\n      genreDiscussion: 0,\n      messagePourReponse: {\n        G: 0,\n        N: replyTo\n      },\n\n      listeFichiers: []\n    },\n\n    _Signature_: {\n      onglet: TabLocation.Discussions\n    }\n  });\n\n  await request.send();\n\n  await discussions(session, discussion.cache);\n  await discussionMessages(session, discussion);\n};\n\n","import { Discussion, DiscussionCommand, SessionHandle } from \"~/models\";\nimport { discussions } from \"./discussions\";\nimport { discussionPostCommand } from \"./private/discussion-post-command\";\n\nexport const discussionTrash = async (session: SessionHandle, discussion: Discussion): Promise<void> => {\n  await discussionPostCommand(session, DiscussionCommand.Trash, {\n    possessions: discussion.possessions\n  });\n\n  await discussions(session, discussion.cache);\n};\n","import type { Skill } from \"~/models/skill\";\n\nexport const decodeSkill = (skill: any): Skill => {\n  return {\n    id: skill.N,\n\n    level: skill.L,\n    abbreviation: skill.abbreviation,\n\n    coefficient: skill.coefficient,\n\n    domainID: skill.domaine.V.N,\n    domainName: skill.domaine.V.L,\n\n    itemID: skill.item?.V.N,\n    itemName: skill.item?.V.L,\n\n    order: skill.ordre,\n\n    pillarID: skill.pilier.V.N,\n    pillarName: skill.pilier.V.L,\n    pillarPrefixes: skill.pilier.V.strPrefixes.split(\",\").map((prefix: any) => prefix.trim())\n  };\n};\n","import type { Evaluation, Skill } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeSubject } from \"./subject\";\nimport { decodeSkill } from \"./skill\";\n\nexport const decodeEvaluation = (evaluation: any): Evaluation => {\n  const skills: Skill[] = evaluation.listeNiveauxDAcquisitions.V.map(decodeSkill);\n  skills.sort((skillA, skillB) => skillA.order - skillB.order);\n\n  return {\n    skills,\n    name: evaluation.L,\n    id: evaluation.N,\n    teacher: evaluation.individu.V.L,\n    coefficient: evaluation.coefficient,\n    description: evaluation.descriptif,\n    subject: decodeSubject(evaluation.matiere.V),\n    levels: evaluation.listePaliers.V.map((level: any) => level.L),\n    date: decodePronoteDate(evaluation.date.V)\n  };\n};\n","import type { Period } from \"~/models\";\n\n// return entity\nexport const encodePeriod = (period: Period): any => {\n  return {\n    N: period.id,\n    G: period.kind,\n    L: period.name\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeEvaluation } from \"~/decoders/evaluation\";\nimport { encodePeriod } from \"~/encoders/period\";\nimport { type Evaluation, type Period, type SessionHandle, TabLocation } from \"~/models\";\n\nexport const evaluations = async (session: SessionHandle, period: Period): Promise<Array<Evaluation>> => {\n  const request = new RequestFN(session, \"DernieresEvaluations\", {\n    _Signature_: { onglet: TabLocation.Evaluations },\n\n    donnees: {\n      periode: encodePeriod(period)\n    }\n  });\n\n  const response = await request.send();\n\n  return response.data.donnees.listeEvaluations.V\n    .map(decodeEvaluation);\n};\n","// Equatorial mean radius of Earth, in meters.\nconst R = 6378137;\n\n// Helper functions.\nconst squared = (x: number): number => x * x;\nconst toRad   = (x: number): number => x * Math.PI / 180;\nconst hav     = (x: number): number => squared(Math.sin(x / 2));\n\n/**\n * Applies the following formula :\n * `hav(theta) = hav(bLat - aLat) + cos(aLat) * cos(bLat) * hav(bLon - aLon)`\n *\n * @returns Distance in meters.\n */\nexport const haversine = (a: [lat: number, lon: number], b: [lat: number, lon: number]): number => {\n  const aLat = toRad(a[0]);\n  const bLat = toRad(b[0]);\n  const aLng = toRad(a[1]);\n  const bLng = toRad(b[1]);\n\n  const ht = hav(bLat - aLat) + Math.cos(aLat) * Math.cos(bLat) * hav(bLng - aLng);\n  return 2 * R * Math.asin(Math.sqrt(ht));\n};\n","import type { GeolocatedInstance } from \"~/models\";\nimport { haversine } from \"~/api/private/haversine\";\n\nexport const decodeGeolocatedInstance = (instance: any, position: [lat: number, lon: number]): GeolocatedInstance => {\n  const latitude = parseFloat(instance.lat);\n  const longitude = parseFloat(instance.long);\n\n  return {\n    url: instance.url.toLowerCase(),\n    name: instance.nomEtab\n      .trim()\n      .replace(\"COLLEGE\", \"COLLÈGE\")\n      .replace(\"LYCEE\", \"LYCÉE\"),\n\n    latitude, longitude,\n    postalCode: parseInt(instance.cp),\n\n    distance: haversine(position, [latitude, longitude])\n  };\n};\n","import { type Fetcher, defaultFetcher } from \"@literate.ink/utilities\";\nimport { decodeGeolocatedInstance } from \"~/decoders/geolocated-instance\";\nimport type { GeolocatedInstance } from \"~/models\";\n\nexport const geolocation = async (position: {\n  latitude: number\n  longitude: number\n}, fetcher: Fetcher = defaultFetcher): Promise<Array<GeolocatedInstance>> => {\n  const body = `data={\"nomFonction\":\"geoLoc\",\"lat\":\"${position.latitude}\",\"long\":\"${position.longitude}\"}`;\n\n  const response = await fetcher({\n    url: new URL(\"https://www.index-education.com/swie/geoloc.php\"),\n    method: \"POST\",\n    content: body,\n    headers: { \"Content-Type\": \"application/x-www-form-urlencoded;charset=UTF-8\" }\n  });\n\n  if (response.content === \"{}\") return [];\n  const instances = JSON.parse(response.content);\n\n  // Also apply haversine distance calculation.\n  const output: Array<GeolocatedInstance> = instances.map((instance: unknown) =>\n    decodeGeolocatedInstance(instance, [position.latitude, position.longitude])\n  );\n\n  // Apply PRONOTE sorting they use in their mobile app.\n  output.sort((a, b) => a.distance > b.distance\n    ? 1\n    : a.distance < b.distance\n      ? -1\n      : a.name > b.name\n        ? 1\n        : a.name < b.name\n          ? -1\n          : 0\n  );\n\n  return output;\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { encodePeriod } from \"~/encoders/period\";\nimport { type Period, type SessionHandle, TabLocation } from \"~/models\";\n\n/**\n * @param period - Period the grades report will be from.\n * @returns URL to download the PDF file.\n */\nexport const gradebookPDF = async (session: SessionHandle, period: Period): Promise<string> => {\n  const request = new RequestFN(session, \"GenerationPDF\", {\n    donnees: {\n      avecCodeCompetences: false,\n      genreGenerationPDF: 2,\n\n      options: { // defaults from PRONOTE\n        adapterHauteurService: false,\n        desEleves: false,\n        gererRectoVerso: false,\n        hauteurServiceMax: 15,\n        hauteurServiceMin: 10,\n        piedMonobloc: true,\n        portrait: true,\n        taillePolice: 6.5,\n        taillePoliceMin: 5,\n        taillePolicePied: 6.5,\n        taillePolicePiedMin: 5\n      },\n\n      periode: encodePeriod(period)\n    },\n\n    _Signature_: { onglet: TabLocation.Gradebook }\n  });\n\n  const response = await request.send();\n  return session.information.url + \"/\" + encodeURI(response.data.donnees.url.V);\n};\n","import { type GradeValue, GradeKind, UnreachableError } from \"~/models\";\n\nexport const decodeGradeValue = (grade: string | number): GradeValue => {\n  let kind: GradeKind = GradeKind.Grade;\n  let value: number;\n\n  // see `constructor()` (typenote.js)\n  if (typeof grade === \"string\") {\n    // see `getGenreNote(aChaine)` (typenote.js)\n    if (grade.split(\"|\").length >= 2) {\n      kind = parseInt(grade.split(\"|\")[1]) as GradeKind;\n    }\n\n    // see `noteToValeur(aStrNote)` (typenote.js)\n    value = parseFloat(grade.replace(\",\", \".\"));\n\n    if (kind === GradeKind.AbsentZero || kind === GradeKind.UnreturnedZero) {\n      value = 0.00;\n    }\n    // NOTE: there's apparently an `else if` condition here that's missing\n    // that mentions the \"Congratulations\" grade kind.\n    // not sure how this affects the code for now but it's worth noting.\n  }\n  else if (typeof grade === \"number\") {\n    value = grade;\n  }\n  else throw new UnreachableError(\"decodeGradeValue\");\n\n  return {\n    kind,\n    points: value\n  };\n};\n","import type { SubjectAverages } from \"~/models\";\nimport { decodeGradeValue } from \"./grade-value\";\nimport { decodeSubject } from \"./subject\";\n\nexport const decodeSubjectAverages = (average: any): SubjectAverages => {\n  return {\n    student: average.moyEleve && decodeGradeValue(average.moyEleve.V),\n    outOf: average.baremeMoyEleve && decodeGradeValue(average.baremeMoyEleve.V),\n    defaultOutOf: average.baremeMoyEleveParDefaut && decodeGradeValue(average.baremeMoyEleveParDefaut.V),\n    class_average: decodeGradeValue(average.moyClasse.V),\n    min: decodeGradeValue(average.moyMin.V),\n    max: decodeGradeValue(average.moyMax.V),\n    subject: decodeSubject(average),\n    backgroundColor: average.couleur\n  };\n};\n","import { AttachmentKind, type SessionHandle, type Grade } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeGradeValue } from \"./grade-value\";\nimport { decodeAttachment } from \"./attachment\";\nimport { decodeSubject } from \"./subject\";\n\nexport const decodeGrade = (grade: any, session: SessionHandle): Grade => {\n  const id = grade.N;\n  const isBonus = grade.estBonus;\n\n  const attachment = (key: string, genre: string) => grade[key] && decodeAttachment({\n    G: AttachmentKind.File,\n    L: grade[key],\n    N: id\n  }, session, { G: genre });\n\n  return {\n    id,\n    value: decodeGradeValue(grade.note.V),\n    outOf: decodeGradeValue(grade.bareme.V),\n    defaultOutOf: decodeGradeValue(grade.baremeParDefaut.V),\n    date: decodePronoteDate(grade.date.V),\n    subject: decodeSubject(grade.service.V),\n    average: grade.moyenne && decodeGradeValue(grade.moyenne.V),\n    max: decodeGradeValue(grade.noteMax.V),\n    min: decodeGradeValue(grade.noteMin.V),\n    coefficient: grade.coefficient,\n    comment: grade.commentaire,\n    commentaireSurNote: grade.commentaireSurNote,\n    isBonus,\n    isOptional: grade.estFacultatif && !isBonus,\n    isOutOf20: grade.estRamenerSur20,\n    subjectFile: attachment(\"libelleSujet\", \"DevoirSujet\"),\n    correctionFile: attachment(\"libelleCorrige\", \"DevoirCorrige\")\n  };\n};\n","import type { GradesOverview, SessionHandle } from \"~/models\";\nimport { decodeSubjectAverages } from \"./subject-averages\";\nimport { decodeGradeValue } from \"./grade-value\";\nimport { decodeGrade } from \"./grade\";\n\nexport const decodeGradesOverview = (overview: any, session: SessionHandle): GradesOverview => {\n  return {\n    grades: overview.listeDevoirs.V.map((grade: any) => decodeGrade(grade, session)),\n    subjectsAverages: overview.listeServices.V.map(decodeSubjectAverages),\n    classAverage: overview.moyGeneraleClasse && decodeGradeValue(overview.moyGeneraleClasse.V),\n    overallAverage: overview.moyGenerale && decodeGradeValue(overview.moyGenerale.V)\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeGradesOverview } from \"~/decoders/grades-overview\";\nimport { encodePeriod } from \"~/encoders/period\";\nimport { type Period, type GradesOverview, type SessionHandle, TabLocation } from \"~/models\";\n\n/**\n * Get grades overview for a specific period.\n * Including student's grades with averages and the global averages\n */\nexport const gradesOverview = async (session: SessionHandle, period: Period): Promise<GradesOverview> => {\n  const request = new RequestFN(session, \"DernieresNotes\", {\n    _Signature_: { onglet: TabLocation.Grades },\n\n    donnees: {\n      Periode: encodePeriod(period)\n    }\n  });\n\n  const response = await request.send();\n  return decodeGradesOverview(response.data.donnees, session);\n};\n","/**\n * @returns A string formatted as `$d/$m/$yyyy $H:$M:$S`.\n * @example\n * encodePronoteDate(new Date());\n * // -> \"21/1/2024 0:0:0\"\n */\nexport const encodePronoteDate = (date: Date): string => {\n  const day = date.getDate();\n  const month = (date.getMonth() + 1);\n  const year = date.getFullYear();\n\n  const hours = date.getHours();\n  const minutes = date.getMinutes();\n  const seconds = date.getSeconds();\n\n  return `${day}/${month}/${year} ${hours}:${minutes}:${seconds}`;\n};\n","import type { HomepageLink } from \"~/models\";\n\nexport const decodeHomepageLink = (link: any): HomepageLink => {\n  return {\n    description: link.commentaire,\n    name: link.L,\n    url: link.url\n  };\n};\n","import type { PartnerARDWallet } from \"~/models\";\n\nexport const decodePartnerARDWallet = (wallet: any): PartnerARDWallet => ({\n  name: wallet.libellePorteMonnaie,\n  description: wallet.hintPorteMonnaie,\n  warning: wallet.avecWarning,\n  // Will turn `420,69 €` into `420.69`\n  balance: parseInt(wallet.valeurSolde.replace(\",\", \".\")),\n  balanceDescription: wallet.hintSolde\n});\n","import type { Partner } from \"~/models\";\nexport const decodePartner = (partner: any): Partner => ({ sso: partner.SSO });\n","import type { PartnerARD } from \"~/models\";\nimport { decodePartnerARDWallet } from \"./partner-ard-wallet\";\nimport { decodePartner } from \"./partner\";\n\nexport const decodePartnerARD = (partner: any): PartnerARD => {\n  return {\n    ...decodePartner(partner),\n    canRefreshData: partner.avecActualisation,\n    wallets: partner.porteMonnaie.V.map(decodePartnerARDWallet)\n  };\n};\n","import type { Partner, PartnerARD, Homepage } from \"~/models\";\nimport { decodeHomepageLink } from \"./homepage-link\";\nimport { decodePartnerARD } from \"./partner-ard\";\nimport { decodePartner } from \"./partner\";\n\nexport const decodeHomepage = (page: any): Homepage => {\n  const links = [];\n\n  let partnerTurboself: Partner | undefined;\n  let partnerARD: PartnerARD | undefined;\n\n  if (\"partenaireARD\" in page) {\n    partnerARD = decodePartnerARD(page.partenaireARD);\n  }\n\n  for (const link of page.lienUtile.listeLiens.V) {\n    if (\"SSO\" in link) {\n      if (link.SSO.codePartenaire === \"TURBOSELF\") {\n        partnerTurboself = decodePartner(link);\n      }\n    }\n    else {\n      links.push(decodeHomepageLink(link));\n    }\n  }\n\n  return {\n    partnerARD,\n    partnerTurboself,\n\n    links\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { encodePronoteDate } from \"~/encoders/pronote-date\";\nimport { TabLocation, type SessionHandle } from \"~/models\";\nimport { translateToWeekNumber } from \"./helpers/week-number\";\nimport { decodeHomepage } from \"~/decoders/homepage\";\nimport type { Homepage } from \"~/models/homepage\";\n\n/**\n * Retrieve data from the homepage for the given session.\n */\nexport const homepage = async (session: SessionHandle, day = session.instance.nextBusinessDay): Promise<Homepage> => {\n  const weekNumber = translateToWeekNumber(day, session.instance.firstMonday);\n  const next = encodePronoteDate(day);\n\n  const request = new RequestFN(session, \"PageAccueil\", {\n    _Signature_: { onglet: TabLocation.Presence },\n\n    donnees: {\n      avecConseilDeClasse: true,\n\n      dateGrille: {\n        _T: 7,\n        V: next\n      },\n\n      numeroSemaine: weekNumber,\n\n      coursNonAssures: {\n        numeroSemaine: weekNumber\n      },\n\n      personnelsAbsents: {\n        numeroSemaine: weekNumber\n      },\n\n      incidents: {\n        numeroSemaine: weekNumber\n      },\n\n      exclusions: {\n        numeroSemaine: weekNumber\n      },\n\n      donneesVS: {\n        numeroSemaine: weekNumber\n      },\n\n      registreAppel: {\n        date: {\n          _T: 7,\n          V: next\n        }\n      },\n\n      previsionnelAbsServiceAnnexe: {\n        date: {\n          _T: 7,\n          V: next\n        }\n      },\n\n      donneesProfs: {\n        numeroSemaine: weekNumber\n      },\n\n      EDT: {\n        numeroSemaine: weekNumber\n      },\n\n      TAFARendre: {\n        date: {\n          _T: 7,\n          V: next\n        }\n      },\n\n      TAFEtActivites: {\n        date: {\n          _T: 7,\n          V: next\n        }\n      },\n\n      partenaireCDI: {\n        CDI: {}\n      },\n\n      tableauDeBord: {\n        date: {\n          _T: 7,\n          V: next\n        }\n      },\n\n      modificationsEDT: {\n        date: {\n          _T: 7,\n          V: next\n        }\n      }\n    }\n  });\n\n  const response = await request.send();\n  return decodeHomepage(response.data.donnees);\n};\n","import type { Instance } from \"~/models\";\n\nexport const decodeInstance = (instance: any): Instance => {\n  let casURL: string | undefined;\n  let casToken: string | undefined;\n\n  if (instance.CAS.actif) {\n    casURL = instance.CAS.casURL;\n    casToken = instance.CAS.jetonCAS;\n  }\n\n  return {\n    name: instance.nomEtab,\n    version: instance.version,\n    date: new Date(instance.date),\n    accounts: instance.espaces.map((account: any) => ({\n      name: account.nom,\n      path: account.URL\n    })),\n\n    casURL, casToken\n  };\n};\n","import { type Request, defaultFetcher, type Fetcher } from \"@literate.ink/utilities\";\nimport { cleanURL } from \"./helpers/clean-url\";\nimport { decodeInstance } from \"~/decoders/instance\";\nimport type { Instance } from \"~/models\";\n\nexport const instance = async (url: string, fetcher: Fetcher = defaultFetcher): Promise<Instance> => {\n  url = cleanURL(url);\n  url += \"/infoMobileApp.json?id=0D264427-EEFC-4810-A9E9-346942A862A4\";\n\n  const request: Request = { url: new URL(url) };\n  const response = await fetcher(request);\n  const instance = JSON.parse(response.content);\n  return decodeInstance(instance);\n};\n","import type { FoodAllergen } from \"~/models\";\n\nexport const decodeFoodAllergen = (allergen: any): FoodAllergen => ({\n  name: allergen.L,\n  color: allergen.couleur\n});\n","import type { FoodLabel } from \"~/models\";\n\nexport const decodeFoodLabel = (label: any): FoodLabel => ({\n  name: label.L,\n  color: label.couleur\n});\n\n","import type { Food } from \"~/models\";\nimport { decodeFoodAllergen } from \"./food-allergen\";\nimport { decodeFoodLabel } from \"./food-label\";\n\nexport const decodeFood = (food: any): Food => {\n  return {\n    name: food.L,\n    allergens: food.listeAllergenesAlimentaire.V.map(decodeFoodAllergen),\n    labels: food.listeLabelsAlimentaires.V.map(decodeFoodLabel)\n  };\n};\n","import { type Meal, DishKind, UnreachableError } from \"~/models\";\nimport { decodeFood } from \"./food\";\n\nexport const decodeMeal = (meal: any): Meal => {\n  const dishes = meal.ListePlats.V.reduce((acc: any, dish: any) => {\n    let key: string;\n\n    switch (dish.G) {\n      case DishKind.Entry:\n        key = \"entry\";\n        break;\n      case DishKind.Main:\n        key = \"main\";\n        break;\n      case DishKind.Side:\n        key = \"side\";\n        break;\n      case DishKind.Drink:\n        key = \"drink\";\n        break;\n      case DishKind.Fromage:\n        key = \"fromage\";\n        break;\n      case DishKind.Dessert:\n        key = \"dessert\";\n        break;\n      default:\n        throw new UnreachableError(\"decodeMeal\");\n    }\n\n    acc[key] = dish.ListeAliments.V.map(decodeFood);\n    return acc;\n  }, {});\n\n  return {\n    name: meal.L,\n    ...dishes\n  };\n};\n","import { type Menu, MealKind, UnreachableError } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeMeal } from \"./meal\";\n\nexport const decodeMenu = (menu: any): Menu => {\n  let entries = menu.ListeRepas.V.reduce((acc: any, meal: any) => {\n    let key: string;\n\n    switch (meal.G) {\n      case MealKind.Lunch:\n        key = \"lunch\";\n        break;\n      case MealKind.Dinner:\n        key = \"dinner\";\n        break;\n      default:\n        throw new UnreachableError(\"decodeMenu\");\n    }\n\n    acc[key] = decodeMeal(meal);\n    return acc;\n  }, {});\n\n  return {\n    date: decodePronoteDate(menu.Date.V),\n    ...entries\n  };\n};\n","import type { WeekMenu } from \"~/models\";\nimport { decodeFoodAllergen } from \"./food-allergen\";\nimport { decodeFoodLabel } from \"./food-label\";\nimport { decodeDomain } from \"./domain\";\nimport { decodeMenu } from \"./menu\";\n\nexport const decodeWeekMenu = (menu: any): WeekMenu => ({\n  containsLunch: menu.AvecRepasMidi,\n  containsDinner: menu.AvecRepasSoir,\n\n  days: menu.ListeJours.V.map(decodeMenu),\n  weeks: decodeDomain(menu.DomaineDePresence.V),\n\n  allergens: menu.ListeAllergenes.V.map(decodeFoodAllergen),\n  labels: menu.Listelabels.V.map(decodeFoodLabel)\n});\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeWeekMenu } from \"~/decoders/week-menu\";\nimport { encodePronoteDate } from \"~/encoders/pronote-date\";\nimport { TabLocation, type WeekMenu, type SessionHandle } from \"~/models\";\n\nexport const menus = async (session: SessionHandle, date = new Date()): Promise<WeekMenu> => {\n  const request = new RequestFN(session, \"PageMenus\", {\n    _Signature_: { onglet: TabLocation.Menus },\n    donnees: {\n      date: {\n        _T: 7,\n        V: encodePronoteDate(date)\n      }\n    }\n  });\n\n  const response = await request.send();\n  return decodeWeekMenu(response.data.donnees);\n};\n","import type { NewDiscussionRecipientFunction } from \"~/models\";\n\nexport const decodeNewDiscussionRecipientFunction = (fn: any): NewDiscussionRecipientFunction => {\n  return {\n    id: fn.N,\n    name: fn.L\n  };\n};\n","import type { NewDiscussionRecipientSubSubject } from \"~/models\";\n\nexport const decodeNewDiscussionRecipientSubSubject = (sub: any): NewDiscussionRecipientSubSubject => {\n  return {\n    id: sub.N,\n    name: sub.L,\n    from: sub.libelleMatiere\n  };\n};\n","import type { NewDiscussionRecipientSubSubject, NewDiscussionRecipientSubject } from \"~/models\";\n\nexport const decodeNewDiscussionRecipientSubject = (subject: any, sub: Array<NewDiscussionRecipientSubSubject>): NewDiscussionRecipientSubject => {\n  return {\n    id: subject.N,\n    name: subject.L,\n    sub: sub\n  };\n};\n","import type { NewDiscussionRecipient, NewDiscussionRecipientSubject, NewDiscussionRecipientSubSubject } from \"~/models\";\nimport { decodeNewDiscussionRecipientFunction } from \"./new-discussion-recipient-function\";\nimport { decodeNewDiscussionRecipientSubSubject } from \"./new-discussion-recipient-sub-subject\";\nimport { decodeNewDiscussionRecipientSubject } from \"./new-discussion-recipient-subject\";\n\nexport const decodeNewDiscussionRecipient = (recipient: any): NewDiscussionRecipient => {\n  const subjects: NewDiscussionRecipientSubject[] = [];\n  if (recipient.listeRessources) {\n    const sub: NewDiscussionRecipientSubSubject[] = recipient.listeRessources.V\n      .filter((r: any) => r.estUneSousMatiere)\n      .map(decodeNewDiscussionRecipientSubSubject);\n\n    for (const resource of recipient.listeRessources.V) {\n      if (resource.estUneSousMatiere) continue;\n      subjects.push(decodeNewDiscussionRecipientSubject(resource, sub.filter((s) => s.from === resource.L)));\n    }\n  }\n\n  return {\n    id: recipient.N,\n    name: recipient.L,\n    kind: recipient.G,\n\n    subjects,\n    function: recipient.fonction && decodeNewDiscussionRecipientFunction(recipient.fonction.V),\n    isPrincipal: recipient.estPrincipal ?? false\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeNewDiscussionRecipient } from \"~/decoders/new-discussion-recipient\";\nimport { SessionHandle, TabLocation, UserResource, EntityKind } from \"~/models\";\nimport { NewDiscussionRecipient } from \"~/models/new-discussion-recipient\";\n\n/**\n * Returns a list of possible recipients when creating a discussion.\n *\n * This step is required before creating a discussion.\n * It allows to know who can be the recipient of the discussion.\n *\n * @param kind The kind of entity to create a discussion with. Only `Teacher`, `Student` and `Personal` are allowed.\n */\nexport const newDiscussionRecipients = async (session: SessionHandle, user: UserResource, kind: EntityKind): Promise<Array<NewDiscussionRecipient>> => {\n  // TODO: use `ListePublics` for teachers.\n  const request = new RequestFN(session, \"ListeRessourcesPourCommunication\", {\n    _Signature_: { onglet: TabLocation.Discussions },\n\n    donnees: {\n      filtreElement: {\n        G: user.kind,\n        L: user.name,\n        N: user.id\n      },\n\n      onglet: {\n        N: 0,\n        G: kind\n      }\n    }\n  });\n\n  const response = await request.send();\n  return response.data.donnees.listeRessourcesPourCommunication.V\n    .filter((recipient: any) => recipient.avecDiscussion)\n    .map(decodeNewDiscussionRecipient);\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { EntityState, NewDiscussionRecipient, SessionHandle, TabLocation } from \"~/models\";\n\n/**\n * Create a discussion.\n *\n * Sadly, we can't get the ID of the created discussion\n * or anything else related to it, you need to request the\n * discussions list once again.\n*/\nexport const newDiscussion = async (\n  session: SessionHandle,\n  subject: string,\n  content: string,\n  recipients: Array<NewDiscussionRecipient>\n): Promise<void> => {\n  const request = new RequestFN(session, \"SaisieMessage\", {\n    _Signature_: { onglet: TabLocation.Discussions },\n\n    donnees: {\n      contenu: session.user.authorizations.hasAdvancedDiscussionEditor ? {\n        _T: 21,\n        V: content\n      } : content,\n\n      objet: subject,\n      estCreationCarnetLiaison: false,\n      listeFichiers: [],\n      listeDestinataires: recipients.map((recipient) => ({\n        E: EntityState.MODIFICATION,\n        G: recipient.kind,\n        N: recipient.id\n      }))\n    }\n  });\n\n  await request.send();\n};\n","/**\n * @example\n * console.log(encodeDomain([1, 3, 4, 6])); // \"[1,3..4,6]\"\n * console.log(encodeDomain([1, 3, 6])); // \"[1,3,6]\"\n * console.log(encodeDomain([1, 2, 3, 4, 5, 6])); // \"[1..6]\"\n */\nexport const encodeDomain = (numbers: number[]): string => {\n  if (numbers.length === 0) return \"[]\";\n  const sorted = [...numbers].sort((a, b) => a - b); // Make a copy to prevent mutation of original.\n  const output: string[] = [];\n  let last = sorted[0];\n  let start = last;\n\n  for (let index = 1; index < sorted.length; index++) {\n    if (sorted[index] - last !== 1) {\n      if (start === last) output.push(start.toString());\n      else output.push(`${start}..${last}`);\n      start = sorted[index];\n    }\n\n    last = sorted[index];\n  }\n\n  if (start === last) output.push(start.toString());\n  else output.push(`${start}..${last}`);\n\n  return `[${output.join(\",\")}]`;\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { encodeDomain } from \"~/encoders/domain\";\nimport { NewsInformation, type NewsItem, NewsSurvey, type SessionHandle, TabLocation } from \"~/models\";\nimport type { NewsQuestion } from \"~/models/news-question\";\nimport { NewsQuestionKind } from \"~/models/news-question-kind\";\n\n/**\n * Updates the status of a news item.\n * Could be a read, or answer to a survey.\n */\nexport const newsRemoteMutate = async (session: SessionHandle, item: NewsInformation | NewsSurvey, options = {\n  delete: false,\n  markAsRead: true,\n  onlyMarkAsRead: false\n}) => {\n  const answers = (options.onlyMarkAsRead || options.delete) ? []\n    : item.is === \"information\" ? [item.question] : item.questions;\n\n  const request = new RequestFN(session, \"SaisieActualites\", {\n    _Signature_: { onglet: TabLocation.News },\n\n    donnees: {\n      listeActualites: [{\n        N: item.id,\n        L: item.title ?? \"\",\n\n        genrePublic: item.public.G,\n        public: item.public,\n\n        validationDirecte: true,\n\n        listeQuestions: answers.map((answer) => ({\n          N: answer.id,\n          L: answer.fullTitle,\n          genreReponse: answer.kind,\n\n          reponse: {\n            N: parseInt(answer.answerID),\n            Actif: true,\n\n            // Should give a string directly when we reply to an information\n            // or when the question is just a text input.\n            valeurReponse: (answer.kind === NewsQuestionKind.InformationText || answer.kind === NewsQuestionKind.TextInput)\n              ? answer.textInputAnswer ?? \"\"\n              : { // Otherwise, pass the choices as an array of numbers.\n                _T: 8,\n                V: encodeDomain(answer.selectedAnswers ?? [])\n              },\n\n            // Defined when the question have choices which can have a text input : \"Other\" choice.\n            valeurReponseLibre: (answer.choices.filter((choice) => choice.isTextInput).length > 0)\n              ? answer.textInputAnswer\n              : undefined,\n\n            avecReponse: answer.answered,\n            estReponseAttendue: answer.shouldAnswer,\n            _validationSaisie: true\n          }\n        })),\n\n        marqueLueSeulement: !options.delete && options.onlyMarkAsRead,\n        lue: !options.delete && options.markAsRead,\n        supprimee: !options.onlyMarkAsRead && options.delete,\n        saisieActualite: false\n      }],\n\n      saisieActualite: false\n    }\n  });\n\n  await request.send();\n};\n","import type { NewsInformation, NewsItem, NewsSurvey, SessionHandle } from \"~/models\";\nimport { newsRemoteMutate } from \"./private/news-remote-mutate\";\n\n/**\n * Will delete the item from the user's news feed.\n * @remark You can never get the item back after this.\n */\nexport const newsDelete = async (session: SessionHandle, item: NewsInformation | NewsSurvey): Promise<void> => {\n  await newsRemoteMutate(session, item, {\n    onlyMarkAsRead: false,\n    markAsRead: false,\n    delete: true\n  });\n};\n","import type { NewsInformation, NewsItem, NewsSurvey, SessionHandle } from \"~/models\";\nimport { newsRemoteMutate } from \"./private/news-remote-mutate\";\n\n/**\n * Patches the `read` state of the news to the given value.\n * @remark Will do nothing if `read === status`.\n */\nexport const newsRead = async (session: SessionHandle, item: NewsInformation | NewsSurvey, read: boolean) => {\n  // Do nothing if the status is already the same.\n  if (item.read === read) {\n    return;\n  }\n\n  // Update the server state.\n  await newsRemoteMutate(session, item, {\n    onlyMarkAsRead: true,\n    markAsRead: read,\n    delete: false\n  });\n\n  // Update the local state.\n  item.read = read;\n};\n","import type { NewsInformation, SessionHandle } from \"~/models\";\nimport { newsRead } from \"./news-read\";\nimport { newsQuestionLocalMutate } from \"./helpers/news-question-local-mutate\";\nimport { newsRemoteMutate } from \"./private/news-remote-mutate\";\n\n/**\n   * Will acknowledge the news if needed,\n   * so if the news doesn't need to be acknowledged (`!needToAcknowledge`)\n   * or is already `acknowledged`, we will just do the read step.\n   *\n   * When acknowledging, the news will be directly marked as read.\n   * If you want to change this behavior, you can change the `alsoMarkAsRead` parameter.\n   *\n   * @remark You can't un-acknowledge a news.\n   */\nexport const newsInformationAcknowledge = async (session: SessionHandle, information: NewsInformation, alsoMarkAsRead = true): Promise<void> => {\n  if (!information.needToAcknowledge || information.acknowledged)\n    return newsRead(session, information, alsoMarkAsRead);\n\n  // An empty string is needed to acknowledge.\n  newsQuestionLocalMutate(information.question, \"\");\n\n  await newsRemoteMutate(session, information, {\n    markAsRead: alsoMarkAsRead,\n    onlyMarkAsRead: false,\n    delete: false\n  });\n\n  if (alsoMarkAsRead)\n    information.read = true;\n};\n","import type { NewsSurvey, SessionHandle } from \"~/models\";\nimport { newsRemoteMutate } from \"./private/news-remote-mutate\";\n\n/**\n * Answers the survey with the given answers.\n * By default, it'll answer with the questions that were given when the survey was created.\n *\n * You can either manipulate the questions directly or pass in your own answers.\n */\nexport const newsSurveySend = async (session: SessionHandle, survey: NewsSurvey, alsoMarkAsRead = true): Promise<void> => {\n  await newsRemoteMutate(session, survey, {\n    markAsRead: alsoMarkAsRead,\n    onlyMarkAsRead: false,\n    delete: false\n  });\n\n  if (alsoMarkAsRead)\n    survey.read = true;\n};\n","import type { NewsCategory, NewsItem } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\n\nexport const decodeNewsItem = (item: any, categories: NewsCategory[]): NewsItem => {\n  return {\n    id: item.N,\n    title: item.L,\n    category: categories.find((category) => category.id === item.categorie.V.N)!,\n\n    creationDate: decodePronoteDate(item.dateCreation.V),\n    startDate: decodePronoteDate(item.dateDebut.V),\n    endDate: decodePronoteDate(item.dateFin.V),\n\n    author: item.auteur,\n    public: item.public.V,\n\n    read: item.lue\n  };\n};\n","import type { NewsQuestionChoice } from \"~/models\";\n\nexport const decodeNewsQuestionChoice = (choice: any): NewsQuestionChoice => {\n  return {\n    value: choice.L,\n    position: choice.rang,\n    isTextInput: !!choice.estReponseLibre\n  };\n};\n","import { type SessionHandle, type NewsQuestion, NewsQuestionKind } from \"~/models\";\nimport { decodeNewsQuestionChoice } from \"./news-question-choice\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeAttachment } from \"./attachment\";\nimport { decodeDomain } from \"./domain\";\n\nexport const decodeNewsQuestion = (question: any, session: SessionHandle): NewsQuestion => {\n  const kind: NewsQuestionKind = question.genreReponse;\n  const answered: boolean = question.reponse.V.avecReponse;\n\n  let selectedAnswers: number[] | undefined;\n  let textInputAnswer: string | undefined;\n\n  if (answered && question.reponse.V.valeurReponse) {\n    if (typeof question.reponse.V.valeurReponse === \"string\") {\n      textInputAnswer = question.reponse.V.valeurReponse;\n    }\n    else {\n      selectedAnswers = decodeDomain(question.reponse.V.valeurReponse.V);\n      textInputAnswer = question.reponse.V.valeurReponseLibre;\n    }\n  }\n\n  return {\n    id: question.N,\n    fullTitle: question.L,\n    title: question.titre,\n    position: question.rang,\n    kind,\n\n    maximumLength: question.tailleReponse,\n    shouldRespectMaximumChoices: question.avecMaximum,\n    maximumChoices: question.nombreReponsesMax,\n    content: question.texte.V,\n\n    attachments: question.listePiecesJointes.V.map((attachment: any) => decodeAttachment(attachment, session)),\n\n    answerID: question.reponse.V.N,\n    answered,\n\n    shouldAnswer: question.reponse.V.estReponseAttendue,\n    answerDate: question.reponse.V.reponduLe?.V && decodePronoteDate(question.reponse.V.reponduLe.V),\n\n    choices: kind === NewsQuestionKind.TextInput ? [] : question.listeChoix.V.map(decodeNewsQuestionChoice),\n\n    selectedAnswers,\n    textInputAnswer\n  };\n};\n","import type { NewsCategory, SessionHandle, NewsInformation } from \"~/models\";\nimport { decodeNewsItem } from \"./news-item\";\nimport { decodeNewsQuestion } from \"./news-question\";\n\nexport const decodeNewsInformation = (information: any, session: SessionHandle, categories: NewsCategory[]): NewsInformation => {\n  return {\n    is: \"information\",\n    ...decodeNewsItem(information, categories),\n    question: decodeNewsQuestion(information.listeQuestions.V[0], session),\n\n    get attachments () {\n      return this.question.attachments;\n    },\n\n    get acknowledged () {\n      return this.question.answered;\n    },\n\n    get acknowledgedDate () {\n      return this.question.answerDate;\n    },\n\n    get needToAcknowledge () {\n      return this.question.shouldAnswer;\n    },\n\n    get content () {\n      return this.question.content;\n    }\n  };\n};\n","import type { NewsCategory } from \"~/models\";\n\nexport const decodeNewsCategory = (category: any): NewsCategory => {\n  return {\n    id: category.N,\n    name: category.L,\n    default: category.estDefaut ?? false\n  };\n};\n","import type { NewsCategory, SessionHandle, NewsSurvey } from \"~/models\";\nimport { decodeNewsQuestion } from \"./news-question\";\nimport { decodeNewsItem } from \"./news-item\";\n\nexport const decodeNewsSurvey = (survey: any, session: SessionHandle, categories: NewsCategory[]): NewsSurvey => {\n  return {\n    is: \"survey\",\n    ...decodeNewsItem(survey, categories),\n\n    questions: survey.listeQuestions.V.map((question: any) => decodeNewsQuestion(question, session)),\n    isAnonymous: survey.reponseAnonyme\n  };\n};\n","import { UnreachableError, type News, type NewsCategory, type SessionHandle } from \"~/models\";\nimport { decodeNewsInformation } from \"./news-information\";\nimport { decodeNewsCategory } from \"./news-category\";\nimport { decodeNewsSurvey } from \"./news-survey\";\n\nexport const decodeNews = (news: any, session: SessionHandle): News => {\n  const categories: NewsCategory[] = news.listeCategories.V.map(decodeNewsCategory);\n\n  return {\n    categories,\n    items: news.listeModesAff[0].listeActualites.V.map((item: any) => {\n      let decoder: typeof decodeNewsInformation | typeof decodeNewsSurvey;\n\n      if (item.estInformation) decoder = decodeNewsInformation;\n      else if (item.estSondage) decoder = decodeNewsSurvey;\n      else throw new UnreachableError(\"decodeNews\");\n\n      return decoder(item, session, categories);\n    })\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeNews } from \"~/decoders/news\";\nimport { encodeDomain } from \"~/encoders/domain\";\nimport { type News, type SessionHandle, TabLocation } from \"~/models\";\n\nexport const news = async (session: SessionHandle): Promise<News> => {\n  const request = new RequestFN(session, \"PageActualites\", {\n    _Signature_: { onglet: TabLocation.News },\n\n    donnees: {\n      modesAffActus: {\n        _T: 26,\n        V: encodeDomain([0])\n      }\n    }\n  });\n\n  const response = await request.send();\n  return decodeNews(response.data.donnees, session);\n};\n","import type { NotebookAbsence } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\n\nexport const decodeNotebookAbsence = (absence: any): NotebookAbsence => {\n  const [hoursMissed, minutesMissed] = (absence.NbrHeures as string).split(\"h\").map(Number);\n  const isReasonUnknown = absence.estMotifNonEncoreConnu;\n\n  return {\n    id: absence.name,\n    startDate: decodePronoteDate(absence.dateDebut.V),\n    endDate: decodePronoteDate(absence.dateFin.V),\n    justified: absence.justifie,\n    opened: absence.ouverte,\n    hoursMissed, minutesMissed,\n    daysMissed: absence.NbrJours,\n    shouldParentsJustify: absence.aJustifierParParents,\n    administrativelyFixed: absence.reglee,\n    isReasonUnknown,\n    reason: !isReasonUnknown && absence.listeMotifs.V[0].L\n  };\n};\n","import type { NotebookDelay } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\n\nexport const decodeNotebookDelay = (delay: any): NotebookDelay => {\n  const isReasonUnknown = delay.estMotifNonEncoreConnu;\n  const justified = delay.justifie;\n\n  return {\n    id: delay.N,\n    date: decodePronoteDate(delay.date.V),\n    minutes: delay.duree,\n    justified,\n    justification: justified && delay.justification,\n    shouldParentsJustify: delay.aJustifierParParents,\n    administrativelyFixed: delay.reglee,\n    isReasonUnknown,\n    reason: !isReasonUnknown && delay.listeMotifs.V[0].L\n  };\n};\n","import type { NotebookPunishment, SessionHandle } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeAttachment } from \"./attachment\";\n\nexport const decodeNotebookPunishment = (punishment: any, session: SessionHandle): NotebookPunishment => {\n  return {\n    id: punishment.N,\n    title: punishment.nature.V.L,\n    reasons: punishment.listeMotifs.V.map((motif: any) => motif.L),\n\n    exclusion: punishment.estUneExclusion,\n    isDuringLesson: !punishment.horsCours,\n\n    workToDo: punishment.travailAFaire,\n    workToDoDocuments: punishment.documentsTAF.V.map((document: any) => decodeAttachment(document, session)),\n\n    circumstances: punishment.circonstances,\n    circumstancesDocuments: punishment.documentsCirconstances.V.map((document: any) => decodeAttachment(document, session)),\n\n    giver: punishment.demandeur.V.L,\n    dateGiven: decodePronoteDate(punishment.dateDemande.V),\n\n    durationMinutes: punishment.duree\n  };\n};\n","import type { NotebookObservation, Subject } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeSubject } from \"./subject\";\n\nexport const decodeNotebookObservation = (observation: any): NotebookObservation => {\n  let subject: Subject | undefined;\n\n  if (\"L\" in observation.matiere.V && observation.matiere.V.N !== \"0\") {\n    subject = decodeSubject(observation.matiere.V);\n  }\n\n  return {\n    id: observation.N,\n    date: decodePronoteDate(observation.date.V),\n\n    opened: observation.estLue,\n    shouldParentsJustify: observation.avecARObservation,\n\n    name: observation.L,\n    kind: observation.genreObservation,\n    sectionID: observation.rubrique.V.N,\n\n    subject,\n    reason: observation.commentaire\n  };\n};\n","import type { NotebookPrecautionaryMeasure, SessionHandle } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeAttachment } from \"./attachment\";\nimport { decodeDomain } from \"./domain\";\n\nexport const decodeNotebookPrecautionaryMeasure = (item: any, session: SessionHandle): NotebookPrecautionaryMeasure => {\n  return {\n    id: item.N,\n    title: item.nature.V.L,\n    comments: item.commentaire,\n    reasons: item.listeMotifs.V.map((motif: any) => motif.L),\n\n    exclusion: item.estUneExclusion,\n\n    circumstances: item.circonstances,\n    circumstancesDocuments: item.documentsCirconstances.V.map((document: any) => decodeAttachment(document, session)),\n\n    decisionMaker: item.decideur.V.L,\n    giver: item.demandeur.V.L,\n    dateGiven: decodePronoteDate(item.dateDemande.V),\n    startDate: decodePronoteDate(item.dateDebut.V),\n    endDate: decodePronoteDate(item.dateFin.V),\n    disallowedAccesses: decodeDomain(item.interditAcces.V)\n  };\n};\n","import type { Notebook, NotebookAbsence, NotebookDelay, NotebookObservation, NotebookPrecautionaryMeasure, NotebookPunishment, SessionHandle } from \"~/models\";\nimport { decodeNotebookAbsence } from \"./notebook-absence\";\nimport { decodeNotebookDelay } from \"./notebook-delay\";\nimport { decodeNotebookPunishment } from \"./notebook-punishment\";\nimport { decodeNotebookObservation } from \"./notebook-observation\";\nimport { decodeNotebookPrecautionaryMeasure } from \"./notebook-precautionary-measure\";\n\nexport const decodeNotebook = (notebook: any, session: SessionHandle): Notebook => {\n  const absences: NotebookAbsence[] = [];\n  const delays: NotebookDelay[] = [];\n  const punishments: NotebookPunishment[] = [];\n  const observations: NotebookObservation[] = [];\n  const precautionaryMeasures: NotebookPrecautionaryMeasure[] = [];\n\n  for (const item of notebook.listeAbsences.V) {\n    switch (item.G) {\n      case 13: // Absence\n        absences.push(decodeNotebookAbsence(item));\n        break;\n      case 14: // Delay\n        delays.push(decodeNotebookDelay(item));\n        break;\n      case 41: // Punishment\n        punishments.push(decodeNotebookPunishment(item, session));\n        break;\n      case 46: // ObservationProfesseurEleve\n        observations.push(decodeNotebookObservation(item));\n        break;\n      case 72: // PrecautionaryMeasure\n        precautionaryMeasures.push(decodeNotebookPrecautionaryMeasure(item, session));\n        break;\n    }\n  }\n\n  // TODO: .Matieres\n  // TODO: .listeRecapitulatifs\n  // NOTE: not sure if .autorisations is needed, for now.\n  // NOTE: not sure what .nbMaxJoursDeclarationAbsence and .listeSanctionUtilisateur are about, for now.\n\n  return {\n    absences,\n    delays,\n    punishments,\n    observations,\n    precautionaryMeasures\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeNotebook } from \"~/decoders/notebook\";\nimport { encodePeriod } from \"~/encoders/period\";\nimport { encodePronoteDate } from \"~/encoders/pronote-date\";\nimport { type SessionHandle, type Notebook, type Period, TabLocation } from \"~/models\";\n\nexport const notebook = async (session: SessionHandle, period: Period): Promise<Notebook> => {\n  const request = new RequestFN(session, \"PagePresence\", {\n    _Signature_: { onglet: TabLocation.Notebook },\n\n    donnees: {\n      periode: encodePeriod(period),\n\n      DateDebut: {\n        _T: 7,\n        V: encodePronoteDate(period.startDate)\n      },\n\n      DateFin: {\n        _T: 7,\n        V: encodePronoteDate(period.endDate)\n      }\n    }\n  });\n\n  const response = await request.send();\n  return decodeNotebook(response.data.donnees, session);\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { type Partner, type SessionHandle, TabLocation } from \"~/models\";\n\nexport const partnerURL = async (session: SessionHandle, partner: Partner): Promise<string> => {\n  const request = new RequestFN(session, \"SaisieURLPartenaire\", {\n    _Signature_: { onglet: TabLocation.Presence },\n\n    donnees: {\n      SSO: partner.sso\n    }\n  });\n\n  const response = await request.send();\n  return response.data.RapportSaisie.urlSSO.V;\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeAssignment } from \"~/decoders/assignment\";\nimport { TabLocation, type Assignment, type Resource, type SessionHandle } from \"~/models\";\n\n/**\n * Retrieve assignments from a resource.\n */\nexport const resourceAssignments = async (session: SessionHandle, resourceID: string): Promise<Array<Assignment>> => {\n  const request = new RequestFN(session, \"donneesContenusCDT\", {\n    _Signature_: { onglet: TabLocation.Resources },\n\n    donnees: {\n      pourTAF: true,\n      cahierDeTextes: { N: resourceID }\n    }\n  });\n\n  const response = await request.send();\n\n  return response.data.donnees.ListeCahierDeTextes.V[0].ListeTravailAFaire.V\n    .map((assignment: any) => decodeAssignment(assignment, session));\n};\n","import type { ResourceContent, SessionHandle } from \"~/models\";\nimport { decodeAssignmentTheme } from \"./assignment-theme\";\nimport { decodeAttachment } from \"./attachment\";\n\nexport const decodeResourceContent = (content: any, session: SessionHandle): ResourceContent => {\n  return {\n    id: content.N,\n    title: content.L,\n    description: content.descriptif.V,\n    category: content.categorie.V.G,\n    files: content.ListePieceJointe.V.map((attachment: any) => decodeAttachment(attachment, session)),\n    themes: content.ListeThemes.V.map((theme: any) => decodeAssignmentTheme(theme)),\n    // TODO: Investigate to see what is contained here when not `-1`.\n    educativeValue: content.parcoursEducatif\n  };\n};\n","import type { SessionHandle, Resource } from \"~/models\";\nimport { decodeResourceContent } from \"./resource-content\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { decodeSubject } from \"./subject\";\n\nexport const decodeResource = (resource: any, session: SessionHandle): Resource => {\n  return {\n    id: resource.N,\n    startDate: decodePronoteDate(resource.Date.V),\n    endDate: decodePronoteDate(resource.DateFin.V),\n    subject: decodeSubject(resource.Matiere.V),\n\n    haveAssignment: typeof resource.dateTAF !== \"undefined\",\n    assignmentDeadline: resource.dateTAF?.V && decodePronoteDate(resource.dateTAF.V),\n\n    teachers: resource.listeProfesseurs.V.map((teacher: any) => teacher.L),\n    groups: resource.listeGroupes.V.map((group: any) => group.L),\n\n    backgroundColor: resource.CouleurFond,\n    contents: resource.listeContenus.V.map((content: any) => decodeResourceContent(content, session))\n  };\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { decodeResource } from \"~/decoders/resource\";\nimport { TabLocation, type Resource, type SessionHandle } from \"~/models\";\n\nexport const resource = async (session: SessionHandle, resourceID: string): Promise<Resource> => {\n  const request = new RequestFN(session, \"donneesContenusCDT\", {\n    _Signature_: { onglet: TabLocation.Resources },\n\n    donnees: {\n      cahierDeTextes: { N: resourceID }\n    }\n  });\n\n  const response = await request.send();\n\n  const resource = response.data.donnees.ListeCahierDeTextes.V[0];\n  return decodeResource(resource, session);\n};\n","import { type SessionHandle, TabLocation, type Resource } from \"~/models\";\nimport { homeworkFromWeek, homeworkFromIntervals } from \"./private/homework\";\nimport { decodeResource } from \"~/decoders/resource\";\n\nconst decoder = (session: SessionHandle, data: any): Array<Resource> => {\n  return data.ListeCahierDeTextes.V.map((resource: any) => decodeResource(resource, session));\n};\n\nexport const resourcesFromWeek = async (session: SessionHandle, weekNumber: number, extendsToWeekNumber?: number): Promise<Resource[]> => {\n  const reply = await homeworkFromWeek(session, TabLocation.Resources, weekNumber, extendsToWeekNumber);\n  return decoder(session, reply);\n};\n\nexport const resourcesFromIntervals = async (session: SessionHandle, startDate: Date, endDate: Date): Promise<Resource[]> => {\n  const reply = await homeworkFromIntervals(session, TabLocation.Resources, startDate, endDate);\n  return decoder(session, reply).filter((lesson) => startDate <= lesson.endDate && lesson.endDate <= endDate);\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { DoubleAuthServerAction, SessionHandle } from \"~/models\";\nimport { aesKeys } from \"./private/keys\";\nimport { AES } from \"~/api/private/aes\";\n\nexport const securityCheckCustomPassword = async (session: SessionHandle, newPassword: string): Promise<boolean> => {\n  const keys = aesKeys(session);\n\n  const request = new RequestFN(session, \"SecurisationCompteDoubleAuth\", {\n    donnees: {\n      action: DoubleAuthServerAction.csch_VerifierMotDePassePersonnalise,\n      nouveauMDP: AES.encrypt(newPassword, keys.key, keys.iv)\n    }\n  });\n\n  const response = await request.send();\n  return response.data.donnees.result;\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { DoubleAuthServerAction, SessionHandle } from \"~/models\";\nimport { aesKeys } from \"./private/keys\";\nimport { AES } from \"~/api/private/aes\";\n\nexport const securityCheckPIN = async (session: SessionHandle, pin: string): Promise<boolean> => {\n  const keys = aesKeys(session);\n\n  const request = new RequestFN(session, \"SecurisationCompteDoubleAuth\", {\n    donnees: {\n      action: DoubleAuthServerAction.csch_VerifierPIN,\n      codePin: AES.encrypt(pin, keys.key, keys.iv)\n    }\n  });\n\n  const response = await request.send();\n  return response.data.donnees.result;\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { DoubleAuthMode, DoubleAuthServerAction, SecurityModal, type SessionHandle } from \"~/models\";\nimport { aesKeys } from \"./private/keys\";\nimport { AES } from \"./private/aes\";\n\nexport const securitySave = async (session: SessionHandle, handle: SecurityModal, options: {\n  password?: string,\n  deviceName?: string,\n  pin?: string,\n  mode?: DoubleAuthMode\n}): Promise<void> => {\n  const data: any = {\n    action: DoubleAuthServerAction.csch_EnregistrerChoixUtilisateur\n  };\n\n  const keys = aesKeys(session);\n\n  if (typeof options.mode === \"number\") {\n    data.mode = options.mode;\n  }\n\n  if (options.password) {\n    data.nouveauMDP = AES.encrypt(options.password, keys.key, keys.iv);\n  }\n\n  if (options.pin) {\n    data.codePin = AES.encrypt(options.pin, keys.key, keys.iv);\n  }\n\n  if (options.deviceName) {\n    data.avecIdentification = true;\n    data.strIdentification = options.deviceName;\n  }\n\n  const request = new RequestFN(session, \"SecurisationCompteDoubleAuth\", {\n    donnees: data\n  });\n\n  const response = await request.send();\n  const token = response.data.donnees.jetonConnexionAppliMobile;\n\n  if (token) { // update the token to use for refresh information generation\n    handle.context.authentication.jetonConnexionAppliMobile = token;\n  }\n};\n","import { RequestFN } from \"~/core/request-function\";\nimport { DoubleAuthServerAction, SecuritySourceTooLongError, SessionHandle } from \"~/models\";\n\n/**\n * @returns true if the source is already known\n */\nexport const securitySource = async (session: SessionHandle, source: string): Promise<boolean> => {\n  const LIMIT = 30;\n  if (source.length > LIMIT) throw new SecuritySourceTooLongError(LIMIT);\n\n  const request = new RequestFN(session, \"SecurisationCompteDoubleAuth\", {\n    donnees: {\n      action: DoubleAuthServerAction.csch_LibellesSourceConnexionDejaConnus,\n      libelle: source\n    }\n  });\n\n  const response = await request.send();\n  return response.data.donnees.dejaConnu;\n};\n","export const propertyCaseInsensitive = (prop: string, value: any): any => {\n  return {\n    [prop]: value,\n    [prop[0].toUpperCase() + prop.substring(1)]: value\n  };\n};\n","import type { UserResource } from \"~/models\";\n\n// we simply encode the entity, nothing more is required most of the time.\nexport const encodeUserResource = (resource: UserResource): any => ({\n  G: resource.kind,\n  L: resource.name,\n  N: resource.id\n});\n","import type { SessionHandle } from \"~/models\";\n\nexport const translatePositionToTimings = (\n  { instance: { endings } }: SessionHandle,\n  position: number\n): { hours: number, minutes: number } => {\n  if (position > endings.length) {\n    position = position % (endings.length - 1);\n  }\n\n  const formatted = endings[position];\n\n  const [hours, minutes] = formatted.split(\"h\").map(Number);\n  return { hours, minutes };\n};\n","import type { SessionHandle, TimetableClass } from \"~/models\";\nimport { decodePronoteDate } from \"./pronote-date\";\nimport { translateToWeekNumber } from \"~/api\";\nimport { translatePositionToTimings } from \"~/api/helpers/timings\";\n\nexport const decodeTimetableClass = (item: any, session: SessionHandle): TimetableClass => {\n  const startDate = decodePronoteDate(item.DateDuCours.V);\n  const blockPosition = item.place;\n  const blockLength = item.duree;\n  let endDate: Date;\n\n  if (typeof item.DateDuCoursFin?.V === \"string\") {\n    endDate = decodePronoteDate(item.DateDuCoursFin.V);\n  }\n  else {\n    const position = blockPosition % session.instance.blocksPerDay + blockLength - 1;\n    const timings = translatePositionToTimings(session, position);\n\n    endDate = new Date(startDate);\n    endDate.setHours(timings.hours, timings.minutes);\n  }\n\n  return {\n    id: item.N,\n    backgroundColor: item.CouleurFond,\n    notes: item.memo,\n    startDate,\n    endDate,\n    blockLength,\n    blockPosition,\n    weekNumber: translateToWeekNumber(startDate, session.instance.firstMonday)\n  };\n};\n","import type { SessionHandle, TimetableClassActivity } from \"~/models\";\nimport { decodeTimetableClass } from \"./timetable-class\";\n\nexport const decodeTimetableClassActivity = (item: any, session: SessionHandle): TimetableClassActivity => {\n  return {\n    is: \"activity\",\n    ...decodeTimetableClass(item, session),\n\n    title: item.motif,\n    attendants: item.accompagnateurs,\n    resourceTypeName: item.strGenreRess,\n    resourceValue: item.strRess\n  };\n};\n","import type { SessionHandle, TimetableClassDetention } from \"~/models\";\nimport { decodeTimetableClass } from \"./timetable-class\";\n\nexport const decodeTimetableClassDetention = (item: any, session: SessionHandle): TimetableClassDetention => {\n  let title: string | undefined;\n\n  const personalNames: string[] = [];\n  const teacherNames: string[] = [];\n  const classrooms: string[] = [];\n\n  if (\"ListeContenus\" in item) {\n    for (const data of item.ListeContenus.V) {\n      const label = data.L;\n\n      if (data.estHoraire) {\n        title = label;\n      }\n      else if (\"G\" in data) {\n        switch (data.G) {\n          case 3: // Teacher\n            teacherNames.push(label);\n            break;\n          case 34: // Personal\n            personalNames.push(label);\n            break;\n          case 17: // Room\n            classrooms.push(label);\n            break;\n        }\n      }\n    }\n  }\n\n  return {\n    is: \"detention\",\n    ...decodeTimetableClass(item, session),\n\n    title,\n    personalNames,\n    teacherNames,\n    classrooms\n  };\n};\n","import { SessionHandle, Subject, TimetableClassLesson } from \"~/models\";\nimport { decodeTimetableClass } from \"./timetable-class\";\nimport { decodeSubject } from \"./subject\";\n\nexport const decodeTimetableClassLesson = (item: any, session: SessionHandle): TimetableClassLesson => {\n  const virtualClassrooms: string[] = [];\n  const teacherNames: string[] = [];\n  const personalNames: string[] = [];\n  const classrooms: string[] = [];\n  const groupNames: string[] = [];\n  let subject: Subject | undefined;\n  let lessonResourceID: string | undefined;\n\n  if (item.listeVisios) {\n    for (const virtualClassroom of item.listeVisios.V) {\n      virtualClassrooms.push(virtualClassroom.url);\n    }\n  }\n\n  if (item.ListeContenus) {\n    for (const data of item.ListeContenus.V) {\n      switch (data.G) {\n        case 16: // Subject\n          subject = decodeSubject(data);\n          break;\n        case 3: // Teacher\n          teacherNames.push(data.L);\n          break;\n        case 34: // Personal\n          personalNames.push(data.L);\n          break;\n        case 17: // Room\n          classrooms.push(data.L);\n          break;\n        case 2: // Group\n          groupNames.push(data.L);\n          break;\n      }\n    }\n  }\n\n  if (item.AvecCdT && item.cahierDeTextes) {\n    lessonResourceID = item.cahierDeTextes.V.N;\n  }\n\n  return {\n    is: \"lesson\",\n    ...decodeTimetableClass(item, session),\n    kind: item.G,\n    status: item.Statut,\n    canceled: item.estAnnule ?? false,\n    exempted: item.dispenseEleve ?? false,\n    test: item.cahierDeTextes?.V.estDevoir ?? false,\n    virtualClassrooms,\n    personalNames,\n    teacherNames,\n    classrooms,\n    groupNames,\n    subject,\n    lessonResourceID\n  };\n};\n","import type { SessionHandle, Timetable, TimetableClass } from \"~/models\";\nimport { decodeTimetableClassActivity } from \"./timetable-class-activity\";\nimport { decodeTimetableClassDetention } from \"./timetable-class-detention\";\nimport { decodeTimetableClassLesson } from \"./timetable-class-lesson\";\n\nconst isTimetableClassActivity = (item: any): boolean => {\n  return \"estSortiePedagogique\" in item && item.estSortiePedagogique;\n};\n\nconst isTimetableClassDetention = (item: any): boolean => {\n  return \"estRetenue\" in item && typeof item.estRetenue !== \"undefined\";\n};\n\nexport const decodeTimetable = (timetable: any, session: SessionHandle): Timetable => {\n  return {\n    absences: timetable.absences,\n    withCanceledClasses: timetable.avecCoursAnnule ?? true,\n\n    classes: (timetable.ListeCours ?? []).map((item: any) => {\n      if (isTimetableClassActivity(item)) {\n        return decodeTimetableClassActivity(item, session);\n      }\n\n      if (isTimetableClassDetention(item)) {\n        return decodeTimetableClassDetention(item, session);\n      }\n\n      return decodeTimetableClassLesson(item, session);\n    })\n      .sort((a: TimetableClass, b: TimetableClass) => (\n        a.startDate.getTime() - b.startDate.getTime()\n      ))\n  };\n};\n","import { TabLocation, type SessionHandle, type Timetable } from \"~/models\";\nimport { propertyCaseInsensitive } from \"./private/property-case-insensitive\";\nimport { RequestFN } from \"~/core/request-function\";\nimport { encodeUserResource } from \"~/encoders/user-resource\";\nimport { decodeTimetable } from \"~/decoders/timetable\";\nimport { encodePronoteDate } from \"~/encoders/pronote-date\";\n\nconst timetable = async (session: SessionHandle, index: number, additional = {}): Promise<Timetable> => {\n  const request = new RequestFN(session, \"PageEmploiDuTemps\", {\n    _Signature_: { onglet: TabLocation.Timetable },\n\n    donnees: {\n      estEDTAnnuel: false,\n      estEDTPermanence: false,\n\n      avecAbsencesEleve: false,\n      avecRessourcesLibrePiedHoraire: false,\n\n      avecAbsencesRessource: true,\n      avecInfosPrefsGrille: true,\n      avecConseilDeClasse: true,\n      avecCoursSortiePeda: true,\n      avecDisponibilites: true,\n      avecRetenuesEleve: true,\n\n      edt: { G: 16, L: \"Emploi du temps\" },\n\n      ...propertyCaseInsensitive(\"ressource\", encodeUserResource(session.user.resources[index])),\n      ...additional\n    }\n  });\n\n  const response = await request.send();\n  return decodeTimetable(response.data.donnees, session);\n};\n\nexport const timetableFromWeek = async (session: SessionHandle, weekNumber: number, index = 0): Promise<Timetable> => {\n  return timetable(session, index, propertyCaseInsensitive(\"numeroSemaine\", weekNumber));\n};\n\nexport const timetableFromIntervals = async (session: SessionHandle, startDate: Date, endDate?: Date, index = 0): Promise<Timetable> => {\n  return timetable(session, index, {\n    ...propertyCaseInsensitive(\"dateDebut\", {\n      _T: 7,\n      V: encodePronoteDate(startDate)\n    }),\n\n    ...(endDate && propertyCaseInsensitive(\"dateFin\", {\n      _T: 7,\n      V: encodePronoteDate(endDate)\n    }))\n  });\n};\n"]}