{"version":3,"sources":["webpack://lib.[name]/webpack/universalModuleDefinition","webpack://lib.[name]/./src/secure/task-tracking/scripts/task-tracker.entities.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/outcomes-tab/outcomes-summary-view/outcomes-summary.entities.ts","webpack://lib.[name]/./src/secure/reporting/financials/scripts/financials-vendors.chart.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/visits-tab/scripts/visits.controller.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/components/milestone-dashboard-tab/milestone-dashboard-tab.ts","webpack://lib.[name]/./src/secure/reporting/financials/scripts/financials.entities.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/scripts/site-activation.page.ts","webpack://lib.[name]/./src/secure/task-tracking/scripts/data-table.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/visits-tab/visits-datatable-view/visits-datatable.entities.ts","webpack://lib.[name]/./src/shared/components/date-updated-section/date-updated-section.view.ts","webpack://lib.[name]/./src/shared/scripts/table-functions.ts","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.chart-controller.ts","webpack://lib.[name]/./src/shared/entities/scripts/study.ts","webpack://lib.[name]/./src/secure/communications/site-faqs/site-faqs.scss?0d5b","webpack://lib.[name]/./src/secure/task-tracking/task-tracker.scss?4a1e","webpack://lib.[name]/./src/shared/scripts/filtering/filtering.utilities.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/outcomes-tab/scripts/outcomes.lookup.ts","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.lookup.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/data-completeness.scss?4e23","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/visits-tab/scripts/visits.dialog.ts","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.chart-line.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/components/milestone-details-tab/milestone-details.tab.ts","webpack://lib.[name]/./src/secure/reporting/contracts/contracts.scss?4567","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/outcomes-tab/outcomes-datatable-view/outcomes-datatable-view.ts","webpack://lib.[name]/./src/shared/components/dialogs/details-table-dialog/details-table-dialog.view.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/scripts/data-completeness.page.ts","webpack://lib.[name]/./src/secure/reporting/financials/scripts/financials.page.ts","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.chart-bar.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/outcomes-tab/outcomes-summary-view/outcomes-summary-view.ts","webpack://lib.[name]/./src/secure/reporting/prescreening/scripts/prescreening.entities.ts","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.page.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/components/milestone-summary-tab/milestone-summary.tab.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/visits-tab/scripts/visits.lookup.ts","webpack://lib.[name]/./src/secure/communications/announcements/announcements.scss?5d6f","webpack://lib.[name]/./src/shared/scripts/number-functions.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/scripts/site-activation.entities.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/scripts/site-activation.lookup.ts","webpack://lib.[name]/./src/secure/reporting/contracts/scripts/contracts.page.ts","webpack://lib.[name]/./src/secure/reporting/forecasts/scripts/forecasts.entities.ts","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.chart-pie.ts","webpack://lib.[name]/./src/secure/communications/announcements/scripts/announcements.page.ts","webpack://lib.[name]/./src/secure/communications/user-directory/user-directory.scss?25fa","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.entities.ts","webpack://lib.[name]/./src/secure/reporting/contracts/components/contract-history-tab/contract-history.tab.ts","webpack://lib.[name]/./src/secure/secure.module.ts","webpack://lib.[name]/./src/secure/communications/user-directory/user-directory.page.ts","webpack://lib.[name]/./src/secure/reporting/contracts/scripts/contracts.entities.ts","webpack://lib.[name]/./src/secure/home/home.page.ts","webpack://lib.[name]/./src/shared/scripts/graphing/graphing-functions.ts","webpack://lib.[name]/./src/shared/scripts/filtering/filtering.entities.ts","webpack://lib.[name]/./src/secure/reporting/forecasts/forecasts.scss?ee76","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/visits-tab/scripts/visits.entities.ts","webpack://lib.[name]/./src/secure/reporting/executive-summary/executive-summary.scss?8d77","webpack://lib.[name]/./src/secure/reporting/prescreening/scripts/prescreening.table.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/visits-tab/visits-summary-view/visits-summary-view.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/components/milestone-dashboard-tab/milestone-dashboard-tab.scss?d201","webpack://lib.[name]/./src/shared/scripts/filtering/filtering.study-appendix-site.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/visits-tab/visits-summary-view/visits-summary.entities.ts","webpack://lib.[name]/./src/secure/reporting/contracts/components/contract-details-tab/contract-details.tab.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/site-activation.scss?fb6f","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.progress-bars.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/outcomes-tab/scripts/outcomes.entities.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/outcomes-tab/scripts/outcomes.dialog.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/outcomes-tab/scripts/outcomes.controller.ts","webpack://lib.[name]/./src/secure/reporting/enrollment/scripts/enrollment.gauges.ts","webpack://lib.[name]/./src/secure/communications/user-directory/user-directory.objects.ts","webpack://lib.[name]/./src/secure/reporting/contracts/scripts/contracts.lookup.ts","webpack://lib.[name]/./src/shared/scripts/array-functions.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/components/dashboard-card/dashboard-card.ts","webpack://lib.[name]/./src/secure/task-tracking/scripts/task-tracker.page.ts","webpack://lib.[name]/./src/shared/scripts/table-column-visibility.ts","webpack://lib.[name]/./src/secure/reporting/sites/shared/sites.entities.ts","webpack://lib.[name]/./src/secure/reporting/enrollment/enrollment.scss?6359","webpack://lib.[name]/./src/secure/reporting/data-completeness/scripts/data-completeness.filter.ts","webpack://lib.[name]/./src/secure/home/home.scss?b053","webpack://lib.[name]/./src/secure/reporting/prescreening/prescreening.scss?af92","webpack://lib.[name]/./src/secure/reporting/contracts/components/contract-summary-tab/contract-summary.tab.ts","webpack://lib.[name]/./src/secure/reporting/executive-summary/scripts/executive-summary.page.ts","webpack://lib.[name]/./src/shared/entities/scripts/site.ts","webpack://lib.[name]/./src/secure/reporting/forecasts/scripts/forecasts.page.ts","webpack://lib.[name]/./src/shared/components/date-updated-section/date-updated-section.entities.ts","webpack://lib.[name]/./src/secure/communications/announcements/scripts/announcements.entities.ts","webpack://lib.[name]/./src/shared/scripts/tab-utilities.ts","webpack://lib.[name]/./src/secure/reporting/financials/scripts/financials.table.ts","webpack://lib.[name]/./src/secure/reporting/financials/financials.scss?91af","webpack://lib.[name]/./src/shared/scripts/date-functions.ts","webpack://lib.[name]/./src/secure/reporting/executive-summary/scripts/executive-summary.entities.ts","webpack://lib.[name]/./src/shared/entities/scripts/appendix.ts","webpack://lib.[name]/./src/secure/reporting/sites/site-activation/components/milestone-site-details-tab/milestone-site-details.tab.ts","webpack://lib.[name]/./src/secure/reporting/financials/scripts/financials.chart.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/outcomes-tab/outcomes-datatable-view/outcomes-datatable.entities.ts","webpack://lib.[name]/./src/secure/reporting/prescreening/scripts/prescreening.page.ts","webpack://lib.[name]/./src/secure/reporting/data-completeness/components/visits-tab/visits-datatable-view/visits-datatable-view.ts","webpack://lib.[name]/./src/secure/task-tracking/scripts/gantt-chart.ts"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC;AACjC,CAAC;AACD,O;;;;;;;;;;;;;ACVA,qGAAiH;AACjH,mGAA2E;AAG3E,MAAa,IAAI;IAAjB;QAKI,qBAAgB,GAAW,EAAE,CAAC;QAC9B,mBAAc,GAAW,EAAE,CAAC;QAC5B,oBAAe,GAAW,EAAE,CAAC;QAC7B,kBAAa,GAAW,EAAE,CAAC;QAS3B,uBAAkB,GAAW,EAAE,CAAC;QAGhC,iBAAY,GAAW,EAAE,CAAC;QAC1B,8BAAyB,GAAW,EAAE,CAAC;QACvC,cAAS,GAAa,EAAE,CAAC;QACzB,cAAS,GAAa,EAAE,CAAC;QAYzB,mBAAc,GAAa,EAAE,CAAC;IA0GlC,CAAC;IAvGG,UAAU;QAEN,oBAAoB;QAEpB,wDAAwD;QACxD,iEAAiE;QACjE,uCAAuC;QAEvC,sEAAsE;QACtE,IAAI,YAAY,GAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,UAAU,GAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzD,IAAI,WAAW,GAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC3D,IAAI,SAAS,GAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEvD,IAAI,qBAAqB,GAAY,KAAK,CAAC;QAC3C,IAAI,UAAU,IAAI,SAAS;YAAE,qBAAqB,GAAG,UAAU,GAAG,IAAI,IAAI,EAAE,CAAC;QAE7E,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,SAAS;QAC5B,IAAI,SAAS,IAAI,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,UAAU;aACpD,IAAI,WAAW,IAAI,SAAS,IAAI,CAAC,qBAAqB;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,aAAa;aACxF,IAAI,qBAAqB;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,SAAS;aACvD,IAAI,YAAY,IAAI,SAAS,IAAI,WAAW,IAAI,SAAS;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,aAAa;QAEhG,QAAQ,IAAI,CAAC,QAAQ,EAAE;YACnB,KAAK,CAAC;gBAAE,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;gBAAC,MAAM;YAC3C,KAAK,CAAC;gBAAE,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC;gBAAC,MAAM;YAC3C,KAAK,CAAC;gBAAE,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC;gBAAC,MAAM;YACxC,KAAK,CAAC;gBAAE,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBAAC,MAAM;YACvC,KAAK,CAAC,CAAC;YACP;gBAAS,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;gBAAC,MAAM;SAC3C;QAED,uCAAuC;QACvC,2EAA2E;QAC3E,GAAG;QAEH,IAAI,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,gBAAgB,IAAI,WAAW,CAAC;QAChE,IAAI,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,IAAI,WAAW,CAAC;QAC5D,IAAI,IAAI,CAAC,aAAa;YAAE,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC;QAAA,CAAC;QAE3D,IAAI,IAAI,CAAC,eAAe,IAAI,SAAS;YAAE,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;aAC5D,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;YAAE,IAAI,CAAC,eAAe,IAAI,WAAW,CAAC;aACzE,IAAI,IAAI,CAAC,aAAa,EAAE;YAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC;SAAE,CAAC,qDAAqD;QAEjI,IAAI,CAAC,WAAW,GAAG,8CAAwB,EAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1D,IAAI,CAAC,eAAe,GAAG,8CAAwB,EAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAClE,IAAI,CAAC,yBAAyB,GAAG,8CAAwB,EAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;QAEtF,IAAI,IAAI,CAAC,eAAe;YAAE,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;;YACvD,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC;QAEtC,IAAI,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;;YACrD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;QAErC,IAAI,IAAI,CAAC,iBAAiB;YAAE,IAAI,CAAC,sBAAsB,GAAG,KAAK,CAAC;;YAC3D,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC;QAExC,IAAI,IAAI,CAAC,kBAAkB,EAAE;YACzB,IAAI,CAAC,SAAS,GAAG,2BAAK,EAAC,IAAI,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;YACrD,IAAI,CAAC,YAAY,GAAG,0BAAI,EAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SAC/D;;YACI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;gBAC/D,IAAI,QAAQ,GAAW,MAAM,CAAC;gBAC9B,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;oBAAE,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;iBAAE;gBAChE,OAAO,WAAW,GAAG,IAAI,GAAG,yCAAyC,GAAG,QAAQ,GAAE,iFAAiF,CAAC;YACxK,CAAC,CAAC,CAAC;YACH,0DAA0D;YAC1D,IAAI,CAAC,YAAY,GAAG,0BAAI,EAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;SAChE;;YACI,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAE5B,IAAI,IAAI,CAAC,yBAAyB,EAAE;YAChC,mEAAmE;YACnE,oBAAoB;SACvB;;YACI,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAClC,CAAC;IAEO,OAAO,CAAC,UAAkB;QAC9B,IAAI,UAAU,IAAI,SAAS,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,SAAS,CAAC;;YACnE,OAAO,sCAAiB,EAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;IACxE,CAAC;IAED,aAAa,CAAC,QAAa,EAAE,MAAW,EAAE,aAAkB,EAAE,YAAiB,EAAE,eAAoB;QAEjG,IAAI,CAAC,qCAAe,EAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QACpE,IAAI,CAAC,qCAAe,EAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;SAAE;QAE5D,IAAI,aAAa,IAAI,SAAS,EAAE;YAC5B,IAAI,CAAC,qCAAe,EAAC,aAAa,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;SACpF;QACD,IAAI,YAAY,IAAI,SAAS,EAAE;YAC3B,IAAI,CAAC,qCAAe,EAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;SAClF;QACD,IAAI,eAAe,IAAI,SAAS,EAAE;YAC9B,IAAI,CAAC,qCAAe,EAAC,eAAe,EAAE,IAAI,CAAC,sBAAsB,CAAC,EAAE;gBAAE,OAAO,KAAK,CAAC;aAAE;SACxF;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ;AA7ID,oBA6IC;;;;;;;;;;;;;;;;AChJD,wFAA4D;AAI5D,MAAa,qBAAqB;IAO9B,YAAY,IAAY,EAAE,IAAY,EAAE,MAAc;QAClD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,gCAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAA0B,CAAC;IACtD,CAAC;IAED,eAAe,CAAC,KAAmB;QAE/B,cAAc;QACd,IAAI,YAA4B,CAAC;QACjC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE;YAAE,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;SAAE;aACrG;YAAE,YAAY,GAAG,EAAE,CAAC;SAAE;QAC3B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAGvD,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,EAAE;YACrB,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC;SACvB;QAED,IAAI,KAAK,CAAC,eAAe,IAAI,CAAC,EAAE,EAAE,eAAe;YAC7C,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE;gBAAE,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aAAE;iBACvF;gBAAE,YAAY,GAAG,EAAE,CAAC;aAAE;YAC3B,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;SACnD;IACL,CAAC;CACJ;AApCD,sDAoCC;;;;;;;;;;;;;;;;ACxCD,wHAAuH;AACvH,0GAAqF;AAErF,IAAI,UAAU,GAAG,mBAAO,CAAC,mCAAuB,CAAC,CAAC;AAClD,mBAAO,CAAC,0CAA8B,CAAC,CAAC,UAAU,CAAC,CAAC;AAEpD,MAAa,qBAAqB;IAgB9B;QATA,YAAO,GAAW,0BAA0B,CAAC;QAC7C,mBAAc,GAAW,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;QAMnD,gBAAW,GAAW,8BAA8B,CAAC;QAGjD,UAAU,CAAC,UAAU,CAAC;YAClB,IAAI,EAAE;gBACF,WAAW,EAAE,QAAQ;gBACrB,YAAY,EAAE,GAAG;aACpB;SACJ,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;IACpC,CAAC;IAED,eAAe,CAAC,SAA+B;QAC3C,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;QAExC,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;QAC1B,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAEpE,IAAI,CAAC,eAAe,GAAG,SAAS,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACrC,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;IAEO,oBAAoB,CAAC,SAA+B;QAExD,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAC;QACtE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAE5G,IAAI,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC,iBAAiB,GAAG,UAAU,CAAC,KAAK,CAAC,kCAAkC,EAAE;YAC1E,KAAK,EAAE;gBACH,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE;oBACJ,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wBACb,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;wBACvH,IAAI,eAAe,GAAW,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBACtG,kFAAkF;wBAClF,IAAI,UAAU,GAAW,uGAAuG;wBAChI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,GAAG,UAAU,+BAA+B,eAAe,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;wBAE/G,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;4BAE1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;4BAC/B,IAAI,KAAK,GAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,eAAe,CAAC,CAAC;4BACtI,IAAI,KAAK,EAAE;gCACP,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;6BAC5B;4BACD,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;yBACxC;wBAED,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;wBAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;wBAEhC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;4BAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;wBACxB,CAAC,CAAC,CAAC;wBACH,4FAA4F;oBAChG,CAAC;oBACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wBACX,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,mCAAmC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;wBACvH,oFAAoF;wBACpF,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,8BAA8B,EAAE,EAAE,IAAI,CAAC,CAAC;wBAEhF,IAAI,IAAI,CAAC,kBAAkB,EAAE;4BACzB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;4BAChC,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;yBACvC;wBACD,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;wBAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;wBAEhC,gDAAgD;oBACpD,CAAC;iBACJ;gBACD,QAAQ,EAAE,GAAG;gBACb,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,EAAE;aAChB;YACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,wBAAwB;YACxB,+FAA+F;YAC/F,KAAK,EAAE,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACrI,OAAO,EAAE;gBACL,WAAW,EAAE,GAAG;gBAChB,aAAa,EAAE,CAAC;gBAChB,iCAAiC;aACpC;YACD,KAAK,EAAE;gBACH,IAAI,EAAE,UAAU;aACnB;YACD,KAAK,EAAE;gBACH,GAAG,EAAE,CAAC;gBACN,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,GAAG;gBACf,wBAAwB;gBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBACnB,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,0DAA0D;wBAC1D,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE;4BACtB,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG;yBAC5C;6BACI;4BACD,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;yBAC3B;oBACL,CAAC;iBACJ;gBACD,WAAW,EAAE;oBACT,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE;wBACP,IAAI,IAAI,CAAC,KAAK,IAAI,MAAM,EAAE;4BACtB,IAAI,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC;4BACzC,IAAI,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BAClE,OAAO,GAAG,GAAG,SAAS,GAAG,GAAG;yBAC/B;6BACI;4BACD,IAAI,SAAS,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;4BACjE,OAAO,GAAG,GAAG,SAAS;yBACzB;oBAEL,CAAC;oBACD,MAAM,EAAE,KAAK,EAAE,cAAc;oBAC7B,cAAc;oBACd,kBAAkB;iBACrB;aACJ;YACD,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;YAChD,WAAW,EAAE;gBACT,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBAC9B,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;aAC1B;YACD,MAAM,EAAE,MAAM,CAAC,aAAa;YAC5B,SAAS,EAAE;gBACP,aAAa,EAAE;oBACX,QAAQ,EAAE;wBACN,KAAK,EAAE,MAAM;wBACb,CAAC,EAAE,CAAC,EAAE;wBACN,CAAC,EAAE,CAAC,EAAE;qBACT;oBACD,KAAK,EAAE;wBACH,OAAO,EAAE,MAAM;qBAClB;iBACJ;gBACD,MAAM,EAAE,MAAM,CAAC,eAAe;aACjC;SACJ,CAAC,CAAC;IACP,CAAC;IAEO,uBAAuB,CAAC,SAA+B;QAE3D,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC1E,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAEhH,IAAI,MAAM,GAAG,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;QAEtD,IAAI,CAAC,oBAAoB,GAAG,UAAU,CAAC,KAAK,CAAC,sCAAsC,EAAE;YACjF,KAAK,EAAE;gBACH,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE;oBACJ,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;wBACb,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC3H,IAAI,eAAe,GAAW,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;wBACtG,qFAAqF;wBAErF,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;4BAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;4BAC/B,gEAAgE;4BAEhE,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC;4BAC7F,IAAI,YAAY,IAAI,CAAC,CAAC,EAAE;gCACpB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;gCAChE,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;6BACxC;yBACJ;wBAED,IAAI,CAAC,UAAU,CAAC,uCAAuC,CAAC,CAAC;wBACzD,IAAI,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC;wBACrD,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;oBACvC,CAAC;oBACD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;wBACX,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;wBAC3H,uFAAuF;wBAEvF,IAAI,IAAI,CAAC,kBAAkB,EAAE;4BACzB,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;4BAChC,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;yBACpC;wBAED,IAAI,CAAC,UAAU,CAAC,uCAAuC,CAAC,CAAC;wBACzD,IAAI,CAAC,UAAU,CAAC,mCAAmC,CAAC,CAAC;wBACrD,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,CAAC;oBACvC,CAAC;iBACJ;gBACD,QAAQ,EAAE,GAAG;gBACb,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,EAAE;aAChB;YACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YAChH,sEAAsE;YACtE,KAAK,EAAE;gBACH,IAAI,EAAE,UAAU;aACnB;YACD,KAAK,EAAE;gBACH,GAAG,EAAE,CAAC;gBACN,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,GAAG;gBACf,wBAAwB;gBACxB,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBACnB,MAAM,EAAE;gBACJ,0BAA0B;gBAC1B,gEAAgE;gBAChE,+CAA+C;gBAC/C,GAAG;iBACN;gBACD,WAAW,EAAE;oBACT,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE;wBACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5D,CAAC;oBACD,MAAM,EAAE,KAAK,EAAE,cAAc;oBAC7B,cAAc;oBACd,kBAAkB;iBACrB;aACJ;YACD,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE;YAChD,WAAW,EAAE;gBACT,MAAM,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBAC9B,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE;aAC1B;YACD,MAAM,EAAE,MAAM,CAAC,aAAa;YAC5B,SAAS,EAAE;gBACP,aAAa,EAAE;oBACX,QAAQ,EAAE;wBACN,CAAC,EAAE,CAAC,EAAE;qBACT;oBACD,KAAK,EAAE;wBACH,OAAO,EAAE,MAAM;qBAClB;iBACJ;gBACD,MAAM,EAAE,MAAM,CAAC,eAAe;aACjC;SACJ,CAAC,CAAC;IACP,CAAC;IAEO,uBAAuB,CAAC,IAA0B;QACtD,IAAI,KAAK,GAAG,IAAI,CAAC;QACjB,IAAI,OAAO,GAAU;YACjB,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,4CAA4C,EAAE,SAAS,EAAE,KAAK,EAAE;YAC9I,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,8CAA8C,EAAE;YACnI,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,4CAA4C,EAAE;YAC9G,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,4CAA4C,EAAE;YACpG,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,oDAAoD,EAAE;YACpH,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,6BAA6B,EAAE,OAAO,EAAE,sBAAsB,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,SAAS,EAAE,8DAA8D,EAAE;YAC/L,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,2BAA2B,EAAE,OAAO,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,SAAS,EAAE,4DAA4D,EAAE;YACvL,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,wDAAwD,EAAE;YAE/H,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,wBAAwB,EAAE,OAAO,EAAE,+BAA+B,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE,SAAS,EAAE,0DAA0D,EAAE;YACrM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,sBAAsB,EAAE,OAAO,EAAE,6BAA6B,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,SAAS,EAAE,wDAAwD,EAAE;YAC7L,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,wBAAwB,EAAE,OAAO,EAAE,+BAA+B,EAAE,EAAE,KAAK,EAAE,kCAAkC,EAAE,SAAS,EAAE,0DAA0D,EAAE;YACrM,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,4BAA4B,EAAE,OAAO,EAAE,mCAAmC,EAAE,EAAE,KAAK,EAAE,sCAAsC,EAAE,SAAS,EAAE,8DAA8D,EAAE;YAErN,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,qBAAqB,EAAE,OAAO,EAAE,4BAA4B,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,SAAS,EAAE,wDAAwD,EAAE;YAC3L,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,wBAAwB,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,SAAS,EAAE,yDAAyD,EAAE;SAClL,CAAC;QAEF,IAAI,iBAAiB,GAAuB;YAExC,4DAA4D;YAC5D,IAAI,0CAAgB,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE,EAAE,iBAAiB,CAAC;YAC9D,IAAI,0CAAgB,CAAC,eAAe,EAAE,KAAK,EAAE,EAAE,EAAE,eAAe,CAAC;YACjE,IAAI,0CAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC;YAC9D,IAAI,0CAAgB,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,EAAE,qBAAqB,CAAC;YACtE,IAAI,0CAAgB,CAAC,wBAAwB,EAAE,KAAK,EAAE,EAAE,EAAE,+BAA+B,CAAC;YAC1F,IAAI,0CAAgB,CAAC,sBAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,6BAA6B,CAAC;YACtF,IAAI,0CAAgB,CAAC,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,yBAAyB,CAAC;YAE9E,IAAI,0CAAgB,CAAC,0BAA0B,EAAE,IAAI,EAAE,EAAE,EAAE,2BAA2B,CAAC;YACvF,IAAI,0CAAgB,CAAC,wBAAwB,EAAE,IAAI,EAAE,EAAE,EAAE,yBAAyB,CAAC;YACnF,IAAI,0CAAgB,CAAC,0BAA0B,EAAE,IAAI,EAAE,EAAE,EAAE,2BAA2B,CAAC;YACvF,IAAI,0CAAgB,CAAC,8BAA8B,EAAE,IAAI,EAAE,EAAE,EAAE,+BAA+B,CAAC;YAC/F,IAAI,0CAAgB,CAAC,wBAAwB,EAAE,IAAI,EAAE,EAAE,EAAE,yBAAyB,CAAC;YACnF,IAAI,0CAAgB,CAAC,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,0BAA0B,CAAC;SAClF,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;YAC7C,KAAK,EAAE,+FAA+F;YACtG,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM;YACf,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB;;gBAEI;YACJ,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACL;oBACI,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,sCAAsC;oBAC5C,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,8BAA8B;oBACrC,kBAAkB;oBAClB,2BAA2B;oBAC3B,GAAG;iBACN;gBACD;oBACI,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,yDAAyD;oBAC/D,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,kCAAkC;oBACzC,SAAS,EAAE,UAAU,GAAG;wBACpB,IAAI,cAAc,GAAG,EAAE,CAAC;wBACxB,KAAK,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;4BAC7B,IAAI,CAAC,iBAAiB,GAAG,OAAO;4BAChC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;4BAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE;gCAC/B,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;4BACvC,CAAC,CAAC;wBACN,CAAC,CAAC,CAAC;wBACH,IAAI,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;wBACrD,OAAO,WAAW,CAAC;oBACvB,CAAC;iBACJ;aACJ;YACD,KAAK,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,eAAe;YAC1B,YAAY,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE;gBAC7B,wBAAwB;gBACxB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC;;;;;;;iBAOjD,CAAC,CAAC;gBAEH,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBAC5D,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,CAAC,CAAC,CAAC;gBAEH,mBAAmB;gBACnB,IAAI,MAAM,GAAG,IAAI,CAAC;gBAClB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE;oBACzD,uBAAuB;oBACvB,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;oBACrC,IAAI,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC;oBAC/F,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;oBAElE,mBAAmB;oBACnB,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACP,CAAC;SACJ,CAAC,CAAC;QAEH,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAErE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAClF,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,wBAAwB,CAAC,CAAC;QAErH,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAE1E,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACtE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,QAAQ,CAAC,2FAA2F,CAAC,CAAC;QACrJ,yEAAyE;QACzE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,gFAAgF,GAAG,IAAI,CAAC,OAAO,GAAG,8BAA8B,CAAC,CAAC;QACzL,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC;QAEpI,IAAI,CAAC,qBAAqB,GAAG,IAAI,yDAA+B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,EAAE,iBAAiB,CAAC,CAAC;QAErI,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;YAClD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAErD,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7D,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3C,CAAC,CAAC;QAEF,8BAA8B;QAC9B,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;YACtC,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAC/B,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC,EAAE,GAAG,CAAC;QACX,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;YACzC,UAAU,CAAC,GAAG,EAAE;gBACZ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;YAC3C,CAAC,EAAE,GAAG,CAAC;QACX,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,kBAAkB,CAAC,KAAa;QAEpC,QAAQ,KAAK,EAAE;YACX,KAAK,CAAC;gBAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAAC,MAAM;YAC/E,KAAK,CAAC;gBAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAAC,MAAM;YAC5E,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,6CAAsB,EAAC,KAAK,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC;SAC/G;IACL,CAAC;IAEO,oBAAoB;QACxB,IAAI,MAAM,GAAG,IAAI,CAAC;QAElB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE;YACzD,uBAAuB;YACvB,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACrC,IAAI,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,IAAI,eAAe,CAAC,CAAC;YAC/F,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,cAAc,CAAC,QAAgB;QACnC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3E,IAAI,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,SAAS,IAAI,QAAQ,CAAC,CAAC,SAAS,CAAC;QACzG,IAAI,CAAC,YAAY,EAAE;YACf,OAAM;SACT;QAED,kCAAkC;QAClC,IAAI,mBAAmB,GAAuB,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,yBAAyB,CAAC,CAAC,GAAG,EAAE,CAAC;QAEjG,2CAA2C;QAC3C,IAAI,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC;QAChE,IAAI,cAAc,GAAG,EAAE,CAAC;QACxB,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC3B,IAAI,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YACnF,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,8BAA8B;QAC9B,IAAI,qBAAqB,GAAG,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW;QAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC5C,IAAI,mBAAmB,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;gBAChG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACjC;SACJ;QAGD,8BAA8B;QAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAEnE,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC;QACxC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,YAAY;QAChB,uBAAuB;QACvB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QAEjC,8BAA8B;QAC9B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,sBAAsB;QAE3F,oBAAoB;QACpB,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc,EAAE,CAAC;IAC1B,CAAC;IAEO,kBAAkB,CAAC,YAAkC;QACzD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAExC,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAE7C,UAAU,CAAC,GAAG,EAAE;YACZ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAC3C,CAAC,EAAE,GAAG,CAAC;IAEX,CAAC;IAGO,cAAc,CAAC,OAAe;QAClC,IAAI,KAAK,GAAW,GAAG,GAAG,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;QAC/C,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,2BAA2B;IAC3B,iCAAiC;IACjC,gCAAgC;IAExB,oBAAoB,CAAC,IAA0B;QACnD,IAAI,UAAU,GAAa,CAAC,sBAAsB,EAAE,wBAAwB,EAAE,kBAAkB,CAAC,CAAC,CAAC,uBAAuB;QAC1H,IAAI,YAAY,GAAa,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC,CAAC,iBAAiB;QAC3G,IAAI,UAAU,GAAa,CAAC,qBAAqB,EAAE,uBAAuB,EAAE,gBAAgB,CAAC,CAAC,CAAC,mDAAmD;QAClJ,IAAI,YAAY,GAAa,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,6BAA6B;QAE7F,IAAI,eAAe,GAAG,EAAE,CAAC;QACzB,IAAI,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;YAChE,IAAI,WAAW,GAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,CAAC,CAAC,KAAyB,EAAE,EAAE;gBAEvC,WAAW,CAAC,IAAI,CAAC;oBACb,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;oBAC3B,SAAS,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK,CAAC,2BAA2B;iBAClE,CAAC,CAAC;gBAEH,IAAI,eAAe,GAAyB,KAAK,CAAC,SAAS,CAAC,CAAC,oDAAoD;gBACjH,IAAI,qBAAqB,GAAU,EAAE,CAAC;gBACtC,eAAe,CAAC,OAAO,CAAC,CAAC,MAA0B,EAAE,EAAE;oBACnD,qBAAqB,CAAC,IAAI,CACtB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,gDAAgD;qBAC5F,CAAC;gBACN,CAAC,CAAC,CAAC;gBAEH,eAAe,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,KAAK;oBACX,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG,GAAG,KAAK;oBAC5B,IAAI,EAAE,qBAAqB,CAAC,iCAAiC;iBAChE,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,OAAO;gBACH,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC;gBACvB,IAAI,EAAE,KAAK;gBACX,IAAI,EAAE,WAAW;gBACjB,mBAAmB;gBACnB,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC;aAC7B,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,OAAO;YACH,aAAa,EAAE,aAAa;YAC5B,eAAe,EAAE,eAAe;SACnC,CAAC;IACN,CAAC;IAEO,wBAAwB,CAAC,SAA+B;QAC5D,IAAI,2BAA2B,GAAU,EAAE,CAAC;QAC5C,IAAI,WAAW,GAAU,SAAS,CAAC,GAAG,CAAC,CAAC,KAAyB,EAAE,EAAE;YAEjE,IAAI,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;YACtC,IAAI,qBAAqB,GAAU,EAAE,CAAC;YACtC,eAAe,CAAC,OAAO,CAAC,CAAC,MAA0B,EAAE,EAAE;gBACnD,qBAAqB,CAAC,IAAI,CACtB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAC7C,CAAC;YACN,CAAC,CAAC,CAAC;YAEH,2BAA2B,CAAC,IAAI,CAAC;gBAC7B,IAAI,EAAE,yBAAyB;gBAC/B,EAAE,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG;gBACpB,IAAI,EAAE,qBAAqB;aAC9B,CAAC,CAAC;YAEH,OAAO;gBACH,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,CAAC,EAAE,KAAK,CAAC,oBAAoB;gBAC7B,SAAS,EAAE,KAAK,CAAC,IAAI,GAAG,GAAG;aAC9B,CAAC;QACN,CAAC,CAAC,CAAC;QAEH,IAAI,aAAa,GAAG,CAAC;gBACjB,EAAE,EAAE,gCAAgC;gBACpC,IAAI,EAAE,yBAAyB;gBAC/B,IAAI,EAAE,WAAW;gBACjB,KAAK,EAAE,SAAS;aACnB,CAAC,CAAC;QAEH,OAAO;YACH,aAAa,EAAE,aAAa;YAC5B,eAAe,EAAE,2BAA2B;SAC/C;IACL,CAAC;IAEO,UAAU,CAAC,OAAe;QAC9B,IAAI,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,KAAK,EAAE,CAAC;QACrE,UAAU,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9B,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QACrC,UAAU,CAAC,GAAG,EAAE;YACZ,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YAClC,UAAU,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACnC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEX,CAAC;IAEO,gBAAgB,CAAC,OAAe;QACpC,IAAI,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;QAC5F,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;YACxB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,QAAQ,EAAE;gBACvD,OAAO;aACV;SACJ;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACzC,yBAAyB;YACzB,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,QAAQ,EAAE;gBACvD,QAAQ,GAAG,IAAI,CAAC;aACnB;YAED,IAAI,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,SAAS,EAAE;gBACpE,2BAA2B;gBAC3B,8BAA8B;gBAC9B,WAAW,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;aACvD;SACJ;IACL,CAAC;IAEO,YAAY,CAAC,QAA8B;QAC/C,IAAI,QAAQ,GAAG;YACX;gBACI,YAAY;gBACZ,cAAc;gBACd,mBAAmB;gBACnB,kBAAkB;gBAClB,kBAAkB;gBAClB,4BAA4B;gBAC5B,0BAA0B;gBAC1B,sBAAsB;gBACtB,8BAA8B;gBAC9B,4BAA4B;gBAC5B,8BAA8B;gBAC9B,kCAAkC;gBAClC,4BAA4B;gBAC5B,uBAAuB;aAC1B;YAED,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpB,KAAK,IAAI,CAAC,SAAS,IAAI;gBACvB,KAAK,IAAI,CAAC,iBAAiB,IAAI;gBAC/B,KAAK,IAAI,CAAC,iBAAiB,IAAI;gBAC/B,KAAK,IAAI,CAAC,IAAI,IAAI;gBAClB,KAAK,IAAI,CAAC,YAAY,IAAI;gBAC1B,KAAK,IAAI,CAAC,oBAAoB,IAAI;gBAClC,KAAK,IAAI,CAAC,kBAAkB,IAAI;gBAChC,KAAK,IAAI,CAAC,eAAe,IAAI;gBAC7B,KAAK,IAAI,CAAC,6BAA6B,IAAI;gBAC3C,KAAK,IAAI,CAAC,2BAA2B,IAAI;gBACzC,KAAK,IAAI,CAAC,6BAA6B,IAAI;gBAC3C,KAAK,IAAI,CAAC,iCAAiC,IAAI;gBAC/C,KAAK,IAAI,CAAC,0BAA0B,IAAI;gBACxC,KAAK,IAAI,CAAC,eAAe,IAAI;aAChC,CAAC;SAEL,CAAC;QACF,IAAI,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,IAAI,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAErC,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,cAAc;QACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;CAEJ;AAvqBD,sDAuqBC;;;;;;;;;;;;;;;;;AC9qBD,iFAAiD;AACjD,yGAA8E;AAC9E,mGAAwE;AACxE,8HAA6F;AAC7F,0GAA8E;AAC9E,oGAAmE;AAEnE,kHAAqF;AACrF,0HAA0F;AAC1F,4GAA+E;AAC/E,oHAAoF;AACpF,+EAAsD;AACtD,2EAA8C;AAE9C,MAAa,gBAAgB;IAWzB,oCAAoC;IAEpC,YAAY,QAAmB,EAAE,eAAoB;QATrD,cAAS,GAAY,EAAE,CAAC;QACxB,mBAAc,GAAiB,EAAE,CAAC;QAClC,qBAAgB,GAAmB,EAAE,CAAC;QASlC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAEzB,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,IAAI,qBAAqB,GAAa,EAAE,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,oCAAY,EAAC,4BAAU,EAAgB,eAAe,CAAC,CAAC;QAC9E,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAa,EAAE,EAAE;YAC1C,CAAC,CAAC,UAAU,EAAE;YAEd,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;gBACpC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,uBAAK,CAAC,CAAC,CAAC,OAAO,EAAE,2BAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,2BAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpH,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;gBAC/C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,iCAAY,CAAC,CAAC,CAAC,UAAU,EAAE,2BAAW,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBAClG,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aAC5C;QAEL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAQ,EAAE,CAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,CAAe,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;QAE9E,IAAI,CAAC,WAAW,GAAG,IAAI,uCAAiB,EAAE,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAI,2CAAmB,EAAE,CAAC;QAE/C,8BAA8B;QAC9B,mCAAmC;IACvC,CAAC;IAED,aAAa,CAAC,QAAkB,EAAE,WAAqB,EAAE,OAAiB,EAAE,QAAkB,EAAE,gBAA0B;QAEtH,IAAI,iBAAiB,GAAoC,IAAI,GAAG,EAA8B,CAAC;QAC/F,IAAI,gBAAgB,GAAoC,IAAI,GAAG,EAA8B,CAAC;QAE9F,IAAI,iBAAiB,GAAsC,IAAI,GAAG,EAAgC,CAAC;QACnG,IAAI,sBAAsB,GAAsC,IAAI,GAAG,EAAgC,CAAC;QACxG,IAAI,qBAAqB,GAAsC,IAAI,GAAG,EAAgC,CAAC;QAEvG,sHAAsH;QACtH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACjD,IAAI,KAAK,GAAe,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAE/C,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;gBAC5E,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;gBACjF,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;gBAAE,SAAS;YAElD,mBAAmB;YACnB,IAAI,WAA+B,CAAC;YACpC,IAAI,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE;gBAAE,WAAW,GAAG,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;aAAE;iBAC5F;gBAAE,WAAW,GAAG,IAAI,4CAAkB,CAAC,2BAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;aAAE;YAC3G,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACjC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;YAElD,IAAI,UAA8B,CAAC;YACnC,IAAI,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE;gBAAE,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;aAAE;iBAC/F;gBAAE,UAAU,GAAG,IAAI,4CAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;aAAE;YACpH,UAAU,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAChC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;YAEnD,qBAAqB;YACrB,IAAI,QAAgB,CAAC;YAErB,IAAI,cAAoC,CAAC;YACzC,QAAQ,GAAG,gDAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YACvD,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAAE,cAAc,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAAE;iBACrF;gBAAE,cAAc,GAAG,IAAI,gDAAoB,CAAC,aAAK,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,mBAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,yBAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,2BAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;aAAE;YACjQ,cAAc,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACpC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAEhD,IAAI,iBAAuC,CAAC;YAC5C,QAAQ,GAAG,gDAAoB,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC3D,IAAI,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAAE,iBAAiB,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAAE;iBAClG;gBAAE,iBAAiB,GAAG,IAAI,gDAAoB,CAAC,aAAK,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,mBAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,2BAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;aAAE;YACpM,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACvC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;YAExD,IAAI,gBAAsC,CAAC;YAC3C,QAAQ,GAAG,gDAAoB,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;gBAAE,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;aAAE;iBAC/F;gBAAE,gBAAgB,GAAG,IAAI,gDAAoB,CAAC,aAAK,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,mBAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,yBAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,YAAY,CAAC,CAAC;aAAE;YAC5O,gBAAgB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACtC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;SACzD;QAED,IAAI,aAAa,GAAyB,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,aAAa,CAAC,IAAI,CAAC,CAAC,CAAqB,EAAE,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAEhG,IAAI,YAAY,GAAyB,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;QACxE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAqB,EAAE,CAAqB,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC;QAE/F,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAGzD,IAAI,gBAAgB,GAA2B,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/E,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;SAAE;QAC/F,iBAAiB;QAEjB,IAAI,mBAAmB,GAA2B,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,CAAC,CAAC;QACvF,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;SAAE;QAErG,IAAI,kBAAkB,GAA2B,CAAC,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAC;QACrF,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC;SAAE;QAEnG,iCAAiC;QAEjC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,gBAAgB,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;IAC7F,CAAC;IAED,OAAO,CAAC,OAAe;QAEnB,yCAAyC;QACzC,IAAI,OAAO,IAAI,cAAc,EAAE;YAAE,gCAAY,EAAC,aAAa,EAAE,wBAAwB,CAAC,CAAC;YAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;SAAE;aAC/H,IAAI,OAAO,IAAI,gBAAgB,EAAE;YAAE,gCAAY,EAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;YAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;SAAE;aAC5I;YACD,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACvC;IACL,CAAC;IAED,WAAW;QACP,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IACrC,CAAC;CACJ;AAzID,4CAyIC;;;;;;;;;;;;;;;;ACtJD,yGAA4E;AAC5E,6FAA+E;AAE/E,MAAa,qBAAqB;IAc9B,YAAY,mBAAwC,EAAE,iBAAqC,EAAE,oBAA2C;QAFxI,iBAAY,GAAG,IAAI,CAAC;QAGhB,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,EAAE,8BAAa,CAAC,CAAC;QAE9D,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;QAE1B,mBAAmB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YACpC,MAAM,GAAG,GAAG,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACzE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAGlC,IAAI,EAAE,EAAE;gBACJ,IAAI,OAAO,CAAC,WAAW,KAAK,CAAC,EAAE;oBAC3B,EAAE,CAAC,UAAU,GAAG,OAAO,CAAC;iBAC3B;qBAAM;oBACH,EAAE,CAAC,SAAS,GAAG,OAAO,CAAC;iBAC1B;aACJ;iBAAM;gBACH,MAAM,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAE3H,MAAM,GAAG,GAAG;oBACR,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,SAAS,EAAE,EAAE;oBACb,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;oBACxB,UAAU,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU;oBACjC,OAAO,EAAE,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO;iBACd,CAAC;gBAElB,GAAG,CAAC,SAAS,GAAG,6CAAoB,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACvE,GAAG,CAAC,UAAU,GAAG,6CAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAElE,IAAI,OAAO,CAAC,WAAW,KAAK,CAAC,EAAE;oBAC3B,GAAG,CAAC,UAAU,GAAG,OAAO,CAAC;oBAEzB,8CAA8C;oBAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,EAAE,EAAE;wBACzB,GAAG,CAAC,SAAS,GAAG;4BACZ,aAAa,EAAE,CAAC;4BAChB,SAAS,EAAE,CAAC;4BACZ,QAAQ,EAAE,CAAC;4BACX,OAAO,EAAE,CAAC;4BACV,WAAW,EAAE,CAAC;4BACd,OAAO,EAAE,CAAC;4BACV,QAAQ,EAAE,CAAC;yBACO,CAAC;qBAC1B;iBACJ;qBAAM;oBACH,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC;iBAC3B;gBAED,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;aAC/B;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;YAEzB,MAAM,YAAY,GAAG,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC;YAErC,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CACrD,CAAC,IAAI,CAAC,OAAO,KAAK,EAAE,CAAC,OAAO,CAAC;gBAC7B,CAAC,IAAI,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ,CAAC;gBAC/B,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC,CACjB,CAAC,CAAC;YAEP,EAAE,CAAC,KAAK,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,KAAK,YAAY,CAAC,CAAC;QAE3G,CAAC,CAAC,CAAC;QAEF,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAsB,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY;QACjG,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YAC5E,MAAM,EAAE,GAAG,CAAC,CAAC,MAAa,CAAC;YAC3B,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC,OAAO,CAAC;YAE/B,IAAI,CAAC,MAAM,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;IAEP,CAAC;IAED,MAAM;QACF,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gBAC1D,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;oBAAE,OAAO,CAAC,oCAAoC;gBAC7E,kCAAkC;gBAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE;oBACrD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;iBAC5D;YACL,CAAC,CAAC,CAAC,CAAC;SACP;QAED,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,EAAE,CAAC;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAC,iBAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,0CAAE,aAAa,IAAC,CAAC,CAAC;QAC/G,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;YACtD,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAE,CAAC,SAAS,0CAAE,QAAQ,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC,CAAC;QACJ,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;;YACtD,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAClC,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,QAAE,CAAC,SAAS,0CAAE,QAAQ,CAAC,CAAC;QACpE,CAAC,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,gBAAgB,CAAkB,CAAC;YACvE,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,OAAO,CACR,IAAI,EACJ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAC1C,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EACzC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CACxC,CAAC;YAEN,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS;QACrC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,EAAC,EAAE,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,WAAW,EAAC,UAAU,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnI,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAE1D,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;aACzC,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,KAAK;aACnD,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI;YAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,aAAa;;YAC3D,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,SAAS;QAEjC,IAAI,CAAC,MAAM,EAAE,CAAC;IAClB,CAAC;IAED,SAAS,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB,EAAE,UAA2B;QACpF,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAC5C,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;YACxB,CAAC,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC;YAC1B,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAC/B,CAAE,CAAC;QACJ,CAAC,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACvC,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,aAAa,GAAG,CAAC;QAEpG,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YAC9C,OAAO;;sBAEG,SAAS,CAAC,SAAS;sBACnB,SAAS,CAAC,cAAc;sBACxB,SAAS,CAAC,cAAc;;aAEjC,CAAC;QAEN,CAAC,CAAC,CAAC;QACH,QAAQ,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC,SAAS,GAAG;;;;;;;;;;sBAU9C,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;;;SAGlC,CAAC;IACN,CAAC;CACJ;AAtLD,sDAsLC;;;;;;;;;;;;;;;;;AC1LD,6FAAkE;AAClE,sGAA0F;AAC1F,0GAAgJ;AAEhJ,MAAa,cAAc;IAyDvB,UAAU;QAEN,sBAAsB;QACtB,IAAI,IAAI,CAAC,iBAAiB,IAAI,EAAE,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE;YAChE,IAAI,CAAC,kBAAkB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC3D,IAAI,CAAC,kBAAkB,GAAG,+BAAU,EAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;SACjE;aACI;YACD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;SAChC;QAED;;WAEG;QAEH,qBAAqB;QACrB,IAAI,IAAI,CAAC,eAAe,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,EAAE;YAC5D,IAAI,CAAC,gBAAgB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACvD,IAAI,CAAC,gBAAgB,GAAG,+BAAU,EAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;SAC7D;aACI;YACD,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;YAC7B,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;SAC9B;QAED,8BAA8B;QAC9B,IAAI,IAAI,CAAC,wBAAwB,IAAI,EAAE,IAAI,IAAI,CAAC,wBAAwB,IAAI,IAAI,EAAE;YAC9E,IAAI,CAAC,yBAAyB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YACzE,IAAI,CAAC,yBAAyB,GAAG,+BAAU,EAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;SAC/E;aACI;YACD,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;YACtC,IAAI,CAAC,yBAAyB,GAAG,EAAE,CAAC;SACvC;QAED,gCAAgC;QAChC,IAAI,IAAI,CAAC,0BAA0B,IAAI,EAAE,IAAI,IAAI,CAAC,0BAA0B,IAAI,IAAI,EAAE;YAClF,IAAI,CAAC,2BAA2B,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;YAC7E,IAAI,CAAC,2BAA2B,GAAG,+BAAU,EAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;SACnF;aACI;YACD,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC;YACxC,IAAI,CAAC,2BAA2B,GAAG,EAAE,CAAC;SACzC;QAED,IAAI,IAAI,CAAC,4BAA4B,IAAI,IAAI,IAAI,IAAI,CAAC,sBAAsB,IAAI,IAAI,EAAE;YAClF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,4BAA4B,GAAG,IAAI,CAAC,sBAAsB,CAAC;SAC1F;aACI;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;SAC/B;QAED,kBAAkB;QAClB,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACvF,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvE,IAAI,CAAC,gCAAgC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QAC7F,IAAI,CAAC,8BAA8B,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACzF,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAC3F,IAAI,CAAC,mCAAmC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACnG,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAEzE,sBAAsB;QACtB;;;;;;;yIAOiI;QAEjI,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;QACvC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI;QAC5B,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7C,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC;QAC/C,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC;QACzC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3C,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,sBAAsB,CAAC;IAErE,CAAC;IAED,eAAe,CAAC,MAAc;QAC1B,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YAC1C,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,SAAS,EAAE;YACvC,OAAO,EAAE;SACZ;aACI,IAAI,MAAM,IAAI,CAAC,EAAE;YAClB,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAClC;aACI;YACD,OAAO,2CAA2C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU;SAChG;IAEL,CAAC;CACJ;AA9JD,wCA8JC;AAED,MAAa,kBAAkB;IAqC3B,UAAU;QACN,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAC5D,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC1E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEtE,IAAI,CAAC,gBAAgB,GAAG,mDAAmD,IAAI,CAAC,SAAS,MAAM,CAAC;QAChG,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;QAE5B,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACvF,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACnF,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACvF,IAAI,CAAC,iCAAiC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QAC/F,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAEjF,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QACjG,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7F,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC;QAEvF,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC3B,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAC9D,KAAK,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YAC5E,KAAK,CAAC,mBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAExE,uJAAuJ;YACvJ,KAAK,CAAC,gBAAgB,GAAG,KAAK,CAAC,SAAS,CAAC;YACzC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC;YACrC,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,EAAE;gBACnC,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACzF,KAAK,CAAC,2BAA2B,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;gBACrF,KAAK,CAAC,6BAA6B,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBACzF,KAAK,CAAC,iCAAiC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;aACpG;iBACI;gBACD,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC;gBACzC,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC;gBACvC,KAAK,CAAC,6BAA6B,GAAG,EAAE,CAAC;gBACzC,KAAK,CAAC,iCAAiC,GAAG,EAAE,CAAC;aAChD;YAED,KAAK,CAAC,0BAA0B,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAEnF,KAAK,CAAC,2BAA2B,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACnG,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAC/F,KAAK,CAAC,sBAAsB,GAAG,IAAI,CAAC,mBAAmB,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QAC7F,CAAC,CAAC,CAAC;IACP,CAAC;IAED,WAAW,CAAC,MAAc;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;IAC7D,CAAC;IAED,eAAe,CAAC,MAAc;QAC1B,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YAC1C,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,SAAS,EAAE;YACvC,OAAO,EAAE;SACZ;aACI,IAAI,MAAM,IAAI,CAAC,EAAE;YAClB,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAClC;aACI;YACD,OAAO,2CAA2C,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,UAAU;SAChG;IAEL,CAAC;IAED,mBAAmB,CAAC,IAAU;QAC1B,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QAC5B,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC;QACrF,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAC9B,IAAI,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACpC,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,EAAE;YACjB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;SACnB;QAED,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,EAAE;IAClC,CAAC;CACJ;AAtHD,gDAsHC;AAED,MAAa,YAAY;IA2ErB,UAAU;QACN,kBAAkB;QAClB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1D,iCAAiC;QACjC,IAAI,IAAI,CAAC,4BAA4B,IAAI,EAAE,IAAI,IAAI,CAAC,4BAA4B,IAAI,IAAI,EAAE;YACtF,IAAI,CAAC,6BAA6B,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;YACjF,IAAI,CAAC,6BAA6B,GAAG,+BAAU,EAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;SACvF;aACI;YACD,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC;YAC1C,IAAI,CAAC,6BAA6B,GAAG,EAAE,CAAC;SAC3C;QAED,kBAAkB;QAClB,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,EAAE;YACxD,IAAI,CAAC,cAAc,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnD,IAAI,CAAC,cAAc,GAAG,+BAAU,EAAC,IAAI,CAAC,cAAc,CAAC,CAAC;SACzD;aACI;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;YAC3B,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;SAC5B;QAED,sBAAsB;QACtB,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC1D,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,CAAC,eAAe,GAAG,+BAAU,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC3D;aACI;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;SAC7B;QAED,mBAAmB;QACnB,IAAI,IAAI,CAAC,cAAc,IAAI,EAAE,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC1D,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,CAAC,eAAe,GAAG,+BAAU,EAAC,IAAI,CAAC,eAAe,CAAC,CAAC;SAC3D;aACI;YACD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;SAC7B;QAED,mCAAmC;QACnC,IAAI,IAAI,CAAC,uBAAuB,IAAI,EAAE,IAAI,IAAI,CAAC,uBAAuB,IAAI,IAAI,EAAE;YAC5E,IAAI,CAAC,wBAAwB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;YACvE,IAAI,CAAC,wBAAwB,GAAG,+BAAU,EAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;SAC7E;aACI;YACD,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC;YACrC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC;SACtC;QAED,sBAAsB;QACtB,IAAI,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,iBAAiB,GAAG,uCAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SAC/D;aACI;YACD,IAAI,CAAC,iBAAiB,GAAG,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;SACtB;IAGL,CAAC;IAED,eAAe,CAAC,MAAc;QAC1B,IAAI,QAAQ,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE;YAC1C,KAAK,EAAE,UAAU;YACjB,QAAQ,EAAE,KAAK;SAClB,CAAC,CAAC;QAEH,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,SAAS,EAAE;YACvC,OAAO,EAAE;SACZ;aACI;YACD,OAAO,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAClC;IAEL,CAAC;CACJ;AA5JD,oCA4JC;AAED,MAAa,mBAAmB;IAc5B,UAAU;QACN,IAAI,CAAC,KAAK,GAAG,aAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE9C,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,mCAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,mCAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,mCAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,mCAAY,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAErD,IAAI,CAAC,sBAAsB,GAAG,6CAAsB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,6CAAsB,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;QACzI,IAAI,CAAC,iBAAiB,GAAG,qCAAc,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAExF,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3H,IAAI,CAAC,eAAe,GAAG,qCAAc,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QAElF,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;YACxB,IAAI,CAAC,oBAAoB,GAAG,6CAAsB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,MAAM,GAAG,6CAAsB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YACnI,IAAI,CAAC,eAAe,GAAG,qCAAc,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;SACrF;aACI;YAAE,IAAI,CAAC,oBAAoB,GAAG,aAAa,CAAC;YAAC,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;SAAE;IAElF,CAAC;IAED,kBAAkB,CAAC,MAAc;QAE7B,IAAI,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;aACxB,IAAI,MAAM,IAAI,MAAM,EAAE;YACvB,OAAO,GAAG,GAAG,mCAAY,EAAC,CAAC,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG;SACzD;aACI;YACD,OAAO,GAAG,GAAG,mCAAY,EAAC,MAAM,EAAC,CAAC,CAAC;SACtC;IACL,CAAC;CACJ;AA/CD,kDA+CC;;;;;;;;;;;;;;;;ACzeD,iFAAiD;AACjD,uJAAqH;AACrH,2GAAuE;AACvE,6HAAgG;AAChG,4IAAmH;AACnH,6HAAgG;AAChG,iGAAuI;AACvI,mIAAsG;AACtG,6FAAgE;AAChE,2DAAwC;AACxC,wFAAuD;AAEvD,6HAAyO;AAEzO,MAAa,kBAAkB;IAgB3B,YACI,YAAiB,EACjB,kBAAuB,EACvB,eAAoB,EACpB,qBAA0B,EAC1B,qBAA0B,EAC1B,wBAA6B;QAlBjC,kHAAkH;QAClH,uBAAkB,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAmBhG,CAAC,CAAC,GAAG,EAAE;YAEH,IAAI,8CAAkB,CAAC,eAAe,CAAC,CAAC;YAExC,IAAI,QAAQ,GAAe,yBAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxD,IAAI,cAAc,GAAwB,yBAAQ,CAAC,aAAa,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAEtF,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;YAC5D,IAAI,CAAC,qBAAqB,CAAC,cAAc,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,wBAAwB,CAAC,CAAC;YACnH,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,iCAAiC;YAEjC,IAAI,CAAC,mBAAmB,GAAG,IAAI,2CAAmB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxE,IAAI,CAAC,mBAAmB,GAAG,IAAI,2CAAmB,EAAE,CAAC;YACrD,IAAI,CAAC,4BAA4B,GAAG,IAAI,yDAA4B,CAAC,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAC;YAErH,IAAI,CAAC,qBAAqB,GAAG,IAAI,+CAAqB,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAElI,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAE9C,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;YACpC,4CAA4C;QAEhD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,UAAU,CAAC,cAAmB;QAC1B,IAAI,KAAK,GAAa,CAAC,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;QACrH,KAAK,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC;QAEhE,CAAC,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IACjC,CAAC;IAED,wBAAwB,CAAC,QAAoB,EAAE,kBAAuB;QAElE,IAAI,UAAU,GAAkC,IAAI,GAAG,EAA4B,CAAC;QAEpF,IAAI,eAAe,GAAa,SAAS,CAAC;QAE1C,IAAI,CAAC,cAAc,GAAG,oCAAY,EAAC,wCAAa,EAAmB,kBAAkB,CAAC,CAAC;QACvF,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAwB,EAAE,EAAE;YAEjD,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,eAAe,CAAC,CAAC;YAEjI,IAAI,eAAe,IAAI,SAAS,EAAE;gBAC9B,SAAS,CAAC,QAAQ,GAAG,eAAe,CAAC,QAAQ,CAAC;aACjD;iBACI;gBAAE,SAAS,CAAC,SAAS,GAAG,SAAS,CAAC;aAAE;YACzC,SAAS,CAAC,UAAU,EAAE,CAAC;YAEvB,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE;gBAEzD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;oBAC9C,4IAA4I;oBAC5I,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,EAAE,IAAI,2CAAgB,CAAC,SAAS,CAAC,eAAe,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,iBAAiB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,eAAe,CAAC,EAAE,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,SAAS,CAAC,aAAa,EAAE,SAAS,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;iBACvU;gBACD,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,wBAAwB,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;gBAEpK,kDAAkD;gBAClD,yDAAyD;gBACzD,IAAI,SAAS,CAAC,WAAW,IAAI,EAAE,IAAI,SAAS,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;oBACpE,4IAA4I;oBAC5I,IAAI,eAAe,IAAI,SAAS,EAAE;wBAC9B,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC,eAAe,GAAG,eAAe,CAAC,UAAU,CAAC;qBAC5F;iBACJ;aACJ;YAED,OAAO,SAAS,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,qBAAqB,CAAC,cAAmC,EAAE,qBAA0B,EAAE,qBAA0B,EAAE,wBAA6B;QAE5I,IAAI,CAAC,iBAAiB,GAAG,oCAAY,EAAC,4CAAiB,EAAuB,qBAAqB,CAAC,CAAC;QACrG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAElE,IAAI,CAAC,iBAAiB,GAAG,oCAAY,EAAC,2CAAgB,EAAsB,qBAAqB,CAAC,CAAC;QACnG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACtC,MAAM,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,CAAC,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oBAAoB,GAAG,oCAAY,EAAC,8CAAmB,EAAyB,wBAAwB,CAAC,CAAC;QAC/G,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAE7E,CAAC;IAED,iBAAiB;QAEb,qDAAqD;QACrD,mDAAmD;QACnD,gDAAsB,EAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;QAErD,kDAAwB,EAAC,0BAA0B,EAAE,4BAAM,EAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAwB,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACzJ,kDAAwB,EAAC,qBAAqB,EAAE,4BAAM,EAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAwB,EAAE,EAAE,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAChJ,kDAAwB,EAAC,qBAAqB,EAAE,4BAAM,EAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAwB,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC/I,kDAAwB,EAAC,uBAAuB,EAAE,4BAAM,EAAC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,SAAwB,EAAE,EAAE,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACtJ,8CAAoB,EAAC,uBAAuB,EAAE,CAAE,KAAK,CAAE,CAAC,CAAC;QACzD,oLAAoL;QAEpL,MAAM,OAAO,GAAG,mBAAM,EAAC,mBAAM,EAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YAC1F,OAAO;gBACH,EAAE,EAAE,OAAO,CAAC,QAAQ;gBACpB,IAAI,EAAC,6CAAoB,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC;aACxD;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8BAA8B,CAAC,kBAAkB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAG3E,CAAC;IAED,OAAO,CAAC,KAAa;QAEjB,6BAA6B;QAE7B,IAAI,KAAK,IAAI,qBAAqB,EAAE;YAChC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAE9B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACnG,CAAC,yBAAyB,EAAE,uBAAuB,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAChH;aACI,IAAI,KAAK,IAAI,qBAAqB,EAAE;YACrC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAE/B,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC1J;aACI,IAAI,KAAK,IAAI,qBAAqB,EAAE;YACrC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAE/B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9H,CAAC,uBAAuB,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SACrF;aACI,IAAI,KAAK,IAAI,uBAAuB,EAAE;YACvC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;YAE/B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrI,CAAC,gBAAgB,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;SAC9E;QAED,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,aAAa;QACT,kCAAkC;QAElC,IAAI,IAAI,CAAC,SAAS,IAAI,qBAAqB,EAAE;YACzC,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;SACrF;aACI,IAAI,IAAI,CAAC,SAAS,IAAI,qBAAqB,EAAE;YAC9C,IAAI,CAAC,mBAAmB,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,EAAE,mDAAyB,EAAC,0BAA0B,CAAC,CAAC,CAAC;SAC7M;aACI,IAAI,IAAI,CAAC,SAAS,IAAI,qBAAqB,EAAE;YAC9C,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC,IAAI,CAAC,+BAA+B,EAAE,CAAC,CAAC;SAC3F;aACI,IAAI,IAAI,CAAC,SAAS,IAAI,uBAAuB,EAAE;YAChD,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,mDAAyB,EAAC,0BAA0B,CAAC,EAAE,mDAAyB,EAAC,kBAAkB,CAAC,EAAE,mDAAyB,EAAC,uBAAuB,CAAC,CAAC,CAAC;SACtM;IACL,CAAC;IAED,oBAAoB,CAAC,IAAY;QAC7B,IAAI,YAAY,GAAoB,EAAE,CAAC;QACvC,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,SAAwB,EAAE,EAAE;YACrD,OAAO,GAAG,IAAI,CAAC,CAAC,wBAAwB;YAExC,IAAI,IAAI,IAAI,yBAAyB,EAAE;gBACnC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,mDAAyB,EAAC,0BAA0B,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,yCAAe,EAAC,uBAAuB,CAAC,EAAE,mDAAyB,EAAC,uBAAuB,CAAC,CAAC,EAAE;oBACrM,OAAO,GAAG,KAAK,CAAC;iBACnB;aACJ;iBACI,IAAI,IAAI,IAAI,6BAA6B,EAAE;gBAC5C,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,mDAAyB,EAAC,0BAA0B,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,mDAAyB,EAAC,uBAAuB,CAAC,CAAC,EAAE;oBACtK,OAAO,GAAG,KAAK,CAAC;iBACnB;aACJ;iBACI,IAAI,IAAI,IAAI,qBAAqB,EAAE;gBACpC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,mDAAyB,EAAC,0BAA0B,CAAC,EAAE,mDAAyB,EAAC,qBAAqB,CAAC,EAAE,mDAAyB,EAAC,qBAAqB,CAAC,EAAE,yCAAe,EAAC,uBAAuB,CAAC,EAAE,mDAAyB,EAAC,uBAAuB,CAAC,CAAC,EAAE;oBACnR,OAAO,GAAG,KAAK,CAAC;iBACnB;aACJ;YAED,IAAI,OAAO,EAAE;gBAAE,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,2DAA2D;aAAE;QAC9G,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,+BAA+B;QAC3B,IAAI,YAAY,GAAuB,EAAE,CAAC;QAC1C,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,IAAsB,EAAE,EAAE;YACrD,OAAO,GAAG,IAAI,CAAC,CAAC,wBAAwB;YAExC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,mDAAyB,EAAC,0BAA0B,CAAC,EAAE,mDAAyB,EAAC,uBAAuB,CAAC,EAAE,mDAAyB,EAAC,yBAAyB,CAAC,CAAC,EAAE;gBACtL,OAAO,GAAG,KAAK,CAAC;aACnB;YACD,IAAI,OAAO,EAAE;gBAAE,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAAE;QAC7C,CAAC,CAAC,CAAC;QACH,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,gBAAgB;IAChB,8BAA8B,CAAC,QAAgB,EAAE,MAAa,EAAE,WAAoB,EAAE,iBAAwB,SAAS,EAAE,WAAoB,IAAI;QAC7I,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;YACrB,UAAU,EAAE,KAAK;YACjB,kBAAkB,EAAE,OAAO;YAE3B,iBAAiB,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE;gBACzC,IAAI,WAAW,IAAI,QAAQ,EAAE;oBACzB,OAAO,KAAK,CAAC;iBAChB;qBACI;oBACD,OAAO,WAAW,GAAG,WAAW,CAAC;iBACpC;YACL,CAAC;SACJ,CAAC,CAAC;QAEH,MAAM,CAAC,OAAO,CAAC,CAAC,OAAY,EAAE,EAAE;YAC5B,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC9E,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEpC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE;YAC/E,WAAW,CAAC,aAAa,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,YAAY;QAER,8CAAoB,EAAC,CAAC,0BAA0B,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,kBAAkB,CAAC,CAAC,CAAC;QACzK,8CAAoB,EAAC,uBAAuB,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;QAEvD,0CAAgB,EAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAE5C,IAAI,CAAC,mBAAmB,CAAC,cAAc,EAAE,CAAC;IAC9C,CAAC;IAED,kBAAkB,CAAC,YAAqB;QACpC,IAAI,YAAY,EAAE;YAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,CAAC;SAAE;aACnD;YAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,CAAC;SAAE;IAC/C,CAAC;IAED,yBAAyB,CAAC,SAAiB;QACvC,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,aAAa;QACT,CAAC,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAGD,oBAAoB,CAAC,EAAO,EAAE,IAAY;QACtC,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC;IAED,kBAAkB,CAAC,MAAc,EAAE,OAAe,EAAE,QAAgB;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,EAAE,EAAC,EAAE,EAAC,OAAO,EAAC,OAAO,EAAC,OAAO,EAAC,WAAW,EAAC,UAAU,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5L,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC;QAC5D,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;IAChF,CAAC;CACJ;AArSD,gDAqSC;;;;;;;;;;;;;;;;;ACnTD,qHAAoH;AAEpH,qGAAwE;AACxE,qGAAiE;AAEjE,uHAA4H;AAG5H,MAAa,oBAAoB;IAU7B,YAAY,QAAgB,EAAE,uBAAgC,EAAE,sBAA+B,EAAE,eAAwB;QAHzH,4BAAuB,GAAY,IAAI,CAAC,CAAC,SAAS;QAI9C,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,qBAAqB,GAAG,uBAAuB,CAAC;QACrD,IAAI,CAAC,oBAAoB,GAAG,sBAAsB,CAAC;QACnD,IAAI,CAAC,aAAa,GAAG,eAAe,CAAC;QAErC,oFAAoF;QACpF,oEAAoE;QAEpE,kCAAkC;QAElC,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,iBAAiB;QACb,kDAAwB,EAAC,oBAAoB,EAAE,4BAAM,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QACtH,kDAAwB,EAAC,kBAAkB,EAAE,4BAAM,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAE9G,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,kDAAwB,EAAC,0BAA0B,EAAE,4BAAM,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;SACvI;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,kDAAwB,EAAC,yBAAyB,EAAE,4BAAM,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;SACrI;QACD,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,kDAAwB,EAAC,iBAAiB,EAAE,4BAAM,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;SACnH;QAED,kDAAwB,EAAC,wBAAwB,EAAE,4BAAM,EAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAU,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IACxI,CAAC;IAED,eAAe;QAEX,IAAI,YAAY,GAAW,CAAC,CAAC;QAC7B,IAAI,UAAU,GAAW,EAAE,CAAC;QAC5B,IAAI,OAAO,GAAU;YACjB,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,uCAAuC,EAAE,KAAK,EAAE,OAAO,EAAE;YAC/G,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,uBAAuB,EAAE,KAAK,EAAE,OAAO,EAAE;YAC/G,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,sCAAsC,EAAE;YAC7F,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,qCAAqC,EAAE;YACrF,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,+CAA+C,EAAE;YAC3H,EAAE,IAAI,EAAE,qBAAqB,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,+CAA+C,EAAE;YACzH,0JAA0J;YAC1J,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,wBAAwB,EAAE,SAAS,EAAE,qCAAqC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,+BAAa,EAAE;YACrJ,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,mCAAmC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,+BAAa,EAAE;YACjJ,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,mCAAmC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,+BAAa,EAAE;YAC/I,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,2BAA2B,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,iDAAiD,EAAE,SAAS,EAAE,kCAAkC,EAAE;YACjL,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gCAAgC,EAAE,KAAK,EAAE,OAAO,EAAE;YACpI,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,6BAA6B,EAAE;YACrH,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,uCAAuC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,+BAAa,EAAE;YAC3I,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,yCAAyC,EAAE,SAAS,EAAE,6BAA6B,EAAE;YACjJ,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE;SAC5D,CAAC;QAEF,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,YAAY,GAAG,CAAC,CAAC;YACjB,UAAU,GAAG,EAAE,CAAC;YAChB,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,uCAAuC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;SAC7H;QAED,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,SAAS,CAAC;YACzC,KAAK,EAAE,gFAAgF;YACvF,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM;YACf,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE;gBACV,WAAW,EAAE,YAAY;aAC5B;YACD,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACL;oBACI,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,sCAAsC;oBAC5C,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,OAAO;oBAChB,kBAAkB;oBAClB,2BAA2B;oBAC3B,GAAG;iBACN;aACJ;YACD,KAAK,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,KAAK;SACnB,CAAC,CAAC;QAEH,CAAC,CAAC,eAAe,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAExC,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QACrD,CAAC,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAEnE,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAE7C,CAAC,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAAC,CAAC;QAC3C,CAAC,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,2FAA2F,CAAC,CAAC;QACxH,yEAAyE;QACzE,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,iHAAiH,CAAC,CAAC;QAC7I,CAAC,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC;QAEvG,IAAI,CAAC,qBAAqB,GAAG,IAAI,yDAA+B,CAAC,aAAa,EAAE,eAAe,EAAE;YAC7F,IAAI,0CAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC;YACpD,IAAI,0CAAgB,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,CAAC;YAClD,IAAI,0CAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,gBAAgB,CAAC;YAC9D,IAAI,0CAAgB,CAAC,YAAY,EAAE,KAAK,EAAE,EAAE,EAAE,aAAa,CAAC;YAC5D,IAAI,0CAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC;YACxD,IAAI,0CAAgB,CAAC,qBAAqB,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,CAAC;YACpE,IAAI,0CAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC;YACtD,IAAI,0CAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;YACjD,IAAI,0CAAgB,CAAC,eAAe,EAAE,IAAI,EAAE,EAAE,EAAE,eAAe,CAAC;YAChE,IAAI,0CAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;SACzD,CAAC,CAAC;QAEH,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;YAC9C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB,CAAC,KAAa;QAE5B,QAAQ,KAAK,EAAE;YACX,KAAK,CAAC;gBAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAAC,MAAM;YAC9D,KAAK,CAAC;gBAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAAC,MAAM;YAC5D,OAAO,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC;SACjE;IACL,CAAC;IAED,OAAO;QAEH,CAAC,oBAAoB,EAAE,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;QAClG,IAAI,IAAI,CAAC,qBAAqB,EAAE;YAC5B,CAAC,CAAC,0BAA0B,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;SACzD;QACD,IAAI,IAAI,CAAC,oBAAoB,EAAE;YAC3B,CAAC,CAAC,yBAAyB,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;SACxD;QAED,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,aAAa;QAET,IAAI,aAAa,GAAW,EAAE,CAAC;QAE/B,IAAI,WAAoB,CAAC;QACzB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAU,EAAE,EAAE;YAE9B,WAAW,GAAG,IAAI,CAAC,CAAC,wBAAwB;YAE5C,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,mDAAyB,EAAC,oBAAoB,CAAC,EAAE,mDAAyB,EAAC,kBAAkB,CAAC,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,mDAAyB,EAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,mDAAyB,EAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,mDAAyB,EAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE;gBACzZ,WAAW,GAAG,KAAK,CAAC;aACvB;YAED,IAAI,WAAW,EAAE;gBAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAAE;QAClD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACpC,CAAC;IAED,WAAW,CAAC,aAAqB;QAE7B,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;CACJ;AApLD,oDAoLC;;;;;;;;;;;;;;;;;ACzLD,MAAa,oBAAoB;IAsB7B,YAAY,KAAa,EAAE,QAAgB,EAAE,IAAY,EAAE,UAAkB,EAAE,KAAa;QAb5F,cAAS,GAAa,EAAE,CAAC;QACzB,YAAO,GAAa,EAAE,CAAC;QACvB,YAAO,GAAa,EAAE,CAAC;QACvB,cAAS,GAAa,EAAE,CAAC;QAGzB,oBAAe,GAAiB,EAAE,CAAC;QACnC,kBAAa,GAAiB,EAAE,CAAC;QACjC,kBAAa,GAAiB,EAAE,CAAC;QACjC,oBAAe,GAAiB,EAAE,CAAC;QAK/B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QAEnB,IAAI,CAAC,eAAe,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;QACxB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,CAAC;IAED,aAAa,CAAC,KAAiB;QAC3B,IAAI,CAAC,eAAe,IAAI,CAAC,CAAC;QAE1B,QAAQ,KAAK,CAAC,aAAa,EAAE;YACzB,KAAK,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAC,MAAM;YAC9J,8FAA8F;YAC9F,KAAK,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAC,MAAM;YACtJ,KAAK,CAAC;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAC,MAAM;YACtJ,KAAK,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,IAAI,CAAC,cAAc,IAAI,CAAC,CAAC;gBAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAAC,MAAM;YAC9J,KAAK,CAAC,CAAC;YACP,KAAK,CAAC;gBACF,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC;gBAAC,MAAM;SACxF;IACL,CAAC;IAED,UAAU;QACN,IAAI,IAAI,CAAC,cAAc,GAAG,CAAC,EAAE;YACzB,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;aAAE;YACtG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;aAAE;YAChG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;aAAE;YAChG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC;aAAE;SACzG;IACL,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,YAAoB,EAAE,UAAkB;QACpD,IAAI,YAAY,IAAI,SAAS,EAAE;YAAE,YAAY,GAAG,CAAC,CAAC;SAAE;QACpD,YAAY,IAAI,UAAU,CAAC;QAC3B,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,QAAgB,EAAE,KAAiB;QAC9C,IAAI,QAAQ,IAAI,MAAM,EAAE;YAAE,OAAO,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;SAAE;aACpH,IAAI,QAAQ,IAAI,UAAU,EAAE;YAAE,OAAO,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;SAAE;aACpG,IAAI,QAAQ,IAAI,SAAS,EAAE;YAAE,OAAO,KAAK,CAAC,OAAO,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;SAAE;;YACtG,OAAO,SAAS,CAAC;IAC1B,CAAC;CACJ;AAtED,oDAsEC;;;;;;;;;;;;;;;;ACzED,iFAAiD;AACjD,yFAA6E;AAC7E,2GAAgE;AAEhE,MAAa,kBAAkB;IAC3B,YAAY,QAAa,EAAE,WAAoB,IAAI,EAAE,eAAwB,IAAI,EAAE,iBAA0B,IAAI;QAE7G,CAAC,CAAC,GAAG,EAAE;YAEH,IAAI,cAAc,GAAoB,oCAAY,EAAC,6CAAa,EAAmB,QAAQ,CAAC,CAAC;YAE7F,cAAc,CAAC,OAAO,CAAC,CAAC,IAAmB,EAAE,EAAE;gBAC3C,IAAI,IAAI,GAAS,sCAAiB,EAAC,IAAI,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;gBAC1E,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,QAAQ,EAAE;oBAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,IAAI,CAAC,+BAAU,EAAC,IAAI,CAAC,CAAC,CAAC;iBAAE;qBACvF,IAAI,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,YAAY,EAAE;oBAAE,CAAC,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,+BAAU,EAAC,IAAI,CAAC,CAAC,CAAC;iBAAE;qBACxG,IAAI,IAAI,CAAC,IAAI,IAAI,YAAY,IAAI,cAAc,EAAE;oBAAE,CAAC,CAAC,8BAA8B,CAAC,CAAC,IAAI,CAAC,+BAAU,EAAC,IAAI,CAAC,CAAC,CAAC;iBAAE;YACvH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ;gBAAE,CAAC,CAAC,uBAAuB,CAAC,CAAC,IAAI,EAAE,CAAC;YACjD,IAAI,CAAC,YAAY;gBAAE,CAAC,CAAC,2BAA2B,CAAC,CAAC,IAAI,EAAE,CAAC;YACzD,IAAI,CAAC,cAAc;gBAAE,CAAC,CAAC,6BAA6B,CAAC,CAAC,IAAI,EAAE,CAAC;YAE7D,CAAC,CAAC,uBAAuB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAExD,CAAC,CAAC,CAAC;IAEP,CAAC;CACJ;AAvBD,gDAuBC;;;;;;;;;;;;;;;;;;;;AC3BD,oFAAoC;AAGpC,SAAgB,0BAA0B,CAAC,KAAa,EAAE,WAAmB;IACzE,IAAI,KAAK,GAAa,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,MAAM,GAAW,6BAA6B,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;QACnC,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QACzB,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;YACxB,MAAM,IAAI,SAAS,CAAC;SACvB;KACJ;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;QAAE,MAAM,IAAI,SAAS,CAAC;KAAE;IAC9D,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACzB,CAAC;AAZD,gEAYC;AAGD,SAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IAEnD,yBAAyB;IACzB,IAAI,MAAc,CAAC;IACnB,IAAI,IAAI,KAAK,SAAS,EAAE;QAAE,MAAM,GAAG,IAAI,CAAC;KAAE;SACrC,IAAI,IAAI,IAAI,IAAI,EAAE;QAAE,MAAM,GAAG,EAAE;KAAE;SACjC;QACD,MAAM,GAAG,iFAAiF,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,oFAAoF,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,eAAe;KAC5P;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAVD,8CAUC;AAED,SAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IACrD,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;IAE/C,IAAI,MAAc,CAAC;IACnB,IAAI,IAAI,KAAK,SAAS,EAAE;QAAE,MAAM,GAAG,IAAI,CAAC;KAAE;SACrC;QACD,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,GAAG;KAC1C;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AATD,kDASC;AAED,SAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IACtD,IAAI,IAAI,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;;QACrB,OAAO,IAAI,CAAC;AACrB,CAAC;AAHD,oDAGC;AACD,SAAgB,oCAAoC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG;IAChE,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;;QAC1C,OAAgB,IAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC1C,CAAC;AAHD,oFAGC;AAED,SAAgB,qCAAqC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG;IACjE,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;;QAC1C,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACnC,CAAC;AAHD,sFAGC;AAED,SAAgB,kCAAkC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IACpE,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;;QAC1C,OAAO,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAHD,gFAGC;AAED,SAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IACtD,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;;QAC5B,OAAO,IAAI,CAAC;AACrB,CAAC;AAHD,oDAGC;AAED,SAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IAE5C,IAAI,IAAI,IAAI,SAAS,EAAE;QACnB,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;aAClC,IAAI,IAAI,IAAI,CAAC;YAAE,OAAO,OAAO,CAAC;;YAC9B,OAAO,IAAI,GAAG,OAAO,CAAC;KAC9B;;QACI,OAAO,IAAI,CAAC;AACrB,CAAC;AARD,gCAQC;AACD,SAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IAE/C,yCAAyC;IAEzC,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;IAEjC,IAAI,UAAU,GAAW,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAEhC,IAAI,SAAS,GAAW,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAE/B,IAAI,IAAI,GAAS,SAAS,CAAC;IAC3B,IAAI;QACA,IAAI,KAAK,GAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,sDAAsD;QACtD,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;KAC/G;IACD,OAAO,KAAK,EAAE;QACV,IAAI,GAAG,SAAS,CAAC;KACpB;IAED,IAAI,IAAI,IAAI,MAAM,EAAE;QAChB,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;;YACxC,OAAO,CAAC,CAAC,CAAC;KAClB;SACI;QACD,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,6BAA6B,GAAG,wBAAU,EAAC,IAAI,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC;;YACrG,OAAO,EAAE,CAAC;KAClB;AACL,CAAC;AA9BD,sCA8BC;AAED,SAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI;IAE/C,IAAI,IAAI,IAAI,SAAS;QAAE,OAAO,EAAE,CAAC;IAEjC,IAAI,UAAU,GAAW,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7C,IAAI,UAAU,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAEhC,IAAI,SAAS,GAAW,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACrD,IAAI,SAAS,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAE/B,IAAI,IAAI,GAAS,SAAS,CAAC;IAC3B,IAAI;QACA,IAAI,KAAK,GAAa,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,sDAAsD;QACtD,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;KAC/G;IACD,OAAO,KAAK,EAAE;QACV,IAAI,GAAG,SAAS,CAAC;KACpB;IAED,IAAI,IAAI,IAAI,MAAM,EAAE;QAChB,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;;YACxC,OAAO,CAAC,CAAC,CAAC;KAClB;SACI;QACD,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,6BAA6B,GAAG,wBAAU,EAAC,IAAI,EAAE,aAAa,CAAC,GAAG,SAAS,CAAC;;YACrG,OAAO,EAAE,CAAC;KAClB;AACL,CAAC;AA5BD,sCA4BC;AAED,SAAgB,aAAa,CAAC,IAAS;IAEnC,IAAI,IAAI,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAE7D,yBAAyB;IACzB,IAAI,UAAU,GAAmB,IAAI,CAAC;IACtC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;QAAE,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;KAAE;IAE5G,OAAO,UAAU,CAAC;AACtB,CAAC;AATD,sCASC;AAED,SAAgB,gBAAgB,CAAC,IAAY;IACzC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;KAAE;SACvC,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAE,GAAG,CAAC,EAAE;QAAE,OAAO,GAAG,CAAC;KAAE;;QAC3C,OAAO,EAAE,CAAC;AACnB,CAAC;AAJD,4CAIC;AAED,SAAgB,YAAY,CAAC,OAAe;IACxC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,CAAC;IACjC,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IAC9B,CAAC,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;AAClC,CAAC;AAND,oCAMC;;;;;;;;;;;;;;;;;AC9JD,2FAAoD;AACpD,yFAAkD;AAClD,mFAAuD;AAEvD,uHAAiG;AACjG,yFAAkD;AAClD,wGAA8E;AAK9E,MAAa,eAAe;IAQxB,YAAY,MAA2B;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,iCAAS,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,+BAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,+BAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,UAAU;QAEN,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,oBAAoB,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,QAAQ,EAAE;YAEnM,IAAI,UAAsB,CAAC;YAE3B,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,SAAS,EAAE;gBAAE,UAAU,GAAG,IAAI,CAAC,sBAAsB,EAAE,CAAC;aAAE;iBAC5F;gBAAE,UAAU,GAAG,IAAI,CAAC,0BAA0B,EAAE,CAAC;aAAE;YAExD,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,YAAY,EAAE;gBAC/C,IAAI,UAAU,CAAC,gBAAgB,EAAE;oBAAE,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC;iBAAE;gBACvG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;gBACvC,2CAA2C;aAC9C;iBACI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;aAAE;iBAC1F,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,QAAQ,EAAE;gBAChD,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,YAAY,EAAE;oBAAE,UAAU,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;iBAAE;gBAC/H,UAAU,CAAC,YAAY,GAAG,KAAK,CAAC;gBAChC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;aACnF;iBACI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,oBAAoB,EAAE;gBAC5D,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC;gBAClE,2FAA2F;gBAC3F,sBAAsB;aACzB;SACJ;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,cAAc,EAAE;YACtD,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,kBAAkB,EAAE;gBACrD,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;aACnD;iBACI,EAAE,uBAAuB;gBAC1B,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;aAC3C;SACJ;IAEL,CAAC;IAEO,sBAAsB;QAE1B,IAAI,MAAM,GAAkB,EAAE,CAAC;QAC/B,IAAI,OAAO,GAAa,IAAI,CAAC,UAAU,EAAE,CAAC;QAE1C,IAAI,eAAe,GAAY,KAAK,CAAC;QACrC,IAAI,gBAAgB,GAAY,KAAK,CAAC;QACtC,IAAI,UAAU,GAAY,IAAI,CAAC;QAE/B,IAAI,WAAW,GAAW,CAAC,CAAC;QAC5B,OAAO,CAAC,OAAO,CAAC,CAAC,CAAS,EAAE,EAAE;YAC1B,IAAI,aAAa,GAAgB,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;YAC1E,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,kBAAkB,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;aAAE;iBACpI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,gBAAgB,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;iBACxL,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,MAAM,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;iBACvK,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,WAAW,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;iBAChL,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,uBAAuB,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;iBAClM,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,KAAK,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;iBACrK,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,KAAK,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;iBACrK,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,8BAA8B,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;iBACpM,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,+BAA+B,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;iBACtM,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,kCAAkC,EAAE;gBAAE,aAAa,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,CAAC,CAAC;aAAE;YAE/M,IAAI,aAAa,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;gBAAE,gBAAgB,GAAG,IAAI,CAAC;aAAE;YACjE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,kBAAkB,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;YAC1G,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;YAC9C,eAAe,GAAG,IAAI,CAAC;SAC1B;QAED,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACjF,CAAC;IAEO,0BAA0B;QAE9B,IAAI,MAAM,GAAkB,EAAE,CAAC;QAC/B,IAAI,eAAe,GAAY,KAAK,CAAC;QACrC,IAAI,gBAAgB,GAAY,KAAK,CAAC;QACtC,IAAI,UAAU,GAAY,IAAI,CAAC;QAE/B,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,SAAS,EAAE;YAC9C,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAQ,EAAE,EAAE;gBACxC,IAAI,WAAW,GAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAC9E,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC1B,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAChD,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxH,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC7B,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;wBAAE,gBAAgB,GAAG,IAAI,CAAC;qBAAE;oBAC/D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;iBAC5B;YACL,CAAC,CAAC,CAAC;YAEH,wBAAwB;YACxB,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;aACjD;SACJ;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,YAAY,EAAE;YACtD,IAAI,WAAW,GAAe,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACxD,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;gBAC5B,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;aACvE;YACD,WAAW,CAAC,OAAO,CAAC,CAAC,CAAW,EAAE,EAAE;gBAChC,oGAAoG;gBAEpG,IAAI,cAAc,GAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBACjF,cAAc,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;gBAC7B,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACnD,cAAc,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC9H,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBAChC,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;wBAAE,gBAAgB,GAAG,IAAI,CAAC;qBAAE;oBAClE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;iBAC/B;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,IAAI,CAAC,MAAM,CAAC,0BAA0B,CAAC,MAAM,GAAG,CAAC,EAAE;gBACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;aACjD;SACJ;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,QAAQ,EAAE;YAClD,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAO,EAAE,EAAE;gBAC3C,IAAI,UAAU,GAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAC7E,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC;gBACzB,UAAU,CAAC,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBAC1H,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5B,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE;wBAAE,gBAAgB,GAAG,IAAI,CAAC;qBAAE;oBAC9D,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC3B;YACL,CAAC,CAAC,CAAC;YACH,UAAU,GAAG,KAAK,CAAC;SACtB;QAED,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;IACjF,CAAC;IAGO,UAAU;QACd,QAAQ,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE;YACnC,KAAK,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,iCAAiC;YACtE,KAAK,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxC,KAAK,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7C,KAAK,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,KAAK,uBAAuB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACnC,qCAAqC;YACrC,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAChC,KAAK,8BAA8B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtD,KAAK,+BAA+B,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACvD,KAAK,kCAAkC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;SACtB;IACL,CAAC;IAEO,iBAAiB,CAAC,KAAa,EAAE,WAAmB;QAExD,IAAI,MAAM,GAAgB,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACzE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG;YACZ,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,MAAM,CAAC,KAAK;SAC1B,CAAC;QAEF,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,kBAAkB,EAAE;YACrD,IAAI,KAAK,IAAI,CAAC,EAAE,EAAE,QAAQ;gBACtB,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;gBACvB,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,mBAAmB;aAChD;iBACI,IAAI,KAAK,IAAI,CAAC,EAAE;gBACjB,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;gBACzB,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,CAAC,SAAS;gBACnC,MAAM,CAAC,SAAS,GAAG,KAAK,CAAC;gBACzB,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC;gBACzB,MAAM,CAAC,cAAc,GAAG,CAAC,CAAC;gBAC1B,MAAM,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;gBAChD,OAAO,MAAM,CAAC;aACjB;SACJ;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,gBAAgB,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,uBAAuB,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,8BAA8B,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,+BAA+B,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,kCAAkC,EAAE;YAClX,MAAM,CAAC,IAAI,GAAG,oCAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,WAAW,IAAI,MAAM,CAAC,IAAI,IAAI,SAAS,EAAE;gBAC1E,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC;aACtE;YACD,QAAQ,KAAK,EAAE;gBACX,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;aAC3C;YAAA,CAAC;SACL;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,KAAK,EAAE;YAC7C,MAAM,CAAC,IAAI,GAAG,oCAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7C,QAAQ,KAAK,EAAE;gBACX,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;aAC3C;YAAA,CAAC;SACL;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,KAAK,EAAE;YAC7C,MAAM,CAAC,IAAI,GAAG,oCAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAClD,QAAQ,KAAK,EAAE;gBACX,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,0CAA0C;gBAC1C,0CAA0C;aAC7C;YAAA,CAAC;SACL;aACI,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,MAAM,EAAE;YAC9C,MAAM,CAAC,IAAI,GAAG,oCAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC9C,QAAQ,KAAK,EAAE;gBACX,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;gBACxC,KAAK,CAAC;oBAAE,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC;oBAAC,MAAM;aAC3C;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,cAAc,CAAC,KAAa;QAChC,IAAI,KAAK,IAAI,OAAO,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aACtC,IAAI,KAAK,IAAI,OAAO,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aAC3C,IAAI,KAAK,IAAI,WAAW,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aAC/C,IAAI,KAAK,IAAI,OAAO,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aAC3C,IAAI,KAAK,IAAI,UAAU,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aAC9C,IAAI,KAAK,IAAI,oBAAoB,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aACxD,IAAI,KAAK,IAAI,0BAA0B,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aAC9D,IAAI,KAAK,IAAI,oBAAoB,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aACxD,IAAI,KAAK,IAAI,0BAA0B,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aAC9D,IAAI,KAAK,IAAI,kCAAkC,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aACtE,IAAI,KAAK,IAAI,2BAA2B,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aAC/D,IAAI,KAAK,IAAI,oCAAoC,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aACxE,IAAI,KAAK,IAAI,gCAAgC,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE;aACpE,IAAI,KAAK,IAAI,kBAAkB,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE,CAAC,MAAM;aAC7D,IAAI,KAAK,IAAI,kBAAkB,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE,CAAC,QAAQ;aAC/D,IAAI,KAAK,IAAI,sBAAsB,EAAE;YAAE,OAAO,SAAS,CAAC;SAAE,CAAC,MAAM;;YACjE,OAAO,OAAO,CAAC;IACxB,CAAC;IAEO,eAAe,CAAC,YAA2B;QAE/C,IAAI,IAAI,GAAqB,EAAE,CAAC;QAEhC,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1C,4BAA4B;QAE5B,IAAI,kBAAkB,GAA0B,IAAI,GAAG,EAAoB,CAAC,CAAC,mEAAmE;QAEhJ,YAAY,CAAC,OAAO,CAAC,CAAC,CAAc,EAAE,EAAE;YACpC,IAAI,WAAW,GAAa,EAAE,CAAC;YAC/B,IAAI,KAAK,GAAW,CAAC,CAAC;YACtB,IAAI,cAAc,GAAW,CAAC,CAAC;YAE/B,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,YAAY,EAAE;gBAChD,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC5H,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,QAAQ,EAAE;oBAC3C,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;iBAC/C;aACJ;iBACI,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,IAAI,eAAe,EAAE;gBACzG,cAAc,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC1H,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,QAAQ,EAAE;oBAC3C,cAAc,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;iBAC9C;aACJ;YAED,IAAI,cAAc,GAAG,CAAC,EAAE;gBACpB,IAAI,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;oBACxC,WAAW,GAAG,kBAAkB,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;iBACxD;gBACD,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,SAAS;oBAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC5B,kBAAkB,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;aACvD;QACL,CAAC,CAAC,CAAC;QAEH,yCAAyC;QACzC,IAAI,QAAQ,GAAW,CAAC,CAAC,CAAC;QAC1B,IAAI,WAAW,GAAW,CAAC,CAAC;QAC5B,kBAAkB,CAAC,OAAO,CAAC,CAAC,WAAqB,EAAE,IAAY,EAAE,EAAE;YAC/D,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,YAAY,EAAE;gBAAE,WAAW,IAAI,sCAAgB,EAAC,WAAW,CAAC,CAAC;aAAE;iBAC/F,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,SAAS,EAAE;gBAAE,WAAW,GAAG,sCAAgB,EAAC,WAAW,CAAC,CAAC;aAAE;iBAChG,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,QAAQ,EAAE;gBAAE,WAAW,GAAG,sCAAgB,EAAC,WAAW,CAAC,CAAC;aAAE;iBAC/F,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,oBAAoB,EAAE;gBAC5D,WAAW,GAAG,CAAC,CAAC;gBAChB,CAAC,GAAG,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;oBACtD,IAAI,KAAK,IAAI,SAAS,EAAE;wBACpB,IAAI,cAAc,GAAW,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,CAAC;wBAC9F,wHAAwH;wBACxH,WAAW,IAAI,KAAK,GAAG,cAAc,CAAC;qBACzC;oBACD,2BAA2B;gBAC/B,CAAC,CAAC,CAAC;aACN;YAED,IAAI,IAAI,IAAI,QAAQ,EAAE;gBAClB,uBAAuB;gBACvB,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;gBACjD,GAAG;gBACH,QAAQ,GAAG,IAAI,CAAC;aACnB;QACL,CAAC,CAAC,CAAC;QAEH,oBAAoB;QAEpB,OAAO,IAAI,CAAC;IAChB,CAAC;IAEO,yBAAyB;QAC7B,IAAI,cAAc,GAAgB,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAE/D,IAAI,YAAY,GAAY,CAAC,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,YAAY,CAAC,CAAC;QAE5E,sDAAsD;QAEtD,cAAc,CAAC,IAAI,GAAG,gDAAuB,EAAC,IAAI,CAAC,MAAM,CAAC,0BAA0B,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAa,EAAE,EAAE;YAC1H,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,SAAS,EAAE;gBAAE,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAAE;iBAChJ,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,oBAAoB,EAAE;gBAAE,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aAAE;QACxH,CAAC,CAAC,CAAC;QAEH,OAAO,cAAc,CAAC;IAC1B,CAAC;CACJ;AAvVD,0CAuVC;AAED,MAAa,UAAU;IACnB,YAAmB,MAAqB,EAAS,YAAqB,EAAS,gBAAyB,EAAS,UAAmB;QAAjH,WAAM,GAAN,MAAM,CAAe;QAAS,iBAAY,GAAZ,YAAY,CAAS;QAAS,qBAAgB,GAAhB,gBAAgB,CAAS;QAAS,eAAU,GAAV,UAAU,CAAS;IAAI,CAAC;CAC5I;AAFD,gCAEC;AAED,MAAa,WAAW;IAYpB,YAAY,YAAoB,YAAY;QAV5C,SAAI,GAAW,MAAM,CAAC;QAItB,SAAI,GAAW,MAAM,CAAC;QAGtB,cAAS,GAAW,OAAO,CAAC;QAC5B,mBAAc,GAAW,CAAC,CAAC;QAGvB,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,IAAI,oBAAoB,IAAI,SAAS,IAAI,QAAQ,EAAE;YACtF,OAAO,IAAI,CAAC,IAAI,CAAC;YACjB,OAAO,IAAI,CAAC,IAAI,CAAC;YACjB,OAAO,IAAI,CAAC,MAAM,CAAC;SACtB;IACL,CAAC;CACJ;AAnBD,kCAmBC;AAED,MAAa,cAAc;IAIvB,YAAY,CAAS,EAAE,CAAS;QAC5B,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACf,CAAC;CACJ;AARD,wCAQC;;;;;;;;;;;;;;;;ACpYD,MAAa,KAAK;IAId,YAAY,EAAU,EAAE,IAAY,IAAI,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;IAEzE,MAAM,CAAC,YAAY,CAAC,EAAU;QAC1B,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,gBAAgB,CAAC;YAClC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC;YAC7B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC;YAC5B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;SAC7B;IACL,CAAC;IAED,gEAAgE;IAChE,MAAM,CAAC,UAAU,CAAC,IAAa;QAC3B,IAAI,CAAC,IAAI,CAAC,CAAC,CAAQ,EAAE,CAAQ,EAAE,EAAE;YAC7B,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;gBAAE,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aAAE;iBAC/D,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;gBAAE,OAAO,CAAC,CAAC;aAAE;iBACzC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAC;aAAE;;gBAC1C,OAAO,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,WAAqB;QACzC,IAAI,aAAa,GAAa,EAAE,CAAC;QAEjC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAAE,CAAC,QAAQ;QAChE,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAAE,CAAC,OAAO;QAC/D,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAAE,CAAC,OAAO;QAC1F,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAAE,CAAC,MAAM;QACzF,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SAAE,CAAC,UAAU;QAE/F,OAAO,aAAa,CAAC;IACzB,CAAC;CACJ;AAvCD,sBAuCC;;;;;;;;;;;;ACzCD,uC;;;;;;;;;;;ACAA,uC;;;;;;;;;;;;;;;ACMA,SAAgB,wBAAwB,CAAC,QAAgB,EAAE,MAAgB,EAAE,WAAoB,EAAE,iBAAwB,SAAS,EAAE,WAAoB,IAAI,EAAE,aAAqB,SAAS;IAC1L,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC;QACrB,UAAU,EAAE,KAAK;QACjB,kBAAkB,EAAE,OAAO;QAE3B,iBAAiB,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE;YACzC,IAAI,WAAW,IAAI,QAAQ,EAAE;gBACzB,OAAO,KAAK,CAAC;aAChB;iBACI;gBACD,OAAO,WAAW,GAAG,WAAW,CAAC;aACpC;QACL,CAAC;KACJ,CAAC,CAAC;IAEH,IAAI,cAAc,IAAI,SAAS,EAAE;QAC7B,MAAM,CAAC,OAAO,CAAC,CAAC,OAAY,EAAE,EAAE;YAC5B,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;KACN;SACI;QACD,sDAAsD;QACtD,qFAAqF;QACrF,KAAK;KACR;IAED,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAEpC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,EAAE;QAC/E,WAAW,CAAC,aAAa,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC;AA/BD,4DA+BC;AAED,SAAgB,yBAAyB,CAAC,QAAgB;IACtD,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;AAC7B,CAAC;AAFD,8DAEC;AAED,SAAgB,sBAAsB,CAAC,UAAkB,EAAE,WAAoB;IAC3E,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,UAAU,CAAC;QAC3B,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,IAAI;QACd,SAAS,EAAE,IAAI;QACf,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,aAAa;KAC7B,CAAC,CAAC;IAEH,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE;QAClD,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAC7C,WAAW,CAAC,aAAa,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;IAEH,CAAC,CAAC,GAAG,GAAG,UAAU,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;QACnD,WAAW,CAAC,aAAa,EAAE,CAAC;IAChC,CAAC,CAAC,CAAC;AACP,CAAC;AAjBD,wDAiBC;AAED,SAAgB,eAAe,CAAC,UAAkB;IAC9C,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;AAC/C,CAAC;AAFD,0CAEC;AAED,SAAgB,oBAAoB,CAAC,UAAoB;IACrD,UAAU,CAAC,OAAO,CAAC,CAAC,UAAkB,EAAE,EAAE;QACtC,CAAC,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;AACP,CAAC;AALD,oDAKC;AAED,SAAgB,gBAAgB,CAAC,UAAoB;IACjD,UAAU,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE;QACpC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACP,CAAC;AAJD,4CAIC;AAED,SAAgB,oBAAoB,CAAC,QAAgB,EAAE,MAAgB;IACnE,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAFD,oDAEC;;;;;;;;;;;;;;;;;ACjFD,MAAa,cAAc;IAEvB,MAAM,CAAC,UAAU,CAAC,EAAU;QACxB,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,8BAA8B,CAAC;YAChD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,8BAA8B,CAAC;YAChD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,6BAA6B,CAAC;YAC/C,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;SAC7B;IACL,CAAC;IAED,MAAM,CAAC,kBAAkB,CAAC,EAAU;QAChC,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;YAC5B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;YAChC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;YAChC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;YAChC,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,aAAa;SACrC;IACL,CAAC;IAED,2DAA2D;IAC3D,MAAM,CAAC,gBAAgB,CAAC,EAAU;QAC9B,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,wBAAwB,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,oBAAoB,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,0BAA0B,CAAC;YAC9C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,4BAA4B,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,oBAAoB,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,yBAAyB,CAAC;YAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,sBAAsB,CAAC;YAC1C,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;SACtB;IACL,CAAC;IAED,MAAM,CAAC,wBAAwB,CAAC,EAAU;QACtC,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B;YACnD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;YAChD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;YAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB;YAC/C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;YAC3C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B;YACjD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;YAC3C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU;YAChC,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,aAAa;SACrC;IACL,CAAC;IAED,MAAM,CAAC,6BAA6B;QAChC,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC;IAED,mCAAmC;IACnC,MAAM,CAAC,gBAAgB,CAAC,EAAU;QAC9B,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC;YAC7B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,oBAAoB,CAAC;YACtC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,+BAA+B,CAAC;YACjD,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,eAAe,CAAC;YACjC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,aAAa,CAAC;YAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS;YACvC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,wBAAwB,CAAC;YAC5C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,oBAAoB,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,0BAA0B,CAAC;YAC9C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,4BAA4B,CAAC;YAChD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,oBAAoB,CAAC;YACxC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,yBAAyB,CAAC;YAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,sBAAsB,CAAC;YAC1C,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;SAC7B;IACL,CAAC;IAED,MAAM,CAAC,aAAa,CAAC,EAAU;QAC3B,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,WAAW;YACjC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,aAAa;YACnC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,SAAS;YAC/B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU;YAChC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,oBAAoB;YAC1C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,WAAW;YACnC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;YAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;YAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;YAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;YAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;YAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,EAAE;YAC1B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC;YACvB,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC;SACrB;IACL,CAAC;CACJ;AA5FD,wCA4FC;;;;;;;;;;;;;;;;AC1FD,MAAa,gBAAgB;IAEzB,MAAM,CAAC,MAAM,CAAC,EAAU;QAEpB,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC1B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC;YAC5B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,sBAAsB,CAAC;YACxC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC3B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;SAC7B;IACL,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,EAAU;QAErB,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC;YACxB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC3B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;SAC7B;IACL,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,EAAU;QAEzB,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC;YACzB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;YACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC3B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;SAC7B;IACL,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,EAAU;QAEtB,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC;YACtB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC;YACvB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;SAC9B;IACL,CAAC;CACJ;AAhDD,4CAgDC;;;;;;;;;;;;AClDD,uC;;;;;;;;;;;;;;;ACAA,yGAA8E;AAC9E,mGAAwE;AACxE,4GAAgG;AAChG,gHAA2F;AAC3F,8GAAiF;AACjF,oGAAmE;AAEnE,2EAA8C;AAG9C,MAAa,YAAY;IAGrB,MAAM,CAAC,UAAU;QACb,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,6CAA6C,CAAC,CAAC,SAAS,CAAC;YAC5E,iBAAiB;YACjB,SAAS,EAAE,IAAI;YACf,wBAAwB;YACxB,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM;YACf,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE;gBACL,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBAC/E,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBAC/E,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBAChF,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBACpI,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBACnF,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBACpF,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,EAAE,+BAAa,EAAE;gBACtH,EAAE,IAAI,EAAE,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,8BAA8B,EAAE,MAAM,EAAE,+BAAa,EAAE;gBACxH,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,8BAA8B,EAAE;aAChI;SACJ,CAAC,CAAC;IACP,CAAC;IAEM,MAAM,CAAC,UAAU,CAAC,MAAoB;QACzC,8BAA8B;QAC9B,IAAI,SAAS,GAAqB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAa,EAAE,EAAE,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;QACvF,yBAAyB;QAEzB,IAAI,YAAY,CAAC,KAAK,IAAI,SAAS,EAAE;YAAE,YAAY,CAAC,UAAU,EAAE,CAAC;SAAE;QAEnE,YAAY,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC3B,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9C,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACjD,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YACpC,CAAC,CAAC,8CAA8C,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC/D,CAAC,CAAC,oCAAoC,CAAC,CAAC,IAAI,CAAC,2BAA2B,GAAG,6CAAsB,EAAC,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;YACvH,uDAAuD;QAC3D,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,uBAAuB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAE7C,CAAC;;AA9CL,oCA+CC;AA9CU,kBAAK,GAAQ,SAAS,CAAC;AAiDlC,MAAa,cAAc;IAavB,YAAY,KAAiB;QACzB,IAAI,CAAC,KAAK,GAAG,aAAK,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,CAAC,QAAQ,GAAG,mBAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,yBAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC;QAC/B,IAAI,CAAC,KAAK,GAAG,2BAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,aAAa,GAAG,2BAAW,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,WAAW,GAAG,2BAAW,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACnE,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,YAAY,CAAC;QACzC,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC,aAAa,CAAC;QAEhD,IAAI,OAAO,GAAS,sCAAiB,EAAC,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;QACvF,IAAI,QAAQ,GAAS,sCAAiB,EAAC,KAAK,CAAC,iBAAiB,EAAE,sBAAsB,CAAC,CAAC;QACxF,IAAI,CAAC,iBAAiB,GAAG,+BAAU,EAAC,OAAO,EAAE,aAAa,CAAC,GAAG,MAAM,GAAG,+BAAU,EAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;QAC3G,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3C,CAAC;CACJ;AA7BD,wCA6BC;;;;;;;;;;;;;;;;;AClFD,IAAI,UAAU,GAAG,mBAAO,CAAC,mCAAuB,CAAC,CAAC;AAClD,mBAAO,CAAC,yCAA6B,CAAC,CAAC,UAAU,CAAC,CAAC;AACnD,mBAAO,CAAC,wCAA4B,CAAC,CAAC,UAAU,CAAC,CAAC;AAClD,mBAAO,CAAC,yCAA6B,CAAC,CAAC,UAAU,CAAC,CAAC;AAEnD,MAAa,SAAS;IAElB,gBAAgB,CAAC;IAEjB,WAAW,CAAC,UAAsB;QAE9B,UAAU,CAAC,KAAK,CAAC,kBAAkB,EAAE;YACjC,KAAK,EAAE;gBACH,eAAe,EAAE,OAAO;gBACxB,QAAQ,EAAE,GAAG;gBACb,eAAe,EAAE;oBACb,QAAQ,EAAE;wBACN,KAAK,EAAE,OAAO;wBACd,aAAa,EAAE,KAAK;wBACpB,CAAC,EAAE,CAAC,EAAE;wBACN,CAAC,EAAE,CAAC;qBACP;oBACD,UAAU,EAAE,OAAO;iBACtB;aACJ;YACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACrB,KAAK,EAAE;gBACH,IAAI,EAAE,UAAU;gBAChB,eAAe;gBACf,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,OAAO,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACzD,CAAC;iBACJ;aACJ;YACD,KAAK,EAAE;gBACH,qBAAqB;gBACrB,KAAK,EAAE;oBACH,IAAI,EAAE,wBAAwB;iBACjC;gBACD,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;oBAC3D,CAAC;iBACJ;aACJ;YACD,WAAW,EAAE;gBACT,IAAI,EAAE;oBACF,cAAc,EAAE,KAAK;oBACrB,kBAAkB,EAAE,IAAI;oBACxB,MAAM,EAAE;wBACJ,OAAO,EAAE,CAAC,UAAU,CAAC,gBAAgB;qBACxC;iBACJ;gBACD,QAAQ,EAAE;oBACN,MAAM,EAAE;wBACJ,OAAO,EAAE,IAAI;qBAChB;iBACJ;aACJ;YACD,OAAO,EAAE;gBACL,WAAW,EAAE,UAAU;gBACvB,MAAM,EAAE,KAAK;aAChB;YACD,MAAM,EAAE;gBACJ,OAAO,EAAE,UAAU,CAAC,UAAU;gBAC9B,gBAAgB;aACnB;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC5B,CAAC,CAAC;IACP,CAAC;CACJ;AApED,8BAoEC;;;;;;;;;;;;;;;;AChFD,gHAA2F;AAC3F,8HAA6H;AAC7H,8GAAgG;AAGhG,MAAa,mBAAmB;IAO5B,YAAY,UAA2B;QALvC,YAAO,GAAW,uBAAuB,CAAC;QAC1C,mBAAc,GAAW,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC;QAM/C,IAAI,OAAO,GAAU;YACjB,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,uBAAuB,EAAE;YAC5G,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,wCAAwC,EAAE;YAC/H,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,+CAA+C,EAAE;YACxG,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,wCAAwC,EAAE;YAC9F,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,gDAAgD,EAAE,MAAM,EAAE,+BAAa,EAAE;YACxI,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,wCAAwC,EAAE;YACvH,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,gCAAgC,EAAE;YAClH,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;SACxD,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC;YAC7C,KAAK,EAAE,gFAAgF;YACvF,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,IAAI;YACZ,UAAU,EAAE,QAAQ;YACpB,UAAU,EAAE,EAAE;YACd,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM;YACf,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE;gBACV,WAAW,EAAE,CAAC;aACjB;YACD,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACL;oBACI,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,sCAAsC;oBAC5C,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,OAAO;oBAChB,kBAAkB;oBAClB,2BAA2B;oBAC3B,GAAG;iBACN;aACJ;YACD,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAC/B,IAAI,EAAE,UAAU;SACnB,CAAC,CAAC;QAEH,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,gBAAgB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAErE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAClF,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,GAAG,wBAAwB,CAAC,CAAC;QAErH,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QAE1E,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;QACtE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,QAAQ,CAAC,2FAA2F,CAAC,CAAC;QACrJ,yEAAyE;QACzE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,gFAAgF,GAAG,IAAI,CAAC,OAAO,GAAG,8BAA8B,CAAC,CAAC;QACzL,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,cAAc,GAAG,eAAe,CAAC,CAAC,OAAO,CAAC,2EAA2E,CAAC,CAAC;QAEpI,IAAI,CAAC,qBAAqB,GAAG,IAAI,yDAA+B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,OAAO,GAAG,gBAAgB,CAAC,EAAE;YAC9G,IAAI,0CAAgB,CAAC,aAAa,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,CAAC;YACxD,IAAI,0CAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB,CAAC;YAC5D,IAAI,0CAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,WAAW,CAAC;YACxD,IAAI,0CAAgB,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,EAAE,iBAAiB,CAAC;YACpE,IAAI,0CAAgB,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,CAAC;YACrD,IAAI,0CAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,CAAC;SACzD,CAAC,CAAC;QAEH,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE;YAClD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,kBAAkB,CAAC,KAAa;QAE5B,QAAQ,KAAK,EAAE;YACX,KAAK,CAAC;gBAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBAAC,MAAM;YAClF,KAAK,CAAC;gBAAE,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAAC,MAAM;YAChF,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,6CAAsB,EAAC,KAAK,GAAG,EAAE,CAAC,GAAG,mBAAmB,CAAC,CAAC;SAClH;IACL,CAAC;IAED,OAAO;QACH,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,CAAC,qBAAqB,CAAC,OAAO,EAAE,CAAC;IACzC,CAAC;IAED,aAAa,CAAC,iBAAkC;QAE5C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,cAAc;QACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;CACJ;AAvGD,kDAuGC;;;;;;;;;;;;;AC5GD,uC;;;;;;;;;;;;;;;ACAA,gHAA2F;AAC3F,0GAA8E;AAC9E,8GAA2H;AAE3H,wFAA4D;AAI5D,MAAa,qBAAqB;IAQ9B;QAJgB,gBAAW,GAAW,yBAAyB,CAAC;QAC3C,mBAAc,GAAW,8BAA8B,CAAC;QAC3D,gBAAW,GAAW,2BAA2B,CAAC;QAGhE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAE/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;QACvF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,CAAC;QAClG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC,CAAC;QAEzF,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IACrF,CAAC;IAGD,OAAO,CAAC,OAAe;QAEnB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE;YAAE,OAAO;SAAE;QAE1D,uBAAuB;QAEvB,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;YAAE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;YAAC,gCAAY,EAAC,yBAAyB,EAAE,iCAAiC,CAAC,CAAC;YAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SAAE;aACzK,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;YAAC,gCAAY,EAAC,yBAAyB,EAAE,sCAAsC,CAAC,CAAC;YAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SAAE;aAChM,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YAAE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;YAAC,gCAAY,EAAC,yBAAyB,EAAE,mCAAmC,CAAC,CAAC;YAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SAAE;IAE7L,CAAC;IAED,UAAU,CAAC,gBAA0C,EAAE,qBAA+C,EAAE,kBAA4C;QAChJ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QACvB,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAC5B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEzB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;QACjD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC;QAErD,mDAAmD;IACvD,CAAC;IAEO,eAAe,CAAC,OAAe,EAAE,cAAsB;QAE3D,IAAI,SAAS,GAAQ,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,SAAS,CAAC;YAC5C,KAAK,EAAE,OAAO;YACd,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;YACb,uBAAuB;YACvB,iBAAiB;YACjB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,MAAM;YACf,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB,YAAY,EAAE;gBACV,WAAW,EAAE,CAAC;aACjB;YACD,OAAO,EAAE;gBACL,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBAC/E,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBAC/E,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBAChF,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBAChF,EAAE,IAAI,EAAE,mBAAmB,EAAE,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE;gBACtJ,EAAE,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE;gBACpJ,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,uBAAuB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBACpL,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,wEAAwE,EAAE,MAAM,EAAE,qCAAmB,EAAE,cAAc,EAAE,EAAE,EAAE;gBAC5L,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBAChL,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,sEAAsE,EAAE,MAAM,EAAE,qCAAmB,EAAE,cAAc,EAAE,EAAE,EAAE;gBACtL,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBACjL,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,qBAAqB,EAAE,SAAS,EAAE,sEAAsE,EAAE,MAAM,EAAE,qCAAmB,EAAE,cAAc,EAAE,EAAE,EAAE;gBACvL,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,yBAAyB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;gBACtL,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,wBAAwB,EAAE,SAAS,EAAE,wEAAwE,EAAE,MAAM,EAAE,qCAAmB,EAAE,cAAc,EAAE,EAAE,EAAE;gBAC9L,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,yBAAyB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE,cAAc,EAAE,EAAE,EAAE;gBACpK,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,8BAA8B,EAAE,OAAO,EAAE,KAAK,EAAE;aAClG;YACD,OAAO,EAAE;gBACL;oBACI,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,sCAAsC;oBAC5C,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,OAAO;iBACnB;aACJ;YACD,UAAU,EAAE,CAAC,GAAG,EAAE,IAAS,EAAE,KAAK,EAAE,EAAE;gBAClC,gCAAgC;gBAChC,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;oBAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAAE;gBAC/J,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;oBAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAAE;gBACvJ,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;oBAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;iBAAE;gBACvJ,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,SAAS,EAAE;oBAAE,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,EAAE,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;iBAAE;YACnK,CAAC;SACJ,CAAC,CAAC;QAEH,SAAS,CAAC,EAAE,CAAC,sBAAsB,EAAE;YACjC,CAAC,CAAC,yBAAyB,CAAC,CAAC,OAAO,EAAE;QAC1C,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,yBAAyB,CAAC,CAAC,OAAO,EAAE;QAEtC,OAAO,SAAS,CAAC;IACrB,CAAC;IAEO,mBAAmB,CAAC,WAAmB,EAAE,KAAa;QAC1D,IAAI,WAAW,IAAI,WAAW,EAAE;YAC5B,IAAI,KAAK,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC;iBAC/B,IAAI,KAAK,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC;;gBACpC,OAAO,SAAS,CAAC;SACzB;aACI,IAAI,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI,SAAS,EAAE;YAC3D,IAAI,KAAK,GAAG,IAAI;gBAAE,OAAO,SAAS,CAAC;iBAC9B,IAAI,KAAK,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC;;gBACpC,OAAO,SAAS,CAAC;SACzB;aACI,IAAI,WAAW,IAAI,WAAW,EAAE;YACjC,IAAI,KAAK,GAAG,IAAI;gBAAE,OAAO,SAAS,CAAC;iBAC9B,IAAI,KAAK,IAAI,IAAI;gBAAE,OAAO,SAAS,CAAC;;gBACpC,OAAO,SAAS,CAAC;SACzB;IACL,CAAC;IAEO,gBAAgB,CAAC,QAAkB;QAEvC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;YACjC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,EAAE;gBACnD,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxD,gCAAc,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE;gBACjD,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxD,gCAAc,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,sBAAsB,EAAE;gBACjD,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxD,gCAAc,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,wBAAwB,EAAE;gBACnD,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxD,gCAAc,CAAC,UAAU,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,mBAAmB,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAa,EAAE,KAAa;QAC5E,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAC/C,CAAC;IAED,WAAW;QAEP,IAAI,OAAO,GAAW,SAAS,CAAC;QAChC,IAAI,IAAI,CAAC,gBAAgB,IAAI,MAAM,EAAE;YAAE,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;SAAE;aAC/D,IAAI,IAAI,CAAC,gBAAgB,IAAI,WAAW,EAAE;YAAE,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC;SAAE;aAC5E,IAAI,IAAI,CAAC,gBAAgB,IAAI,QAAQ,EAAE;YAAE,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;SAAE;QAC3E,IAAI,OAAO,IAAI,SAAS,EAAE;YACtB,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,SAAS,EAAE,CAAC;YAC5C,KAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;SACpC;IACL,CAAC;IAEO,kBAAkB,CAAC,OAAe,EAAE,KAAa;QAErD,QAAQ,KAAK,EAAE;YACX,KAAK,CAAC;gBAAE,CAAC,CAAC,GAAG,GAAG,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBAAC,MAAM;YAC1E,KAAK,CAAC;gBAAE,CAAC,CAAC,GAAG,GAAG,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAAC,MAAM;YACxE,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,GAAG,cAAc,CAAC,CAAC,IAAI,CAAC,6CAAsB,EAAC,KAAK,GAAG,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC;SAC1G;IACL,CAAC;IAEO,OAAO;QACX,kCAAkC;QAClC,uCAAuC;IAC3C,CAAC;IAEO,cAAc;QAClB,mCAAmC;IACvC,CAAC;CACJ;AAnLD,sDAmLC;;;;;;;;;;;;;;;;;ACxLD,MAAa,kBAAkB;IAK3B,YAAY,OAAc,EAAE,QAAe;QAEvC,CAAC,CAAC,GAAG,EAAE;YAEH,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,gCAAgC,CAAC,CAAC,SAAS,CAAC;gBAC3D,SAAS,EAAE,IAAI;gBACf,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,KAAK;gBAChB,gBAAgB;gBAChB,OAAO,EAAE,MAAM;gBACf,cAAc,EAAE,IAAI;gBACpB,aAAa,EAAE,IAAI;gBACnB,OAAO,EAAE,OAAO;gBAChB,KAAK,EAAE,QAAQ;aAClB,CAAC,CAAC;YAEH,CAAC,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;gBAEpD,yBAAyB;gBACzB,CAAC,CAAC,gCAAgC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3C,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;gBACtB,4CAA4C;YAChD,CAAC,CAAC,CAAC;YAEH,CAAC,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;gBACnD,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;gBACvB,wBAAwB;gBACxB,CAAC,CAAC,gCAAgC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/C,CAAC,CAAC,CAAC;QAEP,CAAC,CAAC,CAAC;IAGP,CAAC;IAED,OAAO,CAAC,IAAW;QAEf,gCAAgC;QAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,IAAI,CAAC,QAAgB,EAAE;QACnB,CAAC,CAAC,gCAAgC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,CAAC,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;CACJ;AApDD,gDAoDC;;;;;;;;;;;;;;;;;ACvDD,8FAA6D;AAC7D,kHAAsF;AAGtF,iGAA6E;AAC7E,oJAAkH;AAClH,6FAAkE;AAClE,mGAAwE;AACxE,2FAAgE;AAChE,wHAA4F;AAC5F,oGAAwE;AAGxE,MAAa,oBAAoB;IAkB7B,YAAY,eAAoB,EAAE,mBAAwB,EAAE,YAAiB,EAAE,eAAoB;QAbnG,eAAU,GAAY,EAAE,CAAC;QACzB,kBAAa,GAAe,EAAE,CAAC;QAC/B,aAAQ,GAAW,EAAE,CAAC;QAOtB,iFAAiF;QACjF,oBAAe,GAAqB,SAAS,CAAC;QAC9C,sBAAiB,GAAuB,SAAS,CAAC;QAI9C,CAAC,CAAC,GAAG,EAAE;YAEH,IAAI,8CAAkB,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAE5D,+BAA+B;YAC/B,4BAA4B;YAE5B,IAAI,CAAC,YAAY,GAAG,yBAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACjD,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAoB,CAAC;YAC/C,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,IAAc,EAAE,EAAE;gBACzC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;oBAAE,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;iBAAE;YAChG,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,eAAe,GAAG,IAAI,oCAAgB,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;YACnE,IAAI,CAAC,iBAAiB,GAAG,IAAI,wCAAkB,CAAC,IAAI,EAAE,mBAAmB,CAAC,CAAC;YAE3E,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAEzB,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC;YACnC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAE7B,IAAI,CAAC,aAAa,EAAE,CAAC;YAErB,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;IACP,CAAC;IAED,mGAAmG;IACnG,aAAa;QAET,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;SACtM;aACI,IAAI,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE;YACtC,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;SACpK;IACL,CAAC;IAED,WAAW,CAAC,UAAkB;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,iBAAiB,EAAE,CAAC;IAChE,CAAC;IAED,iBAAiB;QACb,IAAI,YAAY,GAAa,EAAE,CAAC;QAChC,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,IAAI,gBAAgB,GAAa,EAAE,CAAC;QAEpC,wDAAwD;QACxD,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAa,EAAE,EAAE;YAE1D,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;gBAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;aAAE;YAClH,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;gBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,aAAK,CAAC,CAAC,CAAC,OAAO,EAAE,aAAK,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1E,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;aACjC;YAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;gBAC1C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,mBAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,mBAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;gBACvG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;aACvC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,YAAY,GAAsB,IAAI,GAAG,EAAgB,CAAC;QAC9D,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAW,EAAE,EAAE;YACtC,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;gBACvD,IAAI,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;oBAChC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;iBAC3D;qBACI;oBACD,IAAI,OAAO,GAAS,IAAI,WAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;oBAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;oBACjC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;iBAC3C;aACJ;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAO,EAAE,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAE3G,IAAI,CAAC,MAAM,GAAG,IAAI,wCAAa,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAEzM,CAAC;IAED,YAAY;QACR,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;IAC/B,CAAC;IAED,aAAa,CAAC,OAAe;QACzB,wCAAwC;QAExC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAC5B,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;YAAE,gCAAY,EAAC,wBAAwB,EAAE,YAAY,CAAC,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAAE;aACtI,IAAI,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE;YAAE,gCAAY,EAAC,wBAAwB,EAAE,cAAc,CAAC,CAAC;YAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;SAAE;QAEpJ,IAAI,CAAC,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,CAAC,OAAe;QAEnB,wEAAwE;QACxE,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;YACrB,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gBAAE,OAAO,GAAG,cAAc,CAAC;aAAE;iBACnE,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAAE,OAAO,GAAG,gBAAgB,CAAC;aAAE;SACpF;QAED,uDAAuD;QAEvD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;QAE5B,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACzC;aACI,IAAI,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE;YACtC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SAC3C;IACL,CAAC;IAED,oBAAoB;QAEhB,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;YAC/B,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;SAC/B;aACI,IAAI,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE;YACtC,CAAC,CAAC,eAAe,CAAC,CAAC,IAAI,EAAE,CAAC;YAC1B,CAAC,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,EAAE,CAAC;SAE/B;IACL,CAAC;IAED,WAAW;QACP,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;YAC/B,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC;SACtC;aACI,IAAI,IAAI,CAAC,YAAY,IAAI,UAAU,EAAE;YACtC,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,CAAC;SACxC;IACL,CAAC;CACJ;AA/JD,oDA+JC;;;;;;;;;;;;;;;;;AC5KD,iFAAiD;AAGjD,wGAAqG;AACrG,uFAA6G;AAC7G,iFAAqD;AACrD,iFAAmD;AAEnD,iGAAmE;AACnE,0HAAkH;AAElH,MAAa,cAAc;IASvB,YAAY,QAAa,EAAE,aAAkB,EAAE,mBAAwB,EAAE,gBAAqB;QAE1F,CAAC,CAAC,GAAG,EAAE;YAEH,IAAI,CAAC,kBAAkB,GAAG,oCAAY,EAAC,oCAAc,EAAoB,QAAQ,CAAC,CAAC;YACnF,IAAI,CAAC,kBAAkB,GAAG,oCAAY,EAAC,wCAAkB,EAAwB,aAAa,CAAC,CAAC;YAChG,IAAI,CAAC,wBAAwB,GAAG,oCAAY,EAAC,wCAAkB,EAAwB,mBAAmB,CAAC,CAAC;YAC5G,IAAI,CAAC,YAAY,GAAG,oCAAY,EAAC,yCAAmB,EAAyB,gBAAgB,CAAC,CAAC;YAE/F,qDAAqD;YACrD,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACxB,IAAI,CAAC,eAAe,EAAE,CAAC;YACvB,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAE9B,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;IACP,CAAC;IAED,gBAAgB;QACZ,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC7D,IAAI,eAAe,GAAG,IAAI,kCAAe,EAAE,CAAC;QAC5C,eAAe,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAEzD,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACnE,IAAI,YAAY,GAAG,IAAI,gDAAqB,EAAE,CAAC;QAC/C,YAAY,CAAC,eAAe,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAChE,CAAC;IAED,eAAe;QACX,IAAI,CAAC,YAAY,GAAG,IAAI,gCAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IACnE,CAAC;IAED,sBAAsB;QAClB,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5B,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;;gBAC7E,OAAO,CAAC,CAAC,eAAe,GAAG,CAAC,CAAC,eAAe,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,IAAI,SAAS,GAAQ,CAAC,CAAC,4BAA4B,CAAC,CAAC,SAAS,CAAC;YAC3D,KAAK,EAAE,yBAAyB;YAChC,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;YACb,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,KAAK;YACd,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACL,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,iCAAiC,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC7E,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,+BAA+B,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC1F,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAiB,EAAE;gBAC/G,EAAE,IAAI,EAAE,wBAAwB,EAAE,SAAS,EAAE,+BAA+B,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC5F,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAiB,EAAE;gBACjH,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,+BAA+B,EAAE,KAAK,EAAE,KAAK,EAAE;gBAC1F,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,8BAA8B,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,mCAAiB,EAAE;aAClH;YACD,OAAO,EAAE;gBACL;oBACI,MAAM,EAAE,KAAK;oBACb,IAAI,EAAE,sCAAsC;oBAC5C,SAAS,EAAE,KAAK;oBAChB,OAAO,EAAE,OAAO;oBAChB,kBAAkB;oBAClB,2BAA2B;oBAC3B,GAAG;iBACN;aACJ;YACD,sBAAsB;YACtB,IAAI,EAAE,IAAI,CAAC,YAAY;SAC1B,CAAC,CAAC;IAEP,CAAC;IAED,WAAW;QACP,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,wBAAwB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACrD,CAAC,CAAC,uBAAuB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACpD,CAAC,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACnD,CAAC;IAED,qBAAqB,CAAC,WAAmB;QACrC,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAED,mBAAmB;QAEf,8CAAoB,EAAC,CAAC,iBAAiB,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAClH,0CAAgB,EAAC,CAAC,mBAAmB,EAAE,oBAAoB,CAAC,CAAC,CAAC;QAE9D,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IAED,aAAa;QACT,CAAC,CAAC,6BAA6B,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACvD,CAAC,CAAC,8BAA8B,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAEnD,sCAAsC;QACtC,CAAC,2CAA2C,EAAE,kDAAkD,CAAC,CAAC,OAAO,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7J,CAAC;CAEJ;AAhHD,wCAgHC;;;;;;;;;;;;;;;;;ACzHD,IAAI,UAAU,GAAG,mBAAO,CAAC,mCAAuB,CAAC,CAAC;AAClD,mBAAO,CAAC,wCAA4B,CAAC,CAAC,UAAU,CAAC,CAAC;AAClD,qDAAqD;AAErD,MAAa,QAAQ;IAEjB,gBAAgB,CAAC;IAEjB,WAAW,CAAC,UAAsB,EAAE,aAAqB,wBAAwB,EAAE,wBAAgC,CAAC,EAAE,aAAqB,OAAO;QAE9I,UAAU,CAAC,KAAK,CAAC,kBAAkB,EAAE;YACjC,KAAK,EAAE;gBACH,IAAI,EAAE,QAAQ;gBACd,eAAe,EAAE,OAAO;gBACxB,QAAQ,EAAE,GAAG;gBACb,eAAe,EAAE;oBACb,QAAQ,EAAE;wBACN,KAAK,EAAE,OAAO;wBACd,aAAa,EAAE,KAAK;wBACpB,CAAC,EAAE,CAAC,EAAE;wBACN,CAAC,EAAE,CAAC;qBACP;oBACD,UAAU,EAAE,OAAO;iBACtB;aACJ;YACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACrB,KAAK,EAAE;gBACH,IAAI,EAAE,UAAU;gBAChB,eAAe;gBACf,aAAa,EAAE,IAAI;gBACnB,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,OAAO,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACxD,CAAC;iBACJ;aACJ;YACD,KAAK,EAAE;gBACH,qBAAqB;gBACrB,KAAK,EAAE;oBACH,IAAI,EAAE,UAAU;iBACnB;gBACD,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;oBAC3D,CAAC;iBACJ;gBACD,WAAW,EAAE;oBACT,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE;wBACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;oBACtE,CAAC;iBACJ;aACJ;YACD,WAAW,EAAE;gBACT,MAAM,EAAE;oBACJ,QAAQ,EAAE,QAAQ;oBAClB,UAAU,EAAE;wBACR,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;wBACrE,0BAA0B;wBAC1B,SAAS,EAAE;4BACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;wBAClE,CAAC;qBACJ;iBACJ;aACJ;YACD,OAAO,EAAE;gBACL,WAAW,EAAE,UAAU;gBACvB,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE;oBACP,IAAI,KAAK,GAAW,4BAA4B,GAAG,UAAU,CAAC,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;oBAC7G,KAAK,IAAI,qBAAqB,GAAG,IAAI,CAAC,KAAK,GAAG,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,qBAAqB,CAAC,GAAG,MAAM,CAAC;oBAC3J,OAAO,KAAK,CAAC;gBACjB,CAAC;aACJ;YACD,MAAM,EAAE;gBACJ,OAAO,EAAE,UAAU,CAAC,UAAU;aACjC;YACD,MAAM,EAAE,UAAU,CAAC,MAAM;SAC5B,CAAC,CAAC;IACP,CAAC;CACJ;AA7ED,4BA6EC;;;;;;;;;;;;;;;;ACnFD,0GAA8E;AAE9E,wFAA4D;AAE5D,wFAA4D;AAI5D,IAAI,UAAU,GAAG,mBAAO,CAAC,mCAAuB,CAAC,CAAC;AAGlD,MAAa,mBAAmB;IAU5B;QACI,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;QAClC,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;IACjC,CAAC;IAED,UAAU,CAAC,aAAsC,EAAE,UAAmC;QAElF,6BAA6B;QAC7B,0BAA0B;QAE1B,IAAI,CAAC,WAAW,CAAC,yCAAyC,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;QACxG,IAAI,CAAC,WAAW,CAAC,sCAAsC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/F,0IAA0I;QAC1I,iIAAiI;IACrI,CAAC;IAEO,WAAW,CAAC,OAAe,EAAE,IAA6B,EAAE,gBAA0B,EAAE,SAAiB;QAE7G,IAAI,MAAM,GAAU,EAAE,CAAC;QACvB,IAAI,UAAU,GAAa,EAAE,CAAC;QAC9B,IAAI,QAAQ,GAAmB,EAAE,CAAC;QAElC,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAgB,EAAE,EAAE;YAE1C,IAAI,UAAU,GAAU,IAAI,KAAK,CAAM,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;gBAElC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;oBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAAE;gBAC1E,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBAChC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;iBAC1G;aACJ;YAED,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gCAAc,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,gCAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QAC3I,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IACpE,CAAC;IAEO,kBAAkB,CAAC,OAAe,EAAE,SAAiB,EAAE,UAAoB,EAAE,IAAW;QAE5F,oDAAoD;QACpD,2DAA2D;QAC3D,oBAAoB;QAEpB,IAAI,KAAK,GAAQ,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE;YACvC,KAAK,EAAE;gBACH,IAAI,EAAE,KAAK;gBACX,UAAU,EAAE,IAAI;gBAChB,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC;aACzC;YACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;YACrB,KAAK,EAAE;gBACH,IAAI,EAAE,UAAU;gBAChB,UAAU,EAAE,UAAU;gBACtB,GAAG,EAAE,CAAC;gBACN,GAAG,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC1B,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;gBAC1B,YAAY,EAAE,CAAC;gBACf,UAAU,EAAE,CAAC;aAChB;YACD,KAAK,EAAE;gBACH,GAAG,EAAE,CAAC;gBACN,SAAS,EAAE,KAAK;gBAChB,UAAU,EAAE,GAAG;gBACf,cAAc,EAAE,KAAK;gBACrB,KAAK,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE;gBAChC,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5D,CAAC;iBACJ;gBACD,WAAW,EAAE;oBACT,OAAO,EAAE,IAAI;oBACb,SAAS,EAAE;wBACP,OAAO,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;oBAC5D,CAAC;oBACD,MAAM,EAAE,KAAK;oBACb,aAAa,EAAE,QAAQ;iBAC1B;aACJ;YACD,MAAM,EAAE;gBACJ,KAAK,EAAE,QAAQ;gBACf,aAAa,EAAE,KAAK;aACvB;YACD,WAAW,EAAE;gBACT,MAAM,EAAE;oBACJ,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE;wBACH,MAAM,EAAE;4BACJ,KAAK,EAAE;gCACH,gCAAc,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;4BACrD,CAAC;yBACJ;qBACJ;iBACJ;gBACD,GAAG,EAAE;oBACD,UAAU,EAAE,EAAE;oBACd,YAAY,EAAE,GAAG;oBACjB,oBAAoB;oBACpB,WAAW,EAAE,CAAC;oBACd,UAAU,EAAE;wBACR,OAAO,EAAE,IAAI;wBACb,SAAS,EAAE;4BACP,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC;gCAAE,OAAO,IAAI,CAAC;iCACxB;gCACD,IAAI,KAAK,GAAW,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gCACjE,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;oCAAE,OAAO,IAAI,CAAC;;oCAC/D,OAAO,KAAK,CAAC;6BACrB;wBACL,CAAC;wBACD,aAAa,EAAE,QAAQ;wBACvB,CAAC,EAAE,CAAC;qBACP;iBACJ;aACJ;YACD,MAAM,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC;IACjB,CAAC;IAGD,OAAO,CAAC,OAAe;QAEnB,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE;YAAE,OAAO;SAAE;aACnD,IAAI,OAAO,IAAI,kBAAkB,EAAE,EAAE,yBAAyB;YAC/D,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;gBAAE,IAAI,CAAC,gBAAgB,GAAG,SAAS,CAAC;aAAE;iBACpE,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;gBAAE,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC;aAAE;YAExE,IAAI,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAAE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;aAAE;YACnE,0EAA0E;SAC7E;QAED,IAAI,IAAI,CAAC,gBAAgB,IAAI,SAAS,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;YAAE,gCAAY,EAAC,uBAAuB,EAAE,2CAA2C,CAAC,CAAC;SAAE;aAC3J,IAAI,IAAI,CAAC,gBAAgB,IAAI,MAAM,IAAI,IAAI,CAAC,YAAY,IAAI,QAAQ,EAAE;YAAE,gCAAY,EAAC,uBAAuB,EAAE,wCAAwC,CAAC,CAAC;SAAE;QAC/J,wKAAwK;QACxK,kKAAkK;IAEtK,CAAC;CAEJ;AAxJD,kDAwJC;;;;;;;;;;;;;;;;ACnKD,6FAAkE;AAClE,sGAA8E;AAC9E,uHAAiG;AAEjG,0GAAwE;AACxE,wGAAwF;AAExF,MAAa,iBAAiB;IAA9B;QAKI,mBAAc,GAAW,EAAE,CAAC;QAC5B,wBAAmB,GAAW,EAAE,CAAC;QACjC,yBAAoB,GAAW,EAAE,CAAC;QAClC,2BAAsB,GAAW,EAAE,CAAC;QACpC,WAAM,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,2HAA2H;QAChL,kBAAa,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,sCAAsC;QAElF,oGAAoG;QACpG,mBAAc,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,mBAAc,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,oBAAe,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,oBAAe,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEjE,yFAAyF;QACzF,yBAAoB,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,yBAAoB,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClD,0BAAqB,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnD,0BAAqB,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEnD,0DAA0D;QAC1D,oBAAe,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,oBAAe,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7C,8BAAyB,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAEvD,eAAU,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,gOAAgO;QAC7S,eAAU,GAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,oJAAoJ;IAyH7N,CAAC;IAhGG,UAAU;QAEN,IAAI,CAAC,aAAa,GAAG,aAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC;QAEpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QAC3D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC;QAEvE,IAAI,CAAC,aAAa,GAAG,sCAAiB,EAAC,IAAI,CAAC,aAAa,EAAE,sBAAsB,CAAC,CAAC;QACnF,IAAI,CAAC,cAAc,GAAG,sCAAiB,EAAC,IAAI,CAAC,cAAc,EAAE,sBAAsB,CAAC,CAAC;QACrF,IAAI,CAAC,mBAAmB,GAAG,sCAAiB,EAAC,IAAI,CAAC,mBAAmB,EAAE,sBAAsB,CAAC,CAAC;QAC/F,IAAI,CAAC,oBAAoB,GAAG,sCAAiB,EAAC,IAAI,CAAC,oBAAoB,EAAE,sBAAsB,CAAC,CAAC;QAEjG,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QAEtB,IAAI,IAAI,CAAC,aAAa,IAAI,SAAS,EAAE;YACjC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;YACvD,IAAI,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC;SAChG;QACD,IAAI,IAAI,CAAC,cAAc,IAAI,SAAS,EAAE;YAClC,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YACzD,IAAI,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC;SAClG;QACD,IAAI,IAAI,CAAC,mBAAmB,IAAI,SAAS,EAAE;YACvC,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;YACnE,IAAI,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,YAAY;gBAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,wBAAwB,CAAC;SAC5G;QACD,IAAI,IAAI,CAAC,oBAAoB,IAAI,SAAS;YAAE,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC;QAEjH,IAAI,CAAC,iBAAiB,GAAG,gCAAS,EAAC,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,IAAI,CAAC,eAAe,GAAG,gDAA0B,EAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEpE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE1B,kEAAkE;QAElE,oBAAoB;IACxB,CAAC;IAED,iBAAiB;QAEb,IAAI,CAAC,eAAe,GAAG,gDAAuB,EAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,KAAwB,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACzI,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAwB,EAAE,EAAE;YACpD,IAAI,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE;gBAAE,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;aAAE;QACjH,CAAC,CAAC,CAAC;IACP,CAAC;IAED,oBAAoB;QAChB,OAAO,IAAI,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IAChI,CAAC;IAED,kBAAkB;QACd,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxF,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/F,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/F,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACzG,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7G,CAAC;IAED,oBAAoB,CAAC,KAAwB;QAEzC,IAAI,MAAM,GAAa,CAAC,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,YAAY,EAAE,YAAY,CAAE,CAAC;QAC5P,MAAM,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEpG,CAAC;IAEO,gBAAgB,CAAC,SAAiB,EAAE,WAAmB;QAC3D,IAAI,SAAS,IAAI,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;;YAC9C,OAAO,SAAS,GAAG,WAAW,CAAC;IACxC,CAAC;IAEO,cAAc,CAAC,MAAgB,EAAE,MAAgB;QACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACpC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;gBAChB,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE;oBAAE,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;iBAAE;qBAC1C;oBAAE,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC;iBAAE;aACnC;SACJ;QAED,OAAO,MAAM,CAAC;IAClB,CAAC;IAEO,YAAY,CAAC,IAAU;QAC3B,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,SAAS,CAAC;;YACnC,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACJ;AAvJD,8CAuJC;AAED,MAAa,0BAA0B;IASnC,YAAY,QAAgB,EAAE,aAAqB,EAAE,QAAgB,EAAE,KAAa,EAAE,IAAU;QAC5F,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IAED,YAAY,KAAa,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,QAAQ,KAAa,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;CAC5C;AAnBD,gEAmBC;;;;;;;;;;;;;;;;ACnLD,iFAAiD;AACjD,oJAAkH;AAClH,mGAAwE;AACxE,2FAAgE;AAChE,6FAAkE;AAClE,wGAAqF;AACrF,sGAAsE;AACtE,8IAAoJ;AACpJ,0HAAgG;AAChG,0GAAqF;AACrF,2GAAoF;AACpF,8FAA6D;AAC7D,uGAAgE;AAChE,uFAA4E;AAC5E,mFAAuD;AAEvD,iGAAgE;AAEhE,MAAa,cAAc;IA8BvB,YAAY,YAAiB,EAAE,eAAoB,EAAE,0BAA+B,EAAE,eAAoB;QA5B1G,eAAU,GAAY,EAAE,CAAC;QACzB,kBAAa,GAAe,EAAE,CAAC;QAE/B,mBAAc,GAAW,EAAE,CAAC;QAC5B,mBAAc,GAAW,EAAE,CAAC;QAC5B,kJAAkJ;QAClJ,iCAA4B,GAAwB,IAAI,GAAG,EAAkB,CAAC,CAAC,4CAA4C;QAI3H,2BAAsB,GAA2B,IAAI,4CAAsB,EAAE,CAAC;QAc9E,0BAAqB,GAAa,EAAE,CAAC;QACrC,mBAAc,GAAY,IAAI,CAAC;QAC/B,0BAAqB,GAAe,EAAE,CAAC;QAInC,CAAC,CAAC,GAAG,EAAE;YAEH,0FAA0F;YAE1F,IAAI,YAAY,GAAa,EAAE,CAAC;YAChC,IAAI,aAAa,GAAa,EAAE,CAAC;YACjC,IAAI,gBAAgB,GAAa,EAAE,CAAC;YAEpC,IAAI,CAAC,eAAe,GAAG,oCAAY,EAAC,iCAAW,EAAiB,eAAe,CAAC,CAAC;YACjF,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE;gBAClE,CAAC,CAAC,UAAU,EAAE,CAAC;gBAEf,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,EAAE;oBAClB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;wBAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;qBAAE;oBAElH,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;wBACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,aAAK,CAAC,CAAC,CAAC,OAAO,EAAE,aAAK,CAAC,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;wBAC1E,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;qBACjC;oBAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;wBAC1C,IAAI,mBAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;4BAC/D,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;gCACpD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gCAC9C,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,mBAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,mBAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;6BAClH;4BACD,OAAO,IAAI,CAAC;yBACf;wBACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,mBAAQ,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,mBAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;wBACvG,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;qBACvC;oBAED,OAAO,IAAI,CAAC;iBACf;;oBACI,OAAO,KAAK,CAAC;YACtB,CAAC,CAAC,CAAC;YAEH,IAAI,QAAQ,GAAe,yBAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACxD,IAAI,gBAAgB,GAAsB,IAAI,GAAG,EAAgB,CAAC;YAClE,IAAI,gBAAgB,GAAsB,IAAI,GAAG,EAAgB,CAAC;YAClE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAW,EAAE,EAAE;gBAC7B,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,GAAG,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;oBACvD,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;wBACpC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;qBAC/D;yBACI;wBACD,IAAI,OAAO,GAAS,IAAI,WAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;wBAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBACjC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;qBAC/C;iBACJ;gBAED,IAAI,CAAC,CAAC,cAAc,IAAI,SAAS,EAAE;oBAC/B,CAAC,CAAC,sBAAsB,EAAE,CAAC;oBAC3B,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE;wBACpC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC5D,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC;qBAC9F;yBACI;wBACD,IAAI,OAAO,GAAS,IAAI,WAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,iBAAiB,EAAE,CAAC,CAAC;wBAClE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;wBACjC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,mBAAmB,CAAC;wBAChE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;qBAC/C;iBACJ;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAO,EAAE,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACrH,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAO,EAAE,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YAErH,mCAAmC;YACnC,gCAAgC;YAChC,mCAAmC;YAEnC,IAAI,CAAC,kBAAkB,GAAG,oCAAY,EAAC,2CAAsB,EAA4B,0BAA0B,CAAC,CAAC;YACrH,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,KAA6B,EAAE,EAAE;gBACpF,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACnC,OAAO,KAAK,CAAC;YACjB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAyB,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC,qCAAqC;YAClH,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,kBAAkB,CAAC;YAE1D,0BAA0B;YAC1B,iCAAiC;YACjC,4BAA4B;YAC5B,+BAA+B;YAC/B,uCAAuC;YAEvC,IAAI,8CAAkB,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAE5D,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;YAC5D,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACjD,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;YAElD,IAAI,CAAC,YAAY,GAAG,IAAI,6CAAkB,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,oCAAgB,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,CAAC,eAAe,GAAG,IAAI,6CAAe,CAAC,IAAI,CAAC,CAAC;YAEjD,2DAA2D;YAC3D,4CAA4C;YAC5C,KAAK;YAEL,IAAI,CAAC,MAAM,GAAG,IAAI,8DAA8B,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC;YAE5K,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC,CAAC,iBAAiB,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,CAAC,0BAA0B,EAAE,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC;IAED,wBAAwB,CAAC,KAAa,EAAE,iBAA0B,IAAI;;QAElE,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;QAEhC,qCAAqC;QACrC,IAAI,KAAK,IAAI,WAAW,EAAE;YACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,8BAAS,EAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YAC5G,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACrC;aACI,IAAI,KAAK,IAAI,YAAY,EAAE;YAC5B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,8BAAS,EAAC,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YAC9G,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACrC;aACI,IAAI,KAAK,IAAI,eAAe,EAAE;YAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,8BAAS,EAAC,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC;YAC5G,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7C,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACrC;QAED,iCAAiC;QAEjC,IAAI,cAAc,EAAE;YAAE,UAAI,CAAC,MAAM,0CAAE,cAAc,EAAE,CAAC;SAAE;IAC1D,CAAC;IAED,uBAAuB,CAAC,YAAoB,EAAE,mBAA2B,EAAE,EAAE,iBAA0B,IAAI;QACvG,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC;QAEtC,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,IAAI,kBAAkB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QAC1G,CAAC,CAAC,8BAA8B,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE1D,IAAI,eAAe,GAAY,IAAI,CAAC;QACpC,IAAI,kBAAkB,GAAY,IAAI,CAAC;QACvC,IAAI,aAAa,GAAY,IAAI,CAAC;QAClC,IAAI,IAAI,CAAC,iBAAiB,IAAI,kBAAkB,EAAE;YAC9C,CAAC,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC;YAEnC,0FAA0F;YAC1F,uDAAuD;YACvD,GAAG;YACH,qFAAqF;YACrF,IAAI,IAAI,CAAC,iBAAiB,IAAI,oBAAoB,EAAE;gBAAE,aAAa,GAAG,KAAK,CAAC;aAAE;YAC9E,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,IAAI,CAAC,CAAC;SACpF;aAED;YACI,CAAC,CAAC,wBAAwB,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,CAAC,CAAC,GAAG,GAAG,gBAAgB,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC/C,eAAe,GAAG,kBAAkB,GAAG,aAAa,GAAG,KAAK,CAAC;YAE7D,IAAI,IAAI,CAAC,mBAAmB,IAAI,SAAS,EAAE;gBAAE,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;aAAE;YAChG,IAAI,IAAI,CAAC,iBAAiB,IAAI,oBAAoB,EAAE;gBAAE,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;aAAE;YACxH,IAAI,CAAC,qBAAqB,CAAC,wBAAwB,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;SACrF;QACD,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,eAAe,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,kBAAkB,CAAC,CAAC;QACjE,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,aAAa,CAAC,CAAC;QAEvD,IAAI,cAAc,EAAE;YAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SAAE;IAC9D,CAAC;IAED,yBAAyB,CAAC,cAAsB,EAAE,iBAA0B,IAAI;QAC5E,IAAI,CAAC,mBAAmB,GAAG,cAAc,CAAC;QAE1C,CAAC,CAAC,qBAAqB,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,mBAAmB,IAAI,SAAS,EAAE;YAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAAE;QAC5F,IAAI,IAAI,CAAC,mBAAmB,IAAI,SAAS,EAAE;YAAE,CAAC,CAAC,sBAAsB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAAE;QAC5F,IAAI,IAAI,CAAC,mBAAmB,IAAI,YAAY,EAAE;YAAE,CAAC,CAAC,yBAAyB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAAE;QAClG,IAAI,IAAI,CAAC,mBAAmB,IAAI,QAAQ,EAAE;YAAE,CAAC,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAAE;QAEzF,IAAI,cAAc,EAAE;YAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SAAE;IAC9D,CAAC;IAED,uBAAuB,CAAC,YAAoB,EAAE,iBAA0B,IAAI;QAExE,IAAI,CAAC,iBAAiB,GAAG,YAAY,CAAC;QAEtC,IAAI,IAAI,CAAC,iBAAiB,IAAI,YAAY,IAAI,IAAI,CAAC,iBAAiB,IAAI,SAAS,IAAI,IAAI,CAAC,iBAAiB,IAAI,oBAAoB,EAAE;YACjI,IAAI,UAAU,GAAW,EAAE,CAAC;YAC5B,IAAI,UAAU,GAAW,EAAE,CAAC;YAC5B,IAAI,IAAI,CAAC,iBAAiB,IAAI,YAAY,EAAE;gBAAE,UAAU,GAAG,MAAM,CAAC;gBAAC,UAAU,GAAG,OAAO,CAAC;aAAE;iBACrF,IAAI,IAAI,CAAC,iBAAiB,IAAI,SAAS,EAAE;gBAAE,UAAU,GAAG,OAAO,CAAC;gBAAC,UAAU,GAAG,OAAO,CAAC;aAAE;iBACxF,IAAI,IAAI,CAAC,iBAAiB,IAAI,oBAAoB,EAAE;gBAAE,UAAU,GAAG,OAAO,CAAC;gBAAC,UAAU,GAAG,MAAM,CAAC;aAAE;YAEvG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAyB,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1H,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC,CAAC,CAAyB,EAAE,EAAE,GAAG,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;SACrI;aACI,IAAI,IAAI,CAAC,iBAAiB,IAAI,cAAc,EAAE;YAC/C,8FAA8F;YAC9F,uDAAuD;YACvD,GAAG;SACN;QAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,oBAAoB,EAAE;YAChD,IAAI,IAAI,CAAC,mBAAmB,IAAI,QAAQ,EAAE;gBAAE,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;aAAE;YAC/F,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;SAClD;aACI,IAAI,IAAI,CAAC,iBAAiB,IAAI,kBAAkB,EAAE;YAAE,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,IAAI,CAAC,CAAC;SAAE;QAEzG,IAAI,cAAc,EAAE;YAAE,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;SAAE;IAC9D,CAAC;IAGD,aAAa,CAAC,QAAkB,EAAE,WAAqB,EAAE,OAAiB;QACtE,+DAA+D;QAE/D,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAc,EAAE,EAAE;YACvE,IAAI,IAAI,CAAC,kBAAkB,IAAI,WAAW,IAAI,CAAC,CAAC,SAAS,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;iBACxE,IAAI,IAAI,CAAC,kBAAkB,IAAI,YAAY,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;iBAC/E,IAAI,IAAI,CAAC,kBAAkB,IAAI,eAAe,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;YAEvF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;gBAAE,OAAO,KAAK,CAAC;YAChD,IAAI,IAAI,CAAC,cAAc,EAAE;gBACrB,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;aAChE;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;gBAAE,OAAO,KAAK,CAAC;YACtD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;gBAAE,OAAO,KAAK,CAAC;YAElD,OAAO,IAAI,CAAC;QAChB,CAAC,CAAC,CAAC;QAEH,6HAA6H;QAC7H,IAAI,eAAe,GAAa,EAAE,CAAC;QACnC,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAc,EAAE,EAAE;YACjD,IAAI,IAAI,CAAC,kBAAkB,IAAI,WAAW,IAAI,IAAI,CAAC,kBAAkB,IAAI,eAAe,EAAE;gBACtF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE;oBAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC;iBAAE;aACnH;iBACI,IAAI,IAAI,CAAC,kBAAkB,IAAI,YAAY,EAAE;gBAC9C,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,EAAE;oBAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC;iBAAE;aACrH;QACL,CAAC,CAAC;QAEF,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,aAAa,GAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAO,EAAE,EAAE;YACpC,IAAI,CAAC,qCAAe,EAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAAE,OAAO;YACnD,IAAI,aAAa,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;gBAAE,OAAO;YAErD,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAe,EAAE,EAAE;gBACjC,eAAe,CAAC,OAAO,CAAC,CAAC,cAAsB,EAAE,EAAE;oBAC/C,IAAI,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,SAAS,IAAI,CAAC,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,cAAc,EAAE;wBACnG,IAAI,GAAG,GAAW,OAAO,GAAG,GAAG,GAAG,cAAc,CAAC;wBACjD,IAAI,KAAK,GAAW,CAAC,CAAC;wBACtB,IAAI,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;4BAC5C,KAAK,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;yBACtD;wBACD,KAAK,IAAI,CAAC,CAAC;wBACX,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;wBAClD,mHAAmH;wBACnH,yEAAyE;qBAC5E;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QACH,iDAAiD;QAEjD,wBAAwB;QACxB,IAAI,IAAI,CAAC,kBAAkB,IAAI,YAAY,EAAE;YACzC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBAAE,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;aAAE;iBAC9D;gBACD,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAyB,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;aACvI;SACJ;aACI;YAAE,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC;SAAE;QAE9C,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjE,2CAA2C;QAE3C,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAErE,wBAAwB;QACxB,uDAAuD;QACvD,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,kBAAkB,IAAI,YAAY,EAAE;YACrF,gGAAgG;YAChG,CAAC,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACpD,CAAC,CAAC,6BAA6B,CAAC,CAAC,IAAI,CAAC,6CAAsB,EAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAExG,IAAI,OAAO,GAAW,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YACrE,CAAC,CAAC,0BAA0B,CAAC,CAAC,IAAI,CAAC,6CAAsB,EAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3F;aACI;YACD,gGAAgG;YAChG,wDAAwD;YACxD,6IAA6I;YAC7I,GAAG;YACH,CAAC,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC;SAC1C;QAED,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,6CAAsB,EAAC,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAEpG,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC;IACtC,CAAC;IAED,YAAY;QACR,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;QAC3B,QAAQ,CAAC,cAAc,CAAC,mBAAmB,CAAsB,CAAC,OAAO,GAAG,KAAK,CAAC;QACnF,CAAC,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC,CAAC,wBAAwB,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAE9C,IAAI,CAAC,wBAAwB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAClD,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,CAAC,yBAAyB,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAEhD,8CAAoB,EAAC,CAAC,iBAAiB,EAAE,oBAAoB,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAElF,IAAI,CAAC,uBAAuB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IACrD,CAAC;IAED,0BAA0B;QACtB,IAAI,CAAC,cAAc,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC;QAC3C,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,mBAAmB,EAAE,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IACnH,CAAC;IAEO,YAAY,CAAC,QAAgB,EAAE,MAAe;QAClD,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC;QACtC,IAAI,CAAC,MAAM,EAAE;YAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;SAAE;aAC7C;YAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SAAE;IACjD,CAAC;IAEO,qBAAqB,CAAC,QAAgB,EAAE,KAAa,EAAE,MAAe;QAC1E,CAAC,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,KAAK,EAAE;gBACxB,IAAI,MAAM,EAAE;oBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;iBAAE;qBAC1C;oBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;iBAAE;gBAC9C,OAAO;aACV;QACL,CAAC,CAAC,CAAC;QAEH,CAAC,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,0BAA0B;QACtB,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,gBAAgB,CAAC,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,0BAA0B;QACtB,CAAC,CAAC,oBAAoB,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/B,CAAC,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAC5C,CAAC;CAyHJ;AAvfD,wCAufC;;;;;;;;;;;;;;;;;ACzgBD,kKAAgI;AAChI,gHAAmF;AACnF,8GAAqH;AAGrH,IAAI,UAAU,GAAG,mBAAO,CAAC,mCAAuB,CAAC,CAAC;AAElD,MAAa,mBAAmB;IAa5B;QACI,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAElC,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAED,aAAa,CAAC,eAAgC,EAAE,eAAgC,EAAE,sBAAgC;QAE9G,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAEvB,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrB,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SAAE;QACzE,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SAAE;QACzE,IAAI,sBAAsB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SAAE;QACzE,IAAI,sBAAsB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;YAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SAAE;QAC7E,IAAI,sBAAsB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YAAE,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;SAAE;QAE5E,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEtE,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC;IAEO,eAAe,CAAC,UAA2B;QAE/C,IAAI,OAAO,GAA0C,IAAI,GAAG,EAAoC,CAAC;QAEjG,IAAI,kBAAkB,GAAa,EAAE,CAAC;QACtC,IAAI,qBAAqB,GAAa,EAAE,CAAC;QAEzC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAwB,EAAE,EAAE;YAE5C,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC,EAAE;gBAChC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;oBAAE,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;iBAAE;aACjI;iBACI,IAAI,SAAS,CAAC,eAAe,IAAI,CAAC,EAAE;gBACrC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;oBAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;iBAAE;aAC3H;YAED,IAAI,SAAS,CAAC,cAAc,IAAI,SAAS,IAAI,SAAS,CAAC,WAAW,IAAI,EAAE;gBAAE,OAAO,CAAC,oEAAoE;YAEtJ,IAAI,GAA6B,CAAC;YAClC,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;gBAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;aAAE;iBAC5E;gBAAE,GAAG,GAAG,IAAI,wBAAwB,EAAE,CAAC;gBAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;gBAAC,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC;gBAAC,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;gBAAC,GAAG,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;aAAE;YAEjM,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACxB,wIAAwI;YACxI,2IAA2I;YAE3I,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,uEAAuE;QACvE,gEAAgE;QAChE,iHAAiH;QACjH,iHAAiH;QACjH,CAAC,CAAC,qCAAqC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC,CAAC;QAErE,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC7C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,GAA6B,EAAE,EAAE;YACpD,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAA2B,EAAE,CAA2B,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QACxG,OAAO,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;IAED,qDAAqD;IAC7C,eAAe,CAAC,UAA2B;QAE/C,qCAAqC;QAErC,kBAAkB;QAClB,IAAI,sBAAsB,GAAa,EAAE,CAAC;QAC1C,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,IAAI,WAAW,GAAa,EAAE,CAAC;QAC/B,UAAU,CAAC,OAAO,CAAC,CAAC,SAAwB,EAAE,EAAE;;YAC5C,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE;gBAAE,sBAAsB,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;aAAE;YAExH,IAAI,SAAS,GAAW,eAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,cAAc,0CAAE,OAAO,EAAE,CAAC;YAC7D,IAAI,SAAS,IAAI,SAAS,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;gBAC5D,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;aAC/B;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;gBAAE,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;aAAE;QAC9G,CAAC,CAAC,CAAC;QACH,WAAW,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,CAAS,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAElD,IAAI,SAAS,GAAsC,EAAE,CAAC;QACtD,oEAAoE;QACpE,IAAI,aAAa,GAAa,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACtE,mBAAmB,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;YAC1E,SAAS,CAAC,IAAI,CAAC,IAAI,+BAA+B,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,IAAI,SAAwB,CAAC;QAC7B,WAAW,CAAC,OAAO,CAAC,CAAC,IAAY,EAAE,EAAE;YACjC,qEAAqE;YACrE,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACxD,mBAAmB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;gBAC9E,UAAU,CAAC,OAAO,CAAC,CAAC,SAAwB,EAAE,EAAE;;oBAC5C,IAAI,SAAS,CAAC,SAAS,IAAI,KAAK,EAAE;wBAC9B,IAAI,gBAAS,CAAC,cAAc,0CAAE,OAAO,EAAE,KAAI,IAAI,EAAE;4BAC7C,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;yBAC7B;qBACJ;gBACL,CAAC,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;YAEH,aAAa,CAAC,OAAO,CAAC,CAAC,KAAa,EAAE,KAAa,EAAE,EAAE;gBACnD,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;QAEH,gDAAgD;QAEhD,2BAA2B;QAC3B,yBAAyB;QACzB,wDAAwD;QAExD,qCAAqC;QAErC,SAAS,CAAC,OAAO,CAAC,CAAC,IAAqC,EAAE,KAAa,EAAE,EAAE;YACvE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QACH,CAAC,CAAC,uCAAuC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAGzE,+CAA+C;QAC/C,yBAAyB;QACzB,iEAAiE;QACjE,iEAAiE;QACjE,iEAAiE;QACjE,qEAAqE;QACrE,kEAAkE;QAElE,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;YACtB,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClC,SAAS,EAAE,CAAC;wBACR,KAAK,EAAE,IAAI,CAAC,WAAW;wBACvB,SAAS,EAAE,UAAU;wBACrB,KAAK,EAAE;4BACH,IAAI,EAAE,8BAA8B,GAAG,IAAI,CAAC,WAAW,GAAG,GAAG;yBAChE;wBACD,MAAM,EAAE,CAAC;qBACZ,CAAC;aACL,CAAC,CAAC;SACN;aACI;YACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;gBAClC,SAAS,EAAE,EAAE;aAChB,CAAC,CAAC;SACN;QAED,IAAI,GAAG,GAAW,CAAC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC;QAClG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAClC,gBAAgB;YAChB,GAAG,EAAE,GAAG;SACX,CAAC,CAAC;IAEP,CAAC;IAEO,eAAe;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,2BAA2B,CAAC,CAAC,SAAS,CAAC;YACtD,0FAA0F;YAC1F,SAAS,EAAE,IAAI;YACf,IAAI,EAAE,KAAK;YACX,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,KAAK;YAChB,OAAO,EAAE,IAAI;YACb,kBAAkB;YAClB,cAAc,EAAE,IAAI;YACpB,aAAa,EAAE,IAAI;YACnB,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE;gBACL,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,8BAA8B,EAAE;gBACpF,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,yBAAyB,EAAE,IAAI,EAAE,uBAAuB,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE;gBAC/L,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,sBAAsB,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,gCAAgC,EAAE,MAAM,EAAE,oDAAkC,EAAE;gBACrL,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,+EAA+E,EAAE,SAAS,EAAE,6CAA6C,EAAE,MAAM,EAAE,oDAAkC,EAAE;gBACrP,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE;aACtC;YACD,UAAU,EAAE;gBACR,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE;aAClC;YACD,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,GAAG,IAAI,8CAAkB,CAAC;YACxC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,+CAA+C,EAAE,KAAK,EAAE,OAAO,EAAE;YACxH,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,mBAAmB,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,wCAAwC,EAAE,KAAK,EAAE,OAAO,EAAE;YAC/I,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,uBAAuB,EAAE;YAC5G,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,8CAA8C,EAAE,MAAM,EAAE,+BAAa,EAAE;SACzI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC1B,CAAC;IAEO,0BAA0B;QAE9B,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,KAAK,CAAC,0BAA0B,EAAE;YACjE,KAAK,EAAE;gBACH,QAAQ,EAAE,GAAG;gBACb,eAAe,EAAE;oBACb,QAAQ,EAAE;wBACN,KAAK,EAAE,OAAO;wBACd,aAAa,EAAE,QAAQ;wBACvB,CAAC,EAAE,CAAC;wBACJ,CAAC,EAAE,EAAE;qBACR;oBACD,UAAU,EAAE,OAAO;iBACtB;aACJ;YACD,OAAO,EAAE;gBACL,0BAA0B;gBAC1B,WAAW,EAAE,QAAQ;gBACrB,MAAM,EAAE,IAAI;gBACZ,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,IAAI;gBACb,SAAS,EAAE,UAAU,OAAO;oBACxB,2CAA2C;oBAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACtB,OAAO,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACxD,CAAC;aACJ;YACD,KAAK,EAAE;gBACH,IAAI,EAAE,EAAE;aACX;YACD,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;YAC3B,WAAW,EAAE;gBACT,IAAI,EAAE;oBACF,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;iBAC7B;aACJ;YACD,KAAK,EAAE;gBACH,KAAK,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE;aAChC;YACD,KAAK,EAAE;gBACH,IAAI,EAAE,UAAU;gBAChB,SAAS,EAAE;oBACP,IAAI,EAAE,IAAI;iBACb;gBACD,MAAM,EAAE;oBACJ,SAAS,EAAE;wBACP,uDAAuD;wBACvD,OAAO,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvD,CAAC;iBACJ;gBACD,MAAM,EAAE;oBACJ,gBAAgB,EAAE,UAAU,KAAK;wBAC7B,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,OAAO,EAAE;4BACxD,CAAC,CAAC,qCAAqC,CAAC,CAAC,IAAI,EAAE,CAAC;yBAEnD;6BACI;4BACD,CAAC,CAAC,qCAAqC,CAAC,CAAC,IAAI,EAAE,CAAC;yBACnD;oBACL,CAAC;iBACJ;aACJ;YACD,MAAM,EAAE;gBACJ,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,IAAI;gBACd,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,OAAO;gBACd,aAAa,EAAE,KAAK;gBACpB,MAAM,EAAE,UAAU;aACrB;SACJ,CAAC,CAAC;QAEH,IAAI,YAAY,GAAa,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;QAC5K,IAAI,eAAe,GAAa,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACtJ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACtE,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAC5B,IAAI,EAAE,mBAAmB,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBACjD,IAAI,EAAE,EAAE;gBACR,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;gBACtB,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC;aAChC,CAAC,CAAC;SACN;IACL,CAAC;IAEO,iBAAiB;QACrB,CAAC,CAAC,qCAAqC,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhD,CAAC,CAAC,qCAAqC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;YAChD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC;QACpC,CAAC,CAAC;IACN,CAAC;IAED,sBAAsB,CAAC,IAAY;QAC/B,IAAI,OAAO,GAAa,EAAE,CAAC;QAE3B,IAAI,IAAI,IAAI,SAAS,EAAE;YAAE,OAAO,GAAG,CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAE,CAAC;SAAE;QAElE,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAClE,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAAE;iBAC/D;gBAAE,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aAAE;SACnD;IACL,CAAC;IAED,oBAAoB,CAAC,EAAO,EAAE,IAAY;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YAC3C,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,EAAE,EAAE;gBACpC,IAAI,IAAI,GAAU,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;gBACzD,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACrC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBACvF,MAAM;aACT;SACJ;IACL,CAAC;;AAhUL,kDAkUC;AAxTG,ygBAAygB;AAC3f,wCAAoB,GAAa,CAAC,8BAA8B,EAAE,0BAA0B,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,+BAA+B,EAAE,gCAAgC,EAAE,iCAAiC,EAAE,eAAe,EAAE,sBAAsB,EAAE,2BAA2B,CAAC,CAAC;AAyTva,MAAa,wBAAwB;IAajC;QAVA,uBAAkB,GAAW,CAAC,CAAC;QAC/B,yBAAoB,GAAW,EAAE,CAAC;QAClC,0BAAqB,GAAW,CAAC,CAAC;QAClC,4BAAuB,GAAW,EAAE,CAAC;QACrC,iBAAY,GAAW,CAAC,CAAC;QACzB,mBAAc,GAAW,EAAE,CAAC;QAC5B,YAAO,GAAW,CAAC,CAAC,CAAC;QAIL,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAAC,CAAC;IAE7C,QAAQ,CAAC,aAA4B;QACjC,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,IAAI,aAAa,CAAC,eAAe,IAAI,CAAC,EAAE;YACpC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1C;aAED;YACI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1C;IACL,CAAC;IAED,gBAAgB,CAAC,YAAoB,EAAE,eAAuB;QAC1D,qGAAqG;QACrG,iHAAiH;QACjH,6GAA6G;QAC7G,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;QACxF,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;QACjG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAChF,CAAC;IAEO,eAAe,CAAC,KAAa,EAAE,KAAa,EAAE,IAAY;QAC9D,IAAI,OAAO,GAAW,qCAAc,EAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9D,IAAI,OAAO,GAAW,oFAAoF,GAAG,IAAI,CAAC,WAAW,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;QAC1J,IAAI,IAAI,IAAI,SAAS,EAAE;YAAE,OAAO,IAAI,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC;SAAE;aAClF;YAAE,OAAO,IAAI,KAAK,GAAG,EAAE,CAAC;SAAE;QAC/B,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,eAAe,CAAC,IAAY;QACxB,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aAC5C,IAAI,IAAI,IAAI,YAAY;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;aACpD,IAAI,IAAI,IAAI,SAAS;YAAE,OAAO,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;CACJ;AAnDD,4DAmDC;AAED,MAAa,+BAA+B;IAKxC,YAAY,IAAY,EAAE,KAAa;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;CACJ;AAVD,0EAUC;;;;;;;;;;;;;;;;;ACzYD,MAAa,WAAW;IAEpB,MAAM,CAAC,QAAQ,CAAC,EAAU;QACtB,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,WAAW,CAAC;YAC7B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,CAAC;YAC5B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,kBAAkB,CAAC;YACpC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,qBAAqB,CAAC;YACvC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC1B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC1B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC1B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC3B,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,kBAAkB,CAAC;YACpC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,uBAAuB,CAAC;YAC1C,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,QAAQ,CAAC;YAC3B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAC5B,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,CAAC;YAE5B,OAAO,CAAC,CAAC,OAAO,SAAS,CAAC;SAC7B;IACL,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,EAAU;QAC9B,QAAQ,EAAE,EAAE;YACR,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc;YAClC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa;YACjC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;YAC/C,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB;YACzC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;YAChC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;YAChC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;YAChC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY;YACjC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW;YAChC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW;YACjC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW;YACjC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,WAAW;YACjC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,YAAY;YAClC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,E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","file":"secure.07df520a86d8daeaa2de.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"secure\"] = factory();\n\telse\n\t\troot[\"lib\"] = root[\"lib\"] || {}, root[\"lib\"][\"secure\"] = factory();\n})(window, function() {\nreturn ","import { DoArraysOverlap, FormatStringByWordLength, Split, Join } from \"../../../shared/scripts/array-functions\";\r\nimport { GetDateFromString } from \"../../../shared/scripts/date-functions\";\r\n\r\n\r\nexport class Task {\r\n SortOrder: number;\r\n Name: string;\r\n TaskCategory: string;\r\n CompletionCriteria: string;\r\n PlannedStartDate: string = \"\";\r\n PlannedEndDate: string = \"\";\r\n ActualStartDate: string = \"\";\r\n ActualEndDate: string = \"\";\r\n Comments: string;\r\n StatusId: number;\r\n Status: string;\r\n IsMilestoneTask: string;\r\n IsCriticalTask: string;\r\n IsMostCurrentTask: string;\r\n IsKeyDocument: string;\r\n StudyArea: string;\r\n StaffPipeSeparated: string = \"\";\r\n //FileLinksPipeSeparated: string = \"\";\r\n ModifiedDate: string;\r\n VersionLabel: string = \"\";\r\n DependenciesPipeSeparated: string = \"\";\r\n FileNames: string[] = [];\r\n FileLinks: string[] = [];\r\n\r\n DisplayName: string;\r\n DisplayComments: string;\r\n DisplayCompletionCriteria: string;\r\n DisplayMilestoneTask: string;\r\n DisplayCriticalTask: string;\r\n DisplayMostCurrentTask: string;\r\n DisplayStaff: string;\r\n DisplayFiles: string;\r\n StaffList: string[];\r\n FileList: string[];\r\n DependencyList: string[] = [];\r\n GanttTaskCategory: string;\r\n\r\n Initialize(): void {\r\n\r\n //console.log(this);\r\n\r\n //if (this.ActualEndDate) { this.Status = \"Completed\"; }\r\n //else if (this.ActualStartDate) { this.Status = \"In Progress\"; }\r\n //else { this.Status = \"Not Started\"; }\r\n\r\n //0: Not Started, 1: In Progress, 2: Complete, 3: Past Due, 4: Unknown\r\n let plannedStart: Date = this.getDate(this.PlannedStartDate);\r\n let plannedEnd: Date = this.getDate(this.PlannedEndDate);\r\n let actualStart: Date = this.getDate(this.ActualStartDate);\r\n let actualEnd: Date = this.getDate(this.ActualEndDate);\r\n\r\n let plannedEndBeforeToday: boolean = false;\r\n if (plannedEnd != undefined) plannedEndBeforeToday = plannedEnd < new Date();\r\n\r\n this.StatusId = 4; //unknown\r\n if (actualEnd != undefined) this.StatusId = 2; //complete\r\n else if (actualStart != undefined && !plannedEndBeforeToday) this.StatusId = 1; //in progress\r\n else if (plannedEndBeforeToday) this.StatusId = 3; //overdue\r\n else if (plannedStart != undefined && actualStart == undefined) this.StatusId = 0; //not started\r\n\r\n switch (this.StatusId) {\r\n case 0: this.Status = \"Not Started\"; break;\r\n case 1: this.Status = \"In Progress\"; break;\r\n case 2: this.Status = \"Complete\"; break;\r\n case 3: this.Status = \"Overdue\"; break;\r\n case 4:\r\n default: this.Status = \"Unknown\"; break;\r\n }\r\n\r\n //if (this.Name == \"Q4 CSR Template\") {\r\n // console.log(plannedStart), plannedEnd, actualStart, actualEnd, this);\r\n //}\r\n\r\n if (this.PlannedStartDate) this.PlannedStartDate += ' 00:00:00';\r\n if (this.PlannedEndDate) this.PlannedEndDate += ' 00:00:00';\r\n if (this.ActualEndDate) this.ActualEndDate += ' 00:00:00';;\r\n\r\n if (this.ActualStartDate == undefined) this.ActualStartDate = \"\";\r\n else if (this.ActualStartDate.length > 0) this.ActualStartDate += ' 00:00:00';\r\n else if (this.ActualEndDate) { this.ActualStartDate = this.ActualEndDate; } //if no actual start but an actual end, use same date\r\n\r\n this.DisplayName = FormatStringByWordLength(this.Name, 5);\r\n this.DisplayComments = FormatStringByWordLength(this.Comments, 6);\r\n this.DisplayCompletionCriteria = FormatStringByWordLength(this.CompletionCriteria, 6);\r\n\r\n if (this.IsMilestoneTask) this.DisplayMilestoneTask = \"Yes\";\r\n else this.DisplayMilestoneTask = \"No\";\r\n\r\n if (this.IsCriticalTask) this.DisplayCriticalTask = \"Yes\";\r\n else this.DisplayCriticalTask = \"No\";\r\n\r\n if (this.IsMostCurrentTask) this.DisplayMostCurrentTask = \"Yes\";\r\n else this.DisplayMostCurrentTask = \"No\";\r\n\r\n if (this.StaffPipeSeparated) {\r\n this.StaffList = Split(this.StaffPipeSeparated, \"|\");\r\n this.DisplayStaff = Join(this.StaffList, \", \", false, true);\r\n }\r\n else this.DisplayStaff = \"\";\r\n\r\n if (this.FileLinks) {\r\n this.FileList = this.FileLinks.map((file: string, index: number) => {\r\n let filename: string = \"File\";\r\n if (this.FileNames[index]) { filename = this.FileNames[index]; }\r\n return \"\" + filename +\"\";\r\n });\r\n //console.log(this.FileLinksPipeSeparated, this.FileList);\r\n this.DisplayFiles = Join(this.FileList, \"
\", false, true);\r\n }\r\n else this.DisplayFiles = \"\";\r\n\r\n if (this.DependenciesPipeSeparated) {\r\n //this.DependencyList = Split(this.DependenciesPipeSeparated, \"|\");\r\n //console.log(this);\r\n }\r\n else this.DependencyList = [];\r\n }\r\n\r\n private getDate(dateString: string): Date {\r\n if (dateString == undefined || dateString.length == 0) return undefined;\r\n else return GetDateFromString(dateString, \"hyphens-year-month-day\");\r\n }\r\n\r\n matchesFilter(category: any, status: any, milestoneTask: any, criticalTask: any, mostCurrentTask: any): boolean {\r\n\r\n if (!DoArraysOverlap(category, this.TaskCategory)) { return false; }\r\n if (!DoArraysOverlap(status, this.Status)) { return false; }\r\n\r\n if (milestoneTask != undefined) {\r\n if (!DoArraysOverlap(milestoneTask, this.DisplayMilestoneTask)) { return false; }\r\n }\r\n if (criticalTask != undefined) {\r\n if (!DoArraysOverlap(criticalTask, this.DisplayCriticalTask)) { return false; }\r\n }\r\n if (mostCurrentTask != undefined) {\r\n if (!DoArraysOverlap(mostCurrentTask, this.DisplayMostCurrentTask)) { return false; }\r\n }\r\n\r\n return true;\r\n }\r\n}","import { OutcomeEvent } from \"../scripts/outcomes.entities\";\r\nimport { OutcomesLookup } from \"../scripts/outcomes.lookup\";\r\n\r\n\r\n\r\nexport class OutcomesSummarySeries {\r\n name: string;\r\n type: string;\r\n typeId: number; //visitId, siteNumber, etc.\r\n sortValue: number;\r\n outcomes: Map;\r\n\r\n constructor(name: string, type: string, typeId: number) {\r\n this.name = name;\r\n this.type = type;\r\n this.typeId = typeId;\r\n this.sortValue = (type == \"outcome\") ? OutcomesLookup.GetOutcomeOrdering(typeId) : 0;\r\n this.outcomes = new Map();\r\n }\r\n\r\n addOutcomeEvent(event: OutcomeEvent): void {\r\n\r\n //Visit status\r\n let outcomeArray: OutcomeEvent[];\r\n if (this.outcomes.has(event.OutcomeStatusId)) { outcomeArray = this.outcomes.get(event.OutcomeStatusId); }\r\n else { outcomeArray = []; }\r\n outcomeArray.push(event);\r\n this.outcomes.set(event.OutcomeStatusId, outcomeArray);\r\n\r\n\r\n if (this.type == \"site\") {\r\n this.sortValue += 1;\r\n }\r\n\r\n if (event.OutcomeStatusId == 4) { //not available\r\n if (this.outcomes.has(event.ReasonId)) { outcomeArray = this.outcomes.get(event.ReasonId); }\r\n else { outcomeArray = []; }\r\n outcomeArray.push(event);\r\n this.outcomes.set(event.ReasonId, outcomeArray);\r\n }\r\n }\r\n}","import { FinancialGraphData } from './financials.entities' \r\nimport { TableColumnGroup, TableColumnVisibilityController } from \"../../../../shared/scripts/table-column-visibility\";\r\nimport { FormatNumberWithCommas } from \"../../../../shared/scripts/number-functions\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\nrequire('highcharts/modules/drilldown')(Highcharts);\r\n\r\nexport class FinancialVendorCharts {\r\n\r\n expendituresChart: any;\r\n lastInvoiceDateChart: any;\r\n performedDrilldown: boolean;\r\n chartCategories: string[];\r\n\r\n tableId: string = \"subcontract-vendor-table\";\r\n tableWrapperId: string = this.tableId + \"_wrapper\";\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n allSubcontracts: FinancialGraphData[];\r\n currentSubcontracts: FinancialGraphData[];\r\n\r\n containerId: string = \"#financial-summary-by-vendor\";\r\n\r\n constructor() {\r\n Highcharts.setOptions({\r\n lang: {\r\n drillUpText: '◁ Back',\r\n thousandsSep: ','\r\n }\r\n });\r\n\r\n this.performedDrilldown = false;\r\n }\r\n\r\n setGraphContent(graphData: FinancialGraphData[]): void {\r\n this.setExpendituresChart(graphData);\r\n this.setLastInvoiceDateChart(graphData);\r\n\r\n this.chartCategories = [];\r\n graphData.forEach((study) => this.chartCategories.push(study.Name));\r\n\r\n this.allSubcontracts = graphData;\r\n this.currentSubcontracts = graphData;\r\n this.setSubcontractDataTable(graphData);\r\n }\r\n\r\n private setExpendituresChart(graphData: FinancialGraphData[]): void {\r\n\r\n $(this.containerId).find('#project-expenditure-vendor-graph').empty();\r\n $(this.containerId).find('#project-expenditure-vendor-graph').height(this.getChartHeight(graphData.length));\r\n\r\n let series = this.getExpenditureSeries(graphData);\r\n\r\n this.expendituresChart = Highcharts.chart('project-expenditure-vendor-graph', {\r\n chart: {\r\n type: 'bar',\r\n events: {\r\n drilldown: (e) => {\r\n $(this.containerId).find('#project-expenditure-vendor-graph').height(this.getChartHeight(e.seriesOptions.data.length));\r\n let clickedCategory: string = e.seriesOptions.id.substring(0, e.seriesOptions.id.indexOf(\"-\")).trim();\r\n //this.expendituresChart.setTitle(null, { text: 'Category: ' + clickedCategory });\r\n let undoButton: string = ``\r\n this.expendituresChart.setTitle({ text: `${undoButton} Displaying categories for: ${clickedCategory}` }, null);\r\n\r\n if (!this.performedDrilldown) {\r\n\r\n this.performedDrilldown = true;\r\n let point: any = this.lastInvoiceDateChart.get('days-since-last-invoice-series').points.find((pt: any) => pt.name == clickedCategory);\r\n if (point) {\r\n point.doDrilldown(false);\r\n } \r\n this.drilldownTable(clickedCategory);\r\n }\r\n\r\n this.expendituresChart.reflow();\r\n this.expendituresChart.redraw();\r\n\r\n $(this.containerId).find(\".chart-drillup-btn\").on('click', () => {\r\n this.drillupTable();\r\n });\r\n //this.fadeLabels(\"#project-expenditure-graph\"); \r\n },\r\n drillup: (e) => {\r\n $(this.containerId).find('#project-expenditure-vendor-graph').height(this.getChartHeight(e.seriesOptions.data.length));\r\n //this.expendituresChart.setTitle(null, { text: 'Click a category to learn more' });\r\n this.expendituresChart.setTitle({ text: 'Click a vendor to learn more' }, null);\r\n\r\n if (this.performedDrilldown) {\r\n this.performedDrilldown = false;\r\n this.lastInvoiceDateChart.drillUp();\r\n }\r\n this.expendituresChart.reflow();\r\n this.expendituresChart.redraw();\r\n\r\n //this.fadeLabels(\"#project-expenditure-graph\");\r\n }\r\n },\r\n zoomType: 'y',\r\n panning: true,\r\n marginTop: 70\r\n },\r\n credits: { enabled: false },\r\n //title: { text: null },\r\n //subtitle: { text: 'Click a category to learn more', align: 'left', style: {color: 'black'} },\r\n title: { text: 'Click a vendor to learn more', align: 'left', margin: 0, style: { color: 'black', fontSize: '14px' }, useHTML: true },\r\n tooltip: {\r\n valuePrefix: '$',\r\n valueDecimals: 2\r\n //pointFormat: \"$ {point.y:,.2f}\"\r\n },\r\n xAxis: {\r\n type: 'category'\r\n },\r\n yAxis: {\r\n min: 0,\r\n endOnTick: false, // helps with cropping data labels\r\n maxPadding: 0.2, // larger value has more space for data labels (default is 0.05)\r\n //reversedStacks: false,\r\n title: { text: '' },\r\n labels: {\r\n formatter: function () {\r\n //return '$' + this.axis.defaultLabelFormatter.call(this);\r\n if (this.value >= 100000) {\r\n return '$' + (this.value / 1000000) + 'M'\r\n }\r\n else {\r\n return '$' + this.value;\r\n }\r\n }\r\n },\r\n stackLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n if (this.total >= 100000) {\r\n let millionsVal = (this.total / 1000000);\r\n let styledVal = Highcharts.numberFormat(millionsVal, 2, '.', ',');\r\n return \"$\" + styledVal + 'M'\r\n }\r\n else {\r\n let styledVal = Highcharts.numberFormat(this.total, 0, '.', ',');\r\n return \"$\" + styledVal\r\n }\r\n\r\n },\r\n inside: false, //label issues\r\n //crop: false,\r\n //overflow: 'none'\r\n }\r\n },\r\n legend: { reversed: true, verticalAlign: 'top' },\r\n plotOptions: {\r\n series: { stacking: 'normal' },\r\n bar: { borderWidth: 0 }\r\n },\r\n series: series.primarySeries,\r\n drilldown: {\r\n drillUpButton: {\r\n position: {\r\n align: 'left',\r\n y: -40,\r\n x: -40\r\n },\r\n theme: {\r\n display: 'none'\r\n }\r\n },\r\n series: series.drillDownSeries\r\n }\r\n });\r\n }\r\n\r\n private setLastInvoiceDateChart(graphData: FinancialGraphData[]): void {\r\n\r\n $(this.containerId).find('#days-since-last-invoice-vendor-graph').empty();\r\n $(this.containerId).find('#days-since-last-invoice-vendor-graph').height(this.getChartHeight(graphData.length));\r\n\r\n let series = this.getLastInvoiceDateSeries(graphData);\r\n\r\n this.lastInvoiceDateChart = Highcharts.chart('days-since-last-invoice-vendor-graph', {\r\n chart: {\r\n type: 'bar',\r\n events: {\r\n drilldown: (e) => {\r\n $(this.containerId).find('#days-since-last-invoice-vendor-graph').height(this.getChartHeight(e.seriesOptions.data.length));\r\n let clickedCategory: string = e.seriesOptions.id.substring(0, e.seriesOptions.id.indexOf(\"-\")).trim(); \r\n //this.lastInvoiceDateChart.setTitle(null, { text: 'Category: ' + clickedCategory });\r\n\r\n if (!this.performedDrilldown) {\r\n this.performedDrilldown = true;\r\n //this.expendituresChart.xAxis[0].drilldownCategory(e.category);\r\n\r\n let clickedIndex = this.chartCategories.findIndex((category) => category == clickedCategory);\r\n if (clickedIndex != -1) {\r\n this.expendituresChart.xAxis[0].drilldownCategory(clickedIndex);\r\n this.drilldownTable(clickedCategory);\r\n }\r\n }\r\n\r\n this.fadeLabels(\"#days-since-last-invoice-vendor-graph\");\r\n this.fadeLabels(\"#project-expenditure-vendor-graph\");\r\n this.lastInvoiceDateChart.reflow();\r\n },\r\n drillup: (e) => {\r\n $(this.containerId).find('#days-since-last-invoice-vendor-graph').height(this.getChartHeight(e.seriesOptions.data.length));\r\n //this.lastInvoiceDateChart.setTitle(null, { text: 'Click a category to learn more' });\r\n\r\n if (this.performedDrilldown) {\r\n this.performedDrilldown = false;\r\n this.expendituresChart.drillUp();\r\n }\r\n\r\n this.fadeLabels(\"#days-since-last-invoice-vendor-graph\");\r\n this.fadeLabels(\"#project-expenditure-vendor-graph\");\r\n this.lastInvoiceDateChart.reflow();\r\n }\r\n },\r\n zoomType: 'y',\r\n panning: true,\r\n marginTop: 70\r\n },\r\n credits: { enabled: false },\r\n title: { text: '-', align: 'left', margin: 0, style: { color: 'transparent', fontSize: '14px' }, useHTML: true },\r\n //subtitle: { text: 'Click a category to learn more', align: 'left' },\r\n xAxis: {\r\n type: 'category'\r\n },\r\n yAxis: {\r\n min: 0,\r\n endOnTick: false, // helps with cropping data labels\r\n maxPadding: 0.2, // larger value has more space for data labels (default is 0.05)\r\n //reversedStacks: false,\r\n title: { text: '' },\r\n labels: {\r\n //formatter: function () {\r\n // //return '$' + this.axis.defaultLabelFormatter.call(this);\r\n // return '$' + (this.value / 1000000) + 'M'\r\n //}\r\n },\r\n stackLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.total, 0, '.', ','); \r\n },\r\n inside: false, //label issues\r\n //crop: false,\r\n //overflow: 'none'\r\n }\r\n },\r\n legend: { reversed: true, verticalAlign: 'top' },\r\n plotOptions: {\r\n series: { stacking: 'normal' },\r\n bar: { borderWidth: 0 }\r\n },\r\n series: series.primarySeries,\r\n drilldown: {\r\n drillUpButton: {\r\n position: {\r\n y: -40\r\n },\r\n theme: {\r\n display: 'none'\r\n }\r\n },\r\n series: series.drilldownSeries\r\n }\r\n });\r\n }\r\n\r\n private setSubcontractDataTable(data: FinancialGraphData[]): void {\r\n let chart = this;\r\n let columns: any[] = [\r\n { data: { _: \"Id\", display: \"StudyNameDisplay\" }, title: \"Vendor\", className: \"vendor-vendor text-left font-size12 nowrap\", orderable: false },\r\n { data: { _: \"Name\", display: \"VendorNameDisplay\" }, title: \"Category\", className: \"vendor-category text-left font-size12 nowrap\" },\r\n { data: \"SubcontractNumber\", title: \"Subcontract #\", className: \"vendor-number text-left font-size12 nowrap\" },\r\n { data: \"POID\", title: \"PO/Vendor
ID\", className: \"vendor-poid text-center font-size12 nowrap\" },\r\n { data: \"ProjectLevel\", title: \"Project
Code\", className: \"vendor-project-code text-center font-size12 nowrap\" },\r\n { data: { _: \"SubcontractStartDateCompare\", display: \"SubcontractStartDate\" }, title: \"Subcontract
Start Date\", className: \"vendor-subcontract-start-date text-center font-size12 nowrap\" },\r\n { data: { _: \"SubcontractEndDateCompare\", display: \"SubcontractEndDate\" }, title: \"Subcontract
End Date\", className: \"vendor-subcontract-end-date text-center font-size12 nowrap\" },\r\n { data: \"SubcontractType\", title: \"Subcontract
Type\", className: \"vendor-subcontract-type text-center font-size12 nowrap\" },\r\n\r\n { data: { _: \"TotalSubcontractAmount\", display: \"TotalSubcontractAmountDisplay\" }, title: \"Total
Subcontract
Amount\", className: \"vendor-subcontract-amount text-center font-size12 nowrap\" },\r\n { data: { _: \"TotalRestrictedFunds\", display: \"TotalRestrictedFundsDisplay\" }, title: \"Total
Restricted
Funds\", className: \"vendor-restricted-funds text-center font-size12 nowrap\" },\r\n { data: { _: \"TotalUnrestrictedFunds\", display: \"TotalUnrestrictedFundsDisplay\" }, title: \"Total
Unrestricted
Funds\", className: \"vendor-unrestricted-funds text-center font-size12 nowrap\" },\r\n { data: { _: \"RemainingUnrestrictedFunds\", display: \"RemainingUnrestrictedFundsDisplay\" }, title: \"Remaining
Unrestricted
Funds\", className: \"vendor-remaining-unrestricted text-center font-size12 nowrap\" },\r\n\r\n { data: { _: \"TotalInvoicedToDate\", display: \"TotalInvoicedToDateDisplay\" }, title: \"Total
Invoiced
To Date\", className: \"vendor-invoiced-to-date text-center font-size12 nowrap\" },\r\n { data: { _: \"LastInvoiceDateCompare\", display: \"LastInvoiceDate\" }, title: \"Last
Invoice
Date\", className: \"vendor-last-invoice-date text-center font-size12 nowrap\" }\r\n ];\r\n\r\n let tableColumnGroups: TableColumnGroup[] = [\r\n\r\n //new TableColumnGroup(\"Vendor\", true, [], \"vendor-vendor\"),\r\n new TableColumnGroup(\"Category\", false, [], \"vendor-category\"),\r\n new TableColumnGroup(\"Subcontract #\", false, [], \"vendor-number\"),\r\n new TableColumnGroup(\"PO/Vendor ID\", false, [], \"vendor-poid\"),\r\n new TableColumnGroup(\"Project Code\", false, [], \"vendor-project-code\"),\r\n new TableColumnGroup(\"Subcontract Start Date\", false, [], \"vendor-subcontract-start-date\"),\r\n new TableColumnGroup(\"Subcontract End Date\", false, [], \"vendor-subcontract-end-date\"),\r\n new TableColumnGroup(\"Subcontract Type\", false, [], \"vendor-subcontract-type\"),\r\n\r\n new TableColumnGroup(\"Total Subcontract Amount\", true, [], \"vendor-subcontract-amount\"),\r\n new TableColumnGroup(\"Total Restricted Funds\", true, [], \"vendor-restricted-funds\"),\r\n new TableColumnGroup(\"Total Unrestricted Funds\", true, [], \"vendor-unrestricted-funds\"),\r\n new TableColumnGroup(\"Remaining Unrestricted Funds\", true, [], \"vendor-remaining-unrestricted\"),\r\n new TableColumnGroup(\"Total Invoiced to Date\", true, [], \"vendor-invoiced-to-date\"),\r\n new TableColumnGroup(\"Last Invoice Date\", true, [], \"vendor-last-invoice-date\")\r\n ];\r\n\r\n this.dataTable = $('#' + this.tableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"added-since\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: true,\r\n pagingType: 'simple',\r\n pageLength: 50,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n /*fixedColumns: {\r\n leftColumns: 1\r\n },*/\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n title: \"RECOVER-CT Financials Export\"\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n },\r\n {\r\n extend: 'csv',\r\n text: 'Export All',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n title: \"RECOVER-CT Financials Export All\",\r\n customize: function (csv) {\r\n let allExportItems = [];\r\n chart.allSubcontracts.map(item => {\r\n item.VendorNameDisplay = \"TOTAL\"\r\n allExportItems.push(item);\r\n item.DrillDown.map(drillDownItem => {\r\n allExportItems.push(drillDownItem);\r\n })\r\n });\r\n let modifiedCSV = chart.convertToCSV(allExportItems);\r\n return modifiedCSV;\r\n }\r\n }\r\n ],\r\n order: [0, 'asc'],\r\n data: this.allSubcontracts,\r\n initComplete: (settings, json) => {\r\n // Set up Drillup Button\r\n $(this.containerId).find(\"th.vendor-vendor\").html(`\r\n
\r\n
\r\n \r\n
\r\n
Vendor
\r\n
\r\n `);\r\n\r\n $(this.containerId).find(\".table-drillup-btn\").on('click', () => {\r\n this.drillupTable();\r\n });\r\n\r\n // Set up Drilldown\r\n let charts = this;\r\n $(this.containerId).find(\".table-drilldown-btn\").on('click', function () {\r\n // Drilldown the charts\r\n let clickedCategory = $(this).text();\r\n let clickedIndex = charts.chartCategories.findIndex((category) => category == clickedCategory);\r\n charts.expendituresChart.xAxis[0].drilldownCategory(clickedIndex);\r\n\r\n // Update the Table\r\n charts.drilldownTable(clickedCategory);\r\n });\r\n }\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .spacer\").addClass('col-12 col-md-1');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").addClass('col-12 col-md-5 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.tableId, (this.tableId + '-column-select'), tableColumnGroups);\r\n\r\n $('#' + this.tableId).on('search.dt', (e, settings) => {\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n this.setCountFoundLabel(this.allSubcontracts.length);\r\n\r\n $(\"#\" + this.tableWrapperId).find(\"th.sorting\").on('click', () => {\r\n this.dataTable.columns.adjust().draw();\r\n })\r\n\r\n //this.initializeTableLinks();\r\n this.dataTable.on('draw', (e, settings) => {\r\n this.initializeTableLinks();\r\n });\r\n\r\n $(\"#summary-tab\").on('click', () => {\r\n setTimeout(() => {\r\n this.dataTable.columns.adjust().draw();\r\n }, 500)\r\n });\r\n\r\n $(\"#summary-chart-switch\").on('change', () => {\r\n setTimeout(() => {\r\n this.dataTable.columns.adjust().draw();\r\n }, 250)\r\n }); \r\n }\r\n\r\n private setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.tableId + '-found-count').text(\"No Entries Found\"); break;\r\n case 1: $('#' + this.tableId + '-found-count').text(\"1 Entry Found\"); break;\r\n default: $('#' + this.tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Entries Found\");\r\n }\r\n }\r\n\r\n private initializeTableLinks() {\r\n let charts = this;\r\n\r\n $(this.containerId).find(\".table-drilldown-btn\").off('click');\r\n $(this.containerId).find(\".table-drilldown-btn\").on('click', function() {\r\n // Drilldown the charts\r\n let clickedCategory = $(this).text();\r\n let clickedIndex = charts.chartCategories.findIndex((category) => category == clickedCategory);\r\n charts.expendituresChart.xAxis[0].drilldownCategory(clickedIndex);\r\n });\r\n }\r\n\r\n private drilldownTable(category: string): void {\r\n $(this.containerId).find(\".table-drillup-container\").removeClass(\"d-none\");\r\n let subcontracts = this.allSubcontracts.find(subcontract => subcontract.StudyName == category).DrillDown;\r\n if (!subcontracts) {\r\n return\r\n }\r\n\r\n // Gives you selected column Names\r\n let selectedColumnNames: string[] = $(`#${this.tableId}-column-filter-dropdown`).val();\r\n\r\n // Gives you all the names of the datatable\r\n let columnHeaders = this.dataTable.columns().header().toArray();\r\n let allColumnNames = [];\r\n columnHeaders.forEach(header => {\r\n let columnName = $(header).html().replace(\"
\", \" \").replace(\"
\", \" \").trim();\r\n allColumnNames.push(columnName);\r\n });\r\n\r\n // Get Selected Column Indexes\r\n let selectedColumnIndexes = [1,6,7] // Defaults\r\n for (let i = 0; i < allColumnNames.length; i++) {\r\n if (selectedColumnNames.indexOf(allColumnNames[i]) != -1 && selectedColumnIndexes.indexOf(i) == -1) {\r\n selectedColumnIndexes.push(i);\r\n }\r\n }\r\n \r\n\r\n // Show columns for drilldown \r\n this.dataTable.columns(selectedColumnIndexes).visible(true, false);\r\n\r\n this.currentSubcontracts = subcontracts;\r\n this.updateTableContent(this.currentSubcontracts);\r\n this.clearSearchBar();\r\n }\r\n\r\n private drillupTable(): void {\r\n // Drilldown the charts\r\n $(this.containerId).find(\".table-drillup-container\").addClass(\"d-none\");\r\n this.expendituresChart.drillUp();\r\n\r\n // Show columns for drilldown \r\n this.dataTable.columns([1, 2, 3, 4, 5, 6, 7]).visible(false, false); // Blank for top level\r\n\r\n // Update the Tables\r\n this.updateTableContent(this.allSubcontracts);\r\n this.clearSearchBar();\r\n }\r\n\r\n private updateTableContent(subcontracts: FinancialGraphData[]): void {\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(subcontracts);\r\n this.dataTable.order([0, 'asc']).draw();\r\n\r\n this.setCountFoundLabel(subcontracts.length);\r\n\r\n setTimeout(() => {\r\n this.dataTable.columns.adjust().draw();\r\n }, 250)\r\n \r\n }\r\n\r\n\r\n private getChartHeight(entries: number): number {\r\n let value: number = 150 + (entries * 30 * 1.5);\r\n return value;\r\n }\r\n\r\n //Invoiced to Date: #E9C46A\r\n //Remaining Unrestricted: #77a6b6\r\n //Committed Restricted: #6e6e6e \r\n\r\n private getExpenditureSeries(data: FinancialGraphData[]) {\r\n let dataLabels: string[] = ['Committed Restricted', 'Remaining Unrestricted', 'Invoiced To-Date']; // Readable Data Labels\r\n let dataLabelIds: string[] = ['reserved-series', 'unreserved-series', 'invoiced-series']; // Data Label IDs\r\n let dataFields: string[] = ['CommittedRestricted', 'RemainingUnrestricted', 'InvoicedToDate']; // FinanacialGraphData fields mapped to Data Labels\r\n let seriesColors: string[] = ['#6e6e6e', '#77a6b6', '#E9C46A']; // Colors for each data label\r\n\r\n let drillDownSeries = [];\r\n let primarySeries = dataLabels.map((label: string, index: number) => {\r\n let primaryData: any[] = [];\r\n data.forEach((study: FinancialGraphData) => {\r\n\r\n primaryData.push({ \r\n name: study.Name, // Study Name\r\n y: study[dataFields[index]], // Amount of Money (per category)\r\n drilldown: study.Name + \"-\" + label // id of relative drilldown\r\n });\r\n\r\n let filteredRecords: FinancialGraphData[] = study.DrillDown; // Get vendors and other folks assoicated with study\r\n let detailedDrilldownData: any[] = [];\r\n filteredRecords.forEach((record: FinancialGraphData) => {\r\n detailedDrilldownData.push(\r\n [record.Name, record[dataFields[index]]] // [Vendor Name, Amount of Money (per category)]\r\n );\r\n });\r\n\r\n drillDownSeries.push({\r\n name: label, // Data Label\r\n id: study.Name + \"-\" + label, // id to help drilldown\r\n data: detailedDrilldownData // [Vendor Name, Amount of Money]\r\n });\r\n });\r\n\r\n return {\r\n id: dataLabelIds[index],\r\n name: label,\r\n data: primaryData,\r\n //drilldown: label,\r\n color: seriesColors[index],\r\n };\r\n });\r\n\r\n return {\r\n primarySeries: primarySeries,\r\n drillDownSeries: drillDownSeries\r\n };\r\n }\r\n\r\n private getLastInvoiceDateSeries(graphData: FinancialGraphData[]) {\r\n let drilldownLastInvoicedSeries: any[] = [];\r\n let invoiceData: any[] = graphData.map((study: FinancialGraphData) => {\r\n\r\n let filteredRecords = study.DrillDown;\r\n let detailedDrilldownData: any[] = [];\r\n filteredRecords.forEach((record: FinancialGraphData) => {\r\n detailedDrilldownData.push(\r\n [record.Name, record.DaysSinceLastInvoice]\r\n );\r\n });\r\n\r\n drilldownLastInvoicedSeries.push({\r\n name: \"Days Since Last Invoice\",\r\n id: study.Name + \"-\",\r\n data: detailedDrilldownData\r\n });\r\n\r\n return {\r\n name: study.Name,\r\n y: study.DaysSinceLastInvoice,\r\n drilldown: study.Name + \"-\"\r\n };\r\n });\r\n\r\n let primarySeries = [{\r\n id: 'days-since-last-invoice-series',\r\n name: \"Days Since Last Invoice\",\r\n data: invoiceData,\r\n color: \"#E9C46A\",\r\n }];\r\n\r\n return {\r\n primarySeries: primarySeries,\r\n drilldownSeries: drilldownLastInvoicedSeries \r\n }\r\n }\r\n\r\n private fadeLabels(chartId: string): void {\r\n let stackLabel = $(chartId).find('.highcharts-stack-labels').first();\r\n stackLabel.addClass(\"d-none\");\r\n stackLabel.removeClass(\"show-label\");\r\n setTimeout(() => {\r\n stackLabel.addClass(\"show-label\");\r\n stackLabel.removeClass(\"d-none\");\r\n this.hideExcessLabels(chartId);\r\n }, 20);\r\n \r\n }\r\n\r\n private hideExcessLabels(chartId: string): void {\r\n let stackLabels = $(chartId).find('.highcharts-stack-labels').children('.highcharts-label');\r\n let isHidden = false;\r\n if (stackLabels.length > 0) {\r\n if (stackLabels[0].getAttribute('visibility') == 'hidden') {\r\n return;\r\n }\r\n }\r\n for (let i = 0; i < stackLabels.length; i++) {\r\n // if the label is hidden\r\n if (stackLabels[i].getAttribute('visibility') == 'hidden') {\r\n isHidden = true;\r\n }\r\n\r\n if (isHidden && stackLabels[i].getAttribute('visibility') == 'visible') {\r\n //console.log(\"Hide This:\")\r\n //console.log(stackLabels[i]);\r\n stackLabels[i].setAttribute('visibility', 'hidden');\r\n }\r\n } \r\n }\r\n\r\n private convertToCSV(objArray: FinancialGraphData[]): string {\r\n let csvArray = [\r\n [\r\n \"\\\"Vendor\\\"\",\r\n \"\\\"Category\\\"\",\r\n \"\\\"Subcontract #\\\"\",\r\n \"\\\"PO/Vendor ID\\\"\",\r\n \"\\\"Project Code\\\"\",\r\n \"\\\"Subcontract Start Date\\\"\",\r\n \"\\\"Subcontract End Date\\\"\",\r\n \"\\\"Subcontract Type\\\"\",\r\n \"\\\"Total Subcontract Amount\\\"\",\r\n \"\\\"Total Restricted Funds\\\"\",\r\n \"\\\"Total Unrestricted Funds\\\"\",\r\n \"\\\"Remaining Unrestricted Funds\\\"\",\r\n \"\\\"Total Invoiced To Date\\\"\",\r\n \"\\\"Last Invoice Date\\\"\"\r\n ],\r\n\r\n ...objArray.map(item => [\r\n `\\\"${item.StudyName}\\\"`,\r\n `\\\"${item.VendorNameDisplay}\\\"`,\r\n `\\\"${item.SubcontractNumber}\\\"`,\r\n `\\\"${item.POID}\\\"`,\r\n `\\\"${item.ProjectLevel}\\\"`,\r\n `\\\"${item.SubcontractStartDate}\\\"`,\r\n `\\\"${item.SubcontractEndDate}\\\"`,\r\n `\\\"${item.SubcontractType}\\\"`,\r\n `\\\"${item.TotalSubcontractAmountDisplay}\\\"`,\r\n `\\\"${item.TotalRestrictedFundsDisplay}\\\"`,\r\n `\\\"${item.TotalUnrestrictedFundsDisplay}\\\"`,\r\n `\\\"${item.RemainingUnrestrictedFundsDisplay}\\\"`,\r\n `\\\"${item.TotalInvoicedToDateDisplay}\\\"`,\r\n `\\\"${item.LastInvoiceDate}\\\"`\r\n ])\r\n\r\n ];\r\n let csvJoined = csvArray.map(item => item.join(\",\"));\r\n let csvString = csvJoined.join(\"\\n\");\r\n\r\n return csvString;\r\n }\r\n\r\n clearSearchBar(): void {\r\n this.dataTable.search('').draw();\r\n }\r\n\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { Appendix } from \"../../../../../../shared/entities/scripts/appendix\";\r\nimport { Study } from \"../../../../../../shared/entities/scripts/study\";\r\nimport { FilterOption } from \"../../../../../../shared/scripts/filtering/filtering.entities\";\r\nimport { SetActiveTab } from \"../../../../../../shared/scripts/tab-utilities\";\r\nimport { SiteInfo } from \"../../../../sites/shared/sites.entities\";\r\nimport { ISiteInfo } from \"../../../scripts/data-completeness.page\";\r\nimport { VisitsDatatableView } from \"../visits-datatable-view/visits-datatable-view\";\r\nimport { VisitsDatatableEntry } from \"../visits-datatable-view/visits-datatable.entities\";\r\nimport { VisitsSummaryView } from \"../visits-summary-view/visits-summary-view\";\r\nimport { VisitSummarySeries } from \"../visits-summary-view/visits-summary.entities\";\r\nimport { Visit, VisitEvent } from \"./visits.entities\";\r\nimport { VisitLookup } from \"./visits.lookup\";\r\n\r\nexport class VisitsController {\r\n\r\n siteInfo: ISiteInfo;\r\n\r\n allVisits: Visit[] = [];\r\n allVisitEvents: VisitEvent[] = [];\r\n allVisitRequired: FilterOption[] = [];\r\n\r\n summaryView: VisitsSummaryView;\r\n datatableView: VisitsDatatableView;\r\n\r\n //selectedVisitEvents: VisitEvent[];\r\n\r\n constructor(siteInfo: ISiteInfo, visitTimingJson: any) {\r\n\r\n this.siteInfo = siteInfo;\r\n\r\n let foundVisitIds: number[] = [];\r\n let foundVisitRequiredIds: number[] = [];\r\n this.allVisitEvents = plainToClass(VisitEvent, visitTimingJson);\r\n this.allVisitEvents.forEach((v: VisitEvent) => {\r\n v.initialize()\r\n\r\n if (!foundVisitIds.includes(v.VisitId)) {\r\n this.allVisits.push(new Visit(v.VisitId, VisitLookup.GetVisit(v.VisitId), VisitLookup.GetVisitOrdering(v.VisitId)));\r\n foundVisitIds.push(v.VisitId);\r\n }\r\n\r\n if (!foundVisitRequiredIds.includes(v.RequiredId)) {\r\n this.allVisitRequired.push(new FilterOption(v.RequiredId, VisitLookup.GetRequired(v.RequiredId)));\r\n foundVisitRequiredIds.push(v.RequiredId);\r\n }\r\n\r\n });\r\n this.allVisits.sort((a: Visit, b: Visit) => a.OrderBy - b.OrderBy);\r\n this.allVisitRequired.sort((a: FilterOption, b: FilterOption) => a.Id - b.Id);\r\n\r\n this.summaryView = new VisitsSummaryView();\r\n this.datatableView = new VisitsDatatableView();\r\n\r\n //console.log(this.allVisits);\r\n //console.log(this.allVisitEvents);\r\n }\r\n\r\n FilterUpdated(studyIds: number[], appendixIds: number[], siteIds: number[], visitIds: number[], visitRequiredIds: number[]): void {\r\n\r\n let byVisitSummaryMap: Map = new Map();\r\n let bySiteSummaryMap: Map = new Map();\r\n\r\n let noGroupingDataMap: Map = new Map();\r\n let groupingByVisitDataMap: Map = new Map();\r\n let groupingBySiteDataMap: Map = new Map();\r\n\r\n //for loop instead of forEach for performance given there could be tens of thousands of visit events across all trials\r\n for (let i = 0; i < this.allVisitEvents.length; ++i) {\r\n let visit: VisitEvent = this.allVisitEvents[i];\r\n\r\n if (!studyIds.includes(visit.StudyId) || !appendixIds.includes(visit.AppendixId) ||\r\n !visitRequiredIds.includes(visit.RequiredId) || !visitIds.includes(visit.VisitId) ||\r\n !siteIds.includes(visit.SiteNumber)) continue;\r\n\r\n //Summary View Data\r\n let visitSeries: VisitSummarySeries;\r\n if (byVisitSummaryMap.has(visit.VisitId)) { visitSeries = byVisitSummaryMap.get(visit.VisitId); }\r\n else { visitSeries = new VisitSummarySeries(VisitLookup.GetVisit(visit.VisitId), \"visit\", visit.VisitId); }\r\n visitSeries.addVisitEvent(visit);\r\n byVisitSummaryMap.set(visit.VisitId, visitSeries);\r\n\r\n let siteSeries: VisitSummarySeries;\r\n if (bySiteSummaryMap.has(visit.SiteNumber)) { siteSeries = bySiteSummaryMap.get(visit.SiteNumber); }\r\n else { siteSeries = new VisitSummarySeries(this.siteInfo.GetSiteName(visit.SiteNumber), \"site\", visit.SiteNumber); }\r\n siteSeries.addVisitEvent(visit);\r\n bySiteSummaryMap.set(visit.SiteNumber, siteSeries);\r\n\r\n //Datatable View Data\r\n let dataHash: string;\r\n\r\n let noGroupingData: VisitsDatatableEntry;\r\n dataHash = VisitsDatatableEntry.getHash(\"none\", visit);\r\n if (noGroupingDataMap.has(dataHash)) { noGroupingData = noGroupingDataMap.get(dataHash); }\r\n else { noGroupingData = new VisitsDatatableEntry(Study.GetStudyName(visit.StudyId), Appendix.GetAppendixName(visit.AppendixId), this.siteInfo.GetSiteName(visit.SiteNumber), SiteInfo.FormatSiteNumber(visit.SiteNumber), VisitLookup.GetVisit(visit.VisitId)); }\r\n noGroupingData.addVisitEvent(visit);\r\n noGroupingDataMap.set(dataHash, noGroupingData);\r\n\r\n let visitGroupingData: VisitsDatatableEntry;\r\n dataHash = VisitsDatatableEntry.getHash(\"by-visit\", visit);\r\n if (groupingByVisitDataMap.has(dataHash)) { visitGroupingData = groupingByVisitDataMap.get(dataHash); }\r\n else { visitGroupingData = new VisitsDatatableEntry(Study.GetStudyName(visit.StudyId), Appendix.GetAppendixName(visit.AppendixId), \"All Sites\", \"All Sites\", VisitLookup.GetVisit(visit.VisitId)); }\r\n visitGroupingData.addVisitEvent(visit);\r\n groupingByVisitDataMap.set(dataHash, visitGroupingData);\r\n\r\n let siteGroupingData: VisitsDatatableEntry;\r\n dataHash = VisitsDatatableEntry.getHash(\"by-site\", visit);\r\n if (groupingBySiteDataMap.has(dataHash)) { siteGroupingData = groupingBySiteDataMap.get(dataHash); }\r\n else { siteGroupingData = new VisitsDatatableEntry(Study.GetStudyName(visit.StudyId), Appendix.GetAppendixName(visit.AppendixId), this.siteInfo.GetSiteName(visit.SiteNumber), SiteInfo.FormatSiteNumber(visit.SiteNumber), \"All Visits\"); }\r\n siteGroupingData.addVisitEvent(visit);\r\n groupingBySiteDataMap.set(dataHash, siteGroupingData);\r\n }\r\n\r\n let seriesByVisit: VisitSummarySeries[] = [...byVisitSummaryMap.values()];\r\n seriesByVisit.sort((a: VisitSummarySeries, b: VisitSummarySeries) => a.sortValue - b.sortValue);\r\n\r\n let seriesBySite: VisitSummarySeries[] = [...bySiteSummaryMap.values()];\r\n seriesBySite.sort((a: VisitSummarySeries, b: VisitSummarySeries) => b.sortValue - a.sortValue);\r\n\r\n this.summaryView.UpdateData(seriesByVisit, seriesBySite);\r\n\r\n\r\n let tableEntriesNone: VisitsDatatableEntry[] = [...noGroupingDataMap.values()];\r\n for (let i: number = 0; i < tableEntriesNone.length; ++i) { tableEntriesNone[i].initialize(); }\r\n //sort it somehow\r\n\r\n let tableEntriesByVisit: VisitsDatatableEntry[] = [...groupingByVisitDataMap.values()];\r\n for (let i: number = 0; i < tableEntriesByVisit.length; ++i) { tableEntriesByVisit[i].initialize(); }\r\n\r\n let tableEntriesBySite: VisitsDatatableEntry[] = [...groupingBySiteDataMap.values()];\r\n for (let i: number = 0; i < tableEntriesBySite.length; ++i) { tableEntriesBySite[i].initialize(); }\r\n\r\n //console.log(noGroupingDataMap);\r\n\r\n this.datatableView.UpdateData(tableEntriesNone, tableEntriesByVisit, tableEntriesBySite);\r\n }\r\n\r\n setView(newView: string): void {\r\n\r\n //console.log(\"visits.setView\", newView);\r\n if (newView == \"view-summary\") { SetActiveTab(\"visits-tabs\", \"visits-summary-content\"); this.summaryView.SetView(\"visit-summary\"); }\r\n else if (newView == \"view-datatable\") { SetActiveTab(\"visits-tabs\", \"visits-datatable-content\"); this.datatableView.SetView(\"visit-datatable\"); }\r\n else {\r\n this.summaryView.SetView(newView);\r\n this.datatableView.SetView(newView);\r\n }\r\n }\r\n\r\n exportTable(): void {\r\n this.datatableView.exportTable();\r\n }\r\n}","import { SiteMetricBenchmark, SiteMetricDetail, SiteMetricSummary, SiteMilestone } from '../../scripts/site-activation.entities';\r\nimport { SiteActivationLookup } from '../../scripts/site-activation.lookup';\r\nimport { DashboardCard, SiteCardData } from '../dashboard-card/dashboard-card';\r\n\r\nexport class MilestoneDashboardTab {\r\n\r\n siteMetricDetails: SiteMetricDetail[];\r\n\r\n cardData: Map;\r\n filteredKeys: string[];\r\n dashboardTab: HTMLElement;\r\n\r\n studyIds: number[];\r\n metricIds: number[];\r\n inPlayId: number;\r\n\r\n showAbsolute = true;\r\n\r\n constructor(siteMetricSummaries: SiteMetricSummary[], siteMetricDetails: SiteMetricDetail[], siteMetricBenchmarks: SiteMetricBenchmark[]) {\r\n this.siteMetricDetails = siteMetricDetails;\r\n window.customElements.define(\"dashboard-card\", DashboardCard);\r\n\r\n this.dashboardTab = document.querySelector('#dashboardTab');\r\n\r\n this.cardData = new Map();\r\n\r\n siteMetricSummaries.forEach((summary) => {\r\n const key = `${summary.StudyId}-${summary.MetricId}-${summary.InPlayId}`;\r\n const cd = this.cardData.get(key);\r\n\r\n\r\n if (cd) {\r\n if (summary.CompletedId === 0) {\r\n cd.inProgress = summary;\r\n } else {\r\n cd.completed = summary;\r\n }\r\n } else {\r\n const benchmark = siteMetricBenchmarks.find((b) => ((b.StudyId === summary.StudyId) && (b.MetricId === summary.MetricId)));\r\n\r\n const scd = {\r\n studyId: summary.StudyId,\r\n studyName: '',\r\n metricId: summary.MetricId,\r\n metricName: '',\r\n inPlayId: summary.InPlayId,\r\n orderBy: summary.OrderBy,\r\n yellowDays: benchmark?.YellowDays,\r\n redDays: benchmark?.RedDays,\r\n } as SiteCardData;\r\n\r\n scd.studyName = SiteActivationLookup.GetPrimeContract(summary.StudyId);\r\n scd.metricName = SiteActivationLookup.GetMetric(summary.MetricId);\r\n\r\n if (summary.CompletedId === 0) {\r\n scd.inProgress = summary;\r\n\r\n // TODO Temporary hack for \"N/A\" style metrics\r\n if (summary.MetricId === 16) {\r\n scd.completed = {\r\n NumberOfSites: 0,\r\n MeanValue: 0,\r\n MinValue: 0,\r\n Q1Value: 0,\r\n MedianValue: 0,\r\n Q3Value: 0,\r\n MaxValue: 0,\r\n } as SiteMetricSummary;\r\n }\r\n } else {\r\n scd.completed = summary;\r\n }\r\n\r\n this.cardData.set(key, scd);\r\n }\r\n });\r\n\r\n this.cardData.forEach((cd) => {\r\n\r\n const droppedValue = cd.inPlayId - 1;\r\n\r\n const filtered = this.siteMetricDetails.filter((site) => (\r\n (site.StudyId === cd.studyId) &&\r\n (site.MetricId === cd.metricId) &&\r\n (site.Days !== \"\")\r\n ));\r\n\r\n cd.sites = (droppedValue === -1) ? filtered : filtered.filter((site) => site.Dropped === droppedValue);\r\n\r\n });\r\n\r\n (document.querySelector('#proportionalCheckbox') as HTMLInputElement).checked = this.showAbsolute\r\n document.querySelector('#proportionalCheckbox').addEventListener('click', (e) => {\r\n const cb = e.target as any;\r\n this.showAbsolute = cb.checked;\r\n\r\n this.filter();\r\n });\r\n\r\n }\r\n\r\n filter() {\r\n this.filteredKeys = [];\r\n\r\n if (this.inPlayId !== -1) {\r\n this.metricIds.forEach((mid) => this.studyIds.forEach((sid) => {\r\n if ((mid === 10) && (sid === 3)) return; // NEURO doesn't have IP Sent metric\r\n // Only add key if the data exists\r\n if (this.cardData.has(`${sid}-${mid}-${this.inPlayId}`)) {\r\n this.filteredKeys.push(`${sid}-${mid}-${this.inPlayId}`);\r\n }\r\n }));\r\n }\r\n\r\n this.dashboardTab.innerHTML = '';\r\n\r\n const maxSites = Math.max(...this.filteredKeys.map((key) => this.cardData.get(key).inProgress?.NumberOfSites));\r\n const maxDays = Math.max(...this.filteredKeys.map((key) => {\r\n const cd = this.cardData.get(key);\r\n return Math.max(cd.inProgress.MaxValue, cd.completed?.MaxValue);\r\n }));\r\n const minDays = Math.min(...this.filteredKeys.map((key) => {\r\n const cd = this.cardData.get(key);\r\n return Math.min(cd.inProgress.MinValue, cd.completed?.MinValue);\r\n }));\r\n\r\n this.filteredKeys.forEach((key) => {\r\n const card = document.createElement('dashboard-card') as DashboardCard;\r\n const data = this.cardData.get(key);\r\n card.setData(\r\n data,\r\n (this.showAbsolute) ? maxSites : undefined,\r\n (this.showAbsolute) ? maxDays : undefined,\r\n (this.showAbsolute) ? minDays : undefined\r\n );\r\n\r\n this.dashboardTab.appendChild(card);\r\n });\r\n }\r\n\r\n updateContent(studies, metrics, inPlayIds) {\r\n this.studyIds = studies.map((value) => ['','','VITAL','NEURO','SLEEP','AUTONOMIC','ENERGIZE'].indexOf(value)).sort((a,b) => a - b);\r\n this.metricIds = metrics.map((id) => Number.parseInt(id));\r\n\r\n if (inPlayIds.length <= 0) this.inPlayId = -1;\r\n else if (inPlayIds.length >= 2) this.inPlayId = 0; //All\r\n else if (inPlayIds[0] === 'No') this.inPlayId = 2; //Not In Play\r\n else this.inPlayId = 1; //In Play\r\n\r\n this.filter();\r\n }\r\n\r\n showModal(siteId: number, studyId: number, metricId: number, milestones: SiteMilestone[]) {\r\n const s = this.siteMetricDetails.find((site) => (\r\n (site.SiteId === siteId) &&\r\n (site.StudyId === studyId) &&\r\n (site.MetricId === metricId)\r\n ) );\r\n $('#dashboardSiteModal').modal('show');\r\n document.querySelector('#dashboardSiteModalLabel').innerHTML = `${s.SiteName} (${s.SiteIdDisplay})`;\r\n\r\n const milestoneRow = milestones.map((milestone) => {\r\n return `\r\n \r\n ${milestone.Milestone}\r\n ${milestone.DateCompletion}\r\n ${milestone.CommentDisplay}\r\n \r\n `;\r\n\r\n });\r\n document.querySelector('.dashboard-modal-body').innerHTML = `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ${milestoneRow.join('')}\r\n \r\n
MilestoneCompletion DateComment
\r\n `;\r\n }\r\n}","import { Study } from '../../../../shared/entities/scripts/study';\r\nimport { FormatDate, GetMonthFromNumber } from '../../../../shared/scripts/date-functions'\r\nimport { ComputePercent, FormatNumberWithCommas, Round_1Digit, Round_2Digits, Round_Number } from '../../../../shared/scripts/number-functions';\r\n\r\nexport class FinancialEntry {\r\n StudyName: string\r\n ProjectName: string\r\n EntryType: string\r\n\r\n FundedCommitmentAmount: number;\r\n InvoiceDateParsed: string;\r\n InvoiceNumber: string;\r\n InvoiceStatus: string;\r\n InvoicedAmount: number;\r\n InvoicedToDate: number;\r\n POEndDateParsed: string;\r\n POID: string;\r\n POReleaseNumber: string;\r\n ProjectLevel: string;\r\n ProjectNumber: string;\r\n RemainingCommitmentAmount: number;\r\n SubContractExcludeAmount: number;\r\n Subcontract: string;\r\n SubcontractCompanyName: string;\r\n SubcontractEndDateParsed: string;\r\n SubcontractStartDateParsed: string;\r\n SubcontractFundedAmount: number;\r\n SubcontractType: string;\r\n SubcontractSubcontractAmount: number;\r\n VendorName: string;\r\n VendorNumber: string;\r\n\r\n InvoiceDateCompare: Date;\r\n InvoiceDateDisplay: string;\r\n InvoicedToDateDisplay: string;\r\n POEndDateCompare: Date;\r\n POEndDateDisplay: string;\r\n SubcontractEndDateCompare: Date;\r\n SubcontractEndDateDisplay: string\r\n SubcontractStartDateCompare: Date;\r\n SubcontractStartDateDisplay: string\r\n\r\n FundedCommitmentAmountDisplay: string;\r\n InvoicedAmountDisplay: string;\r\n RemainingCommitmentAmountDisplay: string;\r\n SubcontractFundedAmountDisplay: string;\r\n SubContractExcludeAmountDisplay: string;\r\n SubcontractSubcontractAmountDisplay: string;\r\n\r\n StudyNameDisplay: string;\r\n ProjectNameDisplay: string;\r\n POIDDisplay: string;\r\n ProjectLevelDisplay: string;\r\n ProjectNumberDisplay: string;\r\n VendorNameDisplay: string;\r\n SubcontractDisplay: string;\r\n SubcontractCompanyNameDisplay: string;\r\n\r\n RestrictedFunds: number;\r\n RestrictedFundsDisplay: string;\r\n\r\n initialize(): void {\r\n\r\n // Format Invoice Date\r\n if (this.InvoiceDateParsed != \"\" && this.InvoiceDateParsed != null) {\r\n this.InvoiceDateCompare = new Date(this.InvoiceDateParsed);\r\n this.InvoiceDateDisplay = FormatDate(this.InvoiceDateCompare);\r\n }\r\n else {\r\n this.InvoiceDateCompare = null;\r\n this.InvoiceDateDisplay = \"\";\r\n }\r\n\r\n /*if (this.InvoiceStatus == \"\") {\r\n this.InvoiceStatus = \"UNKNOWN\";\r\n }*/\r\n\r\n // Format PO End Date\r\n if (this.POEndDateParsed != \"\" && this.POEndDateParsed != null) {\r\n this.POEndDateCompare = new Date(this.POEndDateParsed);\r\n this.POEndDateDisplay = FormatDate(this.POEndDateCompare);\r\n }\r\n else {\r\n this.POEndDateCompare = null;\r\n this.POEndDateDisplay = \"\";\r\n }\r\n\r\n // Format Subcontract End Date\r\n if (this.SubcontractEndDateParsed != \"\" && this.SubcontractEndDateParsed != null) {\r\n this.SubcontractEndDateCompare = new Date(this.SubcontractEndDateParsed);\r\n this.SubcontractEndDateDisplay = FormatDate(this.SubcontractEndDateCompare);\r\n }\r\n else {\r\n this.SubcontractEndDateCompare = null;\r\n this.SubcontractEndDateDisplay = \"\";\r\n }\r\n\r\n // Format Subcontract Start Date\r\n if (this.SubcontractStartDateParsed != \"\" && this.SubcontractStartDateParsed != null) {\r\n this.SubcontractStartDateCompare = new Date(this.SubcontractStartDateParsed);\r\n this.SubcontractStartDateDisplay = FormatDate(this.SubcontractStartDateCompare);\r\n }\r\n else {\r\n this.SubcontractStartDateCompare = null;\r\n this.SubcontractStartDateDisplay = \"\";\r\n }\r\n\r\n if (this.SubcontractSubcontractAmount != null && this.FundedCommitmentAmount != null) {\r\n this.RestrictedFunds = this.SubcontractSubcontractAmount - this.FundedCommitmentAmount;\r\n }\r\n else {\r\n this.RestrictedFunds = null;\r\n }\r\n\r\n // Format Currency\r\n this.FundedCommitmentAmountDisplay = this.displayCurrency(this.FundedCommitmentAmount);\r\n this.InvoicedAmountDisplay = this.displayCurrency(this.InvoicedAmount);\r\n this.InvoicedToDateDisplay = this.displayCurrency(this.InvoicedToDate);\r\n this.RemainingCommitmentAmountDisplay = this.displayCurrency(this.RemainingCommitmentAmount);\r\n this.SubcontractFundedAmountDisplay = this.displayCurrency(this.SubcontractFundedAmount);\r\n this.SubContractExcludeAmountDisplay = this.displayCurrency(this.SubContractExcludeAmount);\r\n this.SubcontractSubcontractAmountDisplay = this.displayCurrency(this.SubcontractSubcontractAmount);\r\n this.RestrictedFundsDisplay = this.displayCurrency(this.RestrictedFunds);\r\n\r\n // Links to Open Modal\r\n /*this.StudyNameDisplay = `${this.StudyName}`;\r\n this.ProjectNameDisplay = `${this.ProjectName}`;\r\n this.POIDDisplay = `${this.POID}`;\r\n this.ProjectLevelDisplay = `${this.ProjectLevel}`;\r\n this.ProjectNumberDisplay = `${this.ProjectNumber}`;\r\n this.VendorNameDisplay = `${this.VendorName}`;\r\n this.SubcontractDisplay = `${this.Subcontract}`;\r\n this.SubcontractCompanyNameDisplay = `${this.SubcontractCompanyName}`;*/\r\n\r\n this.StudyNameDisplay = this.StudyName;\r\n this.ProjectNameDisplay = this.ProjectName;\r\n this.POIDDisplay = this.POID\r\n this.ProjectLevelDisplay = this.ProjectLevel;\r\n this.ProjectNumberDisplay = this.ProjectNumber;\r\n this.VendorNameDisplay = this.VendorName;\r\n this.SubcontractDisplay = this.Subcontract;\r\n this.SubcontractCompanyNameDisplay = this.SubcontractCompanyName;\r\n\r\n }\r\n\r\n displayCurrency(amount: number) {\r\n let USDollar = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n });\r\n\r\n if (amount == null || amount == undefined) {\r\n return \"\"\r\n }\r\n else if (amount >= 0) {\r\n return USDollar.format(amount);\r\n }\r\n else {\r\n return `(${USDollar.format(Math.abs(amount))})`\r\n }\r\n \r\n }\r\n}\r\n\r\nexport class FinancialGraphData {\r\n Id: number;\r\n Name: string;\r\n DaysSinceLastInvoice: number;\r\n InvoicedToDate: number;\r\n RemainingUnrestricted: number;\r\n CommittedRestricted: number;\r\n DrillDown: FinancialGraphData[];\r\n\r\n StudyName: string;\r\n SubcontractNumber: string;\r\n POID: string;\r\n ProjectLevel: string;\r\n SubcontractStartDate: string;\r\n SubcontractEndDate: string;\r\n SubcontractType: string;\r\n\r\n TotalSubcontractAmount: number;\r\n TotalRestrictedFunds: number;\r\n TotalUnrestrictedFunds: number;\r\n RemainingUnrestrictedFunds: number;\r\n TotalInvoicedToDate: number;\r\n LastInvoiceDate: string;\r\n\r\n // Display Information\r\n StudyNameDisplay: string;\r\n VendorNameDisplay: string;\r\n TotalSubcontractAmountDisplay: string;\r\n TotalRestrictedFundsDisplay: string;\r\n TotalUnrestrictedFundsDisplay: string;\r\n RemainingUnrestrictedFundsDisplay: string;\r\n TotalInvoicedToDateDisplay: string;\r\n\r\n SubcontractStartDateCompare: string;\r\n SubcontractEndDateCompare: string;\r\n LastInvoiceDateCompare: string;\r\n\r\n initialize() {\r\n this.InvoicedToDate = this.roundNumber(this.InvoicedToDate);\r\n this.RemainingUnrestricted = this.roundNumber(this.RemainingUnrestricted);\r\n this.CommittedRestricted = this.roundNumber(this.CommittedRestricted);\r\n\r\n this.StudyNameDisplay = `${this.StudyName}`;\r\n this.VendorNameDisplay = \"\";\r\n\r\n this.TotalSubcontractAmountDisplay = this.displayCurrency(this.TotalSubcontractAmount);\r\n this.TotalRestrictedFundsDisplay = this.displayCurrency(this.TotalRestrictedFunds);\r\n this.TotalUnrestrictedFundsDisplay = this.displayCurrency(this.TotalUnrestrictedFunds);\r\n this.RemainingUnrestrictedFundsDisplay = this.displayCurrency(this.RemainingUnrestrictedFunds);\r\n this.TotalInvoicedToDateDisplay = this.displayCurrency(this.TotalInvoicedToDate);\r\n\r\n this.SubcontractStartDateCompare = this.formatDateToCompare(new Date(this.SubcontractStartDate));\r\n this.SubcontractEndDateCompare = this.formatDateToCompare(new Date(this.SubcontractEndDate));\r\n this.LastInvoiceDateCompare = this.formatDateToCompare(new Date(this.LastInvoiceDate));\r\n\r\n this.DrillDown.forEach(entry => {\r\n entry.InvoicedToDate = this.roundNumber(entry.InvoicedToDate);\r\n entry.RemainingUnrestricted = this.roundNumber(entry.RemainingUnrestricted);\r\n entry.CommittedRestricted = this.roundNumber(entry.CommittedRestricted);\r\n\r\n //entry.StudyNameDisplay = `${entry.StudyName}`;\r\n entry.StudyNameDisplay = entry.StudyName;\r\n entry.VendorNameDisplay = entry.Name;\r\n if (entry.TotalSubcontractAmount != 0) {\r\n entry.TotalSubcontractAmountDisplay = this.displayCurrency(entry.TotalSubcontractAmount);\r\n entry.TotalRestrictedFundsDisplay = this.displayCurrency(entry.TotalRestrictedFunds);\r\n entry.TotalUnrestrictedFundsDisplay = this.displayCurrency(entry.TotalUnrestrictedFunds);\r\n entry.RemainingUnrestrictedFundsDisplay = this.displayCurrency(entry.RemainingUnrestrictedFunds);\r\n }\r\n else {\r\n entry.TotalSubcontractAmountDisplay = \"\";\r\n entry.TotalRestrictedFundsDisplay = \"\";\r\n entry.TotalUnrestrictedFundsDisplay = \"\";\r\n entry.RemainingUnrestrictedFundsDisplay = \"\";\r\n }\r\n \r\n entry.TotalInvoicedToDateDisplay = this.displayCurrency(entry.TotalInvoicedToDate);\r\n\r\n entry.SubcontractStartDateCompare = this.formatDateToCompare(new Date(entry.SubcontractStartDate));\r\n entry.SubcontractEndDateCompare = this.formatDateToCompare(new Date(entry.SubcontractEndDate));\r\n entry.LastInvoiceDateCompare = this.formatDateToCompare(new Date(entry.LastInvoiceDate));\r\n });\r\n }\r\n\r\n roundNumber(amount: number): number {\r\n return Math.round((amount + Number.EPSILON) * 100) / 100;\r\n }\r\n\r\n displayCurrency(amount: number) : string {\r\n let USDollar = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n });\r\n\r\n if (amount == null || amount == undefined) {\r\n return \"\"\r\n }\r\n else if (amount >= 0) {\r\n return USDollar.format(amount);\r\n }\r\n else {\r\n return `(${USDollar.format(Math.abs(amount))})`\r\n }\r\n\r\n }\r\n\r\n formatDateToCompare(date: Date): string {\r\n if (date == null) return \"\";\r\n let months = [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"]\r\n let year = date.getFullYear();\r\n let month = months[date.getMonth()];\r\n let day = date.getDate().toString();\r\n if (day.length == 1) {\r\n day = \"0\" + day;\r\n }\r\n\r\n return `${year}${month}${day}` \r\n }\r\n}\r\n\r\nexport class VoucherEntry {\r\n // From API\r\n accounting_approve_dt: string; \r\n acct: string; \r\n acct_desc: string; \r\n acct_entry_grp: string; \r\n acct_function: string; \r\n acct_type_desc: string; \r\n active_fl: string; \r\n amt: number; \r\n auditorUserID: string;\r\n charge_fl: string; \r\n company: string; \r\n currency_rate_group: string; \r\n due_dt: string; \r\n emp_gems_id: string; \r\n entr_dt: string; \r\n entr_user_id: string;\r\n expensereport_name: string; \r\n fiscal_pd: number; \r\n fiscal_pd_sub: number; \r\n fiscal_yr: string; \r\n invc_id: string; \r\n l1_acct_name: string; \r\n l2_acct_name: string; \r\n l3_acct_name: string; \r\n org: string; \r\n po_chng_ord_no: number; \r\n po_id: string; \r\n po_ln_no: number; \r\n po_rlse_no: number; \r\n post_dt: string; \r\n proj: string; \r\n reorg_lvl8: string; \r\n source_id: string; \r\n tc_fl: string; \r\n terms_dc: string; \r\n tran_currency: string; \r\n tran_currency_dt: string; \r\n trn_amt: number; \r\n vendor: string; \r\n vendor_name: string; \r\n voucher_key: number; \r\n voucher_ln_desc: string; \r\n voucher_ln_key: number; \r\n voucher_ln_no: number; \r\n voucher_no: number; \r\n voucher_type: string; \r\n\r\n // Dates\r\n accounting_approve_dt_parsed: string;\r\n accounting_approve_dt_compare: Date;\r\n accounting_approve_dt_display: string;\r\n due_dt_parsed: string;\r\n due_dt_compare: Date;\r\n due_dt_display: string;\r\n entr_dt_parsed: string;\r\n entr_dt_compare: Date;\r\n entr_dt_display: string;\r\n post_dt_parsed: string;\r\n post_dt_compare: Date;\r\n post_dt_display: string;\r\n tran_currency_dt_parsed: string;\r\n tran_currency_dt_compare: Date;\r\n tran_currency_dt_display: string;\r\n fiscal_pd_display: string;\r\n\r\n // Currency\r\n amt_display: string;\r\n trn_amt_display: string;\r\n\r\n // Additional Fields\r\n project_name: string;\r\n study_name: string;\r\n\r\n initialize(): void {\r\n // Format Currency\r\n this.amt_display = this.displayCurrency(this.amt);\r\n this.trn_amt_display = this.displayCurrency(this.trn_amt);\r\n\r\n // Format Accounting Approve Date\r\n if (this.accounting_approve_dt_parsed != \"\" && this.accounting_approve_dt_parsed != null) {\r\n this.accounting_approve_dt_compare = new Date(this.accounting_approve_dt_parsed);\r\n this.accounting_approve_dt_display = FormatDate(this.accounting_approve_dt_compare);\r\n }\r\n else {\r\n this.accounting_approve_dt_compare = null;\r\n this.accounting_approve_dt_display = \"\";\r\n }\r\n\r\n // Format Due Date\r\n if (this.due_dt_parsed != \"\" && this.due_dt_parsed != null) {\r\n this.due_dt_compare = new Date(this.due_dt_parsed);\r\n this.due_dt_display = FormatDate(this.due_dt_compare);\r\n }\r\n else {\r\n this.due_dt_compare = null;\r\n this.due_dt_display = \"\";\r\n }\r\n\r\n // Format Entered Date\r\n if (this.entr_dt_parsed != \"\" && this.entr_dt_parsed != null) {\r\n this.entr_dt_compare = new Date(this.entr_dt_parsed);\r\n this.entr_dt_display = FormatDate(this.entr_dt_compare);\r\n }\r\n else {\r\n this.entr_dt_compare = null;\r\n this.entr_dt_display = \"\";\r\n }\r\n\r\n // Format Post Date\r\n if (this.post_dt_parsed != \"\" && this.post_dt_parsed != null) {\r\n this.post_dt_compare = new Date(this.post_dt_parsed);\r\n this.post_dt_display = FormatDate(this.post_dt_compare);\r\n }\r\n else {\r\n this.post_dt_compare = null;\r\n this.post_dt_display = \"\";\r\n }\r\n\r\n // Format Transaction Currency Date\r\n if (this.tran_currency_dt_parsed != \"\" && this.tran_currency_dt_parsed != null) {\r\n this.tran_currency_dt_compare = new Date(this.tran_currency_dt_parsed);\r\n this.tran_currency_dt_display = FormatDate(this.tran_currency_dt_compare);\r\n }\r\n else {\r\n this.tran_currency_dt_compare = null;\r\n this.tran_currency_dt_display = \"\";\r\n }\r\n\r\n // Format Fiscal Month\r\n if (this.fiscal_pd) {\r\n this.fiscal_pd_display = GetMonthFromNumber(this.fiscal_pd);\r\n }\r\n else {\r\n this.fiscal_pd_display = \"\";\r\n this.fiscal_pd = 0;\r\n }\r\n\r\n \r\n }\r\n\r\n displayCurrency(amount: number) {\r\n let USDollar = new Intl.NumberFormat('en-US', {\r\n style: 'currency',\r\n currency: 'USD',\r\n });\r\n\r\n if (amount == null || amount == undefined) {\r\n return \"\"\r\n }\r\n else {\r\n return USDollar.format(amount);\r\n }\r\n\r\n }\r\n}\r\n\r\nexport class OverviewDataElement {\r\n StudyId: number;\r\n Enrollment: number[]; //current, target\r\n Invoiced: number[];\r\n Timeline: number[];\r\n\r\n Study: string;\r\n EnrollmentPercent: number;\r\n EnrollmentCountDisplay: string;\r\n InvoicedPercent: number;\r\n InvoicedCountDisplay: string;\r\n TimelinePercent: number;\r\n TimelineCountDisplay: string;\r\n\r\n initialize(): void {\r\n this.Study = Study.GetStudyName(this.StudyId);\r\n\r\n this.Invoiced[0] = Round_Number(this.Invoiced[0], 0);\r\n this.Invoiced[1] = Round_Number(this.Invoiced[1], 0);\r\n\r\n this.Timeline[0] = Round_Number(this.Timeline[0], 1);\r\n this.Timeline[1] = Round_Number(this.Timeline[1], 0);\r\n\r\n this.EnrollmentCountDisplay = FormatNumberWithCommas(this.Enrollment[0] + \"\") + \" of \" + FormatNumberWithCommas(this.Enrollment[1] + \"\");\r\n this.EnrollmentPercent = ComputePercent(this.Enrollment[0], this.Enrollment[1]) / 100.0;\r\n\r\n this.InvoicedCountDisplay = this.createMoneyDisplay(this.Invoiced[0]) + \" of \" + this.createMoneyDisplay(this.Invoiced[1]);\r\n this.InvoicedPercent = ComputePercent(this.Invoiced[0], this.Invoiced[1]) / 100.0;\r\n\r\n if (this.Timeline[1] != -1) {\r\n this.TimelineCountDisplay = FormatNumberWithCommas(this.Timeline[0] + \"\") + \" of \" + FormatNumberWithCommas(this.Timeline[1] + \"\");\r\n this.TimelinePercent = ComputePercent(this.Timeline[0], this.Timeline[1]) / 100.0;\r\n }\r\n else { this.TimelineCountDisplay = \"No Invoices\"; this.TimelinePercent = -1; }\r\n\r\n }\r\n\r\n createMoneyDisplay(amount: number): string {\r\n\r\n if (amount == 0) return \"$0\";\r\n else if (amount >= 100000) {\r\n return '$' + Round_Number((amount / 1000000), 2) + 'M'\r\n }\r\n else {\r\n return '$' + Round_Number(amount,2)\r\n }\r\n }\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { DateUpdatedSection } from \"../../../../../shared/components/date-updated-section/date-updated-section.view\";\r\nimport { Unique } from \"../../../../../shared/scripts/array-functions\";\r\nimport { MilestoneDetailsTab } from \"../components/milestone-details-tab/milestone-details.tab\";\r\nimport { SiteLevelMilestoneDetailsTab } from \"../components/milestone-site-details-tab/milestone-site-details.tab\";\r\nimport { MilestoneSummaryTab } from \"../components/milestone-summary-tab/milestone-summary.tab\";\r\nimport { MilestonesBySite, SiteMetricBenchmark, SiteMetricDetail, SiteMetricSummary, SiteMilestone } from \"./site-activation.entities\";\r\nimport { MilestoneDashboardTab } from \"../components/milestone-dashboard-tab/milestone-dashboard-tab\";\r\nimport { SiteActivationLookup } from \"./site-activation.lookup\";\r\nimport { sortBy, uniqBy } from \"lodash\";\r\nimport { SiteInfo } from \"../../shared/sites.entities\";\r\nimport { IFilter } from \"../../../../../shared/scripts/filtering/filtering.entities\";\r\nimport { GetSelectedDate, GetSelectedDropdownValues, InitializeDateSelector, InitializeFilterDropdown, ResetDateFilters, ResetDropdownFilters, SelectDropdownOption } from \"../../../../../shared/scripts/filtering/filtering.utilities\";\r\n\r\nexport class SiteActivationPage implements IFilter {\r\n\r\n siteMilestones: SiteMilestone[];\r\n milestonesBySite: MilestonesBySite[];\r\n //milestoneIdsToShow: number[] = [1, 6, 22, 25, 33, 30, 32, 24, 34, 26, 27, 8, 9, 10, 14, 36, 31, 16, 17, 19, 35];\r\n milestoneIdsToShow: number[] = [1, 6, 22, 25, 33, 30, 34, 26, 8, 9, 10, 14, 36, 31, 16, 17, 19, 35];\r\n siteMetricSummary: SiteMetricSummary[];\r\n siteMetricDetails: SiteMetricDetail[];\r\n siteMetricBenchmarks: SiteMetricBenchmark[];\r\n\r\n activeTab: string;\r\n milestoneDetailsTab: MilestoneDetailsTab;\r\n milestoneSummaryTab: MilestoneSummaryTab;\r\n siteLevelMilestoneDetailsTab: SiteLevelMilestoneDetailsTab;\r\n milestoneDashboardTab: MilestoneDashboardTab;\r\n\r\n constructor(\r\n siteInfoJson: any,\r\n siteMilestonesJson: any,\r\n lastUpdatedJson: any,\r\n siteMetricSummaryJson: any,\r\n siteMetricDetailsJson: any,\r\n siteMetricBenchmarksJson: any) {\r\n\r\n $(() => {\r\n\r\n new DateUpdatedSection(lastUpdatedJson);\r\n\r\n let siteInfo: SiteInfo[] = SiteInfo.Parse(siteInfoJson);\r\n let siteDictionary: Map = SiteInfo.CreateNameMap(undefined, siteInfo);\r\n\r\n this.initializeSiteMilestones(siteInfo, siteMilestonesJson);\r\n this.initializeSiteMetrics(siteDictionary, siteMetricSummaryJson, siteMetricDetailsJson, siteMetricBenchmarksJson);\r\n this.initializeFilters();\r\n\r\n //console.log(siteScorecardJson);\r\n\r\n this.milestoneDetailsTab = new MilestoneDetailsTab(this.siteMilestones);\r\n this.milestoneSummaryTab = new MilestoneSummaryTab();\r\n this.siteLevelMilestoneDetailsTab = new SiteLevelMilestoneDetailsTab(this.milestonesBySite, this.milestoneIdsToShow);\r\n\r\n this.milestoneDashboardTab = new MilestoneDashboardTab(this.siteMetricSummary, this.siteMetricDetails, this.siteMetricBenchmarks);\r\n\r\n $('#loading-indicator').hide();\r\n $('.loaded-content').removeClass('invisible');\r\n\r\n this.showTab(\"#milestones-summary\");\r\n // this.changeView(\"#milestones-dashboard\");\r\n\r\n });\r\n }\r\n\r\n changeView(selectedOption: any): void {\r\n let views: string[] = ['#milestones-summary', '#milestones-details', '#site-level-details', '#milestones-dashboard'];\r\n views.forEach((id: string) => $(id).removeClass(\"show active\"));\r\n\r\n $(selectedOption).tab('show');\r\n this.showTab(selectedOption);\r\n }\r\n\r\n initializeSiteMilestones(siteInfo: SiteInfo[], siteMilestonesJson: any): void {\r\n\r\n let bySiteHash: Map = new Map();\r\n\r\n let currentSiteInfo: SiteInfo = undefined;\r\n\r\n this.siteMilestones = plainToClass(SiteMilestone, siteMilestonesJson);\r\n this.siteMilestones.map((milestone: SiteMilestone) => {\r\n\r\n currentSiteInfo = siteInfo.find((x: SiteInfo) => x.SiteNumber == milestone.SiteNumber && x.StudyId == milestone.PrimeContractId);\r\n\r\n if (currentSiteInfo != undefined) {\r\n milestone.SiteName = currentSiteInfo.SiteName;\r\n }\r\n else { milestone.Milestone = \"Unknown\"; }\r\n milestone.initialize();\r\n\r\n if (this.milestoneIdsToShow.includes(milestone.MilestoneId)) {\r\n\r\n if (!bySiteHash.has(milestone.MilestoneSiteHash)) {\r\n //let scorecard: SiteScorecard = siteScorecards.find((s => s.SiteNumber == milestone.SiteNumber && s.StudyId == milestone.PrimeContractId));\r\n bySiteHash.set(milestone.MilestoneSiteHash, new MilestonesBySite(milestone.PrimeContractId, milestone.SiteNumber, milestone.SiteNumberDisplay, milestone.SiteName, (currentSiteInfo.PI != undefined) ? currentSiteInfo.PI : \"\", milestone.PrimeContract, milestone.InPlayDisplay, (milestone.IsRecoverCohort == 1) ? \"Yes\" : \"No\"));\r\n }\r\n bySiteHash.get(milestone.MilestoneSiteHash).MilestoneCompletionDates[milestone.MilestoneId] = (milestone.DateCompletion.length > 0) ? milestone.DateCompletion : \"\";\r\n\r\n //temp until By Site moved into separate reporting\r\n //only add randomization to bySite when an activated site\r\n if (milestone.MilestoneId == 17 && milestone.DateCompletion.length > 0) {\r\n //let scorecard: SiteScorecard = siteScorecards.find((s => s.SiteNumber == milestone.SiteNumber && s.StudyId == milestone.PrimeContractId));\r\n if (currentSiteInfo != undefined) {\r\n bySiteHash.get(milestone.MilestoneSiteHash).RandomizedCount = currentSiteInfo.Randomized;\r\n }\r\n }\r\n }\r\n\r\n return milestone;\r\n });\r\n\r\n this.milestonesBySite = Array.from(bySiteHash.values());\r\n }\r\n\r\n initializeSiteMetrics(siteDictionary: Map, siteMetricSummaryJson: any, siteMetricDetailsJson: any, siteMetricBenchmarksJson: any):void {\r\n\r\n this.siteMetricSummary = plainToClass(SiteMetricSummary, siteMetricSummaryJson);\r\n this.siteMetricSummary.forEach((summary) => summary.initialize());\r\n\r\n this.siteMetricDetails = plainToClass(SiteMetricDetail, siteMetricDetailsJson);\r\n this.siteMetricDetails.forEach((detail) => {\r\n detail.initialize();\r\n detail.SiteName = siteDictionary.get(detail.SiteId);\r\n });\r\n\r\n this.siteMetricBenchmarks = plainToClass(SiteMetricBenchmark, siteMetricBenchmarksJson);\r\n this.siteMetricBenchmarks.forEach((benchmark) => benchmark.initialize());\r\n\r\n }\r\n\r\n initializeFilters(): void {\r\n\r\n //InitializeDateSelector('changed-since-date', this);\r\n //InitializeDateSelector('added-since-date', this);\r\n InitializeDateSelector('completed-since-date', this);\r\n\r\n InitializeFilterDropdown('#prime-contract-dropdown', Unique(this.siteMilestones.map((milestone: SiteMilestone) => milestone.PrimeContract), true), this);\r\n InitializeFilterDropdown('#milestone-dropdown', Unique(this.siteMilestones.map((milestone: SiteMilestone) => milestone.Milestone), true), this);\r\n InitializeFilterDropdown('#site-name-dropdown', Unique(this.siteMilestones.map((milestone: SiteMilestone) => milestone.SiteName), true), this);\r\n InitializeFilterDropdown('#site-inplay-dropdown', Unique(this.siteMilestones.map((milestone: SiteMilestone) => milestone.InPlayDisplay), true), this);\r\n SelectDropdownOption('#site-inplay-dropdown', [ \"Yes\" ]);\r\n //InitializeFilterDropdown('#vanguard-site-dropdown', Unique(this.siteMilestones.map((milestone: SiteMilestone) => milestone.VanguardSiteDisplay), true, [\"Not Applicable\"]), this);\r\n\r\n const metrics = sortBy(uniqBy(this.siteMetricSummary, 'MetricId'), 'OrderBy').map((summary) => {\r\n return {\r\n id: summary.MetricId,\r\n name:SiteActivationLookup.GetMetric(summary.MetricId)\r\n }\r\n });\r\n\r\n this.initializeMetricFilterDropdown('#metric-dropdown', metrics, this);\r\n\r\n\r\n }\r\n\r\n showTab(tabId: string): void {\r\n\r\n //prime-contract always shown\r\n\r\n if (tabId == \"#milestones-summary\") {\r\n this.toggleDateAsterick(true);\r\n\r\n ['#site-name-filter', '#milestone-filter', '#metric-filter'].forEach((id: string) => $(id).hide());\r\n ['#completed-since-filter', '#vanguard-site-filter', '#inplay-filter'].forEach((id: string) => $(id).show());\r\n }\r\n else if (tabId == \"#milestones-details\") {\r\n this.toggleDateAsterick(false);\r\n\r\n ['#metric-filter'].forEach((id: string) => $(id).hide());\r\n ['#site-name-filter', '#milestone-filter', '#completed-since-filter', '#vanguard-site-filter', '#inplay-filter'].forEach((id: string) => $(id).show());\r\n }\r\n else if (tabId == \"#site-level-details\") {\r\n this.toggleDateAsterick(false);\r\n\r\n ['#site-name-filter', '#milestone-filter', '#completed-since-filter', '#metric-filter'].forEach((id: string) => $(id).hide());\r\n ['#vanguard-site-filter', '#inplay-filter'].forEach((id: string) => $(id).show());\r\n }\r\n else if (tabId == \"#milestones-dashboard\") {\r\n this.toggleDateAsterick(false);\r\n\r\n ['#site-name-filter', '#milestone-filter', '#completed-since-filter', '#vanguard-site-filter'].forEach((id: string) => $(id).hide());\r\n ['#metric-filter', '#inplay-filter'].forEach((id: string) => $(id).show());\r\n }\r\n\r\n this.activeTab = tabId;\r\n this.triggerFilter();\r\n }\r\n\r\n triggerFilter(): void {\r\n //console.log(\"filter triggered\");\r\n\r\n if (this.activeTab == \"#milestones-details\") {\r\n this.milestoneDetailsTab.updateContent(this.filterSiteMilestones(this.activeTab));\r\n }\r\n else if (this.activeTab == \"#milestones-summary\") {\r\n this.milestoneSummaryTab.updateContent(this.filterSiteMilestones(this.activeTab + \"-all\"), this.filterSiteMilestones(this.activeTab + \"-nodates\"), GetSelectedDropdownValues('#prime-contract-dropdown'));\r\n }\r\n else if (this.activeTab == \"#site-level-details\") {\r\n this.siteLevelMilestoneDetailsTab.updateContent(this.filterSiteLevelMilestoneDetails());\r\n }\r\n else if (this.activeTab == \"#milestones-dashboard\") {\r\n this.milestoneDashboardTab.updateContent(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#metric-dropdown'), GetSelectedDropdownValues('#site-inplay-dropdown'));\r\n }\r\n }\r\n\r\n filterSiteMilestones(view: string): SiteMilestone[] {\r\n let matchingList: SiteMilestone[] = [];\r\n let matches: boolean;\r\n this.siteMilestones.forEach((milestone: SiteMilestone) => {\r\n matches = true; //must match all filters\r\n\r\n if (view == \"#milestones-summary-all\") {\r\n if (!milestone.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), undefined, undefined, GetSelectedDate(\"#completed-since-date\"), GetSelectedDropdownValues('#site-inplay-dropdown'))) {\r\n matches = false;\r\n }\r\n }\r\n else if (view == \"#milestones-summary-nodates\") {\r\n if (!milestone.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), undefined, undefined, undefined, GetSelectedDropdownValues('#site-inplay-dropdown'))) {\r\n matches = false;\r\n }\r\n }\r\n else if (view == \"#milestones-details\") {\r\n if (!milestone.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#site-name-dropdown'), GetSelectedDropdownValues('#milestone-dropdown'), GetSelectedDate(\"#completed-since-date\"), GetSelectedDropdownValues('#site-inplay-dropdown'))) {\r\n matches = false;\r\n }\r\n }\r\n\r\n if (matches) { matchingList.push(milestone); /*this.filteredMilestoneHashes.push(milestone.getHash());*/ }\r\n });\r\n return matchingList;\r\n }\r\n\r\n filterSiteLevelMilestoneDetails(): MilestonesBySite[] {\r\n let matchingList: MilestonesBySite[] = [];\r\n let matches: boolean;\r\n this.milestonesBySite.forEach((site: MilestonesBySite) => {\r\n matches = true; //must match all filters\r\n\r\n if (!site.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#site-inplay-dropdown'), GetSelectedDropdownValues('#vanguard-site-dropdown'))) {\r\n matches = false;\r\n }\r\n if (matches) { matchingList.push(site); }\r\n });\r\n return matchingList;\r\n }\r\n\r\n // TODO refactor\r\n initializeMetricFilterDropdown(selectId: string, values: any[], tableFilter: IFilter, compoundValues: any[] = undefined, selected: boolean = true) {\r\n $(selectId).selectpicker({\r\n dropupAuto: false,\r\n selectedTextFormat: \"count\",\r\n\r\n countSelectedText: (numSelected, numTotal) => {\r\n if (numSelected == numTotal) {\r\n return \"All\";\r\n }\r\n else {\r\n return numSelected + \" Selected\";\r\n }\r\n }\r\n });\r\n\r\n values.forEach((element: any) => {\r\n $(selectId).append(new Option(element.name, element.id, false, selected));\r\n });\r\n\r\n $(selectId).selectpicker(\"refresh\");\r\n\r\n $(selectId).on('changed.bs.select', (e, clickedIndex, isSelected, previousValue) => {\r\n tableFilter.triggerFilter();\r\n });\r\n }\r\n\r\n resetFilters(): void {\r\n\r\n ResetDropdownFilters(['#prime-contract-dropdown', '#milestone-dropdown', '#site-name-dropdown', '#site-inplay-dropdown', '#vanguard-site-dropdown', '#metric-dropdown']);\r\n SelectDropdownOption('#site-inplay-dropdown', [\"Yes\"]);\r\n\r\n ResetDateFilters(['#completed-since-date']);\r\n\r\n this.milestoneDetailsTab.clearSearchBar();\r\n }\r\n\r\n toggleDateAsterick(showAsterick: boolean): void {\r\n if (showAsterick) { $('.date-filter-asterick').show(); }\r\n else { $('.date-filter-asterick').hide(); }\r\n }\r\n\r\n setAchievementChartLegend(selection: string): void {\r\n this.milestoneSummaryTab.setSelectedChartSeries(selection);\r\n }\r\n\r\n showInfoModal(): void {\r\n $('#sites-info-modal').modal('show');\r\n }\r\n\r\n\r\n showDetailTableModal(id: any, type: string): void {\r\n this.milestoneSummaryTab.showDetailTableModal(id, type);\r\n }\r\n\r\n showDashboardModal(siteId: number, studyId: number, metricId: number) {\r\n const milestones = this.siteMilestones.filter((site) => ((siteId === site.SiteNumber) && (studyId === ['','','VITAL','NEURO','SLEEP','AUTONOMIC','ENERGIZE'].indexOf(site.PrimeContract))));\r\n milestones.sort((a,b) => (a.OrderBy > b.OrderBy) ? 1 : -1 );\r\n this.milestoneDashboardTab.showModal(siteId, studyId, metricId, milestones);\r\n }\r\n}","import { TableColumnVisibilityController, TableColumnGroup } from \"../../../shared/scripts/table-column-visibility\";\r\nimport { Task } from \"./task-tracker.entities\";\r\nimport { RenderDateYMD } from \"../../../shared/scripts/table-functions\";\r\nimport { Unique } from \"../../../shared/scripts/array-functions\";\r\nimport { IFilter } from \"../../../shared/scripts/filtering/filtering.entities\";\r\nimport { GetSelectedDropdownValues, InitializeFilterDropdown } from \"../../../shared/scripts/filtering/filtering.utilities\";\r\n\r\n\r\nexport class TaskTrackerDataTable implements IFilter {\r\n\r\n tasks: Task[];\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n filterOnMilestoneTask: boolean;\r\n filterOnCriticalTask: boolean;\r\n filterOnMostCurrentTask: boolean = true; //always?\r\n filterOnStudy: boolean;\r\n\r\n constructor(taskList: Task[], showMilestoneTaskFilter: boolean, showCriticalTaskFilter: boolean, showStudyFilter: boolean) {\r\n this.tasks = taskList;\r\n this.filterOnMilestoneTask = showMilestoneTaskFilter;\r\n this.filterOnCriticalTask = showCriticalTaskFilter;\r\n this.filterOnStudy = showStudyFilter;\r\n\r\n //console.log(\"mi\", this.filterOnMilestoneTask, this.filterOnMilestoneTask == true);\r\n //console.log(\"st\", this.filterOnStudy, this.filterOnStudy == true);\r\n\r\n //console.log(this.filterOnStudy);\r\n\r\n this.initializeTable();\r\n this.initializeFilters();\r\n }\r\n \r\n initializeFilters(): void {\r\n InitializeFilterDropdown('#category-dropdown', Unique(this.tasks.map((task: Task) => task.TaskCategory), true), this);\r\n InitializeFilterDropdown('#status-dropdown', Unique(this.tasks.map((task: Task) => task.Status), true), this);\r\n\r\n if (this.filterOnMilestoneTask) {\r\n InitializeFilterDropdown('#milestone-task-dropdown', Unique(this.tasks.map((task: Task) => task.DisplayMilestoneTask), true), this);\r\n }\r\n if (this.filterOnCriticalTask) {\r\n InitializeFilterDropdown('#critical-task-dropdown', Unique(this.tasks.map((task: Task) => task.DisplayCriticalTask), true), this);\r\n }\r\n if (this.filterOnStudy) {\r\n InitializeFilterDropdown('#study-dropdown', Unique(this.tasks.map((task: Task) => task.StudyArea), true), this);\r\n }\r\n\r\n InitializeFilterDropdown('#current-task-dropdown', Unique(this.tasks.map((task: Task) => task.DisplayMostCurrentTask), true), this);\r\n }\r\n\r\n initializeTable(): void {\r\n\r\n let fixedColumns: number = 2;\r\n let sortColumn: number = 11;\r\n let columns: any[] = [\r\n { data: \"TaskCategory\", title: \"Category\", className: \"category text-left font-size12 nowrap\", width: '110px' },\r\n { data: { _: \"DisplayName\", sort: \"Name\" }, title: \"Name\", className: \"text-left font-size12\", width: '180px' },\r\n { data: \"VersionLabel\", title: \"Version\", className: \"version text-left font-size12 nowrap\" },\r\n { data: \"Status\", title: \"Status\", className: \"status text-left font-size12 nowrap\" },\r\n { data: \"DisplayMilestoneTask\", title: \"Is Milestone
Task\", className: \"milestone-task text-center font-size12 nowrap\" },\r\n { data: \"DisplayCriticalTask\", title: \"Is Critical
Task\", className: \"milestone-task text-center font-size12 nowrap\" },\r\n //{ data: \"PlannedStartDate\", title: \"Start Date
(Planned)\", className: \"start-dates text-center font-size12\", width: '100px', render: RenderDateYMD },\r\n { data: \"ActualStartDate\", title: \"Start Date
(Actual)\", className: \"start-dates text-center font-size12\", width: '100px', render: RenderDateYMD },\r\n { data: \"PlannedEndDate\", title: \"End Date
(Planned)\", className: \"end-dates text-center font-size12\", width: '100px', render: RenderDateYMD },\r\n { data: \"ActualEndDate\", title: \"End Date
(Actual)\", className: \"end-dates text-center font-size12\", width: '100px', render: RenderDateYMD },\r\n { data: { _: \"DisplayCompletionCriteria\", sort: \"CompletionCriteria\" }, title: \"Completion Criteria\", className: \"completion text-left font-size12\" },\r\n { data: { _: \"DisplayComments\", sort: \"Comments\" }, title: \"Comments\", className: \"comments text-left font-size12\", width: '180px' },\r\n { data: { _: \"DisplayStaff\", sort: \"StaffPipeSeparated\" }, title: \"Staff\", className: \"staff text-left font-size12\" },\r\n { data: \"ModifiedDate\", title: \"Modified Date\", className: \"modified-date text-center font-size12\", width: '100px', render: RenderDateYMD },\r\n { data: { _: \"DisplayFiles\", sort: \"FileNames[0]\" }, title: \"File Access\", className: \"files text-left font-size12\" },\r\n { data: \"SortOrder\", title: \"SortOrder\", visible: false },\r\n ];\r\n\r\n if (this.filterOnStudy) {\r\n fixedColumns = 3;\r\n sortColumn = 12;\r\n columns.unshift({ data: \"StudyArea\", title: \"Study\", className: \"category text-left font-size12 nowrap\", width: '80px' });\r\n }\r\n\r\n this.dataTable = $('#tasks-table').DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '60vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: fixedColumns\r\n },\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n order: [[sortColumn, 'asc']],\r\n data: this.tasks\r\n });\r\n\r\n $(\".top-controls\").addClass('row mx-0');\r\n\r\n $(\".column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\".column-select\").empty().html('
');\r\n\r\n $(\".search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\".spacer\").addClass('col-12 col-md-3'); 0\r\n $(\".count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\".count-found\").prepend('
');\r\n $(\".count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController('tasks-table', 'column-select', [\r\n new TableColumnGroup(\"Version\", true, [], \"version\"),\r\n new TableColumnGroup(\"Status\", true, [], \"status\"),\r\n new TableColumnGroup(\"Task Type\", false, [], \"milestone-task\"),\r\n new TableColumnGroup(\"Start Date\", false, [], \"start-dates\"),\r\n new TableColumnGroup(\"End Dates\", true, [], \"end-dates\"),\r\n new TableColumnGroup(\"Completion Criteria\", false, [], \"completion\"),\r\n new TableColumnGroup(\"Comments\", true, [], \"comments\"),\r\n new TableColumnGroup(\"Staff\", false, [], \"staff\"),\r\n new TableColumnGroup(\"Modified Date\", true, [], \"modified-date\"),\r\n new TableColumnGroup(\"File Access\", true, [], \"files\"),\r\n ]);\r\n\r\n $('#tasks-table').on('search.dt', (e, settings) => {\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n this.setCountFoundLabel(this.tasks.length);\r\n }\r\n\r\n setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#tasks-found-count').text(\"No Tasks Found\"); break;\r\n case 1: $('#tasks-found-count').text(\"1 Task Found\"); break;\r\n default: $('#tasks-found-count').text(count + \" Tasks Found\");\r\n }\r\n }\r\n\r\n refresh(): void {\r\n\r\n ['#category-dropdown', '#status-dropdown'].forEach((id: string) => $(id).selectpicker(\"refresh\"));\r\n if (this.filterOnMilestoneTask) {\r\n $('#milestone-task-dropdown').selectpicker(\"refresh\");\r\n }\r\n if (this.filterOnCriticalTask) {\r\n $('#critical-task-dropdown').selectpicker(\"refresh\");\r\n }\r\n\r\n this.dataTable.columns.adjust();\r\n this.tableColumnController.refresh();\r\n }\r\n\r\n triggerFilter(): void {\r\n\r\n let matchingTasks: Task[] = [];\r\n\r\n let taskMatches: boolean;\r\n this.tasks.forEach((task: Task) => {\r\n\r\n taskMatches = true; //must match all filters\r\n\r\n if (!task.matchesFilter(GetSelectedDropdownValues('#category-dropdown'), GetSelectedDropdownValues('#status-dropdown'), (this.filterOnMilestoneTask) ? GetSelectedDropdownValues('#milestone-task-dropdown') : undefined, (this.filterOnCriticalTask) ? GetSelectedDropdownValues('#critical-task-dropdown') : undefined, (this.filterOnMostCurrentTask) ? GetSelectedDropdownValues('#current-task-dropdown') : undefined)) {\r\n taskMatches = false;\r\n }\r\n\r\n if (taskMatches) { matchingTasks.push(task); }\r\n });\r\n\r\n this.updateTable(matchingTasks);\r\n }\r\n\r\n updateTable(matchingTasks: Task[]): void {\r\n\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(matchingTasks).draw();\r\n this.setCountFoundLabel(matchingTasks.length);\r\n }\r\n}","import { VisitEvent } from \"../scripts/visits.entities\";\r\n\r\n\r\nexport class VisitsDatatableEntry {\r\n Study: string;\r\n Appendix: string;\r\n Site: string;\r\n SiteNumber: string;\r\n Visit: string;\r\n\r\n PotentialVisits: number;\r\n ExpectedVisits: number;\r\n Completed: number[] = [];\r\n Overdue: number[] = [];\r\n NotDone: number[] = [];\r\n DiscPrior: number[] = [];\r\n NotYetDue: number;\r\n\r\n CompletedVisits: VisitEvent[] = [];\r\n OverdueVisits: VisitEvent[] = [];\r\n NotDoneVisits: VisitEvent[] = [];\r\n DiscPriorVisits: VisitEvent[] = [];\r\n\r\n sortValue: number;\r\n\r\n constructor(study: string, appendix: string, site: string, siteNumber: string, visit: string) {\r\n this.Study = study;\r\n this.Appendix = appendix;\r\n this.Site = site;\r\n this.SiteNumber = siteNumber;\r\n this.Visit = visit;\r\n\r\n this.PotentialVisits = 0;\r\n this.ExpectedVisits = 0;\r\n this.NotYetDue = 0;\r\n }\r\n\r\n addVisitEvent(visit: VisitEvent): void {\r\n this.PotentialVisits += 1;\r\n\r\n switch (visit.VisitStatusId) {\r\n case 1: this.Completed[0] = (this.Completed[0] == undefined) ? 1 : (this.Completed[0] + 1); this.ExpectedVisits += 1; this.CompletedVisits.push(visit); break;\r\n //case 2: this.NotYetDone = (this.NotYetDone == undefined) ? 1 : (this.NotYetDone + 1); break;\r\n case 3: this.Overdue[0] = (this.Overdue[0] == undefined) ? 1 : (this.Overdue[0] + 1); this.ExpectedVisits += 1; this.OverdueVisits.push(visit); break;\r\n case 4: this.NotDone[0] = (this.NotDone[0] == undefined) ? 1 : (this.NotDone[0] + 1); this.ExpectedVisits += 1; this.NotDoneVisits.push(visit); break;\r\n case 5: this.DiscPrior[0] = (this.DiscPrior[0] == undefined) ? 1 : (this.DiscPrior[0] + 1); this.ExpectedVisits += 1; this.DiscPriorVisits.push(visit); break;\r\n case 6:\r\n case 7:\r\n this.NotYetDue = (this.NotYetDue == undefined) ? 1 : (this.NotYetDue + 1); break;\r\n } \r\n }\r\n\r\n initialize(): void {\r\n if (this.ExpectedVisits > 0) {\r\n if (this.Completed[0] != undefined) { this.Completed[1] = (this.Completed[0] / this.ExpectedVisits); }\r\n if (this.Overdue[0] != undefined) { this.Overdue[1] = (this.Overdue[0] / this.ExpectedVisits); }\r\n if (this.NotDone[0] != undefined) { this.NotDone[1] = (this.NotDone[0] / this.ExpectedVisits); }\r\n if (this.DiscPrior[0] != undefined) { this.DiscPrior[1] = (this.DiscPrior[0] / this.ExpectedVisits); }\r\n }\r\n }\r\n\r\n static addValue(currentValue: number, valueToAdd: number): number {\r\n if (currentValue == undefined) { currentValue = 0; }\r\n currentValue += valueToAdd;\r\n return currentValue;\r\n }\r\n\r\n static getHash(grouping: string, visit: VisitEvent): string {\r\n if (grouping == \"none\") { return visit.StudyId + \"-\" + visit.AppendixId + \"-\" + visit.SiteNumber + \"-\" + visit.VisitId; }\r\n else if (grouping == \"by-visit\") { return visit.StudyId + \"-\" + visit.AppendixId + \"-\" + visit.VisitId; }\r\n else if (grouping == \"by-site\") { return visit.StudyId + \"-\" + visit.AppendixId + \"-\" + visit.SiteNumber; }\r\n else return \"unknown\";\r\n }\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { FormatDate, GetDateFromString } from \"../../scripts/date-functions\";\r\nimport { FileTimestamp } from \"./date-updated-section.entities\";\r\n\r\nexport class DateUpdatedSection {\r\n constructor(dataJson: any, showCTMS: boolean = true, showMedidata: boolean = true, showSalesforce: boolean = true) {\r\n\r\n $(() => {\r\n\r\n let fileTimestamps: FileTimestamp[] = plainToClass(FileTimestamp, dataJson);\r\n\r\n fileTimestamps.forEach((file: FileTimestamp) => {\r\n let date: Date = GetDateFromString(file.FileDate, \"slash-month-day-year\");\r\n if (file.Name == \"CTMS\" && showCTMS) { $('#last-update-date-ctms').html(FormatDate(date)); }\r\n else if (file.Name == \"Medidata\" && showMedidata) { $('#last-update-date-medidata').html(FormatDate(date)); }\r\n else if (file.Name == \"Salesforce\" && showSalesforce) { $('#last-update-date-salesforce').html(FormatDate(date)); }\r\n });\r\n\r\n if (!showCTMS) $('#updated-section-ctms').hide();\r\n if (!showMedidata) $('#updated-section-medidata').hide();\r\n if (!showSalesforce) $('#updated-section-salesforce').hide();\r\n\r\n $('#date-updated-section').removeClass('invisible');\r\n\r\n });\r\n\r\n }\r\n}","import dateFormat from \"dateformat\";\r\n\r\n\r\nexport function FormatStringColumnByLength(value: string, wordsOnLine: number): string {\r\n let parts: string[] = value.split(\" \");\r\n let output: string = \"\";\r\n for (let i = 0; i < parts.length; ++i) {\r\n output += parts[i] + \" \";\r\n if (i == (wordsOnLine - 1)) {\r\n output += \"\";\r\n }\r\n }\r\n\r\n if (parts.length < (wordsOnLine - 1)) { output += \"\"; }\r\n return output.trim();\r\n}\r\n\r\n\r\nexport function RenderProgressBar(data, type, row, meta): any {\r\n\r\n //console.log(data, row);\r\n let output: string;\r\n if (type !== 'display') { output = data; }\r\n else if (data == '-1') { output = \"\" }\r\n else {\r\n output = '
' + Math.round(data * 100.0) + '%
'\r\n }\r\n return output;\r\n}\r\n\r\nexport function RenderProgressValue(data, type, row, meta): any {\r\n if (data == -1 || data == undefined) return \"\";\r\n\r\n let output: string;\r\n if (type !== 'display') { output = data; }\r\n else {\r\n output = Math.round(data * 100.0) + '%'\r\n }\r\n return output;\r\n}\r\n\r\nexport function RenderNullableNumber(data, type, row, meta): any {\r\n if (data == -1) return \"\";\r\n else return data;\r\n}\r\nexport function RenderNullabledNumberAndRound_1Digit(data, type, row): any {\r\n if (data == -1 || data == undefined) return \"\";\r\n else return (data).toFixed(1);\r\n}\r\n\r\nexport function RenderNullabledNumberAndRound_2Digits(data, type, row): any {\r\n if (data == -1 || data == undefined) return \"\";\r\n else return (+data).toFixed(2);\r\n}\r\n\r\nexport function RenderNullableNumberWithSeparators(data, type, row, meta): any {\r\n if (data == -1 || data == undefined) return \"\";\r\n else return data.toLocaleString(\"en-US\");\r\n}\r\n\r\nexport function RenderNullableString(data, type, row, meta): any {\r\n if (data == undefined) return \"\";\r\n else return data;\r\n}\r\n\r\nexport function RenderDays(data, type, row, meta): any {\r\n\r\n if (type == 'display') {\r\n if (data == -1 || data == 0) return \"\";\r\n else if (data == 1) return \"1 Day\";\r\n else return data + \" Days\";\r\n }\r\n else return data;\r\n}\r\nexport function RenderDateMDY(data, type, row, meta): any {\r\n\r\n //console.log(\"Render Date:\", data, row);\r\n\r\n if (data == undefined) return \"\";\r\n\r\n let dateString: string = GetDateString(data);\r\n if (dateString == \"\") return \"\";\r\n\r\n let delimiter: string = GetDateDelimiter(dateString);\r\n if (delimiter == \"\") return \"\";\r\n \r\n let date: Date = undefined;\r\n try {\r\n let parts: string[] = (dateString).split(delimiter);\r\n //let date: Date = new Date(data + \" 06:00:00Z-0400\");\r\n date = new Date(Number.parseInt(parts[2]), Number.parseInt(parts[0]) - 1, Number.parseInt(parts[1]), 11, 0);\r\n }\r\n catch (error) {\r\n date = undefined;\r\n }\r\n\r\n if (type == 'sort') {\r\n if (date != undefined) return date.getTime();\r\n else return -1;\r\n }\r\n else {\r\n if (date != undefined) return \"\" + dateFormat(date, \"mmm dd yyyy\") + \"\";\r\n else return \"\";\r\n }\r\n}\r\n\r\nexport function RenderDateYMD(data, type, row, meta): any {\r\n\r\n if (data == undefined) return \"\";\r\n\r\n let dateString: string = GetDateString(data);\r\n if (dateString == \"\") return \"\";\r\n\r\n let delimiter: string = GetDateDelimiter(dateString);\r\n if (delimiter == \"\") return \"\";\r\n\r\n let date: Date = undefined;\r\n try {\r\n let parts: string[] = (dateString).split(delimiter);\r\n //let date: Date = new Date(data + \" 06:00:00Z-0400\");\r\n date = new Date(Number.parseInt(parts[0]), Number.parseInt(parts[1]) - 1, Number.parseInt(parts[2]), 11, 0);\r\n }\r\n catch (error) {\r\n date = undefined;\r\n }\r\n\r\n if (type == 'sort') {\r\n if (date != undefined) return date.getTime();\r\n else return -1;\r\n }\r\n else {\r\n if (date != undefined) return \"\" + dateFormat(date, \"mmm dd yyyy\") + \"\";\r\n else return \"\";\r\n }\r\n}\r\n\r\nexport function GetDateString(data: any): string {\r\n\r\n if (data == undefined || data == -1 || data == \"\") return \"\";\r\n\r\n //to remove trailing time\r\n let dateString: string = data;\r\n if (dateString.indexOf(\" \") != -1) { dateString = dateString.substring(0, dateString.indexOf(\" \")).trim(); }\r\n\r\n return dateString;\r\n}\r\n\r\nexport function GetDateDelimiter(date: string): string {\r\n if (date.indexOf(\"-\") != -1) { return \"-\"; }\r\n else if (date.indexOf(\"/\")! - 1) { return \"/\"; }\r\n else return \"\";\r\n}\r\n\r\nexport function DestroyTable(tableId: string): void {\r\n $(tableId).DataTable().clear();\r\n $(tableId).DataTable().draw();\r\n $(tableId).DataTable().destroy();\r\n $(tableId + ' tbody').empty();\r\n $(tableId + ' thead').empty();\r\n}","import { AggregatedParticipants, Participant } from \"./enrollment.entities\";\r\nimport { ChartLine } from \"./enrollment.chart-line\";\r\nimport { ChartPie } from \"./enrollment.chart-pie\";\r\nimport { EnrollmentLookup } from \"./enrollment.lookup\";\r\nimport { IEnrollmentPageData } from \"./enrollment.page\";\r\nimport { CreateSeries_ActualDays } from \"../../../../shared/scripts/graphing/graphing-functions\";\r\nimport { ChartBar } from \"./enrollment.chart-bar\";\r\nimport { SumArrayElements } from \"../../../../shared/scripts/array-functions\";\r\nimport { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { Appendix } from \"../../../../shared/entities/scripts/appendix\";\r\nimport { Site } from \"../../../../shared/entities/scripts/site\";\r\n\r\nexport class ChartController {\r\n\r\n parent: IEnrollmentPageData;\r\n\r\n lineChart: ChartLine;\r\n barChart: ChartBar;\r\n pieChart: ChartPie;\r\n\r\n constructor(parent: IEnrollmentPageData) {\r\n this.parent = parent;\r\n this.lineChart = new ChartLine();\r\n this.barChart = new ChartBar();\r\n this.pieChart = new ChartPie(parent);\r\n }\r\n\r\n UpdateData(): void {\r\n\r\n if (this.parent.selectedGraphView == \"Cumulative\" || this.parent.selectedGraphView == \"ByMonth\" || this.parent.selectedGraphView == \"RatePerSiteByMonth\" || this.parent.selectedGraphView == \"ByWeek\") {\r\n\r\n let chartSetup: ChartSetup;\r\n\r\n if (this.parent.selectedAggregation == \"Overall\") { chartSetup = this.createSeriesForOverall(); }\r\n else { chartSetup = this.createSeriesForAggregation(); }\r\n\r\n if (this.parent.selectedGraphView == \"Cumulative\") {\r\n if (chartSetup.moreThan15Points) { chartSetup.series.forEach((s: ChartSeries) => s.step = undefined); }\r\n this.lineChart.UpdateChart(chartSetup);\r\n //this.updateLineChart(series, showLegend);\r\n }\r\n else if (this.parent.selectedGraphView == \"ByMonth\") { this.barChart.UpdateChart(chartSetup); }\r\n else if (this.parent.selectedGraphView == \"ByWeek\") {\r\n if (this.parent.selectedAggregation != \"BySite\" && this.parent.selectedPopulation == \"randomized\") { chartSetup.series.pop(); }\r\n chartSetup.showForecast = false;\r\n this.barChart.UpdateChart(chartSetup, undefined, undefined, 'Week of %d %b %Y');\r\n }\r\n else if (this.parent.selectedGraphView == \"RatePerSiteByMonth\") {\r\n this.barChart.UpdateChart(chartSetup, 'Participants per Site', 2);\r\n // this.updateBarChart(series, showLegend, showingForecast, 'Participants per Site', 2);\r\n //console.log(series);\r\n }\r\n }\r\n else if (this.parent.selectedGraphView == \"Proportional\") {\r\n if (this.parent.selectedBreakdown != \"All Participants\") {\r\n this.pieChart.UpdatePieChart(this.getIndices());\r\n }\r\n else { //no breakdown selected\r\n this.pieChart.UpdatePieChart(undefined);\r\n }\r\n }\r\n\r\n }\r\n\r\n private createSeriesForOverall(): ChartSetup {\r\n\r\n let series: ChartSeries[] = [];\r\n let indices: number[] = this.getIndices();\r\n\r\n let showingForecast: boolean = false;\r\n let moreThan15Points: boolean = false;\r\n let showLegend: boolean = true;\r\n\r\n let legendIndex: number = 0;\r\n indices.forEach((i: number) => {\r\n let currentSeries: ChartSeries = this.createChartSeries(i, legendIndex++);\r\n if (this.parent.selectedBreakdown == \"All Participants\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants); }\r\n else if (this.parent.selectedBreakdown == \"RECOVER Cohort\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.RecoverCohort == i)); }\r\n else if (this.parent.selectedBreakdown == \"Race\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.RaceId == i)); }\r\n else if (this.parent.selectedBreakdown == \"Ethnicity\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.HispanicId == i)); }\r\n else if (this.parent.selectedBreakdown == \"Hispanic or Non-White\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.NonWhiteHispanic == i)); }\r\n else if (this.parent.selectedBreakdown == \"Sex\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.SexId == i)); }\r\n else if (this.parent.selectedBreakdown == \"Age\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.AgeId == i)); }\r\n else if (this.parent.selectedBreakdown == \"SX Cluster: ExInt (Enrolled)\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.VitSymExInt == i)); }\r\n else if (this.parent.selectedBreakdown == \"SX Cluster: CogDys (Enrolled)\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.VitSymCogDys == i)); }\r\n else if (this.parent.selectedBreakdown == \"SX Cluster: Autonomic (Enrolled)\") { currentSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.VitSymAutoDys == i)); }\r\n\r\n if (currentSeries.data.length >= 15) { moreThan15Points = true; }\r\n series.push(currentSeries);\r\n });\r\n\r\n if (this.parent.selectedBreakdown == \"All Participants\" && this.parent.selectedForecastRandomized.length > 0) {\r\n series.push(this.createForecastChartSeries());\r\n showingForecast = true;\r\n }\r\n\r\n return new ChartSetup(series, showingForecast, moreThan15Points, showLegend);\r\n }\r\n\r\n private createSeriesForAggregation(): ChartSetup {\r\n\r\n let series: ChartSeries[] = [];\r\n let showingForecast: boolean = false;\r\n let moreThan15Points: boolean = false;\r\n let showLegend: boolean = true;\r\n\r\n if (this.parent.selectedAggregation == \"ByStudy\") {\r\n this.parent.allStudies.forEach((s: Study) => {\r\n let studySeries: ChartSeries = new ChartSeries(this.parent.selectedGraphView);\r\n studySeries.name = s.Name;\r\n studySeries.color = this.getSeriesColor(s.Name);\r\n studySeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.StudyId == s.Id));\r\n if (studySeries.data.length > 0) {\r\n if (studySeries.data.length >= 15) { moreThan15Points = true; }\r\n series.push(studySeries);\r\n }\r\n });\r\n\r\n //series.length == 1 && \r\n if (this.parent.selectedForecastRandomized.length > 0) {\r\n series.push(this.createForecastChartSeries());\r\n }\r\n }\r\n else if (this.parent.selectedAggregation == \"ByAppendix\") {\r\n let appendicies: Appendix[] = this.parent.allAppendices;\r\n if (this.parent.showUnassigned) {\r\n appendicies = appendicies.concat(this.parent.unassignedAppendicies);\r\n }\r\n appendicies.forEach((a: Appendix) => {\r\n //make an unassigned apenddices array and add that to the all appendices array if the toggle is true\r\n\r\n let appendixSeries: ChartSeries = new ChartSeries(this.parent.selectedGraphView);\r\n appendixSeries.name = a.Name;\r\n appendixSeries.color = this.getSeriesColor(a.Name);\r\n appendixSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.AppendixId == a.Id));\r\n if (appendixSeries.data.length > 0) {\r\n if (appendixSeries.data.length >= 15) { moreThan15Points = true; }\r\n series.push(appendixSeries);\r\n }\r\n });\r\n\r\n if (this.parent.selectedForecastRandomized.length > 0) {\r\n series.push(this.createForecastChartSeries());\r\n }\r\n }\r\n else if (this.parent.selectedAggregation == \"BySite\") {\r\n this.parent.consentedSites.forEach((s: Site) => {\r\n let siteSeries: ChartSeries = new ChartSeries(this.parent.selectedGraphView);\r\n siteSeries.name = s.Name;\r\n siteSeries.data = this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.SiteNumber == s.Id));\r\n if (siteSeries.data.length > 0) {\r\n if (siteSeries.data.length >= 15) { moreThan15Points = true; }\r\n series.push(siteSeries);\r\n }\r\n });\r\n showLegend = false;\r\n }\r\n\r\n return new ChartSetup(series, showingForecast, moreThan15Points, showLegend);\r\n }\r\n\r\n\r\n private getIndices(): number[] {\r\n switch (this.parent.selectedBreakdown) {\r\n case 'All Participants': return [0]; //\"ALL\" | 0: actual | 1: expected\r\n case 'RECOVER Cohort': return [1, 0, 2];\r\n case 'Race': return [1, 2, 3, 4, 5, 6, 0, 7];\r\n case 'Ethnicity': return [1, 0, 2];\r\n case 'Hispanic or Non-White': return [1, 0, 2];\r\n case 'Sex': return [0, 1, 2, 3, 4];\r\n //case 'Age': return [0, 1, 2, 3, 4];\r\n case 'Age': return [0, 1, 2, 3];\r\n case 'SX Cluster: ExInt (Enrolled)': return [1, 0, 2];\r\n case 'SX Cluster: CogDys (Enrolled)': return [1, 0, 2];\r\n case 'SX Cluster: Autonomic (Enrolled)': return [1, 0, 2];\r\n default: return [];\r\n }\r\n }\r\n\r\n private createChartSeries(index: number, legendIndex: number): ChartSeries {\r\n\r\n let series: ChartSeries = new ChartSeries(this.parent.selectedGraphView);\r\n series.legendIndex = legendIndex;\r\n series.marker = {\r\n lineWidth: '0',\r\n lineColor: series.color,\r\n };\r\n\r\n if (this.parent.selectedBreakdown == \"All Participants\") {\r\n if (index == 0) { //actual\r\n series.name = \"Actual\";\r\n series.color = \"#152850\"; //recover dark blue\r\n }\r\n else if (index == 1) {\r\n series.name = \"Expected\";\r\n series.color = \"#de4846\"; //reddish\r\n series.dashStyle = 'dot';\r\n series.type = 'lollipop';\r\n series.connectorWidth = 2;\r\n series.marker = { radius: 3, symbol: 'circle' };\r\n return series;\r\n }\r\n }\r\n else if (this.parent.selectedBreakdown == \"RECOVER Cohort\" || this.parent.selectedBreakdown == \"Ethnicity\" || this.parent.selectedBreakdown == \"Hispanic or Non-White\" || this.parent.selectedBreakdown == \"SX Cluster: ExInt (Enrolled)\" || this.parent.selectedBreakdown == \"SX Cluster: CogDys (Enrolled)\" || this.parent.selectedBreakdown == \"SX Cluster: Autonomic (Enrolled)\") {\r\n series.name = EnrollmentLookup.GetYesNo(index);\r\n if (this.parent.selectedBreakdown == \"Ethnicity\" && series.name != \"Unknown\") {\r\n series.name = (series.name == \"Yes\") ? \"Hispanic\" : \"Not Hispanic\";\r\n }\r\n switch (index) {\r\n case 1: series.color = \"#77A6B6\"; break;\r\n case 0: series.color = \"#E9C46A\"; break;\r\n case 2: series.color = \"#6e6e6e\"; break;\r\n };\r\n }\r\n else if (this.parent.selectedBreakdown == \"Sex\") {\r\n series.name = EnrollmentLookup.GetSex(index);\r\n switch (index) {\r\n case 0: series.color = \"#77A6B6\"; break;\r\n case 1: series.color = \"#E9C46A\"; break;\r\n case 2: series.color = \"#99C2A2\"; break;\r\n case 3: series.color = \"#A288A6\"; break;\r\n case 4: series.color = \"#6e6e6e\"; break;\r\n };\r\n }\r\n else if (this.parent.selectedBreakdown == \"Age\") {\r\n series.name = EnrollmentLookup.GetAgeGroup(index);\r\n switch (index) {\r\n case 0: series.color = \"#E9C46A\"; break;\r\n case 1: series.color = \"#77A6B6\"; break;\r\n case 2: series.color = \"#99C2A2\"; break;\r\n case 3: series.color = \"#6e6e6e\"; break;\r\n //case 3: series.color = \"#99C2A2\"; break;\r\n //case 4: series.color = \"#6e6e6e\"; break;\r\n };\r\n }\r\n else if (this.parent.selectedBreakdown == \"Race\") {\r\n series.name = EnrollmentLookup.GetRace(index);\r\n switch (index) {\r\n case 0: series.color = \"#99C2A2\"; break;\r\n case 1: series.color = \"#F4A261\"; break;\r\n case 2: series.color = \"#A288A6\"; break;\r\n case 3: series.color = \"#77A6B6\"; break;\r\n case 4: series.color = \"#994636\"; break;\r\n case 5: series.color = \"#0075A2\"; break;\r\n case 6: series.color = \"#E9C46A\"; break;\r\n case 7: series.color = \"#6e6e6e\"; break;\r\n }\r\n }\r\n\r\n return series;\r\n }\r\n\r\n private getSeriesColor(label: string): string {\r\n if (label == \"VITAL\") { return \"#77A6B6\"; }\r\n else if (label == \"NEURO\") { return \"#E9C46A\"; }\r\n else if (label == \"AUTONOMIC\") { return \"#A288A6\"; }\r\n else if (label == \"SLEEP\") { return \"#99C2A2\"; }\r\n else if (label == \"ENERGIZE\") { return \"#f4a261\"; }\r\n else if (label == \"VITAL-1 (Paxlovid)\") { return \"#77A6B6\"; }\r\n else if (label == \"NEURO-1 (tDCS & BrainHQ)\") { return \"#E9C46A\"; }\r\n else if (label == \"AUTONOMIC-1 (IVIG)\") { return \"#A288A6\"; }\r\n else if (label == \"AUTONOMIC-2 (Ivabradine)\") { return \"#99C2A2\"; }\r\n else if (label == \"SLEEP-1 (Modafinil/Solriamfetol)\") { return \"#f4a261\"; }\r\n else if (label == \"SLEEP-2 (Melatonin/Light)\") { return \"#666B41\"; }\r\n else if (label == \"ENERGIZE-1 (Cardiopulmonary Rehab)\") { return \"#A26B73\"; }\r\n else if (label == \"ENERGIZE-2 (Structured Pacing)\") { return \"#4D6C80\"; }\r\n else if (label == \"VITAL-Unassigned\") { return \"#51727d\"; } //blue\r\n else if (label == \"NEURO-Unassigned\") { return \"#947c41\"; } //yellow\r\n else if (label == \"AUTONOMIC-Unassigned\") { return \"#635366\"; } //pink\r\n else return \"black\";\r\n }\r\n\r\n private createChartData(participants: Participant[]): ChartDataPoint[] {\r\n\r\n let data: ChartDataPoint[] = [];\r\n\r\n if (participants.length == 0) return data;\r\n //console.log(participants);\r\n\r\n let dayMonthDictionary: Map = new Map(); //value: array of counts by study (to facilitate rate computations)\r\n\r\n participants.forEach((p: Participant) => {\r\n let studyCounts: number[] = [];\r\n let count: number = 0;\r\n let dateOfInterest: number = 0;\r\n\r\n if (this.parent.selectedPopulation == \"randomized\") {\r\n dateOfInterest = (this.parent.selectedGraphView == 'Cumulative') ? p.DateRandomized.getTime() : p.MonthRandomized.getTime();\r\n if (this.parent.selectedGraphView == 'ByWeek') {\r\n dateOfInterest = p.WeekRandomized.getTime();\r\n }\r\n }\r\n else if (this.parent.selectedPopulation == \"consented\" || this.parent.selectedPopulation == \"screen-failed\") {\r\n dateOfInterest = (this.parent.selectedGraphView == 'Cumulative') ? p.DateConsented.getTime() : p.MonthConsented.getTime();\r\n if (this.parent.selectedGraphView == 'ByWeek') {\r\n dateOfInterest = p.WeekConsented.getTime();\r\n }\r\n }\r\n\r\n if (dateOfInterest > 0) {\r\n if (dayMonthDictionary.has(dateOfInterest)) {\r\n studyCounts = dayMonthDictionary.get(dateOfInterest);\r\n }\r\n if (studyCounts[p.StudyId] == undefined) studyCounts[p.StudyId] = 0;\r\n studyCounts[p.StudyId] += 1;\r\n dayMonthDictionary.set(dateOfInterest, studyCounts);\r\n }\r\n });\r\n\r\n //add up cummulative enrollment over time\r\n let lastDate: number = -1;\r\n let countToDate: number = 0;\r\n dayMonthDictionary.forEach((studyCounts: number[], date: number) => {\r\n if (this.parent.selectedGraphView == 'Cumulative') { countToDate += SumArrayElements(studyCounts); }\r\n else if (this.parent.selectedGraphView == 'ByMonth') { countToDate = SumArrayElements(studyCounts); }\r\n else if (this.parent.selectedGraphView == 'ByWeek') { countToDate = SumArrayElements(studyCounts); }\r\n else if (this.parent.selectedGraphView == \"RatePerSiteByMonth\") {\r\n countToDate = 0;\r\n [...studyCounts].forEach((count: number, index: number) => { //index is studyId\r\n if (count != undefined) {\r\n let sitesActivated: number = this.parent.sitesActivatedByMonthByStudy.get(index + \"_\" + date);\r\n //countToDate += count / this.parent.siteActivationStudyTimestampMap.get(index).filter((x: number) => x <= date).length;\r\n countToDate += count / sitesActivated;\r\n }\r\n //console.log(countToDate);\r\n });\r\n }\r\n\r\n if (date != lastDate) {\r\n //if (lastDate != -1) {\r\n data.push(new ChartDataPoint(date, countToDate));\r\n //}\r\n lastDate = date;\r\n }\r\n });\r\n\r\n //console.log(data);\r\n\r\n return data;\r\n }\r\n\r\n private createForecastChartSeries(): ChartSeries {\r\n let forecastSeries: ChartSeries = this.createChartSeries(1, 1);\r\n\r\n let isCumulative: boolean = (this.parent.selectedGraphView == \"Cumulative\");\r\n\r\n //console.log(this.parent.selectedForecastRandomized);\r\n\r\n forecastSeries.data = CreateSeries_ActualDays(this.parent.selectedForecastRandomized, isCumulative, []).map((points: any[]) => {\r\n if (this.parent.selectedGraphView == \"Cumulative\" || this.parent.selectedGraphView == \"ByMonth\") { return new ChartDataPoint(points[0], points[1]); }\r\n else if (this.parent.selectedGraphView == \"RatePerSiteByMonth\") { return new ChartDataPoint(points[0], points[1]); }\r\n });\r\n\r\n return forecastSeries;\r\n }\r\n}\r\n\r\nexport class ChartSetup {\r\n constructor(public series: ChartSeries[], public showForecast: boolean, public moreThan15Points: boolean, public showLegend: boolean) { }\r\n}\r\n\r\nexport class ChartSeries {\r\n data: ChartDataPoint[];\r\n step: string = 'left';\r\n //step: string = undefined;\r\n name: string;\r\n color: string;\r\n type: string = \"line\";\r\n marker: any;\r\n legendIndex: number;\r\n dashStyle: string = 'solid';\r\n connectorWidth: number = 1;\r\n\r\n constructor(chartView: string = 'Cumulative') {\r\n if (chartView == 'ByMonth' || chartView == \"RatePerSiteByMonth\" || chartView == \"ByWeek\") {\r\n delete this.step;\r\n delete this.type;\r\n delete this.marker;\r\n }\r\n }\r\n}\r\n\r\nexport class ChartDataPoint {\r\n x: number; //milliseconds of date\r\n y: number;\r\n\r\n constructor(x: number, y: number) {\r\n this.x = x;\r\n this.y = y;\r\n }\r\n}","\r\n\r\nexport class Study {\r\n Id: number;\r\n Name: string;\r\n\r\n constructor(id: number, name: string) { this.Id = id; this.Name = name; }\r\n\r\n static GetStudyName(id: number): string {\r\n switch (id) {\r\n case (1): return \"Infrastructure\";\r\n case (2): return \"VITAL\";\r\n case (3): return \"NEURO\";\r\n case (4): return \"SLEEP\";\r\n case (5): return \"AUTONOMIC\";\r\n case (6): return \"ENERGIZE\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n //sorts in-place, with Infrastructure and Unknown at end of list\r\n static SortByName(list: Study[]): void {\r\n list.sort((a: Study, b: Study) => {\r\n if (a.Id != 1 && b.Id != 1) { return a.Name.localeCompare(b.Name); }\r\n else if (a.Id == 1 && b.Id != 1) { return 1; }\r\n else if (a.Id != 1 && b.Id == 1) { return -1; }\r\n else return 0;\r\n });\r\n }\r\n\r\n static GetStudiesToShow(appendixIds: number[]): number[] {\r\n let studiesToShow: number[] = [];\r\n\r\n if (appendixIds.includes(1)) { studiesToShow.push(2); } //VITAL \r\n if (appendixIds.includes(3)) { studiesToShow.push(3); } //NEURO\r\n if (appendixIds.includes(5) || appendixIds.includes(6)) { studiesToShow.push(4); } //SLEEP\r\n if (appendixIds.includes(8) || appendixIds.includes(9)) { studiesToShow.push(5); } //AUTO\r\n if (appendixIds.includes(11) || appendixIds.includes(12)) { studiesToShow.push(6); } //ENERGIZE\r\n\r\n return studiesToShow;\r\n }\r\n}\r\n","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","import { IFilter } from \"./filtering.entities\";\r\n\r\n\r\n\r\n\r\n\r\nexport function InitializeFilterDropdown(selectId: string, values: string[], tableFilter: IFilter, compoundValues: any[] = undefined, selected: boolean = true, optionName: string = undefined): void {\r\n $(selectId).selectpicker({\r\n dropupAuto: false,\r\n selectedTextFormat: \"count\",\r\n\r\n countSelectedText: (numSelected, numTotal) => {\r\n if (numSelected == numTotal) {\r\n return \"All\";\r\n }\r\n else {\r\n return numSelected + \" Selected\";\r\n }\r\n }\r\n });\r\n\r\n if (compoundValues == undefined) {\r\n values.forEach((element: any) => {\r\n $(selectId).append(new Option(element, element, false, selected));\r\n });\r\n }\r\n else {\r\n //compoundValues.forEach((element: ExpertiseArea) => {\r\n // $(selectId).append(new Option(element.Expertise, element.Id, false, selected));\r\n //});\r\n }\r\n\r\n $(selectId).selectpicker(\"refresh\");\r\n\r\n $(selectId).on('changed.bs.select', (e, clickedIndex, isSelected, previousValue) => {\r\n tableFilter.triggerFilter();\r\n });\r\n}\r\n\r\nexport function GetSelectedDropdownValues(selectId: string): any {\r\n return $(selectId).val();\r\n}\r\n\r\nexport function InitializeDateSelector(selectorId: string, tableFilter: IFilter): void {\r\n $('#' + selectorId).datepicker({\r\n todayBtn: \"linked\",\r\n clearBtn: true,\r\n autoclose: true,\r\n todayHighlight: true,\r\n orientation: \"bottom auto\"\r\n });\r\n\r\n $('#' + selectorId).datepicker().on(\"clearDate\", () => {\r\n $('#' + selectorId).datepicker('update', '');\r\n tableFilter.triggerFilter();\r\n });\r\n\r\n $('#' + selectorId).datepicker().on(\"changeDate\", () => {\r\n tableFilter.triggerFilter();\r\n });\r\n}\r\n\r\nexport function GetSelectedDate(selectorId: string): any {\r\n return $(selectorId).datepicker('getDate');\r\n}\r\n\r\nexport function ResetDropdownFilters(filterList: string[]): void {\r\n filterList.forEach((dropdownId: string) => {\r\n $(dropdownId).selectpicker('selectAll');\r\n $(dropdownId).selectpicker('refresh');\r\n });\r\n}\r\n\r\nexport function ResetDateFilters(filterList: string[]): void {\r\n filterList.forEach((filterId: string) => {\r\n $(filterId).datepicker('update', '');\r\n });\r\n}\r\n\r\nexport function SelectDropdownOption(selectId: string, values: string[]): void {\r\n $(selectId).selectpicker('val', values);\r\n}\r\n","export class OutcomesLookup {\r\n\r\n static GetOutcome(id: number): string {\r\n switch (id) {\r\n case (1): return \"VITAL: Autonomic Dysfunction\";\r\n case (2): return \"VITAL: Cognitive Dysfunction\";\r\n case (3): return \"VITAL: Exercise Intolerance\";\r\n case (4): return \"NEURO\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetOutcomeOrdering(id: number): number {\r\n switch (id) {\r\n case (4): return 1; // NEURO\r\n case (1): return 2; // VITAL: AD\r\n case (2): return 3; // VITAL: CD\r\n case (3): return 4; // VITAL: EI\r\n default: return 100; // \"Unknown\";\r\n }\r\n }\r\n\r\n //incremented by 100 to be able to overload logic of status\r\n static GetReasonMissing(id: number): string {\r\n switch (id) {\r\n case (101): return \"Missing Day 90 DSQ-PEM\";\r\n case (102): return \"Missing Day 90 OHQ\";\r\n case (103): return \"Missing Day 90 PROMIS-8a\";\r\n case (104): return \"Missing Baseline PROMIS-8a\";\r\n case (105): return \"Missing EOI ECOG-2\";\r\n case (106): return \"Missing Baseline ECOG-2\";\r\n case (107): return \"Missing Baseline OHQ\";\r\n default: return \"\";\r\n }\r\n }\r\n\r\n static GetReasonMissingOrdering(id: number): number {\r\n switch (id) {\r\n case (104): return 1; // Missing Baseline PROMIS-8a\r\n case (106): return 2; // Missing Baseline ECOG-2\r\n case (107): return 3; // Missing Baseline OHQ\r\n case (101): return 4; // Missing Day 90 DSQ-PEM\r\n case (102): return 7; // Missing Day 90 OHQ\r\n case (103): return 5; // Missing Day 90 PROMIS-8a\r\n case (105): return 6; // Missing EOI ECOG-2\r\n case (100): return 8; // unknown\r\n default: return 200; // \"Unknown\";\r\n }\r\n }\r\n\r\n static GetReasonMissingOrderingArray(): number[] {\r\n return [104, 106, 107, 101, 102, 103, 105, 100];\r\n }\r\n\r\n //overloaded to save extra hashmaps\r\n static GetOutcomeStatus(id: number): string {\r\n switch (id) {\r\n case (1): return \"Available\";\r\n case (2): return \"Discontinued Prior\";\r\n case (3): return \"Primary Outcome Visit Overdue\";\r\n case (4): return \"Not Available\";\r\n case (5): return \"Not Yet Due\";\r\n case (100): return \"Unknown\"; //reasons\r\n case (101): return \"Missing Day 90 DSQ-PEM\";\r\n case (102): return \"Missing Day 90 OHQ\";\r\n case (103): return \"Missing Day 90 PROMIS-8a\";\r\n case (104): return \"Missing Baseline PROMIS-8a\";\r\n case (105): return \"Missing EOI ECOG-2\";\r\n case (106): return \"Missing Baseline ECOG-2\";\r\n case (107): return \"Missing Baseline OHQ\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetColorIndex(id: number): number {\r\n switch (id) {\r\n case (1): return 500; //Available\r\n case (5): return 501; //Not Yet Due\r\n case (3): return 502; //Overdue\r\n case (4): return 503; //Not Done\r\n case (2): return 504; //Discontinued Prior\r\n case (104): return 500; //In Window\r\n case (106): return 501; //\r\n case (107): return 501; //\r\n case (101): return 502; //\r\n case (102): return 503; //\r\n case (103): return 504; //\r\n case (105): return 504; //\r\n case (100): return 505;\r\n default: return 0;\r\n }\r\n }\r\n}","\r\n\r\nexport class EnrollmentLookup { \r\n\r\n static GetSex(id: number): string {\r\n\r\n switch (id) {\r\n case (0): return \"Female\";\r\n case (1): return \"Male\";\r\n case (2): return \"Intersex\";\r\n case (3): return \"Prefer Not To Answer\";\r\n case (4): return \"Unknown\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetRace(id: number): string {\r\n\r\n switch (id) {\r\n case (0): return \"Multi\";\r\n case (1): return \"AIAN\";\r\n case (2): return \"Asian\";\r\n case (3): return \"Black\";\r\n case (4): return \"MENA\";\r\n case (5): return \"NHPI\";\r\n case (6): return \"White\";\r\n case (7): return \"Unknown\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetAgeGroup(id: number): string {\r\n\r\n switch (id) {\r\n case (0): return \"18-45\";\r\n case (1): return \"46-65\";\r\n case (2): return \"+65\";\r\n case (3): return \"Unknown\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetYesNo(id: number): string {\r\n\r\n switch (id) {\r\n case (0): return \"No\";\r\n case (1): return \"Yes\";\r\n case (2): return \"Unknown\";\r\n }\r\n }\r\n}","// extracted by mini-css-extract-plugin","import { Appendix } from \"../../../../../../shared/entities/scripts/appendix\";\r\nimport { Study } from \"../../../../../../shared/entities/scripts/study\";\r\nimport { FormatDate, GetDateFromString } from \"../../../../../../shared/scripts/date-functions\";\r\nimport { FormatNumberWithCommas } from \"../../../../../../shared/scripts/number-functions\";\r\nimport { RenderDateMDY } from \"../../../../../../shared/scripts/table-functions\";\r\nimport { SiteInfo } from \"../../../../sites/shared/sites.entities\";\r\nimport { VisitEvent } from \"./visits.entities\";\r\nimport { VisitLookup } from \"./visits.lookup\";\r\n\r\n\r\nexport class VisitsDialog {\r\n static table: any = undefined;\r\n\r\n static Initialize() {\r\n VisitsDialog.table = $('#visits-details-modal #dialog-details-table').DataTable({\r\n //retrieve: true,\r\n autoWidth: true,\r\n //\"order\": [[3, \"asc\"]],\r\n info: false,\r\n paging: false,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n searching: false,\r\n columns: [\r\n { data: \"Study\", title: \"Platform\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Appendix\", title: \"Trial\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"SiteNumber\", title: \"Site\", className: \"text-left font-size12 nowrap\" },\r\n { data: { _: \"VisitOrdering\", display: \"Visit\", sort: \"VisitOrdering\" }, title: \"Visit\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"VisitStatus\", title: \"Status\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Subject\", title: \"Participant\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"DateCompletion\", title: \"Completion Date\", className: \"text-left font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateTargetCompletion\", title: \"Target Date\", className: \"text-left font-size12 nowrap\", render: RenderDateMDY },\r\n { data: { _: \"VisitWindowString\", sort: \"DateWindowLow\" }, title: \"Visit Window\", className: \"text-left font-size12 nowrap\" },\r\n ]\r\n });\r\n }\r\n\r\n public static ShowDialog(visits: VisitEvent[]): void {\r\n //console.log(\"show\", visits);\r\n let tableRows: VisitDialogRow[] = visits.map((v: VisitEvent) => new VisitDialogRow(v));\r\n //console.log(tableRows);\r\n\r\n if (VisitsDialog.table == undefined) { VisitsDialog.Initialize(); }\r\n\r\n VisitsDialog.table.clear();\r\n VisitsDialog.table.rows.add(tableRows).draw();\r\n\r\n $('#visits-details-modal').on('shown.bs.modal', () => {\r\n VisitsDialog.table.columns.adjust();\r\n $('#visits-details-modal .dataTables_scrollBody').scrollTop(0);\r\n $('#visits-details-modal #modal-title').text(\"Number of Visit Events = \" + FormatNumberWithCommas(visits.length + \"\"));\r\n //$('#visits-details-modal-count').text(visits.length);\r\n });\r\n\r\n $('#visits-details-modal').modal('show');\r\n\r\n }\r\n}\r\n\r\n\r\nexport class VisitDialogRow {\r\n Study: string;\r\n Appendix: string;\r\n SiteNumber: string;\r\n Subject: string;\r\n Visit: string;\r\n VisitOrdering: number;\r\n VisitStatus: string;\r\n DateCompletion: string;\r\n DateTargetCompletion: string;\r\n DateWindowLow: number;\r\n VisitWindowString: string;\r\n\r\n constructor(event: VisitEvent) {\r\n this.Study = Study.GetStudyName(event.StudyId);\r\n this.Appendix = Appendix.GetAppendixName(event.AppendixId);\r\n this.SiteNumber = SiteInfo.FormatSiteNumber(event.SiteNumber);\r\n this.Subject = event.SubjectId;\r\n this.Visit = VisitLookup.GetVisit(event.VisitId);\r\n this.VisitOrdering = VisitLookup.GetVisitOrdering(event.VisitId);\r\n this.VisitStatus = VisitLookup.GetVisitStatus(event.VisitStatusId);\r\n this.DateCompletion = event.VisitDateStr;\r\n this.DateTargetCompletion = event.TargetDateStr;\r\n\r\n let dateLow: Date = GetDateFromString(event.VisitLowerDateStr, \"slash-month-day-year\");\r\n let dateHigh: Date = GetDateFromString(event.VisitUpperDateStr, \"slash-month-day-year\");\r\n this.VisitWindowString = FormatDate(dateLow, \"mo-day-year\") + \" to \" + FormatDate(dateHigh, \"mo-day-year\");\r\n this.DateWindowLow = dateLow.getTime();\r\n }\r\n}","import { numberFormat } from \"highcharts\";\r\nimport { CreateSeries_ActualDays } from \"../../../../shared/scripts/graphing/graphing-functions\";\r\nimport { ForecastGraphDataPoint } from \"../../forecasts/scripts/forecasts.entities\";\r\nimport { ChartSetup } from \"./enrollment.chart-controller\";\r\nimport { Participant } from \"./enrollment.entities\";\r\nimport { EnrollmentLookup } from \"./enrollment.lookup\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\nrequire('highcharts/modules/lollipop')(Highcharts);\r\nrequire('highcharts/highcharts-more')(Highcharts);\r\nrequire('highcharts/modules/dumbbell')(Highcharts);\r\n\r\nexport class ChartLine {\r\n\r\n constructor() { }\r\n\r\n UpdateChart(chartSetup: ChartSetup): void {\r\n\r\n Highcharts.chart('enrollment-chart', {\r\n chart: {\r\n backgroundColor: 'white',\r\n zoomType: 'x',\r\n resetZoomButton: {\r\n position: {\r\n align: 'right', // right by default\r\n verticalAlign: 'top',\r\n x: -10,\r\n y: 0\r\n },\r\n relativeTo: 'chart'\r\n }\r\n },\r\n credits: { enabled: false },\r\n title: { text: null },\r\n xAxis: {\r\n type: 'datetime',\r\n //max: maxDate,\r\n showLastLabel: true,\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.dateFormat('%e %b %Y', this.value);\r\n }\r\n }\r\n },\r\n yAxis: {\r\n //max: maxEnrollment,\r\n title: {\r\n text: 'Number of Participants'\r\n },\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.value, 0, '', ',');\r\n }\r\n }\r\n },\r\n plotOptions: {\r\n line: {\r\n stickyTracking: false,\r\n findNearestPointBy: 'xy',\r\n marker: {\r\n enabled: !chartSetup.moreThan15Points\r\n }\r\n },\r\n lollipop: {\r\n marker: {\r\n enabled: true\r\n }\r\n }\r\n },\r\n tooltip: {\r\n xDateFormat: '%e %b %Y',\r\n shared: false\r\n },\r\n legend: {\r\n enabled: chartSetup.showLegend,\r\n //symbolWidth: 0\r\n },\r\n series: chartSetup.series\r\n });\r\n }\r\n}","import { FormatNumberWithCommas } from \"../../../../../../shared/scripts/number-functions\";\r\nimport { TableColumnGroup, TableColumnVisibilityController } from \"../../../../../../shared/scripts/table-column-visibility\";\r\nimport { RenderDateMDY, RenderDateYMD } from \"../../../../../../shared/scripts/table-functions\";\r\nimport { SiteMilestone } from \"../../scripts/site-activation.entities\";\r\n\r\nexport class MilestoneDetailsTab {\r\n\r\n tableId: string = \"site-milestones-table\";\r\n tableWrapperId: string = this.tableId + \"_wrapper\";\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n\r\n constructor(milestones: SiteMilestone[]) {\r\n\r\n let columns: any[] = [\r\n { data: { _: \"SiteNameDisplay\", sort: \"SiteName\" }, title: \"Site Name\", className: \"text-left font-size12\" },\r\n { data: { _: \"SiteNumberDisplay\", sort: \"SiteNumber\" }, title: \"Site Id\", className: \"site-id text-center font-size12 nowrap\" },\r\n { data: \"PrimeContract\", title: \"Platform\", className: \"prime-contract text-center font-size12 nowrap\" },\r\n { data: \"Milestone\", title: \"Milestone\", className: \"milestone text-left font-size12 nowrap\" },\r\n { data: \"DateCompletion\", title: \"Completion Date\", className: \"completion-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: { _: \"InPlayDisplay\", sort: \"InPlay\" }, title: \"In-Play\", className: \"in-play text-center font-size12 nowrap\" },\r\n { data: { _: \"CommentDisplay\", sort: \"Comment\" }, title: \"Comments\", className: \"comments text-left font-size12\" },\r\n { data: \"OrderBy\", title: \"OrderBy\", visible: false },\r\n ];\r\n\r\n this.dataTable = $('#' + this.tableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: true,\r\n pagingType: 'simple',\r\n pageLength: 50,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 1\r\n },\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n order: [[1, 'asc'], [7, 'asc']],\r\n data: milestones\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .spacer\").addClass('col-12 col-md-3');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.tableId, (this.tableId + '-column-select'), [\r\n new TableColumnGroup(\"Site Number\", true, [], \"site-id\"),\r\n new TableColumnGroup(\"Platform\", true, [], \"prime-contract\"),\r\n new TableColumnGroup(\"Milestone\", true, [], \"milestone\"),\r\n new TableColumnGroup(\"Completion Date\", true, [], \"completion-date\"),\r\n new TableColumnGroup(\"In-Play\", false, [], \"in-play\"),\r\n new TableColumnGroup(\"Comments\", true, [], \"comments\"),\r\n ]);\r\n\r\n $('#' + this.tableId).on('search.dt', (e, settings) => {\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n this.setCountFoundLabel(milestones.length);\r\n }\r\n\r\n setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.tableId + '-found-count').text(\"No Milestones Found\"); break;\r\n case 1: $('#' + this.tableId + '-found-count').text(\"1 Milestone Found\"); break;\r\n default: $('#' + this.tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Milestones Found\");\r\n }\r\n }\r\n\r\n refresh(): void {\r\n this.dataTable.columns.adjust();\r\n this.tableColumnController.refresh();\r\n }\r\n\r\n updateContent(matchingContracts: SiteMilestone[]): void {\r\n\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(matchingContracts).draw();\r\n this.setCountFoundLabel(matchingContracts.length);\r\n }\r\n\r\n clearSearchBar(): void {\r\n this.dataTable.search('').draw();\r\n }\r\n}","// extracted by mini-css-extract-plugin","import { FormatNumberWithCommas } from \"../../../../../../shared/scripts/number-functions\";\r\nimport { SetActiveTab } from \"../../../../../../shared/scripts/tab-utilities\";\r\nimport { RenderNullableNumberWithSeparators, RenderProgressValue } from \"../../../../../../shared/scripts/table-functions\";\r\nimport { ISiteInfo } from \"../../../scripts/data-completeness.page\";\r\nimport { OutcomesDialog } from \"../scripts/outcomes.dialog\";\r\nimport { OutcomesDatatableEntry } from \"./outcomes-datatable.entities\";\r\n\r\n\r\nexport class OutcomesDatatableView {\r\n\r\n selectedGrouping: string; //none, outcome, site\r\n\r\n tableNone: any; tableNoneId: string = \"outcomes-datatable-none\";\r\n tableByOutcome: any; tableOutcomeId: string = \"outcomes-datatable-byoutcome\";\r\n tableBySite: any; tableSiteId: string = \"outcomes-datatable-bysite\";\r\n\r\n constructor() {\r\n this.selectedGrouping = \"none\";\r\n\r\n this.tableNone = this.initializeTable(this.tableNoneId, this.tableNoneId + \"_wrapper\");\r\n this.tableByOutcome = this.initializeTable(this.tableOutcomeId, this.tableOutcomeId + \"_wrapper\");\r\n this.tableBySite = this.initializeTable(this.tableSiteId, this.tableSiteId + \"_wrapper\");\r\n\r\n this.initializeDialog([this.tableNoneId, this.tableOutcomeId, this.tableSiteId]);\r\n }\r\n\r\n\r\n SetView(newView: string): void {\r\n\r\n if (!newView.startsWith(\"outcomes-datatable\")) { return; }\r\n\r\n //console.log(newView);\r\n\r\n if (newView.includes(\"none\")) { this.selectedGrouping = \"none\"; SetActiveTab(\"outcomes-datatable-tabs\", \"content-outcomes-datatable-none\"); this.tableNone.columns.adjust(); }\r\n else if (newView.includes(\"byoutcome\")) { this.selectedGrouping = \"outcome\"; SetActiveTab(\"outcomes-datatable-tabs\", \"content-outcomes-datatable-byoutcome\"); this.tableByOutcome.columns.adjust(); }\r\n else if (newView.includes(\"bysite\")) { this.selectedGrouping = \"site\"; SetActiveTab(\"outcomes-datatable-tabs\", \"content-outcomes-datatable-bysite\"); this.tableBySite.columns.adjust(); }\r\n\r\n }\r\n\r\n UpdateData(tableEntriesNone: OutcomesDatatableEntry[], tableEntriesByOutcome: OutcomesDatatableEntry[], tableEntriesBySite: OutcomesDatatableEntry[]): void {\r\n this.tableNone.clear();\r\n this.tableByOutcome.clear();\r\n this.tableBySite.clear();\r\n\r\n this.tableNone.rows.add(tableEntriesNone).draw();\r\n this.tableByOutcome.rows.add(tableEntriesByOutcome).draw();\r\n this.tableBySite.rows.add(tableEntriesBySite).draw();\r\n\r\n //this.setCountFoundLabel(milestonesBySite.length);\r\n }\r\n\r\n private initializeTable(tableId: string, tableWrapperId: string): any {\r\n\r\n let dataTable: any = $('#' + tableId).DataTable({\r\n \"dom\": 'lrtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n //pagingType: 'simple',\r\n //pageLength: 50,\r\n search: false,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 4\r\n },\r\n columns: [\r\n { data: \"Study\", title: \"Platform\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Appendix\", title: \"Trial\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"SiteNumber\", title: \"Site\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Outcome\", title: \"Outcome\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"PotentialOutcomes\", title: \"Potential
Outcomes\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { data: \"ExpectedOutcomes\", title: \"Expected
Outcomes\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { data: \"Completed.0\", title: \"Completed
Outcomes\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '', visible: false },\r\n { data: \"Completed.1\", title: \"Percent
Completed\", className: \"text-center font-size12 nowrap gray font-underline clickable-completed\", render: RenderProgressValue, defaultContent: '' },\r\n { data: \"Overdue.0\", title: \"Overdue
Outcomes\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '', visible: false },\r\n { data: \"Overdue.1\", title: \"Percent
Overdue\", className: \"text-center font-size12 nowrap gray font-underline clickable-overdue\", render: RenderProgressValue, defaultContent: '' },\r\n { data: \"NotDone.0\", title: \"Not Done
Outcomes\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '', visible: false },\r\n { data: \"NotDone.1\", title: \"Percent
Not Done\", className: \"text-center font-size12 nowrap gray font-underline clickable-notdone\", render: RenderProgressValue, defaultContent: '' },\r\n { data: \"DiscPrior.0\", title: \"Disc. Prior
Outcomes\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '', visible: false },\r\n { data: \"DiscPrior.1\", title: \"Percent
Disc. Prior\", className: \"text-center font-size12 nowrap gray font-underline clickable-discprior\", render: RenderProgressValue, defaultContent: '' },\r\n { data: \"NotYetDue\", title: \"Not Yet Due
Outcomes\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '' },\r\n { data: \"Site\", title: \"Site Name\", className: \"text-left font-size10 nowrap\", visible: false },\r\n ],\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n }\r\n ],\r\n createdRow: (row, data: any, index) => {\r\n //cell formatting on percentages\r\n if (data.Completed[1] != undefined) { this.setCellPercentValue(row, 'td:eq(6)', this.getCellColorByValue(\"Completed\", data.Completed[1]), data.Completed[0]); }\r\n if (data.Overdue[1] != undefined) { this.setCellPercentValue(row, 'td:eq(7)', this.getCellColorByValue(\"Overdue\", data.Overdue[1]), data.Overdue[0]); }\r\n if (data.NotDone[1] != undefined) { this.setCellPercentValue(row, 'td:eq(8)', this.getCellColorByValue(\"NotDone\", data.NotDone[1]), data.NotDone[0]); }\r\n if (data.DiscPrior[1] != undefined) { this.setCellPercentValue(row, 'td:eq(9)', this.getCellColorByValue(\"DiscPrior\", data.DiscPrior[1]), data.DiscPrior[0]); }\r\n }\r\n });\r\n\r\n dataTable.on('column-visibility.dt', function () {\r\n $('[data-toggle=\"tooltip\"]').tooltip()\r\n });\r\n $('[data-toggle=\"tooltip\"]').tooltip()\r\n\r\n return dataTable;\r\n }\r\n\r\n private getCellColorByValue(dataElement: string, value: number): string {\r\n if (dataElement == \"Available\") {\r\n if (value >= 0.85) return \"#7fb87f\";\r\n else if (value >= 0.65) return \"#FCE77D\";\r\n else return \"#F07D7D\";\r\n }\r\n else if (dataElement == \"Overdue\" || dataElement == \"NotDone\") {\r\n if (value < 0.10) return \"#7fb87f\";\r\n else if (value <= 0.20) return \"#FCE77D\";\r\n else return \"#F07D7D\";\r\n }\r\n else if (dataElement == \"DiscPrior\") {\r\n if (value < 0.10) return \"#7fb87f\";\r\n else if (value <= 0.20) return \"#FCE77D\";\r\n else return \"#F07D7D\";\r\n }\r\n }\r\n\r\n private initializeDialog(tableIds: string[]): void {\r\n\r\n tableIds.forEach((tableId: string) => {\r\n $('#' + tableId).on('click', 'td.clickable-completed', function () {\r\n var row = $('#' + tableId).DataTable().row(this).data();\r\n OutcomesDialog.ShowDialog(row.CompletedOutcomes);\r\n });\r\n $('#' + tableId).on('click', 'td.clickable-overdue', function () {\r\n var row = $('#' + tableId).DataTable().row(this).data();\r\n OutcomesDialog.ShowDialog(row.OverdueOutcomes);\r\n });\r\n $('#' + tableId).on('click', 'td.clickable-notdone', function () {\r\n var row = $('#' + tableId).DataTable().row(this).data();\r\n OutcomesDialog.ShowDialog(row.NotDoneOutcomes);\r\n });\r\n $('#' + tableId).on('click', 'td.clickable-discprior', function () {\r\n var row = $('#' + tableId).DataTable().row(this).data();\r\n OutcomesDialog.ShowDialog(row.DiscPriorOutcomes);\r\n });\r\n });\r\n }\r\n\r\n private setCellPercentValue(row: any, cell: string, color: string, count: number): void {\r\n $(cell, row).css('background-color', color);\r\n $(cell, row).attr('title', 'n = ' + count);\r\n $(cell, row).attr('data-toggle', 'tooltip');\r\n $(cell, row).attr('data-placement', 'top');\r\n }\r\n\r\n exportTable(): void {\r\n\r\n let tableId: string = undefined;\r\n if (this.selectedGrouping == \"none\") { tableId = this.tableNoneId; }\r\n else if (this.selectedGrouping == \"byoutcome\") { tableId = this.tableOutcomeId; }\r\n else if (this.selectedGrouping == \"bysite\") { tableId = this.tableSiteId; }\r\n if (tableId != undefined) {\r\n let table = $(\"#\" + this.tableNoneId).DataTable();\r\n (table).button(0).trigger();\r\n }\r\n }\r\n\r\n private setCountFoundLabel(tableId: string, count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + tableId + '-found-count').text(\"No Records Found\"); break;\r\n case 1: $('#' + tableId + '-found-count').text(\"1 Record Found\"); break;\r\n default: $('#' + tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Records Found\");\r\n }\r\n }\r\n\r\n private refresh(): void {\r\n //this.dataTable.columns.adjust();\r\n //this.tableColumnController.refresh();\r\n }\r\n\r\n private clearSearchBar(): void {\r\n //this.dataTable.search('').draw();\r\n }\r\n}","\r\n\r\n\r\nexport class DetailsTableDialog {\r\n\r\n data: any[];\r\n dataTable: any;\r\n\r\n constructor(columns: any[], ordering: any[]) {\r\n\r\n $(() => {\r\n\r\n this.dataTable = $('#view-detail-table-modal-table').DataTable({\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n searching: false,\r\n //scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n columns: columns,\r\n order: ordering\r\n });\r\n\r\n $('#view-detail-table-modal').on('shown.bs.modal', () => {\r\n\r\n //this.dataTable.clear();\r\n $('#view-detail-table-modal-table').show();\r\n this.dataTable.draw();\r\n //this.dataTable.rows.add(this.data).draw();\r\n });\r\n\r\n $('#view-detail-table-modal').on('hide.bs.modal', () => {\r\n this.dataTable.clear();\r\n //this.dataTable.draw();\r\n $('#view-detail-table-modal-table').hide();\r\n });\r\n\r\n });\r\n\r\n\r\n }\r\n\r\n setData(data: any[]): void {\r\n\r\n //console.log(\"Set Data\", data);\r\n this.data = data;\r\n this.dataTable.rows.add(this.data);\r\n }\r\n\r\n show(title: string = \"\"): void {\r\n $('#view-detail-table-modal-title').html(title);\r\n $('#view-detail-table-modal').modal('show');\r\n }\r\n}\r\n","import { SiteInfo } from \"../../sites/shared/sites.entities\";\r\nimport { VisitsController } from \"../components/visits-tab/scripts/visits.controller\";\r\nimport { Visit, VisitEvent } from \"../components/visits-tab/scripts/visits.entities\";\r\nimport { VisitLookup } from \"../components/visits-tab/scripts/visits.lookup\";\r\nimport { FilterSection, IFilteringParent } from \"./data-completeness.filter\";\r\nimport { DateUpdatedSection } from \"../../../../shared/components/date-updated-section/date-updated-section.view\";\r\nimport { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { Appendix } from \"../../../../shared/entities/scripts/appendix\";\r\nimport { Site } from \"../../../../shared/entities/scripts/site\";\r\nimport { OutcomesController } from \"../components/outcomes-tab/scripts/outcomes.controller\";\r\nimport { SetActiveTab } from \"../../../../shared/scripts/tab-utilities\";\r\n\r\n\r\nexport class DataCompletenessPage implements ISiteInfo, IFilteringParent {\r\n\r\n siteInfoList: SiteInfo[];\r\n siteInfoMap: Map;\r\n\r\n allStudies: Study[] = [];\r\n allAppendices: Appendix[] = [];\r\n allSites: Site[] = [];\r\n\r\n filter: FilterSection;\r\n\r\n selectedData: string; //visits, outcomes\r\n selectedView: string; //view-summary, view-tabular\r\n\r\n //going to try lazy loading data for different views in case assessments is large\r\n visitController: VisitsController = undefined;\r\n outcomeController: OutcomesController = undefined;\r\n\r\n constructor(visitTimingJson: any, primaryOutcomesJson: any, siteInfoJson: any, lastUpdatedJson: any) {\r\n\r\n $(() => {\r\n\r\n new DateUpdatedSection(lastUpdatedJson, false, true, false);\r\n\r\n //console.log(visitTimingJson);\r\n //console.log(siteInfoJson);\r\n\r\n this.siteInfoList = SiteInfo.Parse(siteInfoJson);\r\n this.siteInfoMap = new Map();\r\n this.siteInfoList.forEach((site: SiteInfo) => {\r\n if (!this.siteInfoMap.has(site.SiteNumber)) { this.siteInfoMap.set(site.SiteNumber, site); }\r\n });\r\n\r\n this.visitController = new VisitsController(this, visitTimingJson);\r\n this.outcomeController = new OutcomesController(this, primaryOutcomesJson);\r\n\r\n this.initializeFilters();\r\n\r\n this.selectedView = \"view-summary\";\r\n this.setTypeOfData(\"visits\");\r\n \r\n this.FilterUpdated();\r\n\r\n $('#loading-indicator').hide();\r\n $('.loaded-content').removeClass('invisible');\r\n });\r\n }\r\n\r\n //FilterUpdated(studyIds: number[], appendixIds: number[], siteIds: number[], visitIds: number[]) {\r\n FilterUpdated() {\r\n\r\n if (this.selectedData == \"visits\") {\r\n this.visitController.FilterUpdated(this.filter.selectedStudyIds, this.filter.selectedAppendixIds, this.filter.selectedSiteIds, this.filter.selectedVisitIds, this.filter.selectedVisitRequiredIds);\r\n }\r\n else if (this.selectedData == \"outcomes\") {\r\n this.outcomeController.FilterUpdated(this.filter.selectedStudyIds, this.filter.selectedAppendixIds, this.filter.selectedSiteIds, this.filter.selectedOutcomeIds);\r\n }\r\n }\r\n\r\n GetSiteName(siteNumber: number): string {\r\n return this.siteInfoMap.get(siteNumber).getSiteNameNumber();\r\n }\r\n\r\n initializeFilters(): void {\r\n let foundSiteIds: string[] = [];\r\n let foundStudyIds: number[] = [];\r\n let foundAppendixIds: number[] = [];\r\n\r\n //assumes visits is comprehensive list across data views\r\n this.visitController.allVisitEvents.forEach((v: VisitEvent) => {\r\n\r\n if (!foundSiteIds.includes(v.SiteNumber + \"-\" + v.StudyId)) { foundSiteIds.push(v.SiteNumber + \"-\" + v.StudyId); }\r\n if (!foundStudyIds.includes(v.StudyId)) {\r\n this.allStudies.push(new Study(v.StudyId, Study.GetStudyName(v.StudyId)));\r\n foundStudyIds.push(v.StudyId);\r\n }\r\n\r\n if (!foundAppendixIds.includes(v.AppendixId)) {\r\n this.allAppendices.push(new Appendix(v.AppendixId, v.StudyId, Appendix.GetAppendixName(v.AppendixId)));\r\n foundAppendixIds.push(v.AppendixId);\r\n }\r\n });\r\n\r\n let foundSiteMap: Map = new Map();\r\n this.siteInfoList.forEach((s: SiteInfo) => {\r\n if (foundSiteIds.includes(s.SiteNumber + \"-\" + s.StudyId)) {\r\n if (foundSiteMap.has(s.SiteNumber)) {\r\n foundSiteMap.get(s.SiteNumber).StudyIds.push(s.StudyId);\r\n }\r\n else {\r\n let newSite: Site = new Site(s.SiteNumber, s.getSiteNameNumber());\r\n newSite.StudyIds.push(s.StudyId);\r\n foundSiteMap.set(s.SiteNumber, newSite);\r\n }\r\n }\r\n });\r\n this.allSites = Array.from(foundSiteMap.values()).sort((a: Site, b: Site) => a.Name.localeCompare(b.Name));\r\n\r\n this.filter = new FilterSection(this.allStudies, this.allAppendices, this.allSites, this.visitController.allVisits, this.visitController.allVisitRequired, this.outcomeController.allOutcomes, this);\r\n\r\n }\r\n\r\n resetFilters(): void {\r\n this.filter.resetFilters();\r\n }\r\n\r\n setTypeOfData(newData: string): void {\r\n //console.log(\"setTypeOfData\", newData);\r\n\r\n this.selectedData = newData;\r\n if (this.selectedData == \"visits\") { SetActiveTab(\"data-completeness-tabs\", \"visits-tab\"); this.setView(\"\"); this.updateVisibleFilters(); }\r\n else if (this.selectedData == \"outcomes\") { SetActiveTab(\"data-completeness-tabs\", \"outcomes-tab\"); this.setView(\"\"); this.updateVisibleFilters(); }\r\n\r\n this.FilterUpdated();\r\n }\r\n\r\n setView(newView: string): void {\r\n\r\n //on data type change, stay on high-level tab, but reset to default view\r\n if (newView.length == 0) {\r\n if (this.selectedView.includes(\"summary\")) { newView = \"view-summary\"; }\r\n else if (this.selectedView.includes(\"datatable\")) { newView = \"view-datatable\"; }\r\n }\r\n\r\n //console.log(\"setView: \", newView, this.selectedData);\r\n\r\n this.selectedView = newView;\r\n\r\n if (this.selectedData == \"visits\") {\r\n this.visitController.setView(newView);\r\n }\r\n else if (this.selectedData == \"outcomes\") {\r\n this.outcomeController.setView(newView);\r\n }\r\n }\r\n\r\n updateVisibleFilters(): void {\r\n\r\n if (this.selectedData == \"visits\") {\r\n $('#visit-filter').show();\r\n $('#visit-required-filter').show();\r\n $('#outcome-filter').hide();\r\n }\r\n else if (this.selectedData == \"outcomes\") {\r\n $('#visit-filter').hide();\r\n $('#visit-required-filter').hide();\r\n $('#outcome-filter').show();\r\n\r\n }\r\n }\r\n\r\n exportTable(): void {\r\n if (this.selectedView == \"visits\") {\r\n this.visitController.exportTable();\r\n }\r\n else if (this.selectedView == \"outcomes\") {\r\n this.outcomeController.exportTable();\r\n }\r\n }\r\n}\r\n\r\nexport interface ISiteInfo {\r\n siteInfoList: SiteInfo[];\r\n GetSiteName(siteNumber: number): string;\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { DateUpdatedSection } from \"../../../../shared/components/date-updated-section/date-updated-section.view\";\r\nimport { RemoveElementFromArray } from \"../../../../shared/scripts/array-functions\";\r\nimport { RenderNullableNumber, RenderProgressBar } from \"../../../../shared/scripts/table-functions\";\r\nimport { FinancialEntry, FinancialGraphData, OverviewDataElement, VoucherEntry } from \"./financials.entities\"\r\nimport { FinancialCharts } from './financials.chart';\r\nimport { InvoicesTable } from './financials.table';\r\nimport { VouchersTable } from './voucher.table';\r\nimport { FinancialVendorCharts } from './financials-vendors.chart';\r\nimport { ResetDateFilters, ResetDropdownFilters } from \"../../../../shared/scripts/filtering/filtering.utilities\";\r\n\r\nexport class FinancialsPage {\r\n\r\n invoiceTable: any;\r\n financialCharts: FinancialCharts;\r\n financialGraphData: FinancialGraphData[];\r\n financialTableData: FinancialEntry[];\r\n financialVendorGraphData: FinancialGraphData[];\r\n overviewData: OverviewDataElement[];\r\n\r\n constructor(DataJson: any, GraphDataJson: any, VendorGraphDataJson: any, OverviewDataJson: any) {\r\n\r\n $(() => {\r\n\r\n this.financialTableData = plainToClass(FinancialEntry, DataJson);\r\n this.financialGraphData = plainToClass(FinancialGraphData, GraphDataJson);\r\n this.financialVendorGraphData = plainToClass(FinancialGraphData, VendorGraphDataJson);\r\n this.overviewData = plainToClass(OverviewDataElement, OverviewDataJson);\r\n \r\n // Pull Additional JsonListing for FinancialGraphData\r\n this.initializeCharts();\r\n this.initializeTable();\r\n this.initializeOverviewData();\r\n\r\n this.hideLoading();\r\n });\r\n }\r\n\r\n initializeCharts(): void {\r\n this.financialGraphData.forEach(entry => entry.initialize());\r\n let financialCharts = new FinancialCharts();\r\n financialCharts.setGraphContent(this.financialGraphData);\r\n\r\n this.financialVendorGraphData.forEach(entry => entry.initialize());\r\n let vendorCharts = new FinancialVendorCharts();\r\n vendorCharts.setGraphContent(this.financialVendorGraphData);\r\n }\r\n\r\n initializeTable(): void {\r\n this.invoiceTable = new InvoicesTable(this.financialTableData);\r\n }\r\n\r\n initializeOverviewData(): void {\r\n this.overviewData.forEach(entry => entry.initialize());\r\n this.overviewData.sort((a, b) => {\r\n if (a.InvoicedPercent == b.InvoicedPercent) return a.Study.localeCompare(b.Study);\r\n else return b.InvoicedPercent - a.InvoicedPercent;\r\n }); \r\n\r\n let dataTable: any = $('#financials-overview-table').DataTable({\r\n \"dom\": '<\"top-controls\"B0>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n search: false,\r\n scrollX: false,\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n ordering: false,\r\n columns: [\r\n { data: \"Study\", className: \"text-left font-size12 font-bold\", width: \"10%\" },\r\n { data: \"InvoicedCountDisplay\", className: \"text-right font-size12 nowrap\", width: \"10%\" },\r\n { data: \"InvoicedPercent\", className: \"text-left font-size12 nowrap\", width: \"20%\", render: RenderProgressBar },\r\n { data: \"EnrollmentCountDisplay\", className: \"text-right font-size12 nowrap\", width: \"10%\" },\r\n { data: \"EnrollmentPercent\", className: \"text-left font-size12 nowrap\", width: \"20%\", render: RenderProgressBar },\r\n { data: \"TimelineCountDisplay\", className: \"text-right font-size12 nowrap\", width: \"10%\" },\r\n { data: \"TimelinePercent\", className: \"text-left font-size12 nowrap\", width: \"20%\", render: RenderProgressBar },\r\n ],\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n //order: [[5, 'asc']],\r\n data: this.overviewData,\r\n });\r\n\r\n }\r\n\r\n hideLoading() {\r\n $(\"#loading-indicator\").hide();\r\n $(\"#financial-tab-content\").removeClass(\"invisible\");\r\n $(\"#date-updated-section\").removeClass(\"invisible\");\r\n $(\"#navigation-tabs\").removeClass(\"invisible\");\r\n }\r\n\r\n initializeLastUpdated(lastUpdated: string) {\r\n $(\"#last-update-date\").text(lastUpdated);\r\n }\r\n\r\n resetInvoiceFilters(): void {\r\n \r\n ResetDropdownFilters(['#study-dropdown', '#invoice-status-dropdown', '#vendor-dropdown', '#entry-type-dropdown']);\r\n ResetDateFilters(['#added-since-date', '#added-before-date']);\r\n\r\n this.invoiceTable.clearSearchBar();\r\n }\r\n\r\n toggleSummary(): void {\r\n $(\"#financial-summary-by-study\").toggleClass(\"d-none\");\r\n $(\"#financial-summary-by-vendor\").toggleClass(\"d-none\");\r\n $(\".switch-label\").toggleClass(\"font-weight-bold\");\r\n\r\n //to make sure the dropdowns go \"down\"\r\n ['#subcontract-table-column-filter-dropdown', '#subcontract-vendor-table-column-filter-dropdown'].forEach((id: string) => $(id).selectpicker(\"refresh\"));\r\n }\r\n\r\n}","import { ChartSetup } from \"./enrollment.chart-controller\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\nrequire('highcharts/highcharts-more')(Highcharts);\r\n//require('highcharts/modules/dumbbell')(Highcharts);\r\n\r\nexport class ChartBar {\r\n\r\n constructor() { }\r\n\r\n UpdateChart(chartSetup: ChartSetup, yAxisTitle: string = \"Number of Participants\", numberOfDecimalPoints: number = 0, dateFormat: string = '%b %Y'): void {\r\n\r\n Highcharts.chart('enrollment-chart', {\r\n chart: {\r\n type: 'column',\r\n backgroundColor: 'white',\r\n zoomType: 'x',\r\n resetZoomButton: {\r\n position: {\r\n align: 'right', // right by default\r\n verticalAlign: 'top',\r\n x: -10,\r\n y: 0\r\n },\r\n relativeTo: 'chart'\r\n }\r\n },\r\n credits: { enabled: false },\r\n title: { text: null },\r\n xAxis: {\r\n type: 'datetime',\r\n //max: maxDate,\r\n showLastLabel: true,\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.dateFormat('%b \\'%y', this.value);\r\n }\r\n }\r\n },\r\n yAxis: {\r\n //max: maxEnrollment,\r\n title: {\r\n text: yAxisTitle\r\n },\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.value, 0, '', ',');\r\n }\r\n },\r\n stackLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.total, numberOfDecimalPoints);\r\n }\r\n }\r\n },\r\n plotOptions: {\r\n column: {\r\n stacking: 'normal',\r\n dataLabels: {\r\n enabled: (!chartSetup.showForecast) && (chartSetup.series.length > 1),\r\n //format: '{point.y:,.2f}'\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.y, numberOfDecimalPoints);\r\n }\r\n }\r\n }\r\n },\r\n tooltip: {\r\n xDateFormat: dateFormat,\r\n shared: false,\r\n formatter: function () {\r\n let value: string = \"\" + Highcharts.dateFormat(dateFormat, this.x) + \"
\";\r\n value += \" \" + this.series.name + \": \" + Highcharts.numberFormat(this.y, numberOfDecimalPoints) + \"\";\r\n return value;\r\n }\r\n },\r\n legend: {\r\n enabled: chartSetup.showLegend\r\n },\r\n series: chartSetup.series\r\n });\r\n }\r\n}\r\n\r\n","import { SetActiveTab } from \"../../../../../../shared/scripts/tab-utilities\";\r\nimport { ISiteInfo } from \"../../../scripts/data-completeness.page\";\r\nimport { OutcomesDialog } from \"../scripts/outcomes.dialog\";\r\nimport { OutcomeEvent } from \"../scripts/outcomes.entities\";\r\nimport { OutcomesLookup } from \"../scripts/outcomes.lookup\";\r\nimport { OutcomesSummarySeries } from \"./outcomes-summary.entities\";\r\n\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\n\r\n\r\nexport class OutcomesSummaryView {\r\n\r\n outcomeSummaryChart: any;\r\n siteSummaryChart: any;\r\n outcomeReasonsChart: any;\r\n siteReasonsChart: any;\r\n\r\n selectedGrouping: string; //outcome, site\r\n selectedData: string; //status, reasons\r\n\r\n constructor() {\r\n this.selectedGrouping = \"outcome\";\r\n this.selectedData = \"status\";\r\n }\r\n\r\n UpdateData(outcomeSeries: OutcomesSummarySeries[], siteSeries: OutcomesSummarySeries[]): void {\r\n\r\n //console.log(outcomeSeries);\r\n //console.log(siteSeries);\r\n\r\n this.updateChart('outcomes-byoutcome-summary-status-chart', outcomeSeries, [1, 3, 4, 2, 5], \"Outcomes\");\r\n this.updateChart('outcomes-bysite-summary-status-chart', siteSeries, [1, 3, 4, 2, 5], \"Sites\");\r\n //this.updateChart('outcomes-byoutcome-summary-reasons-chart', outcomeSeries, OutcomesLookup.GetReasonMissingOrderingArray(), \"Outcomes\");\r\n //this.updateChart('outcomes-bysite-summary-reasons-chart', siteSeries, OutcomesLookup.GetReasonMissingOrderingArray(), \"Sites\");\r\n }\r\n\r\n private updateChart(chartId: string, data: OutcomesSummarySeries[], outcomeStatusIds: number[], axisLabel: string): void {\r\n\r\n let series: any[] = [];\r\n let categories: string[] = [];\r\n let outcomes: OutcomeEvent[] = [];\r\n\r\n outcomeStatusIds.forEach((statusId: number) => {\r\n\r\n let seriesData: any[] = new Array(data.length).fill(0);\r\n for (let i = 0; i < data.length; ++i) {\r\n\r\n if (!categories.includes(data[i].name)) { categories.push(data[i].name); }\r\n if (data[i].outcomes.has(statusId)) {\r\n seriesData[i] = { y: data[i].outcomes.get(statusId).length, outcomes: data[i].outcomes.get(statusId) };\r\n }\r\n }\r\n\r\n series.push({ name: OutcomesLookup.GetOutcomeStatus(statusId), data: seriesData, colorIndex: OutcomesLookup.GetColorIndex(statusId) });\r\n });\r\n\r\n this.initializeBarChart(chartId, axisLabel, categories, series);\r\n }\r\n\r\n private initializeBarChart(chartId: string, axisLabel: string, categories: string[], data: any[]): any {\r\n\r\n //console.log(chartId, axisLabel, categories, data);\r\n //console.log(categories.length, (40 * categories.length));\r\n //console.log(data);\r\n\r\n let chart: any = Highcharts.chart(chartId, {\r\n chart: {\r\n type: 'bar',\r\n styledMode: true,\r\n height: 100 + (45 * categories.length)\r\n },\r\n credits: { enabled: false },\r\n title: { text: null },\r\n xAxis: {\r\n type: 'category',\r\n categories: categories,\r\n min: 0,\r\n max: categories.length - 1,\r\n title: { text: axisLabel },\r\n tickInterval: 1,\r\n tickLength: 0,\r\n },\r\n yAxis: {\r\n min: 0,\r\n endOnTick: false, // helps with cropping data labels\r\n maxPadding: 0.2, // larger value has more space for data labels (default is 0.05)\r\n reversedStacks: false,\r\n title: { text: 'Outcome Count' },\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.value, 0, '.', ',');\r\n }\r\n },\r\n stackLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.total, 0, '.', ',');\r\n },\r\n inside: false, //label issues\r\n verticalAlign: 'middle',\r\n }\r\n },\r\n legend: {\r\n align: 'center',\r\n verticalAlign: 'top',\r\n },\r\n plotOptions: {\r\n series: {\r\n stacking: 'normal',\r\n point: {\r\n events: {\r\n click: function () {\r\n OutcomesDialog.ShowDialog(this.options.outcomes);\r\n }\r\n }\r\n },\r\n },\r\n bar: {\r\n pointWidth: 25,\r\n pointPadding: 0.1,\r\n //groupPadding: 0.2,\r\n borderWidth: 0,\r\n dataLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n if (this.y == 0) return null;\r\n else {\r\n let label: string = Highcharts.numberFormat(this.y, 0, '.', ',');\r\n if (this.point.shapeArgs.height <= (label.length * 10)) return null;\r\n else return label;\r\n }\r\n },\r\n verticalAlign: 'middle',\r\n y: 2\r\n },\r\n },\r\n },\r\n series: data\r\n });\r\n\r\n return chart;\r\n }\r\n\r\n\r\n SetView(newView: string): void {\r\n\r\n if (!newView.startsWith(\"outcomes-summary\")) { return; }\r\n else if (newView != \"outcomes-summary\") { //new within-summary view\r\n if (newView.includes(\"byoutcome\")) { this.selectedGrouping = \"outcome\"; }\r\n else if (newView.includes(\"bysite\")) { this.selectedGrouping = \"site\"; }\r\n\r\n if (newView.includes(\"bystatus\")) { this.selectedData = \"status\"; }\r\n //else if (newView.includes(\"byreason\")) { this.selectedData = \"reason\"; }\r\n }\r\n\r\n if (this.selectedGrouping == \"outcome\" && this.selectedData == \"status\") { SetActiveTab(\"outcomes-summary-tabs\", \"content-summary-outcomes-byoutcome-status\"); }\r\n else if (this.selectedGrouping == \"site\" && this.selectedData == \"status\") { SetActiveTab(\"outcomes-summary-tabs\", \"content-summary-outcomes-bysite-status\"); }\r\n //else if (this.selectedGrouping == \"outcome\" && this.selectedData == \"reason\") { SetActiveTab(\"outcomes-summary-tabs\", \"content-summary-outcomes-byoutcome-reasons\"); }\r\n //else if (this.selectedGrouping == \"site\" && this.selectedData == \"reason\") { SetActiveTab(\"outcomes-summary-tabs\", \"content-summary-outcomes-bysite-reasons\"); }\r\n\r\n }\r\n\r\n}\r\n\r\n","import { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { GetDateFromString } from \"../../../../shared/scripts/date-functions\";\r\nimport { CreateSeries_ActualDays } from \"../../../../shared/scripts/graphing/graphing-functions\";\r\nimport { IGraphDataPoint } from \"../../../../shared/scripts/graphing/graphing.entities\";\r\nimport { PadNumber } from \"../../../../shared/scripts/number-functions\";\r\nimport { FormatStringColumnByLength } from \"../../../../shared/scripts/table-functions\";\r\n\r\nexport class PrescreeningEntry {\r\n Type: number; //0: summary, 1: weekly, 2: site with consent, no prescreening\r\n PrimeId: number;\r\n SiteNumber: number;\r\n DateWeekStart: string;\r\n DateActivation: string = \"\";\r\n DateFirstEnrollment: string = \"\";\r\n DateLatestEnrollment: string = \"\";\r\n DateLatestPrescreening: string = \"\";\r\n Counts: number[] = [-1, -1, -1, -1, -1, -1, -1, -1]; //0: Total Pre-Screened, 1: No Phone, 2: PassScreen, 3: In-Person, 4: Randomized, 5: Screened Post-Consent, 6: Screen-Fails\r\n AgesPrescreen: number[] = [-1, -1, -1, -1]; //0: 18-30, 1: 31-50, 2: 51-70, 3: 71+\r\n\r\n //0: White, 1: Black, 2: AIAN, 3: Asian, 4: NHOPI, 5: MENA, 6: Two or More, 7: Unknown, 8: Non-White\r\n RacesPrescreen: number[] = [-1, -1, -1, -1, -1, -1, -1, -1, -1];\r\n RacesConsented: number[] = [-1, -1, -1, -1, -1, -1, -1, -1, -1];\r\n RacesScreenFail: number[] = [-1, -1, -1, -1, -1, -1, -1, -1, -1];\r\n RacesRandomized: number[] = [-1, -1, -1, -1, -1, -1, -1, -1, -1];\r\n\r\n //0: Not Hispanic, 1: Hispanic, 2: Unknown, 3: Non-White OR Hispanic (a hybrid with Race)\r\n EthnicitiesPrescreen: number[] = [-1, -1, -1, -1];\r\n EthnicitiesConsented: number[] = [-1, -1, -1, -1];\r\n EthnicitiesScreenFail: number[] = [-1, -1, -1, -1];\r\n EthnicitiesRandomized: number[] = [-1, -1, -1, -1];\r\n\r\n //0: Prescreen, 1: Consented, 2: ScreenFail, 3: Randomized\r\n PercentNonWhite: number[] = [-1, -1, -1, -1];\r\n PercentHispanic: number[] = [-1, -1, -1, -1];\r\n PercentNonWhiteOrHispanic: number[] = [-1, -1, -1, -1];\r\n\r\n Exclusions: number[] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; //0: Any, 1: Active COVID, 2: DrugUse, 3: ContraMedicine, 4: Pregnant, 5: Allergy, 6: Immunocomprised, 7: Recent Paxlovid, 8: No Symptom Cluster, 9: MedicalCondition, 10: Invest Decision, 11: Patient Reason, 12: Recent Trial\r\n NoInPerson: number[] = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; //0: Declined, 1: Risks, 2: Doctor Declined, 3: Family Declined, 4: TooBusy, 5: Compensation, 6: Travel, 7: Privacy, 8: Trust, 9: Other, 10: Unknown\r\n\r\n SiteName: string;\r\n PrimeContract: string;\r\n SiteNumberDisplay: string;\r\n SiteNameDisplay: string;\r\n\r\n WeekStartDate: Date;\r\n ActivationDate: Date;\r\n FirstEnrollmentDate: Date;\r\n LatestEnrollmentDate: Date;\r\n\r\n WeekStartTimestamp: number;\r\n ActivationTimestamp: number;\r\n FirstEnrollmentTimestamp: number;\r\n LatestEnrollmentTimestamp: number;\r\n\r\n SiteHash: string;\r\n\r\n WeeklyEntries: PrescreeningEntry[];\r\n MaxTimestamp: number;\r\n ChartSeriesName: string;\r\n ChartSeriesData: any[];\r\n ChartSeriesIndex: number;\r\n\r\n initialize(): void {\r\n\r\n this.PrimeContract = Study.GetStudyName(this.PrimeId);\r\n delete this.PrimeId;\r\n\r\n this.SiteHash = this.PrimeContract + \"-\" + this.SiteNumber;\r\n this.ChartSeriesName = this.SiteName + \" (\" + this.PrimeContract + \")\";\r\n\r\n this.WeekStartDate = GetDateFromString(this.DateWeekStart, \"slash-month-day-year\");\r\n this.ActivationDate = GetDateFromString(this.DateActivation, \"slash-month-day-year\");\r\n this.FirstEnrollmentDate = GetDateFromString(this.DateFirstEnrollment, \"slash-month-day-year\");\r\n this.LatestEnrollmentDate = GetDateFromString(this.DateLatestEnrollment, \"slash-month-day-year\");\r\n\r\n this.MaxTimestamp = 0;\r\n\r\n if (this.WeekStartDate != undefined) {\r\n this.WeekStartTimestamp = this.WeekStartDate.getTime();\r\n if (this.WeekStartTimestamp > this.MaxTimestamp) this.MaxTimestamp = this.WeekStartTimestamp;\r\n }\r\n if (this.ActivationDate != undefined) {\r\n this.ActivationTimestamp = this.ActivationDate.getTime();\r\n if (this.ActivationTimestamp > this.MaxTimestamp) this.MaxTimestamp = this.ActivationTimestamp;\r\n }\r\n if (this.FirstEnrollmentDate != undefined) {\r\n this.FirstEnrollmentTimestamp = this.FirstEnrollmentDate.getTime();\r\n if (this.FirstEnrollmentTimestamp > this.MaxTimestamp) this.MaxTimestamp = this.FirstEnrollmentTimestamp;\r\n }\r\n if (this.LatestEnrollmentDate != undefined) this.LatestEnrollmentTimestamp = this.LatestEnrollmentDate.getTime();\r\n\r\n this.SiteNumberDisplay = PadNumber(this.SiteNumber + \"\", 3);\r\n this.SiteNameDisplay = FormatStringColumnByLength(this.SiteName, 4);\r\n\r\n this.computePercentages();\r\n\r\n //if (this.SiteNumber == 131 && this.Type == 0) console.log(this);\r\n\r\n //console.log(this);\r\n }\r\n\r\n createChartSeries(): void {\r\n\r\n this.ChartSeriesData = CreateSeries_ActualDays(this.WeeklyEntries.map((entry: PrescreeningEntry) => entry.createGraphDataPoint()), true);\r\n this.WeeklyEntries.forEach((entry: PrescreeningEntry) => {\r\n if (entry.WeekStartDate.getTime() > this.MaxTimestamp) { this.MaxTimestamp = entry.WeekStartDate.getTime(); }\r\n });\r\n }\r\n\r\n createGraphDataPoint(): PrescreeningGraphDataPoint {\r\n return new PrescreeningGraphDataPoint(this.SiteName, this.PrimeContract, this.SiteHash, this.Counts[0], this.WeekStartDate);\r\n }\r\n\r\n computePercentages(): void {\r\n this.PercentNonWhite[0] = this.calculatePercent(this.RacesPrescreen[8], this.Counts[0]);\r\n this.PercentNonWhite[1] = this.calculatePercent(this.RacesConsented[8], this.Counts[5]);\r\n this.PercentNonWhite[2] = this.calculatePercent(this.RacesScreenFail[8], this.Counts[6]);\r\n this.PercentNonWhite[3] = this.calculatePercent(this.RacesRandomized[8], this.Counts[4]);\r\n\r\n this.PercentHispanic[0] = this.calculatePercent(this.EthnicitiesPrescreen[1], this.Counts[0]);\r\n this.PercentHispanic[1] = this.calculatePercent(this.EthnicitiesConsented[1], this.Counts[5]);\r\n this.PercentHispanic[2] = this.calculatePercent(this.EthnicitiesScreenFail[1], this.Counts[6]);\r\n this.PercentHispanic[3] = this.calculatePercent(this.EthnicitiesRandomized[1], this.Counts[4]);\r\n\r\n this.PercentNonWhiteOrHispanic[0] = this.calculatePercent(this.EthnicitiesPrescreen[3], this.Counts[0]);\r\n this.PercentNonWhiteOrHispanic[1] = this.calculatePercent(this.EthnicitiesConsented[3], this.Counts[5]);\r\n this.PercentNonWhiteOrHispanic[2] = this.calculatePercent(this.EthnicitiesScreenFail[3], this.Counts[6]);\r\n this.PercentNonWhiteOrHispanic[3] = this.calculatePercent(this.EthnicitiesRandomized[3], this.Counts[4]);\r\n\r\n }\r\n\r\n addPrescreeningEntry(entry: PrescreeningEntry): void {\r\n\r\n let arrays: string[] = [\"Counts\", \"AgesPrescreen\", \"RacesPrescreen\", \"RacesConsented\", \"RacesScreenFail\", \"RacesRandomized\", \"EthnicitiesPrescreen\", \"EthnicitiesConsented\", \"EthnicitiesScreenFail\", \"EthnicitiesRandomized\", \"Exclusions\", \"NoInPerson\" ];\r\n arrays.forEach((array: string) => this[array] = this.addArrayValues(this[array], entry[array]));\r\n\r\n }\r\n\r\n private calculatePercent(numerator: number, denominator: number): number {\r\n if (numerator == -1 || denominator <= 0) return -1;\r\n else return numerator / denominator;\r\n }\r\n\r\n private addArrayValues(array1: number[], array2: number[]): number[] {\r\n for (let i = 0; i < array1.length; ++i) {\r\n if (array2[i] >= 0) {\r\n if (array1[i] == -1) { array1[i] = array2[i]; }\r\n else { array1[i] += array2[i]; }\r\n }\r\n }\r\n\r\n return array1;\r\n }\r\n\r\n private getDateValue(date: Date): number {\r\n if (date == undefined) return undefined;\r\n else return date.getTime();\r\n }\r\n}\r\n\r\nexport class PrescreeningGraphDataPoint implements IGraphDataPoint {\r\n Count: number;\r\n Timestamp: number;\r\n\r\n SiteHash: string;\r\n PrimeContract: string;\r\n SiteName: string;\r\n\r\n\r\n constructor(siteName: string, primeContract: string, siteHash: string, count: number, date: Date) {\r\n this.SiteName = siteName;\r\n this.PrimeContract = primeContract;\r\n this.SiteHash = siteHash;\r\n this.Count = count;\r\n this.Timestamp = date.getTime();\r\n }\r\n\r\n getTimestamp(): number { return this.Timestamp; }\r\n getCount(): number { return this.Count; }\r\n}\r\n","import { plainToClass } from \"class-transformer\";\r\nimport { DateUpdatedSection } from \"../../../../shared/components/date-updated-section/date-updated-section.view\";\r\nimport { Appendix } from \"../../../../shared/entities/scripts/appendix\";\r\nimport { Site } from \"../../../../shared/entities/scripts/site\";\r\nimport { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { DoArraysOverlap, Unique } from \"../../../../shared/scripts/array-functions\";\r\nimport { SortDates } from \"../../../../shared/scripts/date-functions\";\r\nimport { IStudyAppendixSiteFilterParent, StudyAppendixSiteFilterSection } from \"../../../../shared/scripts/filtering/filtering.study-appendix-site\";\r\nimport { ResetDropdownFilters } from \"../../../../shared/scripts/filtering/filtering.utilities\";\r\nimport { FormatNumberWithCommas } from \"../../../../shared/scripts/number-functions\";\r\nimport { ForecastGraphDataPoint } from \"../../forecasts/scripts/forecasts.entities\";\r\nimport { SiteInfo } from \"../../sites/shared/sites.entities\";\r\nimport { ChartController } from \"./enrollment.chart-controller\";\r\nimport { AggregatedParticipants, Participant } from \"./enrollment.entities\";\r\nimport { EnrollmentGauges } from \"./enrollment.gauges\";\r\nimport { EnrollmentLookup } from \"./enrollment.lookup\";\r\nimport { ProgressBarSection } from \"./enrollment.progress-bars\";\r\n\r\nexport class EnrollmentPage implements IStudyAppendixSiteFilterParent, IEnrollmentPageData {\r\n\r\n allStudies: Study[] = [];\r\n allAppendices: Appendix[] = [];\r\n\r\n consentedSites: Site[] = [];\r\n activatedSites: Site[] = [];\r\n //siteActivationStudyTimestampMap: Map = new Map(); //key: studyId, value: array of site activation timestamps\r\n sitesActivatedByMonthByStudy: Map = new Map(); //key = studyId_dateTimestamp, value = count\r\n\r\n allParticipants: Participant[];\r\n selectedParticipants: Participant[];\r\n aggregatedParticipants: AggregatedParticipants = new AggregatedParticipants();\r\n\r\n forecastRandomized: ForecastGraphDataPoint[];\r\n selectedForecastRandomized: ForecastGraphDataPoint[];\r\n\r\n filter: StudyAppendixSiteFilterSection;\r\n progressBars: ProgressBarSection;\r\n gauges: EnrollmentGauges;\r\n chartController: ChartController;\r\n\r\n selectedPopulation: string; //consented, randomized, screen-fail\r\n selectedBreakdown: string; // \"Overall\", \"Race\", \"Age\", etc...\r\n selectedAggregation: string; // overall, ByStudy, ByAppendix, BySite\r\n selectedGraphView: string; //cumulative (line), pie chart, by month (bar), rate by month (bar)\r\n unassignedAppendixIds: number[] = [];\r\n showUnassigned: boolean = true;\r\n unassignedAppendicies: Appendix[] = [];\r\n \r\n constructor(siteInfoJson: any, participantJson: any, randomizedAspirationalJson: any, lastUpdatedJson: any) {\r\n\r\n $(() => {\r\n\r\n //console.log(siteInfoJson, participantJson, randomizedAspirationalJson, lastUpdatedJson);\r\n\r\n let foundSiteIds: string[] = [];\r\n let foundStudyIds: number[] = [];\r\n let foundAppendixIds: number[] = [];\r\n\r\n this.allParticipants = plainToClass(Participant, participantJson);\r\n this.allParticipants = this.allParticipants.filter((p: Participant) => {\r\n p.initialize();\r\n\r\n if (p.Consented == 1) {\r\n if (!foundSiteIds.includes(p.SiteNumber + \"-\" + p.StudyId)) { foundSiteIds.push(p.SiteNumber + \"-\" + p.StudyId); }\r\n\r\n if (!foundStudyIds.includes(p.StudyId)) {\r\n this.allStudies.push(new Study(p.StudyId, Study.GetStudyName(p.StudyId)));\r\n foundStudyIds.push(p.StudyId);\r\n }\r\n\r\n if (!foundAppendixIds.includes(p.AppendixId)) {\r\n if (Appendix.GetAppendixName(p.AppendixId).includes(\"Unassigned\")) {\r\n if (!this.unassignedAppendixIds.includes(p.AppendixId)) {\r\n this.unassignedAppendixIds.push(p.AppendixId);\r\n this.unassignedAppendicies.push(new Appendix(p.AppendixId, p.StudyId, Appendix.GetAppendixName(p.AppendixId)));\r\n }\r\n return true;\r\n }\r\n this.allAppendices.push(new Appendix(p.AppendixId, p.StudyId, Appendix.GetAppendixName(p.AppendixId)));\r\n foundAppendixIds.push(p.AppendixId);\r\n }\r\n\r\n return true;\r\n }\r\n else return false;\r\n });\r\n\r\n let siteInfo: SiteInfo[] = SiteInfo.Parse(siteInfoJson);\r\n let consentedSiteMap: Map = new Map();\r\n let activatedSiteMap: Map = new Map();\r\n siteInfo.forEach((s: SiteInfo) => {\r\n if (foundSiteIds.includes(s.SiteNumber + \"-\" + s.StudyId)) {\r\n if (consentedSiteMap.has(s.SiteNumber)) {\r\n consentedSiteMap.get(s.SiteNumber).StudyIds.push(s.StudyId);\r\n }\r\n else {\r\n let newSite: Site = new Site(s.SiteNumber, s.getSiteNameNumber());\r\n newSite.StudyIds.push(s.StudyId);\r\n consentedSiteMap.set(s.SiteNumber, newSite);\r\n }\r\n }\r\n\r\n if (s.ActivationDate != undefined) {\r\n s.setActivationTimestamp();\r\n if (activatedSiteMap.has(s.SiteNumber)) {\r\n activatedSiteMap.get(s.SiteNumber).StudyIds.push(s.StudyId);\r\n activatedSiteMap.get(s.SiteNumber).ActivationTimestamps[s.StudyId] = s.ActivationTimestamp;\r\n }\r\n else {\r\n let newSite: Site = new Site(s.SiteNumber, s.getSiteNameNumber()); \r\n newSite.StudyIds.push(s.StudyId);\r\n newSite.ActivationTimestamps[s.StudyId] = s.ActivationTimestamp;\r\n activatedSiteMap.set(s.SiteNumber, newSite);\r\n }\r\n }\r\n });\r\n this.consentedSites = Array.from(consentedSiteMap.values()).sort((a: Site, b: Site) => a.Name.localeCompare(b.Name));\r\n this.activatedSites = Array.from(activatedSiteMap.values()).sort((a: Site, b: Site) => a.Name.localeCompare(b.Name));\r\n\r\n //console.log(this.consentedSites);\r\n //console.log(activatedSiteMap);\r\n //console.log(this.activatedSites);\r\n\r\n this.forecastRandomized = plainToClass(ForecastGraphDataPoint, randomizedAspirationalJson); \r\n this.forecastRandomized = this.forecastRandomized.map((point: ForecastGraphDataPoint) => {\r\n point.initialize(\"first\", \"count\");\r\n return point;\r\n }).filter((x: ForecastGraphDataPoint) => x.TypeId == 2 && x.IsOverall == 0); //only appendix-level as we aggregate\r\n this.selectedForecastRandomized = this.forecastRandomized;\r\n\r\n //console.log(this.sites);\r\n //console.log(this.participants);\r\n //console.log(this.studies);\r\n //console.log(this.appendices);\r\n //console.log(this.forecastRandomized);\r\n\r\n new DateUpdatedSection(lastUpdatedJson, false, true, false);\r\n\r\n this.changeSelectedPopulation(\"randomized\", false);\r\n this.changeSelectedBreakdown(\"All Participants\", '', false);\r\n this.changeSelectedAggregation(\"Overall\", false);\r\n this.changeSelectedGraphView(\"Cumulative\", false);\r\n\r\n this.progressBars = new ProgressBarSection();\r\n this.gauges = new EnrollmentGauges(this);\r\n this.chartController = new ChartController(this);\r\n\r\n //this.allAppendices.sort((a1: Appendix, a2: Appendix) => {\r\n // return a1.Name.localeCompare(a2.Name);\r\n //});\r\n\r\n this.filter = new StudyAppendixSiteFilterSection(\"#study-dropdown\", \"#appendix-dropdown\", \"#site-dropdown\", this.allStudies, this.allAppendices, this.consentedSites, this);\r\n\r\n $('#loading-indicator').hide();\r\n $('.loaded-content').removeClass('invisible');\r\n this.hideUnassignedToggleButton();\r\n });\r\n }\r\n\r\n changeSelectedPopulation(value: string, triggerRefresh: boolean = true): void {\r\n\r\n this.selectedPopulation = value;\r\n\r\n //need to change sorting for graphing\r\n if (value == \"consented\") {\r\n this.allParticipants = this.allParticipants.sort((p1, p2) => SortDates(p1.DateConsented, p2.DateConsented));\r\n $('#label-population').text(\"Consented\");\r\n this.showUnassignedToggleButton();\r\n }\r\n else if (value == \"randomized\") {\r\n this.allParticipants = this.allParticipants.sort((p1, p2) => SortDates(p1.DateRandomized, p2.DateRandomized));\r\n $('#label-population').text(\"Randomized\");\r\n this.hideUnassignedToggleButton();\r\n }\r\n else if (value == \"screen-failed\") {\r\n this.allParticipants = this.allParticipants.sort((p1, p2) => SortDates(p1.DateConsented, p2.DateConsented));\r\n $('#label-population').text(\"Screen Failed\");\r\n this.showUnassignedToggleButton();\r\n }\r\n\r\n //console.log(this.participants);\r\n\r\n if (triggerRefresh) { this.filter?.refreshFilters(); }\r\n }\r\n\r\n changeSelectedBreakdown(newBreakdown: string, selectedDomainId: string = \"\", triggerRefresh: boolean = true): void {\r\n this.selectedBreakdown = newBreakdown;\r\n\r\n $('#chart-view-label').text((newBreakdown == \"All Participants\" ? newBreakdown : (\"By \" + newBreakdown)));\r\n $('.chart-details-toggle-button').removeClass('selected');\r\n\r\n let activateStudies: boolean = true;\r\n let activateAppendices: boolean = true;\r\n let activateSites: boolean = true;\r\n if (this.selectedBreakdown == \"All Participants\") {\r\n $('#view-all-no-breakdown').hide();\r\n\r\n //if (this.selectedGraphView == \"Proportional\" && this.selectedAggregation == \"Overall\") {\r\n // this.changeSelectedAggregation(\"ByStudy\", false);\r\n //}\r\n //else if (this.selectedGraphView == \"RatePerSiteByMonth\") { activateSites = false; }\r\n if (this.selectedGraphView == \"RatePerSiteByMonth\") { activateSites = false; }\r\n this.enableSelectionOption('#enrollment-graph-view', \"RatePerSiteByMonth\", true);\r\n }\r\n else\r\n {\r\n $('#view-all-no-breakdown').show();\r\n $('#' + selectedDomainId).addClass('selected');\r\n activateStudies = activateAppendices = activateSites = false;\r\n\r\n if (this.selectedAggregation != \"Overall\") { this.changeSelectedAggregation(\"Overall\", false); }\r\n if (this.selectedGraphView == \"RatePerSiteByMonth\") { $('#enrollment-graph-view').val(\"Cumulative\").trigger('change'); }\r\n this.enableSelectionOption('#enrollment-graph-view', \"RatePerSiteByMonth\", false);\r\n }\r\n this.enableButton('#view-studies-button', activateStudies);\r\n this.enableButton('#view-appendices-button', activateAppendices);\r\n this.enableButton('#view-sites-button', activateSites);\r\n\r\n if (triggerRefresh) { this.chartController.UpdateData(); }\r\n }\r\n\r\n changeSelectedAggregation(newAggregation: string, triggerRefresh: boolean = true): void {\r\n this.selectedAggregation = newAggregation;\r\n\r\n $('.aggregation-option').removeClass('active');\r\n if (this.selectedAggregation == \"Overall\") { $('#view-overall-button').addClass('active'); }\r\n if (this.selectedAggregation == \"ByStudy\") { $('#view-studies-button').addClass('active'); }\r\n if (this.selectedAggregation == \"ByAppendix\") { $('#view-appendices-button').addClass('active'); }\r\n if (this.selectedAggregation == \"BySite\") { $('#view-sites-button').addClass('active'); }\r\n\r\n if (triggerRefresh) { this.chartController.UpdateData(); }\r\n }\r\n\r\n changeSelectedGraphView(newGraphView: string, triggerRefresh: boolean = true): void {\r\n\r\n this.selectedGraphView = newGraphView;\r\n\r\n if (this.selectedGraphView == \"Cumulative\" || this.selectedGraphView == \"ByMonth\" || this.selectedGraphView == \"RatePerSiteByMonth\") {\r\n let monthField: string = \"\";\r\n let countField: string = \"\";\r\n if (this.selectedGraphView == \"Cumulative\") { monthField = \"last\"; countField = \"count\"; }\r\n else if (this.selectedGraphView == \"ByMonth\") { monthField = \"first\"; countField = \"count\"; }\r\n else if (this.selectedGraphView == \"RatePerSiteByMonth\") { monthField = \"first\"; countField = \"rate\"; }\r\n\r\n this.forecastRandomized.forEach((x: ForecastGraphDataPoint) => { x.DayOfMonth = monthField; x.CountField = countField; });\r\n this.selectedForecastRandomized.forEach((x: ForecastGraphDataPoint) => { x.DayOfMonth = monthField; x.CountField = countField; });\r\n }\r\n else if (this.selectedGraphView == \"Proportional\") {\r\n //if (this.selectedAggregation == \"Overall\" && this.selectedBreakdown == \"All Participants\") {\r\n // this.changeSelectedAggregation(\"ByStudy\", false);\r\n //}\r\n }\r\n\r\n if (this.selectedGraphView == \"RatePerSiteByMonth\") {\r\n if (this.selectedAggregation == \"BySite\") { this.changeSelectedAggregation(\"Overall\", false); }\r\n this.enableButton('#view-sites-button', false);\r\n }\r\n else if (this.selectedBreakdown == \"All Participants\") { this.enableButton('#view-sites-button', true); }\r\n\r\n if (triggerRefresh) { this.chartController.UpdateData(); }\r\n }\r\n\r\n\r\n FilterUpdated(studyIds: number[], appendixIds: number[], siteIds: number[]) {\r\n //console.log(\"FilterUpdated\", studyIds, appendixIds, siteIds);\r\n\r\n this.selectedParticipants = this.allParticipants.filter((p: Participant) => {\r\n if (this.selectedPopulation == \"consented\" && p.Consented != 1) return false;\r\n else if (this.selectedPopulation == \"randomized\" && p.Randomized != 1) return false;\r\n else if (this.selectedPopulation == \"screen-failed\" && p.ScreenFail != 1) return false;\r\n\r\n if (!studyIds.includes(p.StudyId)) return false;\r\n if (this.showUnassigned) {\r\n appendixIds = appendixIds.concat(this.unassignedAppendixIds);\r\n }\r\n if (!appendixIds.includes(p.AppendixId)) return false;\r\n if (!siteIds.includes(p.SiteNumber)) return false;\r\n\r\n return true;\r\n });\r\n\r\n //determine how many sites were activated for each study by month for monthly-reporting - only looking at select participants\r\n let monthTimestamps: number[] = [];\r\n this.selectedParticipants.forEach((p: Participant) => {\r\n if (this.selectedPopulation == \"consented\" || this.selectedPopulation == \"screen-failed\") {\r\n if (!monthTimestamps.includes(p.MonthConsented.getTime())) { monthTimestamps.push(p.MonthConsented.getTime()); }\r\n }\r\n else if (this.selectedPopulation == \"randomized\") {\r\n if (!monthTimestamps.includes(p.MonthRandomized.getTime())) { monthTimestamps.push(p.MonthRandomized.getTime()); }\r\n }\r\n })\r\n\r\n this.sitesActivatedByMonthByStudy.clear();\r\n let subsetOfSites: boolean = !siteIds.includes(0);\r\n this.activatedSites.forEach((s: Site) => {\r\n if (!DoArraysOverlap(s.StudyIds, studyIds)) return;\r\n if (subsetOfSites && !siteIds.includes(s.Id)) return;\r\n\r\n studyIds.forEach((studyId: number) => {\r\n monthTimestamps.forEach((monthTimestamp: number) => {\r\n if (s.ActivationTimestamps[studyId] != undefined && s.ActivationTimestamps[studyId] <= monthTimestamp) {\r\n let key: string = studyId + \"_\" + monthTimestamp;\r\n let count: number = 0;\r\n if (this.sitesActivatedByMonthByStudy.has(key)) {\r\n count = this.sitesActivatedByMonthByStudy.get(key);\r\n }\r\n count += 1;\r\n this.sitesActivatedByMonthByStudy.set(key, count);\r\n //console.log(studyId + \" | \" + monthTimestamp + \" | \" + new Date(monthTimestamp) + \" | \" + count + \" -- \" + s.Id);\r\n //if (monthTimestamp == 1704128400000 && studyId == 3) console.log(s.Id);\r\n }\r\n });\r\n }); \r\n });\r\n //console.log(this.sitesActivatedByMonthByStudy);\r\n\r\n //forecasted information\r\n if (this.selectedPopulation == \"randomized\") {\r\n if (!siteIds.includes(0)) { this.selectedForecastRandomized = []; }\r\n else {\r\n this.selectedForecastRandomized = this.forecastRandomized.filter((x: ForecastGraphDataPoint) => appendixIds.includes(x.AppendixId));\r\n }\r\n }\r\n else { this.selectedForecastRandomized = []; }\r\n\r\n this.aggregatedParticipants.aggregate(this.selectedParticipants);\r\n //console.log(this.aggregatedParticipants);\r\n\r\n this.progressBars.updateProgressBarData(this.aggregatedParticipants);\r\n\r\n //console.log(studyIds);\r\n //if more than VITAL is selected, hide Symptom Clusters\r\n if (studyIds.length == 1 && studyIds[0] == 2 && this.selectedPopulation == \"randomized\") {\r\n //$('#sxcluster-exint').show(); $('#sxcluster-cogdys').show(); $('#sxcluster-autonomic').show();\r\n $('#symptom-cluster-container').show();\r\n this.gauges.UpdateData(this.aggregatedParticipants);\r\n $('#sxcluster-randomized-label').text(FormatNumberWithCommas(String(this.selectedParticipants.length)));\r\n\r\n let percent: number = (this.selectedParticipants.length / 900) * 100;\r\n $('#sxcluster-percent-label').text(FormatNumberWithCommas(String(Math.round(percent))));\r\n }\r\n else {\r\n //$('#sxcluster-exint').hide(); $('#sxcluster-cogdys').hide(); $('#sxcluster-autonomic').hide();\r\n //if (this.selectedBreakdown.startsWith(\"SX Cluster\")) {\r\n // this.changeSelectedBreakdown(\"All Participants\", \"\", false); //to make sure when SymClusters are hidden, if selected, not shown anymore\r\n //}\r\n $('#symptom-cluster-container').hide();\r\n }\r\n\r\n $('#value-total-population').text(FormatNumberWithCommas(String(this.selectedParticipants.length)));\r\n \r\n this.chartController.UpdateData();\r\n }\r\n\r\n resetFilters(): void {\r\n this.showUnassigned = false;\r\n (document.getElementById(\"unassigned-switch\") as HTMLInputElement).checked = false;\r\n $('#population-select').val(\"randomized\");\r\n $('#enrollment-graph-view').val(\"Cumulative\");\r\n\r\n this.changeSelectedPopulation(\"randomized\", true);\r\n this.changeSelectedBreakdown(\"All Participants\", '', true);\r\n this.changeSelectedAggregation(\"Overall\", true);\r\n\r\n ResetDropdownFilters(['#study-dropdown', '#appendix-dropdown', '#site-dropdown']);\r\n\r\n this.changeSelectedGraphView('Cumulative', true);\r\n }\r\n\r\n toggleUnassignedAppendices(): void {\r\n this.showUnassigned = !this.showUnassigned;\r\n this.FilterUpdated(this.filter.selectedStudyIds, this.filter.selectedAppendixIds, this.filter.selectedSiteIds);\r\n }\r\n\r\n private enableButton(buttonId: string, active: boolean): void {\r\n $(buttonId).prop(\"disabled\", !active);\r\n if (!active) { $(buttonId).addClass(\"disabled\"); }\r\n else { $(buttonId).removeClass(\"disabled\"); }\r\n }\r\n\r\n private enableSelectionOption(selectId: string, value: string, active: boolean): void {\r\n $(selectId + ' option').each(function () {\r\n if ($(this).val() == value) {\r\n if (active) { $(this).removeAttr('disabled'); }\r\n else { $(this).attr('disabled', 'disabled'); } \r\n return;\r\n }\r\n });\r\n\r\n $(selectId).selectpicker('refresh');\r\n }\r\n\r\n showUnassignedToggleButton(): void {\r\n $('#unassigned-toggle').show();\r\n $('#reset-filters').removeClass(\"ml-auto\");\r\n }\r\n\r\n hideUnassignedToggleButton(): void {\r\n $('#unassigned-toggle').hide();\r\n $('#reset-filters').addClass(\"ml-auto\");\r\n }\r\n\r\n /*\r\n updateGraphView(viewName: string, chartViewButtonId: string, type: string, aggregation: string): void {\r\n \r\n this.dataToView = viewName;\r\n this.currentSelectedChartViewId = chartViewButtonId;\r\n this.currentChartType = type;\r\n this.aggregationView = aggregation;\r\n\r\n //$('#chart-view-label').text('(' + viewName + ')');\r\n $('#chart-view-label').text((viewName == \"All Participants\" ? viewName : (\"By \" + viewName) ));\r\n\r\n if (type == \"line-bar\") {\r\n $('#piechart-display').hide();\r\n $('#accrual-display').show();\r\n //$('#label-details-heading').text(\"Accrual History by\");\r\n $('#enrollment-graph-view').show(); \r\n }\r\n else if(type == \"pie\") {\r\n $('#accrual-display').hide();\r\n $('#piechart-display').show();\r\n //$('#label-details-heading').text(\"Accrual by\");\r\n $('#enrollment-graph-view').hide();\r\n\r\n // this.forecastRandomized.forEach((x: ForecastGraphDataPoint) => x.DayOfMonth = \"first\");\r\n // this.selectedForecastRandomized.forEach((x: ForecastGraphDataPoint) => x.DayOfMonth = \"first\");\r\n }\r\n\r\n $('.chart-details-toggle-button').removeClass('selected');\r\n\r\n if (chartViewButtonId == \"chart-view-all\") { $('#chart-view-all').hide(); }\r\n else {\r\n $('#chart-view-all').show();\r\n $('#' + chartViewButtonId).addClass('selected');\r\n }\r\n\r\n if (type == 'line-bar') {\r\n\r\n this.accrualChart.UpdateData(this.selectedParticipants, this.dataToView, this.selectedForecastRandomized, this.aggregationView, this.graphDataType, this.selectedPopulation, this.allStudies, this.allAppendices, this.consentedSites, this.selectedActivatedSiteTimestamps);\r\n\r\n if (viewName == \"All Participants\") {\r\n $('#view-overall-button').addClass('active');\r\n $('#view-studies-button').prop(\"disabled\", false);\r\n $('#view-appendices-button').prop(\"disabled\", false);\r\n $('#view-sites-button').prop(\"disabled\", false);\r\n $('#view-studies-button').removeClass(\"disabled\");\r\n $('#view-appendices-button').removeClass(\"disabled\");\r\n $('#view-sites-button').removeClass(\"disabled\");\r\n }\r\n else {\r\n $('#view-overall-button').addClass('active');\r\n $('#view-studies-button').removeClass('active');\r\n $('#view-appendices-button').removeClass('active');\r\n $('#view-sites-button').removeClass('active');\r\n $('#view-studies-button').prop(\"disabled\", true);\r\n $('#view-appendices-button').prop(\"disabled\", true);\r\n $('#view-sites-button').prop(\"disabled\", true);\r\n $('#view-studies-button').addClass(\"disabled\");\r\n $('#view-appendices-button').addClass(\"disabled\");\r\n $('#view-sites-button').addClass(\"disabled\");\r\n }\r\n }\r\n else if (type == 'pie') {\r\n let data: number[] = [];\r\n if (viewName == \"RECOVER Cohort\") { data = this.aggregatedParticipants.RecoverCohort; }\r\n else if (viewName == \"Age\") { data = this.aggregatedParticipants.Age; }\r\n else if (viewName == \"Race\") { data = this.aggregatedParticipants.Race; }\r\n else if (viewName == \"Ethnicity\") { data = this.aggregatedParticipants.Hispanic; }\r\n else if (viewName == \"Non-White or Hispanic\") { data = this.aggregatedParticipants.NonWhiteHispanic; }\r\n else if (viewName == \"Sex\") { data = this.aggregatedParticipants.Sex; }\r\n else if (viewName == \"SX Cluster: ExInt (Enrolled)\") { data = this.aggregatedParticipants.ClusterExInt; }\r\n else if (viewName == \"SX Cluster: CogDys (Enrolled)\") { data = this.aggregatedParticipants.ClusterCogn; }\r\n else if (viewName == \"SX Cluster: Autonomic (Enrolled)\") { data = this.aggregatedParticipants.ClusterAuto; }\r\n \r\n this.pieChart.UpdateData(viewName, data);\r\n //console.log(viewName);\r\n }\r\n\r\n this.changeChartAggregation(this.aggregationView);\r\n }\r\n\r\n changeChartAggregation(selectedView: string): void {\r\n\r\n this.aggregationView = selectedView;\r\n \r\n this.accrualChart.UpdateData(this.selectedParticipants, this.dataToView, this.selectedForecastRandomized, selectedView, this.graphDataType, this.selectedPopulation, this.allStudies, this.allAppendices, this.consentedSites, this.selectedActivatedSiteTimestamps);\r\n\r\n $('#view-overall-button').removeClass('active');\r\n $('#view-studies-button').removeClass('active');\r\n $('#view-appendices-button').removeClass('active');\r\n $('#view-sites-button').removeClass('active');\r\n if (selectedView == \"Overall\") { $('#view-overall-button').addClass('active'); }\r\n if (selectedView == \"ByStudy\") { $('#view-studies-button').addClass('active'); }\r\n if (selectedView == \"ByAppendix\") { $('#view-appendices-button').addClass('active'); }\r\n if (selectedView == \"BySite\") { $('#view-sites-button').addClass('active'); }\r\n }\r\n\r\n graphDataTypeChanged(newType: any): void {\r\n this.graphDataType = newType;\r\n\r\n let dayOfMonth: string = \"last\";\r\n let countField: string = \"count\";\r\n\r\n if (this.graphDataType == \"Cumulative\") {\r\n $('.bar-chart-icon').hide();\r\n $('.line-chart-icon').show();\r\n }\r\n else if (this.graphDataType == \"ByMonth\" || this.graphDataType == \"RatePerSiteByMonth\") {\r\n $('.line-chart-icon').hide();\r\n $('.bar-chart-icon').show();\r\n dayOfMonth = \"first\";\r\n if (this.graphDataType == \"RatePerSiteByMonth\") countField = \"rate\";\r\n }\r\n\r\n this.forecastRandomized.forEach((x: ForecastGraphDataPoint) => { x.DayOfMonth = dayOfMonth; x.CountField = countField; });\r\n this.selectedForecastRandomized.forEach((x: ForecastGraphDataPoint) => { x.DayOfMonth = dayOfMonth; x.CountField = countField; });\r\n\r\n this.accrualChart.UpdateData(this.selectedParticipants, this.dataToView, this.selectedForecastRandomized, this.aggregationView, this.graphDataType, this.selectedPopulation, this.allStudies, this.allAppendices, this.consentedSites, this.selectedActivatedSiteTimestamps);\r\n }\r\n */\r\n}\r\n\r\nexport interface IEnrollmentPageData {\r\n allStudies: Study[];\r\n allAppendices: Appendix[];\r\n\r\n consentedSites: Site[];\r\n activatedSites: Site[];\r\n //siteActivationStudyTimestampMap: Map;\r\n sitesActivatedByMonthByStudy: Map; //key = studyId_dateTimestamp, value = count\r\n\r\n //allParticipants: Participant[];\r\n selectedParticipants: Participant[];\r\n aggregatedParticipants: AggregatedParticipants;\r\n\r\n //forecastRandomized: ForecastGraphDataPoint[];\r\n selectedForecastRandomized: ForecastGraphDataPoint[];\r\n\r\n selectedPopulation: string; //consented, randomized, screen-fail\r\n selectedBreakdown: string; // \"Overall\", \"Race\", \"Age\", etc...\r\n selectedAggregation: string; // overall, ByStudy, ByAppendix, BySite\r\n selectedGraphView: string; //cumulative (line), pie chart, by month (bar), rate by month (bar)\r\n unassignedAppendixIds: number[];\r\n showUnassigned: boolean;\r\n unassignedAppendicies: Appendix[];\r\n\r\n}","import { DetailsTableDialog } from \"../../../../../../shared/components/dialogs/details-table-dialog/details-table-dialog.view\";\r\nimport { ComputePercent } from \"../../../../../../shared/scripts/number-functions\";\r\nimport { RenderDateMDY, RenderNullableNumberWithSeparators } from \"../../../../../../shared/scripts/table-functions\";\r\nimport { SiteMilestone } from \"../../scripts/site-activation.entities\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\n\r\nexport class MilestoneSummaryTab {\r\n\r\n dataTable: any;\r\n achievementChart: any;\r\n dataRows: MilestoneSummaryTableRow[];\r\n\r\n detailsTableModal: DetailsTableDialog;\r\n\r\n targetSites: number;\r\n\r\n //public static milestonesOfInterest: string[] = [\"First Participant Randomized\", \"Activated for Enrollment\", \"Central IRB Approval Posted\", \"Central IRB Approval\", \"Central IRB Submission\", \"Site Training Complete\", \"Pre-screening Complete\", \"Site Study Addendum Executed\", \"Site Study Addendum Initiated\", \"Pre-Screening Agreement Executed\", \"Pre-screening Agreement Initiated\", \"Site Master Agreement Executed\", \"Site Master Agreement Initiated\", \"Site Selected\", \"Site Selection Visit\", \"Interest Letter/Form/Pack\" ];\r\n public static milestonesOfInterest: string[] = [\"First Participant Randomized\", \"Activated for Enrollment\", \"Central IRB Approval Posted\", \"Central IRB Approval\", \"Central IRB Submission\", \"Site Training Complete\", \"Site Study Addendum Executed\", \"Site Study Addendum Initiated\", \"Site Master Agreement Executed\", \"Site Master Agreement Initiated\", \"Site Selected\", \"Site Selection Visit\", \"Interest Letter/Form/Pack\"];\r\n\r\n constructor() {\r\n this.initializeTable();\r\n this.initializeAchievementChart();\r\n\r\n this.setSelectedChartSeries(\"default\");\r\n this.initializeButtons();\r\n }\r\n\r\n updateContent(milestonesTable: SiteMilestone[], milestonesChart: SiteMilestone[], primeContractsSelected: string[]): void {\r\n\r\n this.dataTable.clear();\r\n\r\n this.targetSites = 0;\r\n if (primeContractsSelected.includes(\"NEURO\")) { this.targetSites += 25; }\r\n if (primeContractsSelected.includes(\"VITAL\")) { this.targetSites += 60; }\r\n if (primeContractsSelected.includes(\"SLEEP\")) { this.targetSites += 45; }\r\n if (primeContractsSelected.includes(\"AUTONOMIC\")) { this.targetSites += 50; }\r\n if (primeContractsSelected.includes(\"ENERGIZE\")) { this.targetSites += 60; }\r\n\r\n this.dataTable.rows.add(this.getTableContent(milestonesTable)).draw();\r\n\r\n this.setChartContent(milestonesChart);\r\n }\r\n\r\n private getTableContent(milestones: SiteMilestone[]): MilestoneSummaryTableRow[] {\r\n\r\n let rowHash: Map = new Map();\r\n\r\n let recoverCohortSites: string[] = [];\r\n let nonRecoverCohortSites: string[] = [];\r\n\r\n milestones.forEach((milestone: SiteMilestone) => {\r\n\r\n if (milestone.IsRecoverCohort == 0) {\r\n if (!nonRecoverCohortSites.includes(milestone.MilestoneSiteHash)) { nonRecoverCohortSites.push(milestone.MilestoneSiteHash); }\r\n }\r\n else if (milestone.IsRecoverCohort == 1) {\r\n if (!recoverCohortSites.includes(milestone.MilestoneSiteHash)) { recoverCohortSites.push(milestone.MilestoneSiteHash); }\r\n }\r\n\r\n if (milestone.CompletionDate == undefined || milestone.MilestoneId == 35) return; //only want milestones that are completed and not lastest randomized\r\n\r\n let row: MilestoneSummaryTableRow;\r\n if (rowHash.has(milestone.Milestone)) { row = rowHash.get(milestone.Milestone); }\r\n else { row = new MilestoneSummaryTableRow(); row.TargetSites = this.targetSites; row.MilestoneId = milestone.MilestoneId; row.Milestone = milestone.Milestone; row.OrderBy = milestone.OrderBy; }\r\n\r\n row.addValue(milestone);\r\n //if (milestone.IsRecoverCohort == 0) { row.NonRecoverCohortCount += 1; row.OverallCount += 1; row.addValue(milestone.SiteName, true); }\r\n //else if (milestone.IsRecoverCohort == 1) { row.RecoverCohortCount += 1; row.OverallCount += 1; row.addValue(milestone.SiteName, false); }\r\n\r\n rowHash.set(row.Milestone, row);\r\n });\r\n\r\n //$('#non-recover-site-count').html(nonRecoverCohortSites.length + \"\");\r\n //$('#recover-site-count').html(recoverCohortSites.length + \"\");\r\n //$('#milestone-table-overall-site-count').html((recoverCohortSites.length + nonRecoverCohortSites.length) + \"\");\r\n //$('#milestone-table-overall-site-count').html((recoverCohortSites.length + nonRecoverCohortSites.length) + \"\");\r\n $('#milestone-table-overall-site-count').html(this.targetSites + \"\");\r\n\r\n this.dataRows = Array.from(rowHash.values());\r\n this.dataRows.forEach((row: MilestoneSummaryTableRow) => {\r\n row.setDisplayValues(recoverCohortSites.length, nonRecoverCohortSites.length);\r\n });\r\n this.dataRows.sort((a: MilestoneSummaryTableRow, b: MilestoneSummaryTableRow) => a.OrderBy - b.OrderBy);\r\n return this.dataRows;\r\n }\r\n\r\n //not using filteredMilestones since this is historic\r\n private setChartContent(milestones: SiteMilestone[]) {\r\n\r\n //const start = new Date().getTime();\r\n\r\n //get unique dates\r\n let primeContractsSelected: string[] = [];\r\n let uniqueSites: string[] = [];\r\n let uniqueDates: number[] = [];\r\n milestones.forEach((milestone: SiteMilestone) => {\r\n if (!primeContractsSelected.includes(milestone.PrimeContract)) { primeContractsSelected.push(milestone.PrimeContract); }\r\n\r\n let timestamp: number = milestone?.CompletionDate?.getTime();\r\n if (timestamp != undefined && !uniqueDates.includes(timestamp)) {\r\n uniqueDates.push(timestamp);\r\n }\r\n if (!uniqueSites.includes(milestone.MilestoneSiteHash)) { uniqueSites.push(milestone.MilestoneSiteHash); }\r\n });\r\n uniqueDates.sort((a: number, b: number) => a - b);\r\n\r\n let chartData: MilestoneSummaryChartDataSeries[] = [];\r\n //let currentCounts: number[] = [ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ];\r\n let currentCounts: number[] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n MilestoneSummaryTab.milestonesOfInterest.map((label: string, index: number) => {\r\n chartData.push(new MilestoneSummaryChartDataSeries(label, \"\"));\r\n });\r\n\r\n let milestone: SiteMilestone;\r\n uniqueDates.forEach((date: number) => {\r\n //currentCounts = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\r\n currentCounts = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\r\n MilestoneSummaryTab.milestonesOfInterest.forEach((label: string, index: number) => {\r\n milestones.forEach((milestone: SiteMilestone) => {\r\n if (milestone.Milestone == label) {\r\n if (milestone.CompletionDate?.getTime() <= date) {\r\n currentCounts[index] += 1;\r\n }\r\n }\r\n });\r\n });\r\n\r\n currentCounts.forEach((count: number, index: number) => {\r\n chartData[index].data.push([date, count]);\r\n });\r\n });\r\n\r\n //const duration = new Date().getTime() - start;\r\n\r\n //console.log(uniqueDates);\r\n //console.log(chartData);\r\n //console.log(`milestones chart = ${duration / 1000}s`);\r\n\r\n //console.log(this.achievementChart);\r\n\r\n chartData.forEach((data: MilestoneSummaryChartDataSeries, index: number) => {\r\n this.achievementChart.series[index].setData(data.data);\r\n });\r\n $('#milestones-summary-sites-count-label').html(uniqueSites.length + \"\");\r\n\r\n\r\n //only have targets for NEURO, VITAL, and SLEEP\r\n //let target: number = 0;\r\n //if (primeContractsSelected.includes(\"NEURO\")) { target += 25; }\r\n //if (primeContractsSelected.includes(\"VITAL\")) { target += 71; }\r\n //if (primeContractsSelected.includes(\"SLEEP\")) { target += 50; }\r\n //if (primeContractsSelected.includes(\"AUTONOMIC\")) { target += 50; }\r\n //if (primeContractsSelected.includes(\"ENERGIZE\")) { target = 0; }\r\n \r\n if (this.targetSites > 0) {\r\n this.achievementChart.yAxis[0].update({\r\n plotLines: [{\r\n value: this.targetSites,\r\n dashStyle: 'longdash',\r\n label: {\r\n text: 'Target Site Activation (n = ' + this.targetSites + ')'\r\n },\r\n zIndex: 5\r\n }]\r\n });\r\n }\r\n else { \r\n this.achievementChart.yAxis[0].update({\r\n plotLines: []\r\n });\r\n }\r\n\r\n let max: number = (this.targetSites > uniqueSites.length) ? this.targetSites : uniqueSites.length;\r\n this.achievementChart.yAxis[0].update({\r\n //max: (max + 2)\r\n max: max\r\n });\r\n\r\n }\r\n\r\n private initializeTable(): void {\r\n this.dataTable = $('#milestones-summary-table').DataTable({\r\n //\"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n searching: false,\r\n scrollX: true,\r\n //scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n ordering: false,\r\n columns: [\r\n { data: \"Milestone\", title: \"Milestone\", className: \"text-left font-size12 nowrap\" },\r\n { data: { _: \"NonRecoverCohortDisplay\", sort: \"NonRecoverCohortCount\" }, title: \"Not RECOVER Cohort\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { data: { _: \"RecoverCohortDisplay\", sort: \"RecoverCohortCount\" }, title: \"RECOVER Cohort\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { data: { _: \"OverallDisplay\", sort: \"OverallCount\" }, title: \"Overall
(Target N = )\", className: \"overall-data text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { data: \"OrderBy\", visible: false },\r\n ],\r\n columnDefs: [\r\n { target: 0, orderable: false }\r\n ],\r\n order: [[4, 'asc']]\r\n });\r\n\r\n this.detailsTableModal = new DetailsTableDialog([\r\n { data: \"PrimeContract\", title: \"Protocol\", className: \"prime-contract text-center font-size12 nowrap\", width: '100px' },\r\n { data: { _: \"SiteNumberDisplay\", sort: \"SiteNumber\" }, title: \"Site Id\", className: \"site-id text-center font-size12 nowrap\", width: '100px' },\r\n { data: { _: \"SiteNameDisplay\", sort: \"SiteName\" }, title: \"Site Name\", className: \"text-left font-size12\" },\r\n { data: \"DateCompletion\", title: \"Completion Date\", className: \"completion-date text-left font-size12 nowrap\", render: RenderDateMDY },\r\n ], [[3, 'desc']]);\r\n }\r\n\r\n private initializeAchievementChart(): void {\r\n\r\n this.achievementChart = Highcharts.chart('milestones-summary-chart', {\r\n chart: {\r\n zoomType: 'x',\r\n resetZoomButton: {\r\n position: {\r\n align: 'right', // right by default\r\n verticalAlign: 'bottom',\r\n x: 0,\r\n y: 45\r\n },\r\n relativeTo: 'chart'\r\n }\r\n },\r\n tooltip: {\r\n //xDateFormat: '%m/%d/%Y',\r\n xDateFormat: '%d%b%Y',\r\n shared: true,\r\n split: false,\r\n enabled: true,\r\n formatter: function (tooltip) {\r\n //to make points appear in order in tooltip\r\n this.points.reverse();\r\n return tooltip.defaultFormatter.call(this, tooltip);\r\n },\r\n },\r\n title: {\r\n text: ''\r\n },\r\n credits: { enabled: false },\r\n plotOptions: {\r\n line: {\r\n marker: { enabled: false }\r\n }\r\n },\r\n yAxis: {\r\n title: { text: 'Site Count' }\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n crosshair: {\r\n snap: true\r\n },\r\n labels: {\r\n formatter: function () {\r\n //return Highcharts.dateFormat('%m/%d/%y', this.value);\r\n return Highcharts.dateFormat('%d%b%y', this.value);\r\n }\r\n },\r\n events: {\r\n afterSetExtremes: function (event) {\r\n if (event.max < event.dataMax || event.min > event.dataMin) {\r\n $(\"#milestones-summary-chart-resetZoom\").show();\r\n\r\n }\r\n else {\r\n $(\"#milestones-summary-chart-resetZoom\").hide();\r\n }\r\n }\r\n }\r\n },\r\n legend: {\r\n enabled: true,\r\n reversed: true,\r\n margin: 30,\r\n align: 'right',\r\n verticalAlign: 'top',\r\n layout: 'vertical'\r\n }\r\n });\r\n\r\n let seriesColors: string[] = ['#0093af', '#f2ba49', '#3e864e', '#3e864e', '#3e864e', '#5b9bd5', '#673284', '#673284', '#de4846', '#de4846', '#4c4c4c', '#4c4c4c', '#888ea2']\r\n let seriesLineStyle: string[] = ['solid', 'solid', 'solid', 'dash', 'dot', 'solid', 'solid', 'dot', 'solid', 'dot', 'solid', 'dot', 'solid', 'solid'];\r\n for (let i = 0; i < MilestoneSummaryTab.milestonesOfInterest.length; ++i) {\r\n this.achievementChart.addSeries({\r\n name: MilestoneSummaryTab.milestonesOfInterest[i],\r\n data: [],\r\n color: seriesColors[i],\r\n dashStyle: seriesLineStyle[i]\r\n });\r\n }\r\n }\r\n\r\n private initializeButtons(): void {\r\n $(\"#milestones-summary-chart-resetZoom\").hide();\r\n\r\n $(\"#milestones-summary-chart-resetZoom\").click(() => {\r\n this.achievementChart.zoomOut();\r\n })\r\n }\r\n\r\n setSelectedChartSeries(type: string): void {\r\n let indices: number[] = [];\r\n\r\n if (type == 'default') { indices = [ 0, 1, 2, 4, 6, 8, 10, 12 ]; }\r\n\r\n for (let i: number = 0; i < this.achievementChart.series.length; ++i) {\r\n if (indices.includes(i)) { this.achievementChart.series[i].show(); }\r\n else { this.achievementChart.series[i].hide(); }\r\n }\r\n }\r\n\r\n showDetailTableModal(id: any, type: string): void {\r\n\r\n for (let i = 0; i < this.dataRows.length; ++i) {\r\n if (this.dataRows[i].MilestoneId == id) {\r\n let data: any[] = this.dataRows[i].getSelectedData(type);\r\n this.detailsTableModal.setData(data);\r\n this.detailsTableModal.show(this.dataRows[i].Milestone + \" (n = \" + data.length + \")\");\r\n break;\r\n }\r\n }\r\n }\r\n\r\n}\r\n\r\nexport class MilestoneSummaryTableRow {\r\n MilestoneId: number;\r\n Milestone: string;\r\n RecoverCohortCount: number = 0;\r\n RecoverCohortDisplay: string = \"\";\r\n NonRecoverCohortCount: number = 0;\r\n NonRecoverCohortDisplay: string = \"\";\r\n OverallCount: number = 0;\r\n OverallDisplay: string = \"\";\r\n OrderBy: number = -1;\r\n Milestones: SiteMilestone[][];\r\n TargetSites: number;\r\n\r\n constructor() { this.Milestones = [[], []]; }\r\n\r\n addValue(siteMilestone: SiteMilestone): void {\r\n this.OverallCount++;\r\n\r\n if (siteMilestone.IsRecoverCohort == 1) {\r\n this.RecoverCohortCount++;\r\n this.Milestones[1].push(siteMilestone);\r\n }\r\n else\r\n {\r\n this.NonRecoverCohortCount++;\r\n this.Milestones[0].push(siteMilestone);\r\n }\r\n }\r\n\r\n setDisplayValues(recoverCount: number, nonRecoverCount: number): void {\r\n //this.RecoverCohortDisplay = this.getDisplayValue(this.RecoverCohortCount, recoverCount, \"recover\");\r\n //this.NonRecoverCohortDisplay = this.getDisplayValue(this.NonRecoverCohortCount, nonRecoverCount, \"nonrecover\");\r\n //this.OverallDisplay = this.getDisplayValue(this.OverallCount, (recoverCount + nonRecoverCount), \"overall\");\r\n this.RecoverCohortDisplay = this.getDisplayValue(this.RecoverCohortCount, 0, \"recover\");\r\n this.NonRecoverCohortDisplay = this.getDisplayValue(this.NonRecoverCohortCount, 0, \"nonrecover\");\r\n this.OverallDisplay = this.getDisplayValue(this.OverallCount, 0, \"overall\");\r\n }\r\n\r\n private getDisplayValue(count: number, total: number, type: string): string {\r\n let percent: number = ComputePercent(count, this.TargetSites);\r\n let display: string = \"\";\r\n if (type == \"overall\") { display += count + \" (\" + Math.round(percent) + \"%)\"; }\r\n else { display += count + \"\"; }\r\n return display;\r\n }\r\n\r\n getSelectedData(type: string): any[] {\r\n if (type == \"recover\") return this.Milestones[1];\r\n else if (type == \"nonrecover\") return this.Milestones[0];\r\n else if (type == \"overall\") return [...this.Milestones[0], ...this.Milestones[1]];\r\n }\r\n}\r\n\r\nexport class MilestoneSummaryChartDataSeries {\r\n name: string;\r\n color: string;\r\n data: any[]; //Date.getTime(), count\r\n\r\n constructor(name: string, color: string) {\r\n this.name = name;\r\n this.color = color;\r\n this.data = [];\r\n }\r\n}","\r\nexport class VisitLookup {\r\n\r\n static GetVisit(id: number): string {\r\n switch (id) {\r\n case (1): return \"Screening\";\r\n case (2): return \"Baseline\";\r\n case (3): return \"Mid-Intervention\";\r\n case (4): return \"End of Intervention\";\r\n case (5): return \"Day 45\";\r\n case (6): return \"Day 60\";\r\n case (7): return \"Day 90\";\r\n case (8): return \"Day 120\";\r\n case (9): return \"End of Follow-Up\"; \r\n case (10): return \"Start of Intervention\";\r\n case (11): return \"Week 1\";\r\n case (12): return \"Week 2\";\r\n case (13): return \"Week 3\";\r\n case (14): return \"Week 4\";\r\n case (15): return \"Week 5\";\r\n case (16): return \"Week 7\";\r\n case (17): return \"Week 9\";\r\n case (18): return \"Week 10\";\r\n case (19): return \"Week 11\";\r\n case (20): return \"Week 13\";\r\n case (21): return \"Week 14\";\r\n case (22): return \"Week 15\";\r\n case (23): return \"Week 17\";\r\n case (24): return \"Week 18\";\r\n case (25): return \"Week 19\";\r\n case (26): return \"Week 20\";\r\n case (27): return \"Week 21\";\r\n case (28): return \"Week 22\";\r\n case (29): return \"Week 23\";\r\n case (30): return \"Week 24\";\r\n case (31): return \"Week 25\";\r\n case (32): return \"Week 26\";\r\n case (33): return \"Week 27\";\r\n case (34): return \"Week 28\";\r\n case (35): return \"Week 29\";\r\n case (36): return \"Week 30\";\r\n case (37): return \"Week 31\";\r\n case (38): return \"Week 32\";\r\n case (39): return \"Week 33\";\r\n case (40): return \"Week 34\";\r\n case (41): return \"Week 35\";\r\n case (42): return \"Week 6\";\r\n case (43): return \"Week 8\";\r\n case (44): return \"Week 12\";\r\n case (45): return \"Week 16\";\r\n\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetVisitOrdering(id: number): number {\r\n switch (id) {\r\n case (1): return 1; //\"Screening\";\r\n case (2): return 2; //\"Baseline\";\r\n case (10): return 3; //\"Start of Intervention\";\r\n case (3): return 4; //\"Mid-Intervention\";\r\n case (11): return 5; //\"Week 1\";\r\n case (12): return 6; //\"Week 2\";\r\n case (13): return 7; //\"Week 3\";\r\n case (14): return 8; //\"Month 1\";\r\n case (15): return 9; //\"Week 5\";\r\n case (42): return 10; //\"Week 6\";\r\n case (16): return 11; //\"Week 7\";\r\n case (43): return 12; //\"Month 2\";\r\n case (17): return 13; //\"Week 9\";\r\n case (18): return 14; //\"Week 10\";\r\n case (19): return 15; //\"Week 11\";\r\n case (44): return 16; //\"Month 3\";\r\n case (20): return 17; //\"Week 13\";\r\n case (21): return 18; //\"Week 14\";\r\n case (22): return 19; //\"Week 15\";\r\n case (45): return 20; //\"Month 4\";\r\n case (23): return 21; //\"Week 17\";\r\n case (24): return 22; //\"Week 18\";\r\n case (25): return 23; //\"Week 19\";\r\n case (26): return 24; //\"Month 5\";\r\n case (27): return 25; //\"Week 21\";\r\n case (28): return 26; //\"Week 22\";\r\n case (29): return 27; //\"Week 23\";\r\n case (30): return 28; //\"Month 6\";\r\n case (31): return 29; //\"Week 25\";\r\n case (32): return 30; //\"Week 26\";\r\n case (33): return 31; //\"Week 27\";\r\n case (34): return 32; //\"Month 7\";\r\n case (35): return 33; //\"Week 29\";\r\n case (36): return 34; //\"Week 30\";\r\n case (37): return 35; //\"Week 31\";\r\n case (38): return 36; //\"Month 8\";\r\n case (39): return 37; //\"Week 33\";\r\n case (40): return 38; //\"Week 34\";\r\n case (41): return 39; //\"Week 35\";\r\n case (4): return 40; //\"End of Intervention\";\r\n case (5): return 41; //\"Day 45\";\r\n case (6): return 42; //\"Day 60\";\r\n case (7): return 43; //\"Day 90\";\r\n case (8): return 44; //\"Day 120\";\r\n case (9): return 45; //\"End of Follow-Up\"; \r\n default: return 100; // \"Unknown\";\r\n }\r\n }\r\n\r\n static GetRequired(id: number): string {\r\n switch (id) {\r\n case (1): return \"Yes\";\r\n case (2): return \"No\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetVisitStatus(id: number): string {\r\n switch (id) {\r\n case (1): return \"Completed\";\r\n case (2): return \"Not Yet Due\";\r\n case (3): return \"Overdue\";\r\n case (4): return \"Not Done\";\r\n case (5): return \"Discontinued Prior\";\r\n case (6): return \"Not Yet Due (≤30 Days)\";\r\n case (7): return \"Not Yet Due (+30 Days)\";\r\n case (20): return \"In Window\";\r\n case (21): return \"± 1 - 3 Days\";\r\n case (22): return \"± 4 - 7 Days\";\r\n case (23): return \"± 8 - 14 Days\";\r\n case (24): return \"15+ Days\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetVisitColorIndex(id: number): number {\r\n switch (id) {\r\n case (1): return 500; //Completed\r\n case (2): return 501; //Not Yet Due\r\n case (3): return 502; //Overdue\r\n case (4): return 503; //Not Done\r\n case (5): return 504; //Discontinued Prior\r\n case (6): return 501; //Not Yet Due <= 30 Days\r\n case (7): return 505; //Not Yet Due > 30 Days\r\n case (20): return 500; //In Window\r\n case (21): return 501; //1 to 3 Days Outside Window\r\n case (22): return 502; //4 to 7 Days Outside Window\r\n case (23): return 503; //8 to 14 Days Outside Window\r\n case (24): return 504; //15 or More Days Outside Widow\r\n default: return 0;\r\n }\r\n }\r\n\r\n //static GetVisitStatusArray(): string[] {\r\n // return [ \"Completed\", \"Overdue\", \"Not Done\", \"Discontinued Prior\", \"Not Yet Due\" ];\r\n //}\r\n\r\n //static GetCompletionTimingArray(): string[] {\r\n // return [\"In Window\", \"1 to 3 Days Outside Window\", \"4 to 7 Days Outside Window\", \"8 to 14 Days Outside Window\", \"15 or More Days Outside Widow\"];\r\n //}\r\n}","// extracted by mini-css-extract-plugin","\r\n\r\n//source: https://blog.abelotech.com/posts/number-currency-formatting-javascript/\r\nexport function FormatNumberWithCommas(value: string): string {\r\n return value.replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,');\r\n}\r\n\r\nexport function Round_Number(data: number, digits: number): any {\r\n return (data).toFixed(digits);\r\n}\r\n\r\nexport function Round_1Digit(data: number): any {\r\n return (data).toFixed(1);\r\n}\r\n\r\nexport function Round_2Digits(data: number): any {\r\n return (data).toFixed(2);\r\n}\r\n\r\nexport function ComputePercent(count: number, total: number): number {\r\n if (total == undefined || total == 0) return -1;\r\n else {\r\n let percent: number = (count / total) * 100.0;\r\n return percent;\r\n }\r\n}\r\n\r\nexport function PadNumber(value: string, targetLength: number): string {\r\n if (value.length == 0) return \"\";\r\n else return value.length < targetLength ? PadNumber(\"0\" + value, targetLength) : value;\r\n}\r\n","import { DoArraysOverlap } from \"../../../../../shared/scripts/array-functions\";\r\nimport { GetDateFromString } from \"../../../../../shared/scripts/date-functions\";\r\nimport { PadNumber } from \"../../../../../shared/scripts/number-functions\";\r\nimport { FormatStringColumnByLength } from \"../../../../../shared/scripts/table-functions\";\r\nimport { SiteActivationLookup } from \"./site-activation.lookup\";\r\n\r\nexport class SiteMilestone {\r\n\r\n SiteNumber: number;\r\n SiteName: string;\r\n OrderBy: number;\r\n DateCompletion: string;\r\n Comment: string;\r\n PrimeContractId: number;\r\n MilestoneId: number;\r\n //SiteIdStr: string;\r\n InPlay: number;\r\n //IsVanguardSite: number;\r\n\r\n PrimeContract: string;\r\n Milestone: string;\r\n\r\n SiteNumberDisplay: string;\r\n SiteNameDisplay: string;\r\n CommentDisplay: string;\r\n CompletionDate: Date;\r\n InPlayDisplay: string;\r\n //VanguardSiteDisplay: string;\r\n\r\n IsRecoverCohort: number; //0: false, 1: true\r\n MilestoneSiteHash: string;\r\n\r\n initialize(): void {\r\n\r\n this.PrimeContract = SiteActivationLookup.GetPrimeContract(this.PrimeContractId);\r\n this.Milestone = SiteActivationLookup.GetMilestone(this.MilestoneId);\r\n\r\n this.SiteNumberDisplay = PadNumber(this.SiteNumber + \"\", 3);\r\n this.SiteNameDisplay = FormatStringColumnByLength(this.SiteName, 4);\r\n this.CommentDisplay = FormatStringColumnByLength(this?.Comment, 4);\r\n\r\n this.CompletionDate = GetDateFromString(this.DateCompletion, \"slash-month-day-year\");\r\n\r\n //console.log(this.DateCompletion);\r\n //console.log(this.CompletionDate);\r\n\r\n this.MilestoneSiteHash = this.PrimeContractId + \"-\" + this.SiteNumber;\r\n\r\n this.InPlayDisplay = (this.InPlay == 1) ? \"Yes\" : \"No\";\r\n\r\n //if (this.IsVanguardSite == 1) this.VanguardSiteDisplay = \"Yes\";\r\n //else if (this.IsVanguardSite == 2) this.VanguardSiteDisplay = \"No\";\r\n //else this.VanguardSiteDisplay = \"Not Applicable\";\r\n\r\n //delete this.PrimeContractId;\r\n //delete this.MilestoneId;\r\n //delete this.IsVanguardSite;\r\n\r\n //console.log(this);\r\n }\r\n\r\n matchesFilter(primeContract: any, siteName: any, milestone: any, completedSinceDate: any, siteInPlay: any): boolean {\r\n\r\n //console.log(primeContract, contractType, statusGroup, changedSinceDate, addedSinceDate);\r\n //console.log(changedSinceDate, addedSinceDate);\r\n\r\n if (primeContract != undefined && !DoArraysOverlap(primeContract, this.PrimeContract)) { return false; }\r\n if (siteName != undefined && !DoArraysOverlap(siteName, this.SiteName)) { return false; }\r\n if (milestone != undefined && !DoArraysOverlap(milestone, this.Milestone)) { return false; }\r\n if (siteInPlay != undefined && !DoArraysOverlap(siteInPlay, this.InPlayDisplay)) { return false; }\r\n //if (vanguardSite != undefined && vanguardSite.indexOf(this.VanguardSiteDisplay) === -1) { return false; }\r\n if (completedSinceDate != undefined && completedSinceDate != null) {\r\n if (this.CompletionDate == undefined) { return false; }\r\n else if (this.CompletionDate < completedSinceDate) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n //getTrimmedMilestone(): TrimmedMilestone {\r\n // return new TrimmedMilestone(this.Milestone, this.DateCompletion);\r\n //}\r\n\r\n getHash(): string {\r\n return this.SiteNumber + \"-\" + this.Milestone;\r\n }\r\n}\r\n\r\nexport class MilestonesBySite {\r\n SiteNumber: number;\r\n //SiteIdStr: string;\r\n SiteName: string;\r\n PrimeContractId: number;\r\n PrimeContract: string;\r\n\r\n SiteNumberDisplay: string;\r\n SiteNameDisplay: string;\r\n InPlayDisplay: string;\r\n VanguardSiteDisplay: string\r\n\r\n MilestoneCompletionDates: string[]; //index is MilestoneId\r\n\r\n RandomizedCount: number;\r\n PI: string;\r\n\r\n constructor(primeContractId: number, siteNumber: number, siteNumberDisplay: string, siteName: string, PI: string, primeContract: string, inPlay: string, vanguardSite: any, randomized: number = -1) {\r\n\r\n this.PrimeContractId = primeContractId;\r\n this.SiteNumber = siteNumber;\r\n this.SiteNumberDisplay = siteNumberDisplay;\r\n //this.SiteIdStr = siteIdStr;\r\n this.SiteName = siteName;\r\n this.PI = PI;\r\n this.SiteNameDisplay = FormatStringColumnByLength(this.SiteName, 4);\r\n this.PrimeContract = primeContract;\r\n this.InPlayDisplay = inPlay;\r\n this.VanguardSiteDisplay = vanguardSite;\r\n this.MilestoneCompletionDates = [];\r\n this.RandomizedCount = randomized;\r\n }\r\n\r\n matchesFilter(primeContract: any, siteInPlay: any, vanguardSite: any): boolean {\r\n\r\n if (primeContract != undefined && !DoArraysOverlap(primeContract, this.PrimeContract)) { return false; }\r\n if (siteInPlay != undefined && !DoArraysOverlap(siteInPlay, this.InPlayDisplay)) { return false; }\r\n if (vanguardSite != undefined && !DoArraysOverlap(vanguardSite, this.VanguardSiteDisplay)) { return false; }\r\n\r\n return true;\r\n }\r\n}\r\n\r\nexport class SiteMetricSummary {\r\n StudyId: number;\r\n MetricId: number;\r\n CompletedId: number;\r\n OrderBy: number;\r\n NumberOfSites: number;\r\n Mean: string;\r\n Min: string;\r\n Q1: string;\r\n Median: string;\r\n Q3: string;\r\n Max: string;\r\n InPlayId: number;\r\n\r\n MeanValue: number;\r\n MinValue: number;\r\n Q1Value: number;\r\n MedianValue: number;\r\n Q3Value: number;\r\n MaxValue: number;\r\n\r\n initialize() {\r\n this.MeanValue = Number.parseFloat(this.Mean) || 0;\r\n this.MinValue = Number.parseFloat(this.Min) || 0;\r\n this.Q1Value = Number.parseFloat(this.Q1) || 0;\r\n this.MedianValue = Number.parseFloat(this.Median) || 0;\r\n this.Q3Value = Number.parseFloat(this.Q3) || 0;\r\n this.MaxValue = Number.parseFloat(this.Max) || 0;\r\n }\r\n}\r\n\r\nexport class SiteMetricDetail {\r\n StudyId: number;\r\n MetricId: number;\r\n CompletedId: number;\r\n SiteId: number;\r\n Dropped: number;\r\n Days: string;\r\n FirstMilestone: string;\r\n SecondMilestone: string;\r\n\r\n SiteName: string;\r\n\r\n DaysValue: number;\r\n SiteIdDisplay: string;\r\n\r\n initialize() {\r\n this.DaysValue = Number.parseInt(this.Days) || 0;\r\n this.SiteIdDisplay = String(this.SiteId).padStart(3, '0');\r\n }\r\n}\r\n\r\nexport class SiteMetricBenchmark {\r\n Id: number;\r\n StudyId: number;\r\n MetricId: number;\r\n YellowDays: number;\r\n RedDays: number;\r\n\r\n initialize() {}\r\n}","\r\nexport class SiteActivationLookup {\r\n\r\n static GetPrimeContract(id: number): string {\r\n switch (id) {\r\n case (1): return \"Infrastructure\";\r\n case (2): return \"VITAL\";\r\n case (3): return \"NEURO\";\r\n case (4): return \"SLEEP\";\r\n case (5): return \"AUTONOMIC\";\r\n case (6): return \"ENERGIZE\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetMilestone(id: number): string {\r\n switch (id) {\r\n case (1): return \"Interest Letter/Form/Pack\";\r\n case (2): return \"Site Selection Form Complete\";\r\n case (3): return \"Contract Initiated\";\r\n case (4): return \"Contract Executed\";\r\n case (5): return \"Pre-screening Complete\";\r\n case (6): return \"Reg Pack Sent\";\r\n case (7): return \"Trial Master File Review\";\r\n case (8): return \"Regulatory Complete\";\r\n case (9): return \"Site Training Complete\";\r\n case (10): return \"Central IRB Submission\";\r\n case (11): return \"Central IRB Amendment Submission\";\r\n //case (12): return \"Central IRB Meeting\";\r\n //case (13): return \"Central IRB Amendment Meeting\";\r\n case (14): return \"Central IRB Approval\";\r\n case (15): return \"Central IRB Amendment Approval\";\r\n case (16): return \"Investigational Product Sent\";\r\n case (17): return \"Activated for Enrollment\";\r\n case (18): return \"First Participant Enrolled\";\r\n case (19): return \"First Participant Randomized\";\r\n case (20): return \"Enrollment Complete\";\r\n case (21): return \"All Participant Follow-Up Complete\";\r\n case (22): return \"Site Selection Visit\";\r\n case (23): return \"Contracting Initiated\";\r\n case (24): return \"Pre-Screening Agreement Executed\";\r\n case (25): return \"Site Selected\";\r\n case (26): return \"Site Study Addendum Executed\";\r\n case (27): return \"Pre-screening Complete\";\r\n case (28): return \"Investigator Brochure (IB) Sent\";\r\n case (29): return \"Investigator Brochure (IB) Update Sent\";\r\n case (30): return \"Site Master Agreement Executed\";\r\n case (31): return \"Site Initiation Visit\";\r\n case (32): return \"Pre-screening Agreement Initiated\";\r\n case (33): return \"Site Master Agreement Initiated\";\r\n case (34): return \"Site Study Addendum Initiated\";\r\n case (35): return \"Most Recent Randomized\";\r\n case (36): return \"Central IRB Approval Posted\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetMetric(id: number): string {\r\n switch (id) {\r\n case (1): return \"Site Selected (Time from SSV)\";\r\n case (2): return \"Site Master Agreement Executed (Time from Initiated)\";\r\n case (3): return \"Pre-screening Agreement Executed (Time from Initiated)\";\r\n case (4): return \"Study Addendum Agreement Executed (Time from Initiated)\";\r\n case (5): return \"Pre-screening Completed (Time from Pre-screening Agreement Executed)\";\r\n case (6): return \"Regulatory Packet Completed (Time from Packet Sent)\";\r\n case (7): return \"IRB Approval (Time from Submission)\";\r\n case (8): return \"IRB Approval Posted (Time from Submission)\";\r\n case (9): return \"SIV (Time from IRB Approval Posted)\";\r\n case (10): return \"IP Sent (Time from IRB Approval Posted)\";\r\n case (11): return \"Site Activated (Time from Selected)\";\r\n case (12): return \"First Randomization (Time from Activated)\";\r\n case (13): return \"Study Addendum Initiated (Time from Site Selected)\";\r\n case (14): return \"Regulatory Packet Sent (Time from Site Selected)\";\r\n case (15): return \"IRB Submission (Time from Site Selected)\";\r\n case (16): return \"Time Since Most Recent Randomization\";\r\n case (17): return \"Site Activated (Time from Packet Sent)\";\r\n case (18): return \"Site Activated (Time from IRB Approval Posted)\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { DateUpdatedSection } from \"../../../../shared/components/date-updated-section/date-updated-section.view\";\r\nimport { Unique } from \"../../../../shared/scripts/array-functions\";\r\nimport { IFilter } from \"../../../../shared/scripts/filtering/filtering.entities\";\r\nimport { GetSelectedDate, GetSelectedDropdownValues, InitializeDateSelector, InitializeFilterDropdown, ResetDateFilters, ResetDropdownFilters } from \"../../../../shared/scripts/filtering/filtering.utilities\";\r\nimport { SiteInfo } from \"../../sites/shared/sites.entities\";\r\nimport { SiteMilestone } from \"../../sites/site-activation/scripts/site-activation.entities\";\r\nimport { ContractDetailsTab } from \"../components/contract-details-tab/contract-details.tab\";\r\nimport { ContractHistoryTab } from \"../components/contract-history-tab/contract-history.tab\";\r\nimport { ContractSummaryTab } from \"../components/contract-summary-tab/contract-summary.tab\";\r\nimport { Contract, ContractHistory } from \"./contracts.entities\";\r\n\r\nexport class ContractsPage implements IFilter {\r\n\r\n contracts: Contract[];\r\n contractsHistory: ContractHistory[];\r\n siteMilestones: SiteMilestone[];\r\n\r\n activeTab: string;\r\n contractSummaryTab: ContractSummaryTab;\r\n contractHistoryTab: ContractHistoryTab;\r\n contractDetailsTab: ContractDetailsTab;\r\n\r\n constructor(contractsDictionaryJson: any, contractsJson: any, contractsHistoryJson: any, siteInfoJson: any, siteMilestonesJson: any, lastUpdatedJson: any) {\r\n\r\n $(() => {\r\n\r\n new DateUpdatedSection(lastUpdatedJson);\r\n\r\n this.initializeSiteMilestones(siteInfoJson, siteMilestonesJson); //has to be first as site milestones are added to contract\r\n this.initializeContracts(contractsDictionaryJson, contractsJson, contractsHistoryJson);\r\n this.initializeFilters();\r\n\r\n this.contractSummaryTab = new ContractSummaryTab();\r\n this.contractDetailsTab = new ContractDetailsTab(this.contracts);\r\n this.contractHistoryTab = new ContractHistoryTab(this.contractsHistory);\r\n\r\n $('#loading-indicator').hide();\r\n //$('#loading-indicator').addClass('d-none');\r\n $('.loaded-content').removeClass('invisible');\r\n\r\n this.showTab(\"#contracts-summary\");\r\n\r\n });\r\n }\r\n\r\n changeView(selectedOption: any): void {\r\n let views: string[] = ['#contracts-summary', '#contracts-details', '#contracts-history'];\r\n views.forEach((id: string) => $(id).removeClass(\"show active\"));\r\n\r\n $(selectedOption).tab('show');\r\n this.showTab(selectedOption);\r\n }\r\n\r\n initializeContracts(contractsDictionaryJson: any, contractsJson: any, contractsHistoryJson: any): void {\r\n\r\n //const start = new Date().getTime();\r\n\r\n let contractsDictionary: Map = new Map();\r\n contractsDictionaryJson.map((entry: any) => {\r\n contractsDictionary.set(entry.Key, entry.Value);\r\n });\r\n\r\n this.contractsHistory = plainToClass(ContractHistory, contractsHistoryJson);\r\n this.contractsHistory.map((history: ContractHistory) => {\r\n if (contractsDictionary.has(history.ContractNumber)) {\r\n history.ContractName = contractsDictionary.get(history.ContractNumber);\r\n }\r\n else { history.ContractName = \"Unknown\"; }\r\n history.initialize();\r\n\r\n return history;\r\n });\r\n\r\n this.contracts = plainToClass(Contract, contractsJson);\r\n this.contracts.map((contract: Contract) => {\r\n if (contractsDictionary.has(contract.ContractNumber)) {\r\n contract.ContractName = contractsDictionary.get(contract.ContractNumber);\r\n }\r\n else { contract.ContractName = \"Unknown\"; }\r\n contract.initialize();\r\n contract.setContractHistory(this.contractsHistory.filter((history: ContractHistory) => history.ContractNumber == contract.ContractNumber));\r\n contract.setSiteMilestones(this.siteMilestones.filter((milestone: SiteMilestone) => (milestone.SiteNumber == contract.SiteNumber && milestone.PrimeContract == contract.PrimeContract)));\r\n\r\n return contract;\r\n });\r\n\r\n //console.log(this.contracts);\r\n //const duration = new Date().getTime() - start;\r\n //console.log(`contracts load = ${(new Date().getTime() - start) / 1000}s`);\r\n }\r\n\r\n initializeSiteMilestones(siteInfoJson: any, siteMilestonesJson: any): void {\r\n\r\n let milestoneDictionary: Map = SiteInfo.CreateNameMap(siteInfoJson, undefined);\r\n\r\n this.siteMilestones = plainToClass(SiteMilestone, siteMilestonesJson);\r\n this.siteMilestones.map((milestone: SiteMilestone) => {\r\n if (milestoneDictionary.has(milestone.SiteNumber)) {\r\n milestone.SiteName = milestoneDictionary.get(milestone.SiteNumber);\r\n }\r\n else { milestone.Milestone = \"Unknown\"; }\r\n milestone.initialize();\r\n return milestone;\r\n });\r\n }\r\n\r\n initializeFilters(): void {\r\n\r\n InitializeDateSelector('changed-since-date', this);\r\n InitializeDateSelector('added-since-date', this);\r\n\r\n InitializeFilterDropdown('#prime-contract-dropdown', Unique(this.contracts.map((contract: Contract) => contract.PrimeContract), true, [\"Infrastructure\"]), this);\r\n InitializeFilterDropdown('#contract-type-dropdown', Unique(this.contracts.map((contract: Contract) => contract.ContractType), true), this);\r\n InitializeFilterDropdown('#status-group-dropdown', Unique(this.contracts.map((contract: Contract) => contract.StatusGroup), true), this);\r\n //InitializeFilterDropdown('#vanguard-site-dropdown', Unique(this.contracts.map((contract: Contract) => contract.VanguardSiteDisplay), true, [\"Not Applicable\"]), this);\r\n //InitializeFilterDropdown('#status-dropdown', Unique(this.contracts.map((contract: Contract) => contract.Status), true), this);\r\n }\r\n\r\n showTab(tabId: string): void {\r\n\r\n //prime-contract always shown\r\n\r\n if (tabId == \"#contracts-summary\") {\r\n this.toggleDateAsterick(true);\r\n\r\n ['#status-group-filter'].forEach((id: string) => $(id).hide());\r\n //['#contract-type-filter', '#changed-since-filter', '#added-since-filter', '#vanguard-site-filter'].forEach((id: string) => $(id).show());\r\n ['#contract-type-filter', '#changed-since-filter', '#added-since-filter'].forEach((id: string) => $(id).show());\r\n }\r\n else if (tabId == \"#contracts-details\") {\r\n this.toggleDateAsterick(false);\r\n\r\n //['#contract-type-filter', '#status-group-filter', '#changed-since-filter', '#added-since-filter', '#vanguard-site-filter'].forEach((id: string) => $(id).show());\r\n ['#contract-type-filter', '#status-group-filter', '#changed-since-filter', '#added-since-filter'].forEach((id: string) => $(id).show());\r\n this.contractDetailsTab.refresh();\r\n }\r\n else if (tabId == \"#contracts-history\") {\r\n this.toggleDateAsterick(false);\r\n\r\n //['#changed-since-filter', '#added-since-filter', '#vanguard-site-filter'].forEach((id: string) => $(id).hide());\r\n ['#changed-since-filter', '#added-since-filter'].forEach((id: string) => $(id).hide());\r\n ['#contract-type-filter', '#status-group-filter'].forEach((id: string) => $(id).show());\r\n this.contractHistoryTab.refresh();\r\n }\r\n this.activeTab = tabId;\r\n this.triggerFilter();\r\n }\r\n\r\n triggerFilter(): void {\r\n //console.log(\"filter triggered\");\r\n\r\n if (this.activeTab == \"#contracts-summary\") {\r\n this.contractSummaryTab.updateContent(this.filterContracts(this.activeTab), this.filterContracts('contracts-summary-achievement-chart'));\r\n }\r\n else if (this.activeTab == \"#contracts-details\") {\r\n this.contractDetailsTab.updateContent(this.filterContracts(this.activeTab));\r\n }\r\n else if (this.activeTab == \"#contracts-history\") {\r\n this.contractHistoryTab.updateContent(this.filterContractsHistory());\r\n }\r\n }\r\n\r\n filterContracts(view: string): Contract[] {\r\n let matchingList: Contract[] = [];\r\n let matches: boolean;\r\n this.contracts.forEach((contract: Contract) => {\r\n matches = true; //must match all filters\r\n\r\n if (view == \"#contracts-summary\") {\r\n //if (!contract.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#contract-type-dropdown'), undefined, GetSelectedDate(\"#changed-since-date\"), GetSelectedDate(\"#added-since-date\"), GetSelectedDropdownValues('#vanguard-site-dropdown'))) {\r\n if (!contract.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#contract-type-dropdown'), undefined, GetSelectedDate(\"#changed-since-date\"), GetSelectedDate(\"#added-since-date\"))) {\r\n matches = false;\r\n }\r\n }\r\n else if (view == \"#contracts-details\") {\r\n //if (!contract.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#contract-type-dropdown'), GetSelectedDropdownValues('#status-group-dropdown'), GetSelectedDate(\"#changed-since-date\"), GetSelectedDate(\"#added-since-date\"), GetSelectedDropdownValues('#vanguard-site-dropdown'))) {\r\n if (!contract.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#contract-type-dropdown'), GetSelectedDropdownValues('#status-group-dropdown'), GetSelectedDate(\"#changed-since-date\"), GetSelectedDate(\"#added-since-date\"))) {\r\n matches = false;\r\n }\r\n }\r\n else if (view == \"contracts-summary-achievement-chart\") {\r\n //if (!contract.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#contract-type-dropdown'), undefined, undefined, undefined, GetSelectedDropdownValues('#vanguard-site-dropdown'))) {\r\n if (!contract.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#contract-type-dropdown'), undefined, undefined, undefined)) {\r\n matches = false;\r\n }\r\n }\r\n if (matches) { matchingList.push(contract); }\r\n }); \r\n return matchingList;\r\n }\r\n\r\n filterContractsHistory(): ContractHistory[] {\r\n let matchingList: ContractHistory[] = [];\r\n let matches: boolean;\r\n this.contractsHistory.forEach((contract: ContractHistory) => {\r\n matches = true; //must match all filters\r\n if (this.activeTab == \"#contracts-history\") {\r\n if (!contract.matchesFilter(GetSelectedDropdownValues('#prime-contract-dropdown'), GetSelectedDropdownValues('#contract-type-dropdown'), GetSelectedDropdownValues('#status-group-dropdown'))) {\r\n matches = false;\r\n }\r\n }\r\n if (matches) { matchingList.push(contract); }\r\n });\r\n return matchingList;\r\n }\r\n\r\n showContractDetails(selectedContractNumber: any, view: string): void {\r\n this.contractDetailsTab.showModal(this.contracts.find((c: Contract) => c.ContractNumber == selectedContractNumber), view);\r\n }\r\n\r\n resetFilters(): void {\r\n\r\n //ResetDropdownFilters(['#prime-contract-dropdown', '#contract-type-dropdown', '#status-group-dropdown', '#vanguard-site-dropdown']);\r\n ResetDropdownFilters(['#prime-contract-dropdown', '#contract-type-dropdown', '#status-group-dropdown']);\r\n ResetDateFilters(['#changed-since-date', '#added-since-date']);\r\n\r\n this.contractDetailsTab.clearSearchBar();\r\n this.contractHistoryTab.clearSearchBar();\r\n }\r\n\r\n setOptionEnabled(dropdownId: string, values: string[], disabled: boolean): void {\r\n $(dropdownId + \" option\").each(function () {\r\n if (values.includes($(this).val().toString())) {\r\n $(this).prop('disabled', disabled);\r\n }\r\n });\r\n $(dropdownId).selectpicker('refresh');\r\n }\r\n\r\n toggleDateAsterick(showAsterick: boolean): void {\r\n if (showAsterick) { $('.date-filter-asterick').show(); }\r\n else { $('.date-filter-asterick').hide(); }\r\n }\r\n\r\n showDetailTableModal(id: any, type: string): void {\r\n this.contractSummaryTab.showDetailTableModal(id, type);\r\n }\r\n}","import { Appendix } from \"../../../../shared/entities/scripts/appendix\";\r\nimport { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { GetDateFromString } from \"../../../../shared/scripts/date-functions\";\r\nimport { IGraphDataPoint } from \"../../../../shared/scripts/graphing/graphing.entities\";\r\nimport { ForecastsLookup } from \"./forecasts.lookup\";\r\n\r\n\r\nexport class ForecastGraphDataPoint implements IGraphDataPoint {\r\n PrimeId: number;\r\n AppendixId: number;\r\n AppendixIds: number[];\r\n Date: string;\r\n Count: number;\r\n Rate: number;\r\n TypeId: number; //1: ActiveSites, 2: Rand Participants, 3: IRB Submissions, 4: VITAL alternate\r\n IsOverall: number; //0: No, 1: Yes\r\n TimestampFirstDay: number;\r\n TimestampLastDay: number;\r\n\r\n PrimeContract: string;\r\n Appendix: string;\r\n //IsStudyWide: boolean = false;\r\n\r\n CountField: string;\r\n DayOfMonth: string;\r\n\r\n initialize(dayOfMonth: string = \"last\", countField: string = \"Count\"): void { \r\n\r\n this.PrimeContract = Study.GetStudyName(this.PrimeId);\r\n this.DayOfMonth = dayOfMonth;\r\n this.CountField = countField;\r\n\r\n //if (this.AppendixId != null) {\r\n // this.Appendix = Appendix.GetAppendixName(this.AppendixId);\r\n // if (this.Appendix.includes(\"_ALL\")) { this.IsStudyWide = true; } \r\n //}\r\n\r\n let lastDate: Date = GetDateFromString(this.Date, \"slash-month-day-year\");\r\n this.TimestampLastDay = lastDate.getTime();\r\n\r\n let firstDate: Date = new Date(lastDate);\r\n firstDate.setDate(1);\r\n //this.Timestamp = GetDateFromString(this.Date, \"slash-month-day-year\").getTime();\r\n this.TimestampFirstDay = firstDate.getTime();\r\n\r\n //delete this.PrimeId;\r\n\r\n }\r\n\r\n getTimestamp(): number {\r\n if (this.DayOfMonth == \"last\") { return this.TimestampLastDay; }\r\n else { return this.TimestampFirstDay; }\r\n }\r\n\r\n getCount(): number {\r\n if (this.CountField == \"rate\") { return this.Rate; }\r\n else { return this.Count; }\r\n\r\n }\r\n}","import { Appendix } from \"../../../../shared/entities/scripts/appendix\";\r\nimport { Site } from \"../../../../shared/entities/scripts/site\";\r\nimport { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { ForecastGraphDataPoint } from \"../../forecasts/scripts/forecasts.entities\";\r\nimport { Participant } from \"./enrollment.entities\";\r\nimport { EnrollmentLookup } from \"./enrollment.lookup\";\r\nimport { IEnrollmentPageData } from \"./enrollment.page\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\nrequire('highcharts/highcharts-more')(Highcharts);\r\n\r\nexport class ChartPie {\r\n\r\n constructor(public parent: IEnrollmentPageData) { }\r\n\r\n UpdatePieChart(indices: number[]): void {\r\n\r\n let chartData: any[] = [];\r\n let showLegend: boolean = true;\r\n\r\n if (indices != undefined) {\r\n\r\n let data: number[] = [];\r\n if (this.parent.selectedBreakdown == \"RECOVER Cohort\") { data = this.parent.aggregatedParticipants.RecoverCohort; }\r\n else if (this.parent.selectedBreakdown == \"Age\") { data = this.parent.aggregatedParticipants.Age; }\r\n else if (this.parent.selectedBreakdown == \"Race\") { data = this.parent.aggregatedParticipants.Race; }\r\n else if (this.parent.selectedBreakdown == \"Ethnicity\") { data = this.parent.aggregatedParticipants.Hispanic; }\r\n else if (this.parent.selectedBreakdown == \"Hispanic or Non-White\") { data = this.parent.aggregatedParticipants.NonWhiteHispanic; }\r\n else if (this.parent.selectedBreakdown == \"Sex\") { data = this.parent.aggregatedParticipants.Sex; }\r\n else if (this.parent.selectedBreakdown == \"SX Cluster: ExInt (Enrolled)\") { data = this.parent.aggregatedParticipants.ClusterExInt; }\r\n else if (this.parent.selectedBreakdown == \"SX Cluster: CogDys (Enrolled)\") { data = this.parent.aggregatedParticipants.ClusterCogn; }\r\n else if (this.parent.selectedBreakdown == \"SX Cluster: Autonomic (Enrolled)\") { data = this.parent.aggregatedParticipants.ClusterAuto; }\r\n\r\n indices.forEach((index: number) => {\r\n let label: string = \"\";\r\n if (this.parent.selectedBreakdown == \"RECOVER Cohort\" || this.parent.selectedBreakdown == \"Ethnicity\" || this.parent.selectedBreakdown == \"Hispanic or Non-White\" || this.parent.selectedBreakdown == \"SX Cluster: ExInt (Enrolled)\" || this.parent.selectedBreakdown == \"SX Cluster: CogDys (Enrolled)\" || this.parent.selectedBreakdown == \"SX Cluster: Autonomic (Enrolled)\") {\r\n label = EnrollmentLookup.GetYesNo(index);\r\n if (this.parent.selectedBreakdown == \"Ethnicity\" && label != \"Unknown\") {\r\n label = (label == \"Yes\") ? \"Hispanic\" : \"Not Hispanic\";\r\n }\r\n }\r\n else if (this.parent.selectedBreakdown == \"Sex\") {\r\n label = EnrollmentLookup.GetSex(index);\r\n }\r\n else if (this.parent.selectedBreakdown == \"Age\") {\r\n label = EnrollmentLookup.GetAgeGroup(index);\r\n }\r\n else if (this.parent.selectedBreakdown == \"Race\") {\r\n label = EnrollmentLookup.GetRace(index);\r\n }\r\n\r\n chartData.push({ name: label, y: data[index], className: ChartPie.GetClassName(label) });\r\n });\r\n }\r\n else { //an \"All Participants\" view\r\n let remainingLabel: string = \"Total\";\r\n let countFound: number = 0;\r\n\r\n if (this.parent.selectedAggregation == \"Overall\") {\r\n chartData.push({ name: 'Participants', y: this.parent.selectedParticipants.length, className: ChartPie.GetClassName(\"TOTAL\") });\r\n\r\n //if 'All Participants', show forecasted\r\n if (this.parent.selectedBreakdown == \"All Participants\" && this.parent.selectedForecastRandomized.length > 0) {\r\n chartData.push({ name: 'Total Target Remaining', y: this.getTargetRemaining(this.parent.selectedParticipants.length), className: ChartPie.GetClassName(\"TARGET\") });\r\n }\r\n }\r\n else if (this.parent.selectedAggregation == \"ByStudy\") {\r\n this.parent.allStudies.forEach((s: Study) => {\r\n let count: number = this.parent.selectedParticipants.filter((p: Participant) => p.StudyId == s.Id).length;\r\n if (count > 0) {\r\n chartData.push({ name: s.Name, y: count, className: ChartPie.GetClassName(s.Name) });\r\n countFound += count;\r\n }\r\n });\r\n if (chartData.length == 1) {\r\n remainingLabel = chartData[0].name; \r\n }\r\n chartData.push({ name: remainingLabel + \" Target Remaining\", y: this.getTargetRemaining(countFound), className: ChartPie.GetClassName(\"TARGET\") });\r\n }\r\n else if (this.parent.selectedAggregation == \"ByAppendix\") {\r\n let appendicies = this.parent.allAppendices;\r\n if (this.parent.showUnassigned) {\r\n appendicies = appendicies.concat(this.parent.unassignedAppendicies);\r\n }\r\n appendicies.forEach((a: Appendix) => {\r\n let count: number = this.parent.selectedParticipants.filter((p: Participant) => p.AppendixId == a.Id).length;\r\n if (count > 0) {\r\n chartData.push({ name: a.Name, y: count, className: ChartPie.GetClassName(a.Name) });\r\n countFound += count;\r\n }\r\n });\r\n if (chartData.length == 1) {\r\n remainingLabel = chartData[0].name;\r\n }\r\n chartData.push({ name: remainingLabel + \" Target Remaining\", y: this.getTargetRemaining(countFound), className: ChartPie.GetClassName(\"TARGET\") });\r\n }\r\n else if (this.parent.selectedAggregation == \"BySite\") {\r\n this.parent.consentedSites.forEach((s: Site) => {\r\n chartData.push({ name: s.Name, y: this.parent.selectedParticipants.filter((p: Participant) => p.SiteNumber == s.Id).length });\r\n });\r\n\r\n showLegend = false;\r\n }\r\n\r\n }\r\n\r\n this.updateChart(chartData, showLegend);\r\n }\r\n\r\n\r\n updateChart(data: any[], showLegend: boolean = true): void {\r\n\r\n //eventually should not need to use CSS to stle this\r\n //$('#chart-display').removeClass('piestyle-yes-no piestyle-age piestyle-sex piestyle-race piestyle-all-overall piestyle-all-bystudy piestyle-all-byappendix');\r\n\r\n //if (displayStyle != \"\") { $('#chart-display').addClass(displayStyle); }\r\n\r\n Highcharts.chart('enrollment-chart', {\r\n chart: {\r\n type: 'pie',\r\n //styledMode: false //this seems to be ignored either way\r\n },\r\n title: {\r\n text: undefined\r\n },\r\n tooltip: {\r\n //pointFormat: '{point.percentage:.0f}% (n={point.y:,.0f})',\r\n shared: false,\r\n formatter: function () {\r\n //return '
' + this.point.name + '
' + Highcharts.numberFormat(this.point.percentage, 0, '', ',') + '% (n=' + Highcharts.numberFormat(this.point.y, 0, '', ',') + ')
'; \r\n return '' + this.point.name + '
' + Highcharts.numberFormat(this.point.percentage, 0, '', ',') + '% (n=' + Highcharts.numberFormat(this.point.y, 0, '', ',') + ')';\r\n },\r\n borderColor: 'black'\r\n },\r\n credits: { enabled: false },\r\n plotOptions: {\r\n pie: {\r\n allowPointSelect: false,\r\n cursor: 'pointer',\r\n dataLabels: {\r\n connectorWidth: 1,\r\n connectorShape: 'crookedLine',\r\n crookDistance: '0%',\r\n //enabled: false,\r\n format: '{point.name}
{point.percentage:.0f}% (n={point.y:,.0f})',\r\n //distance: -50,\r\n style: {\r\n fontWeight: 'normal',\r\n fontSize: '13px'\r\n },\r\n filter: {\r\n property: 'percentage',\r\n operator: '>',\r\n value: 0\r\n }\r\n },\r\n showInLegend: true\r\n }\r\n },\r\n series: [{\r\n colorByPoint: true,\r\n type: 'pie',\r\n data: data,\r\n }],\r\n legend: {\r\n enabled: showLegend\r\n }\r\n });\r\n }\r\n\r\n private getTargetRemaining(enrolledCount: number): number {\r\n let total: number = 0;\r\n this.parent.selectedForecastRandomized.forEach((x: ForecastGraphDataPoint) => total += x.Count);\r\n total = total - enrolledCount;\r\n if (total < 0) total = 0;\r\n return total;\r\n }\r\n\r\n static GetClassName(value: string): string {\r\n //if (value == \"TOTAL\") { return \"piestyle-lightblue\"; }\r\n if (value == \"TOTAL\") { return \"piestyle-safronyellow\"; }\r\n else if (value == \"VITAL\") { return \"piestyle-airblue\"; }\r\n else if (value == \"NEURO\") { return \"piestyle-safronyellow\"; }\r\n else if (value == \"SLEEP\") { return \"piestyle-cambridgeblue\"; }\r\n else if (value == \"AUTONOMIC\") { return \"piestyle-mountbattenpink\"; }\r\n else if (value == \"ENERGIZE\") { return \"piestyle-sandybrownorange\"; }\r\n else if (value == \"TARGET\") { return \"piestyle-darkgray\"; }\r\n else if (value == \"VITAL-1 (Paxlovid)\") { return \"piestyle-airblue\"; }\r\n else if (value == \"NEURO-1 (tDCS & BrainHQ)\") { return \"piestyle-safronyellow\"; }\r\n else if (value == \"AUTONOMIC-1 (IVIG)\") { return \"piestyle-mountbattenpink\"; } //A288A6\r\n else if (value == \"AUTONOMIC-2 (Ivabradine)\") { return \"piestyle-cambridgeblue\"; } //99C2A2\r\n else if (value == \"SLEEP-1 (Modafinil/Solriamfetol)\") { return \"piestyle-sandybrownorange\"; } //f4a261\r\n else if (value == \"SLEEP-2 (Melatonin/Light)\") { return \"piestyle-resedagreen\"; } //666B41\r\n else if (value == \"ENERGIZE-1 (Cardiopulmonary Rehab)\") { return \"piestyle-rosetaupe\"; } //A26B73\r\n else if (value == \"ENERGIZE-2 (Structured Pacing)\") { return \"piestyle-paynesgray\"; } //4D6C80\r\n else if (value == \"AUTONOMIC-Unassigned\") { return \"piestyle-unassignedpink\"; } //635366\r\n else if (value == \"VITAL-Unassigned\") { return \"piestyle-unassignedblue\"; }\r\n else if (value == \"NEURO-Unassigned\") { return \"piestyle-unassignedyellow\"; }\r\n else if (value == \"Yes\") { return \"piestyle-airblue\"; }\r\n else if (value == \"No\") { return \"piestyle-safronyellow\"; }\r\n else if (value == \"Unknown\") { return \"piestyle-gray\"; }\r\n else if (value == \"Hispanic\") { return \"piestyle-airblue\"; }\r\n else if (value == \"Not Hispanic\") { return \"piestyle-safronyellow\"; }\r\n else if (value == \"Female\") { return \"piestyle-airblue\"; }\r\n else if (value == \"Male\") { return \"piestyle-safronyellow\"; }\r\n else if (value == \"Intersex\") { return \"piestyle-cambridgeblue\"; }\r\n else if (value == \"Prefer Not To Answer\") { return \"piestyle-mountbattenpink\"; }\r\n else if (value == \"18-45\") { return \"piestyle-safronyellow\"; }\r\n else if (value == \"46-65\") { return \"piestyle-airblue\"; }\r\n else if (value == \"+65\") { return \"piestyle-cambridgeblue\"; }\r\n //else if (value == \"+70\") { return \"piestyle-mountbattenpink\"; }\r\n else if (value == \"AIAN\") { return \"piestyle-sandyorange\"; }\r\n else if (value == \"Asian\") { return \"piestyle-mountbattenpink\"; }\r\n else if (value == \"Black\") { return \"piestyle-airblue\"; }\r\n else if (value == \"MENA\") { return \"piestyle-chestnutred\"; }\r\n else if (value == \"NHPI\") { return \"piestyle-ceruleanblue\"; }\r\n else if (value == \"Multi\") { return \"piestyle-cambridgeblue\"; }\r\n else if (value == \"White\") { return \"piestyle-safronyellow\"; }\r\n else return \"piestyle-chestnutred\";\r\n } \r\n}\r\n","import { plainToClass } from \"class-transformer\";\r\nimport { Announcement } from \"./announcements.entities\";\r\n\r\nexport class AnnouncementsPage {\r\n\r\n announcements: Announcement[];\r\n\r\n constructor(dataJson: any) {\r\n\r\n $(() => {\r\n\r\n this.announcements = plainToClass(Announcement, dataJson);\r\n\r\n if (this.announcements && this.announcements.length > 0) {\r\n\r\n this.announcements.forEach((t: Announcement) => {\r\n t.Initialize();\r\n });\r\n this.announcements.sort((x1: Announcement, x2: Announcement) => x1.SortOrder - x2.SortOrder);\r\n\r\n const announcementsTemplate = document.getElementById('announcement-template') as HTMLTemplateElement;\r\n const announcementsContainer = document.getElementById('announcement-container');\r\n\r\n this.announcements.forEach((announcement) => {\r\n const instance = document.importNode(announcementsTemplate.content, true);\r\n\r\n const imageElement = instance.querySelector('.announcement-image');\r\n imageElement.setAttribute('src', `/images/announcements/${announcement.ImageFile}.jpg`);\r\n\r\n if (announcement.Link) {\r\n const link = document.createElement('a');\r\n link.setAttribute('href', announcement.Link);\r\n link.setAttribute('target', '_blank');\r\n link.innerHTML = announcement.Title;\r\n\r\n instance.querySelector('.announcement-title').appendChild(link);\r\n } else {\r\n instance.querySelector('.announcement-title').innerHTML = announcement.Title;\r\n }\r\n instance.querySelector('.announcement-desc').innerHTML = announcement.Description;\r\n instance.querySelector('.announcement-date').innerHTML = announcement.AnnouncementDateFormatted;\r\n\r\n announcementsContainer.appendChild(instance);\r\n });\r\n }\r\n\r\n })\r\n }\r\n}","// extracted by mini-css-extract-plugin","import { GetDateFromString } from \"../../../../shared/scripts/date-functions\";\r\n\r\n\r\nexport class Participant {\r\n SubjectId: string;\r\n\r\n StudyId: number;\r\n SiteNumber: number;\r\n AppendixId: number;\r\n\r\n Randomized: number;\r\n Consented: number;\r\n ScreenFail: number;\r\n RecoverCohort: number;\r\n\r\n SexId: number;\r\n RaceId: number;\r\n AgeId: number;\r\n HispanicId: number;\r\n NonWhiteHispanic: number;\r\n VitSymExInt: number;\r\n VitSymAutoDys: number;\r\n VitSymCogDys: number;\r\n\r\n DateRandomizedStr: string;\r\n DateConsentedStr: string; \r\n\r\n DateRandomized: Date;\r\n DateConsented: Date;\r\n MonthRandomized: Date;\r\n MonthConsented: Date;\r\n WeekRandomized: Date;\r\n WeekConsented: Date;\r\n\r\n initialize(): void {\r\n\r\n if (this.DateConsentedStr != undefined) {\r\n this.DateConsented = GetDateFromString(this.DateConsentedStr, 'slash-month-day-year'); //to handle Safari Date parsing issue\r\n this.MonthConsented = new Date(this.DateConsented);\r\n this.MonthConsented.setDate(1);\r\n //console.log(this.DateConsented, this.MonthConsented);\r\n }\r\n else { this.MonthConsented = undefined; }\r\n \r\n if (this.DateRandomizedStr != undefined) {\r\n this.DateRandomized = GetDateFromString(this.DateRandomizedStr, 'slash-month-day-year'); //to handle Safari Date parsing issue\r\n this.MonthRandomized = new Date(this.DateRandomized);\r\n this.MonthRandomized.setDate(1);\r\n } \r\n\r\n if (this.HispanicId == 1 || (this.RaceId != 6 && this.RaceId != 7) ) { this.NonWhiteHispanic = 1; } //hispanic or (not white and not unknown)\r\n else if (this.HispanicId == 0 && this.RaceId == 6) { this.NonWhiteHispanic = 0; } //not hispanic and white\r\n else { this.NonWhiteHispanic = 2; }\r\n this.WeekConsented = new Date(this.WeekConsented);\r\n this.WeekRandomized = new Date(this.WeekRandomized);\r\n //console.log(this);\r\n }\r\n}\r\n\r\nexport class AggregatedParticipants {\r\n Count: number;\r\n RecoverCohort: number[];\r\n Race: number[];\r\n Hispanic: number[];\r\n NonWhiteHispanic: number[];\r\n Sex: number[];\r\n Age: number[];\r\n ClusterExInt: number[];\r\n ClusterAuto: number[];\r\n ClusterCogn: number[];\r\n\r\n aggregate(participants: Participant[]) {\r\n this.RecoverCohort = [0, 0, 0]; //0: no, 1: yes, 2: unknown\r\n this.Race = [0, 0, 0, 0, 0, 0, 0, 0]; //0: Multiple, 1: AIAN, 2: Asian, 3: Black, 4: MENA, 5: NHPI, 6: Whit, 7: Unknown\r\n this.Hispanic = [0, 0, 0]; //0: no, 1: yes, 2: unknown\r\n this.NonWhiteHispanic = [0, 0, 0]; //0: no, 1: yes, 2: unknown\r\n this.Sex = [0, 0, 0, 0, 0]; //0: female, 1: male, 2: intersex, 3: prefer not to answer, 4: unknown\r\n this.Age = [0, 0, 0, 0, 0]; //0: 18-30; 1: 31-50; 2: 51-70; 3: +70; 4: unknown\r\n this.ClusterExInt = [0, 0, 0]; //0: no, 1: yes, 2: unknown\r\n this.ClusterAuto = [0, 0, 0]; //0: no, 1: yes, 2: unknown\r\n this.ClusterCogn = [0, 0, 0]; //0: no, 1: yes, 2: unknown\r\n\r\n participants.forEach((p: Participant) => {\r\n this.RecoverCohort[p.RecoverCohort] += 1;\r\n this.Race[p.RaceId] += 1;\r\n this.Hispanic[p.HispanicId] += 1;\r\n this.NonWhiteHispanic[p.NonWhiteHispanic] += 1;\r\n this.Sex[p.SexId] += 1;\r\n this.Age[p.AgeId] += 1;\r\n this.ClusterExInt[p.VitSymExInt] += 1;\r\n this.ClusterAuto[p.VitSymAutoDys] += 1;\r\n this.ClusterCogn[p.VitSymCogDys] += 1;\r\n });\r\n\r\n this.Count = participants.length;\r\n }\r\n}","import { FormatNumberWithCommas } from \"../../../../../shared/scripts/number-functions\";\r\nimport { TableColumnGroup, TableColumnVisibilityController } from \"../../../../../shared/scripts/table-column-visibility\";\r\nimport { RenderDateMDY, RenderDateYMD, RenderDays } from \"../../../../../shared/scripts/table-functions\";\r\nimport { ContractHistory } from \"../../scripts/contracts.entities\";\r\n\r\n\r\nexport class ContractHistoryTab {\r\n\r\n tableId: string = \"contracts-history-table\";\r\n tableWrapperId: string = this.tableId + \"_wrapper\";\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n\r\n constructor(contracts: ContractHistory[]) {\r\n\r\n let columns: any[] = [\r\n { data: \"ContractType\", title: \"Contract Type\", className: \"category text-left font-size12 nowrap\" },\r\n { data: { _: \"ContractNameDisplay\", sort: \"ContractName\" }, title: \"Contract Name\", className: \"text-left font-size12\" },\r\n { data: \"ContractNumber\", title: \"Contract Number\", className: \"contract-number text-left font-size12 nowrap\" },\r\n { data: \"PrimeContract\", title: \"Prime Contract\", className: \"prime-contract text-left font-size12 nowrap\" },\r\n { data: \"StatusGroup\", title: \"Status Group\", className: \"status-group text-left font-size12 nowrap\" },\r\n { data: \"Status\", title: \"Status\", className: \"status text-left font-size12 nowrap\" },\r\n { data: \"DateStatusStart\", title: \"Status Start Date\", className: \"start-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateStatusEnd\", title: \"Status End Date\", className: \"end-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"Duration\", title: \"Duration\", className: \"duration text-center font-size12 nowrap\", render: RenderDays },\r\n //{ data: \"ActualEndDate\", title: \"End Date
(Actual)\", className: \"end-dates text-center font-size12\", width: '100px', render: RenderDateYMD },\r\n { data: \"SortDate\", title: \"SortOrder\", visible: false },\r\n ];\r\n\r\n this.dataTable = $('#' + this.tableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: true,\r\n pagingType: 'simple',\r\n pageLength: 50,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 2\r\n },\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n order: [[9, 'asc']],\r\n data: contracts\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .spacer\").addClass('col-12 col-md-3');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.tableId, (this.tableId + '-column-select'), [\r\n new TableColumnGroup(\"Contract Number\", false, [], \"contract-number\"),\r\n new TableColumnGroup(\"Prime Contract\", false, [], \"prime-contract\"),\r\n new TableColumnGroup(\"Status Group\", false, [], \"status-group\"),\r\n new TableColumnGroup(\"Status\", true, [], \"status\"),\r\n new TableColumnGroup(\"Start Date\", true, [], \"start-date\"),\r\n new TableColumnGroup(\"End Date\", true, [], \"end-date\"),\r\n new TableColumnGroup(\"Duration\", true, [], \"duration\"),\r\n ]);\r\n\r\n $('#' + this.tableId).on('search.dt', (e, settings) => {\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n this.setCountFoundLabel(contracts.length);\r\n }\r\n\r\n setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.tableId + '-found-count').text(\"No Records Found\"); break;\r\n case 1: $('#' + this.tableId + '-found-count').text(\"1 Record Found\"); break;\r\n default: $('#' + this.tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Records Found\");\r\n }\r\n }\r\n\r\n refresh(): void {\r\n this.dataTable.columns.adjust();\r\n this.tableColumnController.refresh();\r\n }\r\n\r\n updateContent(matchingContracts: ContractHistory[]): void {\r\n\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(matchingContracts).draw();\r\n this.setCountFoundLabel(matchingContracts.length);\r\n }\r\n\r\n clearSearchBar(): void {\r\n this.dataTable.search('').draw();\r\n }\r\n}","\r\n// SCRIPTS\r\n\r\nimport { SecureHomePage } from './home/home.page'; export { SecureHomePage };\r\nimport { UserDirectoryPage } from './communications/user-directory/user-directory.page'; export { UserDirectoryPage };\r\nimport { TaskTrackerPage } from './task-tracking/scripts/task-tracker.page'; export { TaskTrackerPage };\r\nimport { ContractsPage } from './reporting/contracts/scripts/contracts.page'; export { ContractsPage };\r\nimport { SiteActivationPage } from './reporting/sites/site-activation/scripts/site-activation.page'; export { SiteActivationPage };\r\nimport { ForecastsPage } from './reporting/forecasts/scripts/forecasts.page'; export { ForecastsPage };\r\nimport { ExecutiveSummaryPage } from './reporting/executive-summary/scripts/executive-summary.page'; export { ExecutiveSummaryPage };\r\nimport { AnnouncementsPage } from './communications/announcements/scripts/announcements.page'; export { AnnouncementsPage };\r\nimport { PrescreeningPage } from './reporting/prescreening/scripts/prescreening.page'; export { PrescreeningPage };\r\nimport { EnrollmentPage } from './reporting/enrollment/scripts/enrollment.page'; export { EnrollmentPage };\r\nimport { DataCompletenessPage } from './reporting/data-completeness/scripts/data-completeness.page'; export { DataCompletenessPage };\r\nimport { FinancialsPage } from './reporting/financials/scripts/financials.page'; export { FinancialsPage };\r\n\r\n// STYLES\r\nimport './home/home.scss';\r\nimport './communications/user-directory/user-directory.scss';\r\nimport './task-tracking/task-tracker.scss';\r\nimport './reporting/forecasts/forecasts.scss';\r\nimport './reporting/contracts/contracts.scss';\r\nimport './reporting/sites/site-activation/site-activation.scss';\r\nimport './communications/site-faqs/site-faqs.scss';\r\nimport './reporting/forecasts/forecasts.scss';\r\nimport './reporting/executive-summary/executive-summary.scss';\r\nimport './communications/announcements/announcements.scss';\r\nimport './reporting/prescreening/prescreening.scss';\r\nimport './reporting/sites/site-activation/components/milestone-dashboard-tab/milestone-dashboard-tab.scss';\r\nimport './reporting/enrollment/enrollment.scss';\r\nimport './reporting/data-completeness/data-completeness.scss';\r\nimport './reporting/financials/financials.scss';\r\n","import { plainToClass } from \"class-transformer\";\r\nimport { UserDirectoryEntity } from \"./user-directory.objects\";\r\nimport { TableColumnVisibilityController, TableColumnGroup } from \"../../../shared/scripts/table-column-visibility\";\r\nimport { Unique } from \"../../../shared/scripts/array-functions\";\r\nimport { IFilter } from \"../../../shared/scripts/filtering/filtering.entities\";\r\nimport { InitializeFilterDropdown } from \"../../../shared/scripts/filtering/filtering.utilities\";\r\n//import { UserExperienceEntry, UserExperience, ExpertiseArea } from \"../../../auth/pages/profile/scripts/expertise.objects\";\r\n\r\n\r\n\r\nexport class UserDirectoryPage implements IFilter {\r\n\r\n users: UserDirectoryEntity[];\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n filterDropdownIds: string[];\r\n visibleUserEmails: string;\r\n\r\n constructor(userJson: any) {\r\n $(() => {\r\n\r\n //console.log(userJson);\r\n\r\n\r\n this.users = plainToClass(UserDirectoryEntity, userJson);\r\n\r\n //let expertiseList: UserExperienceEntry[] = plainToClass(UserExperienceEntry, userExpertiseJson);\r\n //expertiseList.map((entry: UserExperienceEntry) => {\r\n // let user: UserDirectoryEntity = this.users.find((user: UserDirectoryEntity) => user.Email == entry.Email);\r\n // if (user != undefined) {\r\n // user.Expertise = plainToClass(UserExperience, JSON.parse(entry.ExperienceJson));\r\n // user.HiddenFilter = user.Expertise.getHiddenFilter();\r\n // //console.log(user);\r\n // }\r\n //});\r\n\r\n this.users = this.users.map((user: UserDirectoryEntity) => {\r\n user.initialize();\r\n return user;\r\n });\r\n\r\n this.filterDropdownIds = ['#affiliation-dropdown', '#organization-dropdown', '#study-dropdown'];\r\n this.initializeFilters();\r\n\r\n this.initializeTable();\r\n });\r\n }\r\n\r\n initializeFilters(): void {\r\n let values: string[] = [];\r\n this.users.forEach((user: UserDirectoryEntity) => { values.push(...user.AffiliationList); });\r\n InitializeFilterDropdown('#affiliation-dropdown', Unique(values, true, [\"None Selected\"]), this);\r\n InitializeFilterDropdown('#organization-dropdown', Unique(this.users.map((user: UserDirectoryEntity) => user.Institution), true), this);\r\n\r\n let studyValues: string[] = [];\r\n this.users.forEach((user: UserDirectoryEntity) => { studyValues.push(...user.StudyList); });\r\n InitializeFilterDropdown('#study-dropdown', Unique(studyValues, true, [\"None Selected\"]), this);\r\n\r\n }\r\n // $(selectId).on('changed.bs.select', (e, clickedIndex, isSelected, previousValue) => {\r\n // this.filterUserDirectory();\r\n // });\r\n\r\n\r\n initializeTable(): void {\r\n this.dataTable = $('#user-directory-table').DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '60vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 2\r\n },\r\n columns: [\r\n { data: { _: \"DisplayName\", sort: \"SortName\" }, title: \"Name\", className: \"text-left font-size12\" },\r\n { data: { _: \"DisplayEmail\", sort: \"Email\" }, title: \"Email\", className: \"text-left font-size12\" },\r\n { data: { _: \"DisplayAffiliation\", sort: \"Affiliations\" }, title: \"RECOVER-CT Affiliation\", className: \"project text-left font-size12\" },\r\n { data: { _: \"ProjectRole\", sort: \"ProjectRole\" }, title: \"Role\", className: \"project text-left font-size12\" },\r\n { data: { _: \"DisplayStudy\", sort: \"Studies\" }, title: \"Protocol\", className: \"project text-left font-size12\" },\r\n { data: { _: \"DisplayInstitution\", sort: \"Institution\" }, title: \"Institution\", className: \"location text-left font-size12\" },\r\n\r\n ],\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n },\r\n {\r\n text: '',\r\n titleAttr: 'Send Email',\r\n action: (e, dt, node, config) => {\r\n //console.log(this.visibleUserEmails);\r\n\r\n navigator.clipboard.writeText(this.visibleUserEmails).then(\r\n () => {\r\n $('#directory-email-modal').modal('show');\r\n $('#modal-email-list').text(this.visibleUserEmails);\r\n });\r\n }\r\n }\r\n ],\r\n data: this.users\r\n });\r\n\r\n $(\".top-controls\").addClass('row mx-0');\r\n\r\n $(\".column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\".column-select\").empty().html('
');\r\n\r\n $(\".search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\".spacer\").addClass('col-12 col-md-3'); 0\r\n $(\".count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\".count-found\").prepend('
');\r\n $(\".count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController('user-directory-table', 'column-select', [\r\n new TableColumnGroup(\"Project Details\", true, [], \"project\"),\r\n new TableColumnGroup(\"Institution\", true, [], \"location\"),\r\n //new TableColumnGroup(\"About\", false, [], \"about\"),\r\n //new TableColumnGroup(\"Expertise\", false, [], \"expertise\")\r\n ]);\r\n\r\n $('#user-directory-table').on('search.dt', (e, settings) => {\r\n this.createEmailList(this.dataTable.rows({ search: 'applied' }).data());\r\n this.setPeopleFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n this.createEmailList(this.users);\r\n this.setPeopleFoundLabel(this.users.length);\r\n }\r\n\r\n updateTable(matchingUsers: UserDirectoryEntity[]): void {\r\n\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(matchingUsers).draw();\r\n this.setPeopleFoundLabel(matchingUsers.length);\r\n this.createEmailList(matchingUsers);\r\n }\r\n\r\n triggerFilter(): void {\r\n\r\n let matchingUsers: UserDirectoryEntity[] = [];\r\n\r\n let userMatches: boolean;\r\n this.users.forEach((user: UserDirectoryEntity) => {\r\n\r\n userMatches = true; //must match all filters\r\n\r\n if (!user.matchesFilter(this.getSelectedDropdownValues('#affiliation-dropdown'), this.getSelectedDropdownValues('#study-dropdown'), this.getSelectedDropdownValues('#organization-dropdown'))){\r\n userMatches = false;\r\n }\r\n\r\n if (userMatches) { matchingUsers.push(user); }\r\n });\r\n\r\n this.updateTable(matchingUsers);\r\n }\r\n\r\n getSelectedDropdownValues(selectId: string): any {\r\n //return $(selectId).selectpicker('val');\r\n return $(selectId).val();\r\n }\r\n\r\n setPeopleFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#people-found-count').text(\"Nobody Found\"); break;\r\n case 1: $('#people-found-count').text(\"1 Person Found\"); break;\r\n default: $('#people-found-count').text(count.toLocaleString() + \" People Found\");\r\n }\r\n }\r\n\r\n createEmailList(matchingUsers: UserDirectoryEntity[]): void {\r\n this.visibleUserEmails = matchingUsers.map((user: UserDirectoryEntity) => user.Email).join(\"; \");\r\n //console.log(this.visibleUserEmails);\r\n }\r\n\r\n\r\n resetFilters(): void {\r\n\r\n ['#affiliation-dropdown', '#study-affiliation', '#institute-dropdown'].forEach((dropdownId: string) => {\r\n $(dropdownId).selectpicker('selectAll');\r\n $(dropdownId).selectpicker('refresh');\r\n });\r\n\r\n this.dataTable.search('').draw();\r\n this.updateTable(this.users);\r\n }\r\n}","import { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { DoArraysOverlap } from \"../../../../shared/scripts/array-functions\";\r\nimport { GetDateFromString } from \"../../../../shared/scripts/date-functions\";\r\nimport { PadNumber } from \"../../../../shared/scripts/number-functions\";\r\nimport { FormatStringColumnByLength } from \"../../../../shared/scripts/table-functions\";\r\nimport { SiteMilestone } from \"../../sites/site-activation/scripts/site-activation.entities\";\r\nimport { ContractsLookup } from \"./contracts.lookup\";\r\n\r\nexport class Contract {\r\n\r\n ContractNumber: string;\r\n ContractName: string;\r\n DateLastStatusStart: string;\r\n DateExecuted: string;\r\n DateContractStart: string;\r\n DateContractEnd: string;\r\n DateContractAdded: string;\r\n DaysToExecution: string;\r\n SiteCode: string;\r\n PrimeContractId: number;\r\n ContractTypeId: number;\r\n StatusId: number;\r\n StatusGroupId: number;\r\n SiteNumber: number;\r\n //SiteIdStr: string;\r\n IsVanguardSite: number;\r\n\r\n PrimeContract: string;\r\n ContractType: string;\r\n Status: string;\r\n StatusGroup: string;\r\n\r\n ContractNameDisplay: string;\r\n AddedDate: Date;\r\n LastChangeDate: Date;\r\n\r\n StatusDisplay: string;\r\n MilestoneDisplay: string;\r\n VanguardSiteDisplay: string;\r\n SiteNumberDisplay: string;\r\n\r\n History: ContractHistory[];\r\n //HistoryDateMap: Map;\r\n HistoryUniqueDates: number[]; //unique dates that events happened\r\n\r\n Milestones: SiteMilestone[];\r\n MilestoneDateMap: Map;\r\n //MilestoneMap: Map;\r\n //MilestoneUniqueDates: number[];\r\n\r\n //IsRecoverCohortSite: boolean = undefined;\r\n\r\n static count: number = 0;\r\n\r\n initialize(): void {\r\n\r\n //this.PrimeContract = ContractsLookup.GetPrimeContract(this.PrimeContractId);\r\n this.PrimeContract = Study.GetStudyName(this.PrimeContractId)\r\n this.ContractType = ContractsLookup.GetContractType(this.ContractTypeId);\r\n this.Status = ContractsLookup.GetContractStatus(this.StatusId);\r\n this.StatusGroup = ContractsLookup.GetContractStatusGroup(this.StatusGroupId);\r\n\r\n this.ContractNameDisplay = FormatStringColumnByLength(this.ContractName, 4);\r\n\r\n this.AddedDate = GetDateFromString(this.DateContractAdded, \"slash-month-day-year\");\r\n this.LastChangeDate = GetDateFromString(this.DateLastStatusStart, \"slash-month-day-year\");\r\n\r\n this.StatusDisplay = \"\" + this.Status + \"\";\r\n\r\n if (this.IsVanguardSite == 1) this.VanguardSiteDisplay = \"Yes\";\r\n else if (this.IsVanguardSite == 2) this.VanguardSiteDisplay = \"No\";\r\n else this.VanguardSiteDisplay = \"Not Applicable\";\r\n\r\n if (this.SiteNumber > 0) this.SiteNumberDisplay = PadNumber(this.SiteNumber + \"\", 3);\r\n else this.SiteNumberDisplay = \"\";\r\n\r\n delete this.PrimeContractId;\r\n delete this.ContractTypeId;\r\n delete this.StatusId;\r\n delete this.StatusGroupId;\r\n delete this.IsVanguardSite;\r\n\r\n //console.log(this);\r\n }\r\n\r\n setContractHistory(history: ContractHistory[]): void {\r\n this.History = history.sort((a: ContractHistory, b: ContractHistory) => a.StartDateTimestamp-b.StartDateTimestamp);\r\n //this.HistoryDateMap = new Map();\r\n this.HistoryUniqueDates = [];\r\n let historyTimes: number[] = [];\r\n\r\n this.History.forEach((history: ContractHistory) => {\r\n //if (!this.HistoryDateMap.has(history.StatusGroup)) { //only want first occurence\r\n //this.HistoryDateMap.set(history.StatusGroup, history.StartDate.getTime());\r\n //}\r\n if (!historyTimes.includes(history.StartDate.getTime())) {\r\n this.HistoryUniqueDates.push(history.StartDate.getTime());\r\n historyTimes.push(history.StartDate.getTime());\r\n }\r\n });\r\n\r\n //console.log(this.HistoryDates);\r\n //console.log(this.HistoryDateMap);\r\n }\r\n\r\n setSiteMilestones(milestones: SiteMilestone[]): void {\r\n this.MilestoneDisplay = \"\"; //this.SiteIdStr = \"\";\r\n\r\n if (milestones.length > 0) {\r\n this.Milestones = milestones;\r\n //this.IsRecoverCohortSite = false;\r\n //this.SiteIdStr = milestones[0].SiteIdStr;\r\n this.SiteNumber = milestones[0].SiteNumber;\r\n\r\n let selectedMilestone: string = \"Milestone\";\r\n let selectedTimestamp: number = 0;\r\n for (let i = milestones.length; i >= 0; --i) {\r\n if (milestones[i]?.CompletionDate?.getTime() > selectedTimestamp) {\r\n selectedMilestone = milestones[i].Milestone;\r\n selectedTimestamp = milestones[i].CompletionDate.getTime();\r\n }\r\n }\r\n this.MilestoneDisplay = \"\" + selectedMilestone + \"\";\r\n }\r\n }\r\n\r\n matchesFilter(primeContract: any, contractType: any, statusGroup: any, changedSinceDate: any, addedSinceDate: any): boolean {\r\n\r\n //console.log(primeContract, contractType, statusGroup, changedSinceDate, addedSinceDate);\r\n //console.log(changedSinceDate, addedSinceDate);\r\n\r\n if (primeContract != undefined && !DoArraysOverlap(primeContract, this.PrimeContract)) { return false; }\r\n if (contractType != undefined && !DoArraysOverlap(contractType, this.ContractType)) { return false; }\r\n if (statusGroup != undefined && !DoArraysOverlap(statusGroup, this.StatusGroup)) { return false; }\r\n //if (vanguardSite != undefined && vanguardSite.indexOf(this.VanguardSiteDisplay) === -1) { return false; }\r\n if (changedSinceDate != undefined && changedSinceDate != null) {\r\n if (this.LastChangeDate == undefined) { return false; }\r\n else if (this.LastChangeDate < changedSinceDate) return false;\r\n }\r\n if (addedSinceDate != undefined && addedSinceDate != null) {\r\n if (this.AddedDate == undefined) { return false; }\r\n else if (this.AddedDate < addedSinceDate) return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n //isContractInStatusGroupOnDate(statusGroup: string, checkDate: number): boolean {\r\n\r\n // if (this.HistoryDateMap.has(statusGroup)) {\r\n // let contractDate: number = this.HistoryDateMap.get(statusGroup);\r\n // if (contractDate <= checkDate) { return true; }\r\n // }\r\n // return false; \r\n //}\r\n\r\n getContractStatusOnDate(checkDate: number): string {\r\n let statusesOnDate: string[] = [];\r\n let latestMatchingDate: number = -1;\r\n let currentDate: number;\r\n\r\n for (let i: number = 0; i < this.History.length; ++i) {\r\n currentDate = this.History[i].StartDateTimestamp;\r\n if (checkDate >= currentDate) {\r\n if (latestMatchingDate != currentDate) {\r\n latestMatchingDate = currentDate;\r\n statusesOnDate = [];\r\n }\r\n statusesOnDate.push(this.History[i].StatusGroup);\r\n }\r\n if (checkDate < currentDate) { break; }\r\n }\r\n\r\n //need to check hierarchy to account for contract updates on same day\r\n let statusHierarchy: string[] = [\"Fully Executed\", \"Signature\", \"Negotiation\"];\r\n for (let i: number = 0; i < statusHierarchy.length; ++i) {\r\n if (statusesOnDate.includes(statusHierarchy[i])) { return statusHierarchy[i]; }\r\n }\r\n\r\n return \"\";\r\n }\r\n\r\n isMilestoneCompletedOnDate(milestone: string, checkDate: number): boolean {\r\n\r\n if (this.MilestoneDateMap.has(milestone)) {\r\n let completionDate: number = this.MilestoneDateMap.get(milestone);\r\n if (completionDate <= checkDate) { return true; }\r\n }\r\n return false;\r\n }\r\n\r\n //getMilestoneByMilestone(milestoneLabel: string): SiteMilestone {\r\n // return this.MilestoneMap.get(milestoneLabel);\r\n //}\r\n}\r\n\r\n\r\nexport class ContractHistory {\r\n\r\n ContractNumber: string;\r\n ContractName: string; \r\n DateStatusStart: string; \r\n DateStatusEnd: string;\r\n Duration: string;\r\n PrimeContractId: number;\r\n ContractTypeId: number;\r\n StatusId: number;\r\n StatusGroupId: number;\r\n\r\n PrimeContract: string; \r\n ContractType: string; \r\n Status: string;\r\n StatusGroup: string; \r\n SortDate: Date;\r\n StartDate: Date;\r\n EndDate: Date;\r\n ContractNameDisplay: string;\r\n\r\n StartDateTimestamp: number;\r\n\r\n initialize(): void {\r\n\r\n //this.PrimeContract = ContractsLookup.GetPrimeContract(this.PrimeContractId);\r\n this.PrimeContract = Study.GetStudyName(this.PrimeContractId);\r\n this.ContractType = ContractsLookup.GetContractType(this.ContractTypeId);\r\n this.Status = ContractsLookup.GetContractStatus(this.StatusId);\r\n this.StatusGroup = ContractsLookup.GetContractStatusGroup(this.StatusGroupId);\r\n\r\n this.ContractNameDisplay = FormatStringColumnByLength(this.ContractName, 4);\r\n\r\n this.StartDate = GetDateFromString(this.DateStatusStart, \"slash-month-day-year\");\r\n this.StartDateTimestamp = this.StartDate.getTime();\r\n this.SortDate = this.StartDate;\r\n this.EndDate = GetDateFromString(this.DateStatusEnd, \"slash-month-day-year\");\r\n\r\n delete this.PrimeContractId;\r\n delete this.ContractTypeId;\r\n delete this.StatusId;\r\n delete this.StatusGroupId;\r\n }\r\n\r\n matchesFilter(primeContract: any, contractType: any, status: any): boolean {\r\n\r\n //console.log(primeContract, contractType, statusGroup, changedSinceDate, addedSinceDate);\r\n //console.log(changedSinceDate, addedSinceDate);\r\n\r\n if (!DoArraysOverlap(primeContract, this.PrimeContract)) { return false; }\r\n if (!DoArraysOverlap(contractType, this.ContractType)) { return false; }\r\n //if (!DoArraysOverlap(status, this.Status)) { return false; }\r\n if (!DoArraysOverlap(status, this.StatusGroup)) { return false; }\r\n\r\n return true;\r\n }\r\n}\r\n","import 'waypoints/lib/jquery.waypoints.min';\r\nimport { Announcement } from '../communications/announcements/scripts/announcements.entities';\r\nimport { plainToClass } from 'class-transformer';\r\n\r\n\r\nexport class SecureHomePage {\r\n\r\n announcements: Announcement[];\r\n\r\n constructor(announcementsJson: any) {\r\n\r\n //document.ready\r\n $(() => {\r\n\r\n /* Removed until something more up-to-date\r\n this.announcements = plainToClass(Announcement, announcementsJson);\r\n\r\n if (this.announcements && this.announcements.length > 0) {\r\n this.announcements.forEach((t: Announcement) => {\r\n t.Initialize();\r\n });\r\n this.announcements.sort((x1: Announcement, x2: Announcement) => x1.SortOrder - x2.SortOrder);\r\n\r\n const announcementsTemplate = document.getElementById('announcement-template') as HTMLTemplateElement;\r\n const announcementsContainer = document.getElementById('announcement-container');\r\n\r\n this.announcements.forEach((announcement) => {\r\n const instance = document.importNode(announcementsTemplate.content, true);\r\n\r\n const imageElement = instance.querySelector('.announcement-image');\r\n imageElement.setAttribute('src', `/images/announcements/${announcement.ImageFile}.jpg`);\r\n\r\n if (announcement.Link) {\r\n const link = document.createElement('a');\r\n link.setAttribute('href', announcement.Link);\r\n link.setAttribute('target', '_blank');\r\n link.innerHTML = announcement.Title;\r\n\r\n instance.querySelector('.announcement-title').appendChild(link);\r\n } else {\r\n instance.querySelector('.announcement-title').innerHTML = announcement.Title;\r\n }\r\n instance.querySelector('.announcement-desc').innerHTML = announcement.Description;\r\n instance.querySelector('.announcement-date').innerHTML = announcement.AnnouncementDateFormatted;\r\n\r\n announcementsContainer.appendChild(instance);\r\n });\r\n }\r\n */\r\n\r\n });\r\n\r\n }\r\n\r\n}\r\n","import { IGraphDataPoint } from \"./graphing.entities\";\r\n\r\n\r\nexport function FindUniqueTimestamps(points: IGraphDataPoint[]): number[] {\r\n let uniqueTimestamps: number[] = [];\r\n\r\n for (let i = 0; i < points.length; ++i) {\r\n if (!uniqueTimestamps.includes(points[i].getTimestamp())) { uniqueTimestamps.push(points[i].getTimestamp()); }\r\n }\r\n\r\n //other approach is faster (measured using console.time, console.timeEnd)\r\n //let timestamps: number[] = Array.from(new Set(points.map((point: IGraphDataPoint) => point.Timestamp)));\r\n\r\n return uniqueTimestamps.sort();\r\n}\r\n\r\nexport function CreateSeries_EverDay(points: IGraphDataPoint[], cummulative: boolean = true, timestamps: number[] = []): any[] {\r\n\r\n //console.log(points);\r\n\r\n if (timestamps.length == 0) timestamps = FindUniqueTimestamps(points);\r\n\r\n let seriesData: any[] = [];\r\n\r\n let minDate: Date = new Date(timestamps[0]);\r\n let maxDate: Date = new Date(timestamps[timestamps.length - 1]);\r\n let currentDate: Date = minDate;\r\n let currentTimestamp: number;\r\n let dayTotal: number = 0;\r\n while (currentDate <= maxDate) {\r\n //console.log(currentDate);\r\n currentTimestamp = currentDate.getTime();\r\n dayTotal = 0;\r\n for (let j = 0; j < points.length; ++j) {\r\n if (cummulative && points[j].getTimestamp() <= currentTimestamp) { dayTotal += points[j].getCount(); }\r\n else if (!cummulative && points[j].getTimestamp() == currentTimestamp) { dayTotal += points[j].getCount(); }\r\n }\r\n seriesData.push([currentTimestamp, dayTotal]);\r\n\r\n currentDate.setDate(currentDate.getDate() + 1);\r\n }\r\n\r\n //console.log(seriesData);\r\n\r\n return seriesData;\r\n}\r\n\r\nexport function CreateSeries_ActualDays(points: IGraphDataPoint[], cummulative: boolean = true, timestamps: number[] = []): any[] {\r\n\r\n //console.log(points);\r\n\r\n if (timestamps.length == 0) timestamps = FindUniqueTimestamps(points);\r\n\r\n let seriesData: any[] = [];\r\n let dayTotal: number = 0;\r\n for (let i = 0; i < timestamps.length; i++) {\r\n dayTotal = 0;\r\n for (let j = 0; j < points.length; ++j) {\r\n if (cummulative && points[j].getTimestamp() <= timestamps[i]) { dayTotal += points[j].getCount(); }\r\n else if (!cummulative && points[j].getTimestamp() == timestamps[i]) { dayTotal += points[j].getCount(); }\r\n }\r\n seriesData.push([timestamps[i], dayTotal]);\r\n }\r\n\r\n //console.log(seriesData);\r\n\r\n return seriesData;\r\n}\r\n","\r\n\r\nexport class FilterOption {\r\n Id: number;\r\n Name: string;\r\n\r\n constructor(id: number, name: string) { this.Id = id; this.Name = name; }\r\n}\r\n\r\nexport interface IFilter {\r\n triggerFilter(): void;\r\n}","// extracted by mini-css-extract-plugin","import { GetDateFromString } from \"../../../../../../shared/scripts/date-functions\";\r\nimport { VisitLookup } from \"./visits.lookup\";\r\n\r\nexport class Visit {\r\n Id: number;\r\n Name: string;\r\n OrderBy: number;\r\n\r\n constructor(id: number, name: string, ordering: number) { this.Id = id; this.Name = name; this.OrderBy = ordering; }\r\n}\r\n\r\n\r\nexport class VisitEvent {\r\n\r\n private static THIRTY_DAYS_MS: number = 2592000000;\r\n\r\n StudyId: number;\r\n SiteNumber: number;\r\n AppendixId: number;\r\n VisitId: number;\r\n VisitStatusId: number;\r\n DaysFromWindow: number;\r\n DaysFromWindowId: number;\r\n RequiredId: number;\r\n SubjectId: string;\r\n VisitDateStr: string;\r\n VisitLowerDateStr: string;\r\n VisitUpperDateStr: string;\r\n TargetDateStr: string;\r\n\r\n initialize(): void {\r\n let absDaysFromWindow = Math.abs(this.DaysFromWindow);\r\n if (absDaysFromWindow == 0) { this.DaysFromWindowId = 20; } //in window\r\n else if (absDaysFromWindow <= 3) { this.DaysFromWindowId = 21; } //1 to 3\r\n else if (absDaysFromWindow <= 7) { this.DaysFromWindowId = 22; } //4 to 7\r\n else if (absDaysFromWindow <= 14) { this.DaysFromWindowId = 23; } // 8 to 14\r\n else if (absDaysFromWindow >= 15) { this.DaysFromWindowId = 24; } //15+\r\n \r\n if (this.VisitStatusId == 2) { //not yet due\r\n let targetDate: Date = GetDateFromString(this.TargetDateStr, \"slash-month-day-year\");\r\n\r\n let timeDelta: number = Math.abs(targetDate.getTime() - Date.now());\r\n if (timeDelta <= VisitEvent.THIRTY_DAYS_MS) { this.VisitStatusId = 6; }\r\n else { this.VisitStatusId = 7; }\r\n }\r\n }\r\n\r\n}\r\n","// extracted by mini-css-extract-plugin","import { FormatNumberWithCommas } from \"../../../../shared/scripts/number-functions\";\r\nimport { TableColumnGroup, TableColumnVisibilityController } from \"../../../../shared/scripts/table-column-visibility\";\r\nimport { RenderDateMDY, RenderNullableNumberWithSeparators, RenderProgressBar } from \"../../../../shared/scripts/table-functions\";\r\nimport { IPrescreeningChart } from \"./prescreening.chart\";\r\nimport { PrescreeningEntry } from \"./prescreening.entities\";\r\n\r\nexport class PrescreeningTable {\r\n\r\n tableId: string = \"prescreening-table\";\r\n tableWrapperId: string = this.tableId + \"_wrapper\";\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n\r\n entries: PrescreeningEntry[];\r\n studyFilter: string;\r\n totalRowEntry: PrescreeningEntry;\r\n //chart: IPrescreeningChart;\r\n\r\n//constructor(entries: PrescreeningEntry[], visibleStudies: string[], chart: IPrescreeningChart) {\r\n constructor(entries: PrescreeningEntry[], visibleStudies: string[]) {\r\n\r\n this.entries = entries;\r\n this.studyFilter = visibleStudies.join(\")|(\");\r\n this.totalRowEntry = new PrescreeningEntry(); \r\n //this.chart = chart;\r\n\r\n var thisClass = this;\r\n\r\n let columns: any[] = [\r\n { data: \"PrimeContract\", title: \"Platform\", className: \"prime-contract text-center font-size12 nowrap\" },\r\n { data: { _: \"SiteNameDisplay\", sort: \"SiteName\" }, title: \"Site Name\", className: \"text-left font-size12\" },\r\n { data: { _: \"SiteNumberDisplay\", sort: \"SiteNumber\" }, title: \"Site Id\", className: \"site-id text-center font-size12 nowrap\" },\r\n { data: \"DateLatestPrescreening\", title: \"Latest Week
Prescreening\", className: \"dates text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateActivation\", title: \"Activation\", className: \"dates text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateFirstEnrollment\", title: \"First
Enrollment\", className: \"dates text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateLatestEnrollment\", title: \"Latest
Enrollment\", className: \"dates text-center font-size12 nowrap\", render: RenderDateMDY },\r\n ];\r\n\r\n this.columnSpecs.forEach((col: any) => {\r\n columns.push({ data: col.dataElement + \".\" + col.dataIndex, title: col.title, className: col.className, render: col.render });\r\n });\r\n\r\n this.dataTable = $('#prescreening-table').DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n search: false,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n language: {\r\n search: \"Site\"\r\n },\r\n fixedColumns: {\r\n leftColumns: 2\r\n },\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n footerCallback: function (row, data, start, end, display) {\r\n let api = this.api();\r\n\r\n thisClass.columnSpecs.forEach((col: any) => {\r\n if (col.type == \"Number\") {\r\n if (thisClass.totalRowEntry[col.dataElement][col.dataIndex] == \"-1\") { api.column(col.colIndex).footer().innerHTML = \"\"; }\r\n else { api.column(col.colIndex).footer().innerHTML = thisClass.totalRowEntry[col.dataElement][col.dataIndex].toLocaleString(\"en-US\"); }\r\n }\r\n else if (col.type == \"Percent\") {\r\n if (thisClass.totalRowEntry[col.dataElement][col.dataIndex] >= 0) {\r\n api.column(col.colIndex).footer().innerHTML = '
' + Math.round(thisClass.totalRowEntry[col.dataElement][col.dataIndex] * 100.0) + '%
'\r\n }\r\n }\r\n });\r\n },\r\n order: [[7, 'desc'], [1, 'asc']],\r\n data: entries\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .spacer\").addClass('col-12 col-md-3');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.tableId, (this.tableId + '-column-select'), [\r\n new TableColumnGroup(\"Site Number\", false, [], \"site-id\"),\r\n new TableColumnGroup(\"Dates\", true, [], \"dates\"),\r\n new TableColumnGroup(\"Overview\", true, [], \"overview\"),\r\n new TableColumnGroup(\"Prescreening Exclusion Criteria\", false, [], \"exclusions\"),\r\n new TableColumnGroup(\"Reasons Declined In-Person\", false, [], \"in-person\"),\r\n new TableColumnGroup(\"Race/Ethnicity Overview\", false, [], \"overview-race-ethnicity\"),\r\n new TableColumnGroup(\"Prescreening Demographics\", false, [], \"demo-prescreen\"),\r\n new TableColumnGroup(\"Consented Demographics\", false, [], \"demo-consented\"),\r\n new TableColumnGroup(\"Screen Fail Demographics\", false, [], \"demo-screenfail\"),\r\n new TableColumnGroup(\"Randomized Demographics\", false, [], \"demo-randomized\"),\r\n ]);\r\n\r\n $('#prescreening-table_filter input').off().on('keyup', function() {\r\n thisClass.refreshTable((this).value.trim());\r\n });\r\n\r\n //$('#prescreening-table').on('search.dt', (e, settings) => {\r\n //this.refreshTable();\r\n //this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n //});\r\n }\r\n\r\n setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.tableId + '-found-count').text(\"No Sites Found\"); break;\r\n case 1: $('#' + this.tableId + '-found-count').text(\"1 Site Found\"); break;\r\n default: $('#' + this.tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Sites Found\");\r\n }\r\n }\r\n\r\n updateData(visibleStudies: string[]): void {\r\n this.studyFilter = visibleStudies.join(\")|(\");\r\n this.refreshTable(\"\");\r\n }\r\n\r\n refreshTable(searchValue: string): void {\r\n\r\n this.dataTable.column(0).search(\"^(\" + this.studyFilter + \")$\", true, false).column(1).search(searchValue);\r\n\r\n let visibleSites: string[] = this.updateTotalRowEntry();\r\n\r\n //this.chart.refreshChart(visibleSites);\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n\r\n this.dataTable.draw();\r\n }\r\n\r\n private updateTotalRowEntry(): string[] {\r\n let data: PrescreeningEntry[] = this.dataTable.rows({ search: 'applied' }).data();\r\n this.totalRowEntry = new PrescreeningEntry();\r\n let visibleSites: string[] = [];\r\n for (let i = 0; i < data.length; ++i) {\r\n this.totalRowEntry.addPrescreeningEntry(data[i]);\r\n visibleSites.push(data[i].ChartSeriesName);\r\n }\r\n this.totalRowEntry.computePercentages();\r\n\r\n return visibleSites;\r\n }\r\n\r\n columnSpecs: any[] = [\r\n { colIndex: 7, dataElement: \"Counts\", dataIndex: 0, type: \"Number\", title: \"Total
Prescreened\", className: \"overview text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 8, dataElement: \"Exclusions\", dataIndex: 0, type: \"Number\", title: \"Met Any
Exclusion\", className: \"overview text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 9, dataElement: \"Exclusions\", dataIndex: 1, type: \"Number\", title: \"Active/Recent
COVID-19\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 10, dataElement: \"Exclusions\", dataIndex: 2, type: \"Number\", title: \"Illegal
Drug Use\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 11, dataElement: \"Exclusions\", dataIndex: 3, type: \"Number\", title: \"Contraindicated
Medication\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 12, dataElement: \"Exclusions\", dataIndex: 4, type: \"Number\", title: \"Pregnancy or
Breastfeeding\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 13, dataElement: \"Exclusions\", dataIndex: 5, type: \"Number\", title: \"Allergic to
Intervention\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 14, dataElement: \"Exclusions\", dataIndex: 6, type: \"Number\", title: \"Immunocompromised\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 15, dataElement: \"Exclusions\", dataIndex: 7, type: \"Number\", title: \"Recent
Paxlovid Use\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 16, dataElement: \"Exclusions\", dataIndex: 8, type: \"Number\", title: \"No Symptom
Cluster\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 17, dataElement: \"Exclusions\", dataIndex: 9, type: \"Number\", title: \"Medical
Condition\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 18, dataElement: \"Exclusions\", dataIndex: 10, type: \"Number\", title: \"Investigator
Decision\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 19, dataElement: \"Exclusions\", dataIndex: 11, type: \"Number\", title: \"Patient
Decision\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 20, dataElement: \"Exclusions\", dataIndex: 12, type: \"Number\", title: \"Recent
Trial\", className: \"exclusions yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 21, dataElement: \"Counts\", dataIndex: 1, type: \"Number\", title: \"No Phone
Interview\", className: \"overview text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 22, dataElement: \"Counts\", dataIndex: 2, type: \"Number\", title: \"Passed Phone
Interview\", className: \"overview text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 23, dataElement: \"Counts\", dataIndex: 3, type: \"Number\", title: \"Agreed to
In-Person\", className: \"overview text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 24, dataElement: \"NoInPerson\", dataIndex: 0, type: \"Number\", title: \"Declined
Randomization\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 25, dataElement: \"NoInPerson\", dataIndex: 1, type: \"Number\", title: \"Worried About
Risks\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 26, dataElement: \"NoInPerson\", dataIndex: 2, type: \"Number\", title: \"No Doctor
Approval\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 27, dataElement: \"NoInPerson\", dataIndex: 3, type: \"Number\", title: \"No Family
Approval\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 28, dataElement: \"NoInPerson\", dataIndex: 4, type: \"Number\", title: \"Too
Busy\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 29, dataElement: \"NoInPerson\", dataIndex: 5, type: \"Number\", title: \"Not Enough
Compensation\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 30, dataElement: \"NoInPerson\", dataIndex: 6, type: \"Number\", title: \"Declined
Clinic Visit\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 31, dataElement: \"NoInPerson\", dataIndex: 7, type: \"Number\", title: \"Privacy
Concerns\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 32, dataElement: \"NoInPerson\", dataIndex: 8, type: \"Number\", title: \"No Medical
Research Trust\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 33, dataElement: \"NoInPerson\", dataIndex: 9, type: \"Number\", title: \"Other\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 34, dataElement: \"NoInPerson\", dataIndex: 10, type: \"Number\", title: \"Unknown\", className: \"in-person yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 35, dataElement: \"Counts\", dataIndex: 5, type: \"Number\", title: \"Screened
(Post Consent)\", className: \"overview text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 36, dataElement: \"Counts\", dataIndex: 4, type: \"Number\", title: \"Randomized\", className: \"overview text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 37, dataElement: \"PercentNonWhite\", dataIndex: 0, type: \"Percent\", title: \"Prescreening
Non-White\", width: \"10%\", className: \"overview-race-ethnicity yellow text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 38, dataElement: \"PercentHispanic\", dataIndex: 0, type: \"Percent\", title: \"
Hispanic\", className: \"overview-race-ethnicity yellow text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 39, dataElement: \"PercentNonWhite\", dataIndex: 1, type: \"Percent\", title: \"Consented
Non-White\", width: \"10%\", className: \"overview-race-ethnicity text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 40, dataElement: \"PercentHispanic\", dataIndex: 1, type: \"Percent\", title: \"
Hispanic\", className: \"overview-race-ethnicity text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 41, dataElement: \"PercentNonWhiteOrHispanic\", dataIndex: 1, type: \"Percent\", title: \"
Hispanic or
Non-White\", className: \"overview-race-ethnicity text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 42, dataElement: \"PercentNonWhite\", dataIndex: 2, type: \"Percent\", title: \"Screen Fail
Non-White\", className: \"overview-race-ethnicity yellow text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 43, dataElement: \"PercentHispanic\", dataIndex: 2, type: \"Percent\", title: \"
Hispanic\", className: \"overview-race-ethnicity yellow text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 44, dataElement: \"PercentNonWhiteOrHispanic\", dataIndex: 2, type: \"Percent\", title: \"
Hispanic or
Non-White\", className: \"overview-race-ethnicity yellow text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 45, dataElement: \"PercentNonWhite\", dataIndex: 3, type: \"Percent\", title: \"Randomized
Non-White\", className: \"overview-race-ethnicity text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 46, dataElement: \"PercentHispanic\", dataIndex: 3, type: \"Percent\", title: \"
Hispanic\", className: \"overview-race-ethnicity text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 47, dataElement: \"PercentNonWhiteOrHispanic\", dataIndex: 3, type: \"Percent\", title: \"
Hispanic or
Non-White\", className: \"overview-race-ethnicity text-center font-size12 nowrap\", render: RenderProgressBar },\r\n { colIndex: 48, dataElement: \"AgesPrescreen\", dataIndex: 0, type: \"Number\", title: \"Prescreening
Age: 18-30\", className: \"demo-prescreen gray text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 49, dataElement: \"AgesPrescreen\", dataIndex: 1, type: \"Number\", title: \"
Age: 31-50\", className: \"demo-prescreen gray text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 50, dataElement: \"AgesPrescreen\", dataIndex: 2, type: \"Number\", title: \"
Age: 51-70\", className: \"demo-prescreen gray text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 51, dataElement: \"AgesPrescreen\", dataIndex: 3, type: \"Number\", title: \"
Age: 70+\", className: \"demo-prescreen gray text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 52, dataElement: \"RacesPrescreen\", dataIndex: 2, type: \"Number\", title: \"Prescreening
Race: AIAN\", className: \"demo-prescreen yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 53, dataElement: \"RacesPrescreen\", dataIndex: 3, type: \"Number\", title: \"
Race: Asian\", className: \"demo-prescreen yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 54, dataElement: \"RacesPrescreen\", dataIndex: 1, type: \"Number\", title: \"
Race: Black/AA\", className: \"demo-prescreen yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 55, dataElement: \"RacesPrescreen\", dataIndex: 4, type: \"Number\", title: \"
Race: NHOPI\", className: \"demo-prescreen yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 56, dataElement: \"RacesPrescreen\", dataIndex: 0, type: \"Number\", title: \"
Race: White\", className: \"demo-prescreen yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 57, dataElement: \"RacesPrescreen\", dataIndex: 6, type: \"Number\", title: \"
Race: Multi\", className: \"demo-prescreen yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 58, dataElement: \"EthnicitiesPrescreen\", dataIndex: 1, type: \"Number\", title: \"Prescreening
Hispanic\", className: \"demo-prescreen text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 59, dataElement: \"EthnicitiesPrescreen\", dataIndex: 0, type: \"Number\", title: \"
Not Hispanic\", className: \"demo-prescreen text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 60, dataElement: \"EthnicitiesPrescreen\", dataIndex: 2, type: \"Number\", title: \"
Eth: Unknown\", className: \"demo-prescreen text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 61, dataElement: \"RacesConsented\", dataIndex: 2, type: \"Number\", title: \"Consented
Race: AIAN\", className: \"demo-consented yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 62, dataElement: \"RacesConsented\", dataIndex: 3, type: \"Number\", title: \"
Race: Asian\", className: \"demo-consented yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 63, dataElement: \"RacesConsented\", dataIndex: 1, type: \"Number\", title: \"
Race: Black/AA\", className: \"demo-consented yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 64, dataElement: \"RacesConsented\", dataIndex: 4, type: \"Number\", title: \"
Race: NHOPI\", className: \"demo-consented yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 65, dataElement: \"RacesConsented\", dataIndex: 5, type: \"Number\", title: \"
Race: MENA\", className: \"demo-consented yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 66, dataElement: \"RacesConsented\", dataIndex: 0, type: \"Number\", title: \"
Race: White\", className: \"demo-consented yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 67, dataElement: \"RacesConsented\", dataIndex: 6, type: \"Number\", title: \"
Race: Multi\", className: \"demo-consented yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 68, dataElement: \"RacesConsented\", dataIndex: 7, type: \"Number\", title: \"
Race: Unknown\", className: \"demo-consented yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 69, dataElement: \"EthnicitiesConsented\", dataIndex: 1, type: \"Number\", title: \"Consented
Hispanic\", className: \"demo-consented text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 70, dataElement: \"EthnicitiesConsented\", dataIndex: 0, type: \"Number\", title: \"
Not Hispanic\", className: \"demo-consented text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 71, dataElement: \"EthnicitiesConsented\", dataIndex: 2, type: \"Number\", title: \"
Eth: Unknown\", className: \"demo-consented text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 72, dataElement: \"RacesScreenFail\", dataIndex: 2, type: \"Number\", title: \"Screen Fail
Race: AIAN\", className: \"demo-screenfail yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 73, dataElement: \"RacesScreenFail\", dataIndex: 3, type: \"Number\", title: \"
Race: Asian\", className: \"demo-screenfail yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 74, dataElement: \"RacesScreenFail\", dataIndex: 1, type: \"Number\", title: \"
Race: Black/AA\", className: \"demo-screenfail yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 75, dataElement: \"RacesScreenFail\", dataIndex: 4, type: \"Number\", title: \"
Race: NHOPI\", className: \"demo-screenfail yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 76, dataElement: \"RacesScreenFail\", dataIndex: 5, type: \"Number\", title: \"
Race: MENA\", className: \"demo-screenfail yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 77, dataElement: \"RacesScreenFail\", dataIndex: 0, type: \"Number\", title: \"
Race: White\", className: \"demo-screenfail yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 78, dataElement: \"RacesScreenFail\", dataIndex: 6, type: \"Number\", title: \"
Race: Multi\", className: \"demo-screenfail yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 79, dataElement: \"RacesScreenFail\", dataIndex: 7, type: \"Number\", title: \"
Race: Unknown\", className: \"demo-screenfail yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 80, dataElement: \"EthnicitiesScreenFail\", dataIndex: 1, type: \"Number\", title: \"Screen Fail
Hispanic\", className: \"demo-screenfail text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 81, dataElement: \"EthnicitiesScreenFail\", dataIndex: 0, type: \"Number\", title: \"
Not Hispanic\", className: \"demo-screenfail text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 82, dataElement: \"EthnicitiesScreenFail\", dataIndex: 2, type: \"Number\", title: \"
Eth: Unknown\", className: \"demo-screenfail text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 83, dataElement: \"RacesRandomized\", dataIndex: 2, type: \"Number\", title: \"Randomized
Race: AIAN\", className: \"demo-randomized yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 84, dataElement: \"RacesRandomized\", dataIndex: 3, type: \"Number\", title: \"
Race: Asian\", className: \"demo-randomized yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 85, dataElement: \"RacesRandomized\", dataIndex: 1, type: \"Number\", title: \"
Race: Black/AA\", className: \"demo-randomized yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 86, dataElement: \"RacesRandomized\", dataIndex: 4, type: \"Number\", title: \"
Race: NHOPI\", className: \"demo-randomized yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 87, dataElement: \"RacesRandomized\", dataIndex: 5, type: \"Number\", title: \"
Race: MENA\", className: \"demo-randomized yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 88, dataElement: \"RacesRandomized\", dataIndex: 0, type: \"Number\", title: \"
Race: White\", className: \"demo-randomized yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 89, dataElement: \"RacesRandomized\", dataIndex: 6, type: \"Number\", title: \"
Race: Multi\", className: \"demo-randomized yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 90, dataElement: \"RacesRandomized\", dataIndex: 7, type: \"Number\", title: \"
Race: Unknown\", className: \"demo-randomized yellow text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 91, dataElement: \"EthnicitiesRandomized\", dataIndex: 1, type: \"Number\", title: \"Randomized
Hispanic\", className: \"demo-randomized text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 92, dataElement: \"EthnicitiesRandomized\", dataIndex: 0, type: \"Number\", title: \"
Not Hispanic\", className: \"demo-randomized text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { colIndex: 93, dataElement: \"EthnicitiesRandomized\", dataIndex: 2, type: \"Number\", title: \"
Eth: Unknown\", className: \"demo-randomized text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators }\r\n ];\r\n}","import { SetActiveTab } from \"../../../../../../shared/scripts/tab-utilities\";\r\nimport { ISiteInfo } from \"../../../scripts/data-completeness.page\";\r\nimport { VisitsController } from \"../scripts/visits.controller\";\r\nimport { VisitsDialog } from \"../scripts/visits.dialog\";\r\nimport { VisitEvent } from \"../scripts/visits.entities\";\r\nimport { VisitLookup } from \"../scripts/visits.lookup\";\r\nimport { VisitSummarySeries } from \"./visits-summary.entities\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\n\r\n\r\nexport class VisitsSummaryView {\r\n\r\n visitSummaryChart: any;\r\n siteSummaryChart: any;\r\n visitCompletionChart: any;\r\n siteCompletionChart: any;\r\n\r\n selectedGrouping: string; //visit, site\r\n selectedData: string; //summary, completion\r\n\r\n constructor() {\r\n this.selectedGrouping = \"visit\";\r\n this.selectedData = \"status\";\r\n }\r\n\r\n UpdateData(visitSeries: VisitSummarySeries[], siteSeries: VisitSummarySeries[]): void {\r\n\r\n //console.log(visitSeries);\r\n //console.log(siteSeries);\r\n\r\n this.updateChart('visit-byvisit-summary-status-chart', visitSeries, [1, 3, 4, 5, 6, 7], \"Visits\");\r\n this.updateChart('visit-bysite-summary-status-chart', siteSeries, [1, 3, 4, 5, 6, 7], \"Sites\");\r\n this.updateChart('visit-byvisit-summary-completion-chart', visitSeries, [20, 21, 22, 23, 24], \"Visits\");\r\n this.updateChart('visit-bysite-summary-completion-chart', siteSeries, [20, 21, 22, 23, 24], \"Sites\");\r\n }\r\n\r\n private updateChart(chartId: string, data: VisitSummarySeries[], visitStatusIds: number[], axisLabel: string): void {\r\n\r\n let series: any[] = [];\r\n let categories: string[] = [];\r\n let visits: VisitEvent[] = [];\r\n\r\n visitStatusIds.forEach((statusId: number) => {\r\n\r\n let seriesData: any[] = new Array(data.length).fill(0);\r\n //let seriesData: number[] = new Array(data.length).fill(0);\r\n //let visitsData: any[] = [];\r\n for (let i = 0; i < data.length; ++i) {\r\n\r\n if (!categories.includes(data[i].name)) { categories.push(data[i].name); }\r\n //if (data[i].data.has(statusId)) {\r\n // seriesData[i] = data[i].data.get(statusId);\r\n // visits.push(...data[i].visits);\r\n //}\r\n if (data[i].visits.has(statusId)) {\r\n seriesData[i] = { y: data[i].visits.get(statusId).length, visits: data[i].visits.get(statusId) };\r\n //seriesData[i] = data[i].visits.get(statusId).length;\r\n //visitsData[i] = data[i].visits.get(statusId);\r\n }\r\n }\r\n\r\n series.push({ name: VisitLookup.GetVisitStatus(statusId), data: seriesData, colorIndex: VisitLookup.GetVisitColorIndex(statusId) });\r\n });\r\n\r\n this.initializeBarChart(chartId, axisLabel, categories, series);\r\n }\r\n\r\n private initializeBarChart(chartId: string, axisLabel: string, categories: string[], data: any[]): any {\r\n\r\n //console.log(chartId, axisLabel, categories, data);\r\n //console.log(categories.length, (40 * categories.length));\r\n //console.log(data);\r\n\r\n let chart: any = Highcharts.chart(chartId, {\r\n chart: {\r\n type: 'bar',\r\n styledMode: true,\r\n height: 100 + (45 * categories.length)\r\n },\r\n credits: { enabled: false },\r\n title: { text: null },\r\n xAxis: {\r\n type: 'category',\r\n categories: categories,\r\n min: 0,\r\n max: categories.length - 1,\r\n title: { text: axisLabel },\r\n tickInterval: 1,\r\n tickLength: 0,\r\n },\r\n yAxis: {\r\n min: 0,\r\n endOnTick: false, // helps with cropping data labels\r\n maxPadding: 0.2, // larger value has more space for data labels (default is 0.05)\r\n reversedStacks: false,\r\n title: { text: 'Visit Count' },\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.value, 0, '.', ',');\r\n }\r\n },\r\n stackLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.total, 0, '.', ',');\r\n },\r\n inside: false, //label issues\r\n verticalAlign: 'middle',\r\n }\r\n },\r\n legend: {\r\n // enabled: false,\r\n // reversed: false,\r\n // title: {\r\n // text: '
Visits',\r\n // },\r\n align: 'center',\r\n verticalAlign: 'top',\r\n },\r\n plotOptions: {\r\n series: {\r\n stacking: 'normal',\r\n point: {\r\n events: {\r\n click: function () {\r\n VisitsDialog.ShowDialog(this.options.visits);\r\n }\r\n }\r\n },\r\n },\r\n bar: {\r\n pointWidth: 25,\r\n pointPadding: 0.1,\r\n //groupPadding: 0.2,\r\n borderWidth: 0,\r\n dataLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n if (this.y == 0) return null;\r\n else {\r\n let label: string = Highcharts.numberFormat(this.y, 0, '.', ',');\r\n if (this.point.shapeArgs.height <= (label.length * 10)) return null;\r\n else return label;\r\n }\r\n },\r\n verticalAlign: 'middle',\r\n y: 2\r\n },\r\n },\r\n },\r\n series: data\r\n });\r\n\r\n return chart;\r\n }\r\n\r\n\r\n SetView(newView: string): void {\r\n\r\n if (!newView.startsWith(\"visit-summary\")) { return; }\r\n else if (newView != \"visit-summary\") { //new within-summary view\r\n if (newView.includes(\"byvisit\")) { this.selectedGrouping = \"visit\"; }\r\n else if (newView.includes(\"bysite\")) { this.selectedGrouping = \"site\"; }\r\n\r\n if (newView.includes(\"bystatus\")) { this.selectedData = \"status\"; }\r\n else if (newView.includes(\"bycompletion\")) { this.selectedData = \"completion\"; } \r\n }\r\n\r\n if (this.selectedGrouping == \"visit\" && this.selectedData == \"status\") { SetActiveTab(\"visit-summary-tabs\", \"content-summary-visit-byvisit-status\"); }\r\n else if (this.selectedGrouping == \"site\" && this.selectedData == \"status\") { SetActiveTab(\"visit-summary-tabs\", \"content-summary-visit-bysite-status\"); }\r\n else if (this.selectedGrouping == \"visit\" && this.selectedData == \"completion\") { SetActiveTab(\"visit-summary-tabs\", \"content-summary-visit-byvisit-completion\"); }\r\n else if (this.selectedGrouping == \"site\" && this.selectedData == \"completion\") { SetActiveTab(\"visit-summary-tabs\", \"content-summary-visit-bysite-completion\"); }\r\n\r\n }\r\n\r\n}\r\n\r\n","// extracted by mini-css-extract-plugin","import { Appendix } from \"../../entities/scripts/appendix\";\r\nimport { Site } from \"../../entities/scripts/site\";\r\nimport { Study } from \"../../entities/scripts/study\";\r\nimport { DoArraysOverlap } from \"../array-functions\";\r\n\r\nexport interface IStudyAppendixSiteFilterParent {\r\n FilterUpdated(studyIds: number[], appendixIds: number[], siteIds: number[]);\r\n}\r\n\r\nexport class StudyAppendixSiteFilterSection {\r\n\r\n parent: IStudyAppendixSiteFilterParent;\r\n\r\n studies: Study[] = [];\r\n appendices: Appendix[] = [];\r\n sites: Site[] = [];\r\n\r\n allStudyIds: number[] = []; activeStudyIds: number[] = []; selectedStudyIds: number[] = [];\r\n allAppendixIds: number[] = []; activeAppendixIds: number[] = []; selectedAppendixIds: number[] = [];\r\n allSiteIds: number[] = []; activeSiteIds: number[] = []; selectedSiteIds: number[] = [];\r\n\r\n studySelectId: string;\r\n appendixSelectId: string;\r\n siteSelectId: string;\r\n\r\n constructor(studySelectId: string, appendixSelectId: string, siteSelectId: string, studies: Study[], appendices: Appendix[], sites: Site[], parent: IStudyAppendixSiteFilterParent) {\r\n\r\n this.parent = parent;\r\n\r\n this.studySelectId = studySelectId;\r\n this.appendixSelectId = appendixSelectId;\r\n this.siteSelectId = siteSelectId;\r\n\r\n this.studies = studies;\r\n this.appendices = appendices;\r\n this.sites = sites;\r\n\r\n if (this.studySelectId != undefined) {\r\n Study.SortByName(this.studies);\r\n this.allStudyIds = this.studies.map((s: Study) => s.Id);\r\n }\r\n if (this.appendixSelectId != undefined) {\r\n Appendix.SortByName(this.appendices);\r\n this.allAppendixIds = this.appendices.map((a: Appendix) => a.Id);\r\n }\r\n if (this.siteSelectId != undefined) this.allSiteIds = this.sites.map((s: Site) => s.Id);\r\n\r\n this.initializeFilters();\r\n this.resetFilters();\r\n }\r\n\r\n initializeFilters(): void {\r\n if (this.studySelectId != undefined) this.setupDropdown(\"study\", this.studySelectId, \"Platforms\");\r\n if (this.appendixSelectId != undefined) this.setupDropdown(\"appendix\", this.appendixSelectId, \"Trials\");\r\n if (this.siteSelectId != undefined) this.setupDropdown(\"site\", this.siteSelectId, \"Sites\");\r\n }\r\n\r\n setupDropdown(type: string, elementId: string, optionName: string): void {\r\n\r\n $(elementId).selectpicker({\r\n dropupAuto: false,\r\n selectedTextFormat: \"count\",\r\n\r\n countSelectedText: (numSelected, numTotal) => {\r\n\r\n let activeCount: number = 0;\r\n if (type == 'study') activeCount = this.activeStudyIds.length;\r\n else if (type == 'appendix') activeCount = this.activeAppendixIds.length;\r\n else if (type == 'site') activeCount = this.activeSiteIds.length;\r\n\r\n if (numSelected == numTotal) {\r\n return \"All \" + optionName + \" (n = \" + numSelected + \")\";\r\n }\r\n else {\r\n return numSelected + \" of \" + activeCount + \" \" + optionName + \" Selected\";\r\n }\r\n }\r\n });\r\n $(elementId).selectpicker(\"refresh\");\r\n\r\n $(elementId).on('changed.bs.select', (e, clickedIndex, isSelected, previousValue) => {\r\n let values: string[] = ($(elementId).val());\r\n this.filterDropdownOptions(type, values.map(i => Number(i)));\r\n $(elementId).selectpicker(\"refresh\");\r\n this.filterUpdated(this.selectedStudyIds, this.selectedAppendixIds, this.selectedSiteIds);\r\n });\r\n }\r\n\r\n setDropdownOptions(type: string, elementId: string, selectedElementIds: number[], activeElementIds: number[], allElements: any[], optionParameterValue: string, optionParameterName: string): void {\r\n\r\n $(elementId).empty();\r\n\r\n allElements?.forEach((element: any) => {\r\n let selected: boolean = false;\r\n let disabled: boolean = false;\r\n\r\n if (selectedElementIds.includes(element[optionParameterValue])) {\r\n selected = true;\r\n }\r\n\r\n if (!activeElementIds.includes(element[optionParameterValue])) {\r\n disabled = true;\r\n selected = false;\r\n }\r\n\r\n if (!disabled) {\r\n let option: any = new Option(element[optionParameterName], element[optionParameterValue], false, selected);\r\n //option.disabled = disabled;\r\n $(elementId).append(option);\r\n }\r\n });\r\n $(elementId).selectpicker(\"refresh\");\r\n }\r\n\r\n resetFilters(): void {\r\n this.selectedStudyIds = this.activeStudyIds = this.allStudyIds;\r\n this.selectedAppendixIds = this.activeAppendixIds = this.allAppendixIds;\r\n this.selectedSiteIds = this.activeSiteIds = this.allSiteIds;\r\n\r\n this.setDropdownOptions(\"study\", this.studySelectId, this.selectedStudyIds, this.allStudyIds, this.studies, \"Id\", \"Name\");\r\n this.filterDropdownOptions(\"study\", this.selectedStudyIds);\r\n\r\n this.filterUpdated(this.activeStudyIds, this.activeAppendixIds, this.activeSiteIds);\r\n }\r\n\r\n filterDropdownOptions(type: string, currentValues: number[]) {\r\n\r\n //console.log(type, currentValues);\r\n\r\n if (type == 'study') {\r\n this.selectedStudyIds = currentValues;\r\n this.activeAppendixIds = this.appendices.map((a: Appendix) => {\r\n if (this.selectedStudyIds.includes(a.StudyId)) return a.Id;\r\n }).filter((id: number) => id != undefined);\r\n this.activeSiteIds = this.sites?.map((s: Site) => {\r\n if (DoArraysOverlap(this.selectedStudyIds, s.StudyIds)) return s.Id;\r\n }).filter((id: number) => id != undefined);\r\n\r\n //cohort selection activates all hubs/sites\r\n this.selectedAppendixIds = this.activeAppendixIds;\r\n this.selectedSiteIds = this.activeSiteIds;\r\n }\r\n else if (type == 'appendix') {\r\n this.selectedAppendixIds = currentValues;\r\n //console.log(this.selectedAppendixIds);\r\n //sites not tied to appendices -- only to study\r\n //this.activeSiteIds = this.sites.map((s: Site) => {\r\n // if (this.selectedHubIds.includes(s.HubId + \"\")) return s.Id;\r\n //}).filter((id: string) => id != undefined);\r\n\r\n //this.selectedSiteIds = this.activeSiteIds;\r\n }\r\n else if (type == 'site') {\r\n //no filtering \"left\" to study or appendix based on selected sites\r\n this.selectedSiteIds = currentValues;\r\n }\r\n\r\n if (type != 'study') this.setDropdownOptions(\"study\", this.studySelectId, this.selectedStudyIds, this.allStudyIds, this.studies, \"Id\", \"Name\");\r\n if (type != 'appendix') this.setDropdownOptions(\"appendix\", this.appendixSelectId, this.activeAppendixIds, this.activeAppendixIds, this.appendices, \"Id\", \"Name\");\r\n if (type != 'site') this.setDropdownOptions(\"site\", this.siteSelectId, this.activeSiteIds, this.activeSiteIds, this.sites, \"Id\", \"Name\");\r\n\r\n }\r\n\r\n filterUpdated(studyIds: number[], appendixIds: number[], siteIds: number[]): void {\r\n\r\n //add \"0\" entry to signify all selected\r\n if (this.selectedStudyIds.length == this.activeStudyIds.length) studyIds = [0].concat(studyIds);\r\n if (this.selectedAppendixIds.length == this.activeAppendixIds.length) appendixIds = [0].concat(appendixIds);\r\n if (this.selectedSiteIds?.length == this.activeSiteIds?.length) siteIds = [0].concat(siteIds);\r\n\r\n this.parent.FilterUpdated(studyIds, appendixIds, siteIds);\r\n }\r\n\r\n refreshFilters(): void {\r\n this.filterUpdated(this.selectedStudyIds, this.selectedAppendixIds, this.selectedSiteIds);\r\n }\r\n}","import { VisitEvent } from \"../scripts/visits.entities\";\r\nimport { VisitLookup } from \"../scripts/visits.lookup\";\r\n\r\n\r\n\r\nexport class VisitSummarySeries {\r\n name: string;\r\n //data: Map; //captures both status and completion timing; ID of visit status or timing completion\r\n type: string;\r\n typeId: number; //visitId, siteNumber, etc.\r\n sortValue: number;\r\n visits: Map;\r\n\r\n constructor(name: string, type: string, typeId: number) {\r\n this.name = name;\r\n //this.data = new Map(); \r\n this.type = type;\r\n this.typeId = typeId;\r\n this.sortValue = (type == \"visit\") ? VisitLookup.GetVisitOrdering(typeId) : 0;\r\n this.visits = new Map();\r\n }\r\n\r\n addVisitEvent(event: VisitEvent): void {\r\n\r\n //Visit status\r\n let count: number;\r\n let visitArray: VisitEvent[];\r\n //if (this.data.has(event.VisitStatusId)) { count = this.data.get(event.VisitStatusId); }\r\n //else { count = 0; }\r\n //this.data.set(event.VisitStatusId, ++count);\r\n if (this.visits.has(event.VisitStatusId)) { visitArray = this.visits.get(event.VisitStatusId); }\r\n else { visitArray = []; }\r\n visitArray.push(event);\r\n this.visits.set(event.VisitStatusId, visitArray);\r\n\r\n\r\n if (this.type == \"site\") {\r\n this.sortValue += 1;\r\n }\r\n\r\n if (event.VisitStatusId == 1) { //complete\r\n //if (this.data.has(event.DaysFromWindowId)) { count = this.data.get(event.DaysFromWindowId); }\r\n //else { count = 0; }\r\n //this.data.set(event.DaysFromWindowId, ++count); \r\n if (this.visits.has(event.DaysFromWindowId)) { visitArray = this.visits.get(event.DaysFromWindowId); }\r\n else { visitArray = []; }\r\n visitArray.push(event);\r\n this.visits.set(event.DaysFromWindowId, visitArray); \r\n } \r\n }\r\n}","import { FormatNumberWithCommas } from \"../../../../../shared/scripts/number-functions\";\r\nimport { TableColumnGroup, TableColumnVisibilityController } from \"../../../../../shared/scripts/table-column-visibility\";\r\nimport { DestroyTable, RenderDateMDY, RenderDateYMD, RenderDays } from \"../../../../../shared/scripts/table-functions\";\r\nimport { SiteMilestone } from \"../../../sites/site-activation/scripts/site-activation.entities\";\r\nimport { Contract, ContractHistory } from \"../../scripts/contracts.entities\";\r\n\r\nexport class ContractDetailsTab {\r\n\r\n tableId: string = \"contracts-current-table\";\r\n tableWrapperId: string = this.tableId + \"_wrapper\";\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n\r\n modalHistoryData: ContractHistory[];\r\n modalHistoryTableId: string = \"contract-history-table\";\r\n modalHistoryTableWrapper: string = this.modalHistoryTableId + \"_wrapper\";\r\n\r\n modalMilestoneData: SiteMilestone[];\r\n modalMilestoneTableId: string = \"contract-milestone-table\";\r\n modalMilestoneTableWrapper: string = this.modalMilestoneTableId + \"_wrapper\";\r\n\r\n constructor(contracts: Contract[]) {\r\n\r\n this.initializeModals();\r\n\r\n let columns: any[] = [\r\n { data: \"ContractType\", title: \"Contract Type\", className: \"category text-left font-size12 nowrap\" },\r\n { data: { _: \"ContractNameDisplay\", sort: \"ContractName\" }, title: \"Contract Name\", className: \"text-left font-size12\" },\r\n { data: \"ContractNumber\", title: \"Contract Number\", className: \"contract-number text-left font-size12 nowrap\" },\r\n { data: \"PrimeContract\", title: \"Prime Contract\", className: \"prime-contract text-left font-size12 nowrap\" },\r\n { data: \"StatusGroup\", title: \"Status Group\", className: \"status-group text-left font-size12 nowrap\" },\r\n { data: { _: \"StatusDisplay\", sort: \"Status\" }, title: \"Contract Status\", className: \"status link text-left font-size12 nowrap\" },\r\n { data: \"DateContractAdded\", title: \"Contract Added\", className: \"added-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateLastStatusStart\", title: \"Last Status Change\", className: \"last-status-change-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateContractStart\", title: \"Contract Started\", className: \"start-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateContractEnd\", title: \"Contract Ended\", className: \"end-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateExecuted\", title: \"Date Executed\", className: \"executed-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DaysToExecution\", title: \"Time to Execution\", className: \"days-to-execution text-center font-size12 nowrap\", render: RenderDays },\r\n { data: { _: \"SiteNumberDisplay\", sort: \"SiteNumber\" }, title: \"Site Id\", className: \"site-id text-center font-size12 nowrap\" },\r\n { data: { _: \"MilestoneDisplay\", sort: \"MilestoneDisplay\" }, title: \"Latest Site Milestone\", className: \"milestone link text-left font-size12 nowrap\" },\r\n ];\r\n\r\n this.dataTable = $('#' + this.tableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: true,\r\n pagingType: 'simple',\r\n pageLength: 50,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 2\r\n },\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n order: [[0, 'asc'], [1, 'asc'], [6, 'asc']],\r\n data: contracts\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .spacer\").addClass('col-12 col-md-3');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.tableId, (this.tableId + '-column-select'), [\r\n new TableColumnGroup(\"Contract Number\", false, [], \"contract-number\"),\r\n new TableColumnGroup(\"Prime Contract\", true, [], \"prime-contract\"),\r\n new TableColumnGroup(\"Status Group\", false, [], \"status-group\"),\r\n new TableColumnGroup(\"Status\", true, [], \"status\"),\r\n new TableColumnGroup(\"Date Added\", true, [], \"added-date\"),\r\n new TableColumnGroup(\"Date Last Status Changed\", true, [], \"last-status-change-date\"),\r\n new TableColumnGroup(\"Date Contract Started\", false, [], \"start-date\"),\r\n new TableColumnGroup(\"Date Contract Ended\", false, [], \"end-date\"),\r\n new TableColumnGroup(\"Date Executed\", false, [], \"executed-date\"),\r\n new TableColumnGroup(\"Time to Execution\", false, [], \"days-to-execution\"),\r\n new TableColumnGroup(\"Site Id\", false, [], \"site-id\"), \r\n new TableColumnGroup(\"Site Milestones\", true, [], \"milestones\"), \r\n ]);\r\n\r\n $('#' + this.tableId).on('search.dt', (e, settings) => {\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n this.setCountFoundLabel(contracts.length);\r\n }\r\n\r\n setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.tableId + '-found-count').text(\"No Contracts Found\"); break;\r\n case 1: $('#' + this.tableId + '-found-count').text(\"1 Contract Found\"); break;\r\n default: $('#' + this.tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Contracts Found\");\r\n }\r\n }\r\n\r\n refresh(): void {\r\n this.dataTable.columns.adjust();\r\n this.tableColumnController.refresh();\r\n }\r\n\r\n updateContent(matchingContracts: Contract[]): void {\r\n\r\n //console.log(matchingContracts);\r\n\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(matchingContracts).draw();\r\n this.setCountFoundLabel(matchingContracts.length);\r\n }\r\n\r\n initializeModals(): void {\r\n $('#contract-history-modal').on('shown.bs.modal', () => {\r\n this.initializeHistoryModalTable();\r\n $('#' + this.modalHistoryTableId).DataTable().columns.adjust().draw();\r\n });\r\n\r\n $('#contract-history-modal').on('hidden.bs.modal', () => { DestroyTable('#' + this.modalHistoryTableId); });\r\n\r\n $('#contract-milestone-modal').on('shown.bs.modal', () => {\r\n this.initializeMilestoneModalTable();\r\n $('#' + this.modalMilestoneTableId).DataTable().columns.adjust().draw();\r\n });\r\n\r\n $('#contract-milestone-modal').on('hidden.bs.modal', () => { DestroyTable('#' + this.modalMilestoneTableId); });\r\n }\r\n\r\n showModal(contract: Contract, view: string): void {\r\n let modalId: string = \"\";\r\n\r\n if (view == \"history\") {\r\n this.modalHistoryData = contract.History;\r\n modalId = \"contract-history-modal\";\r\n }\r\n else if (view == \"milestone\") {\r\n this.modalMilestoneData = contract.Milestones;\r\n modalId = \"contract-milestone-modal\";\r\n }\r\n\r\n var modal = $('#' + modalId);\r\n modal.find('#modal-title').html(contract.ContractName);\r\n modal.modal('show');\r\n }\r\n\r\n initializeHistoryModalTable(): void {\r\n $('#' + this.modalHistoryTableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\">>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n search: false,\r\n scrollX: true,\r\n scrollY: '60vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 2\r\n },\r\n columns: [\r\n { data: \"ContractType\", title: \"Contract Type\", className: \"category text-left font-size12 nowrap\" },\r\n { data: { _: \"ContractNameDisplay\", sort: \"ContractName\" }, title: \"Contract Name\", className: \"text-left font-size12\" },\r\n { data: \"ContractNumber\", title: \"Contract Number\", className: \"contract-number text-left font-size12 nowrap\" },\r\n { data: \"PrimeContract\", title: \"Prime Contract\", className: \"prime-contract text-left font-size12 nowrap\" },\r\n { data: \"StatusGroup\", title: \"Status Group\", className: \"status-group text-left font-size12 nowrap\" },\r\n { data: \"Status\", title: \"Status\", className: \"status text-left font-size12 nowrap\" },\r\n { data: \"DateStatusStart\", title: \"Status Start Date\", className: \"start-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"DateStatusEnd\", title: \"Status End Date\", className: \"end-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: \"Duration\", title: \"Duration\", className: \"duration text-center font-size12 nowrap\", render: RenderDays },\r\n { data: \"SortDate\", title: \"SortOrder\", visible: false },\r\n ],\r\n order: [[9, 'asc']],\r\n data: this.modalHistoryData\r\n });\r\n\r\n $(\"#\" + this.modalHistoryTableWrapper + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.modalHistoryTableWrapper + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.modalHistoryTableWrapper + \" .column-select\").empty().html('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.modalHistoryTableId, (this.modalHistoryTableId + '-column-select'), [\r\n new TableColumnGroup(\"Contract Number\", false, [], \"contract-number\"),\r\n new TableColumnGroup(\"Prime Contract\", false, [], \"prime-contract\"),\r\n new TableColumnGroup(\"Status Group\", false, [], \"status-group\"),\r\n new TableColumnGroup(\"Status\", true, [], \"status\"),\r\n new TableColumnGroup(\"Start Date\", true, [], \"start-date\"),\r\n new TableColumnGroup(\"End Date\", true, [], \"end-date\"),\r\n new TableColumnGroup(\"Duration\", true, [], \"duration\"),\r\n ]);\r\n }\r\n\r\n initializeMilestoneModalTable(): void {\r\n $('#' + this.modalMilestoneTableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\">>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n search: false,\r\n scrollX: true,\r\n scrollY: '60vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 1\r\n },\r\n columns: [\r\n { data: { _: \"SiteNameDisplay\", sort: \"SiteName\" }, title: \"Site Name\", className: \"text-left font-size12\" },\r\n { data: { _: \"SiteNumberDisplay\", sort: \"SiteNumber\" }, title: \"Site Id\", className: \"site-id text-center font-size12 nowrap\" },\r\n { data: \"PrimeContract\", title: \"Prime Contract\", className: \"prime-contract text-center font-size12 nowrap\" },\r\n { data: \"Milestone\", title: \"Milestone\", className: \"milestone text-left font-size12 nowrap\" },\r\n { data: \"DateCompletion\", title: \"Completion Date\", className: \"completion-date text-center font-size12 nowrap\", render: RenderDateMDY },\r\n { data: { _: \"CommentDisplay\", sort: \"Comment\" }, title: \"Comments\", className: \"comments text-left font-size12\" },\r\n { data: \"OrderBy\", title: \"OrderBy\", visible: false },\r\n ],\r\n order: [[1, 'asc'], [6, 'asc']],\r\n data: this.modalMilestoneData\r\n });\r\n\r\n $(\"#\" + this.modalMilestoneTableWrapper + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.modalMilestoneTableWrapper + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.modalMilestoneTableWrapper + \" .column-select\").empty().html('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.modalMilestoneTableId, (this.modalMilestoneTableId + '-column-select'), [\r\n new TableColumnGroup(\"Site Id\", true, [], \"site-id\"),\r\n new TableColumnGroup(\"Prime Contract\", true, [], \"prime-contract\"),\r\n new TableColumnGroup(\"Milestone\", true, [], \"milestone\"),\r\n new TableColumnGroup(\"Completion Date\", true, [], \"completion-date\"),\r\n new TableColumnGroup(\"Comments\", true, [], \"comments\"),\r\n ]);\r\n }\r\n\r\n clearSearchBar(): void {\r\n this.dataTable.search('').draw();\r\n }\r\n}","// extracted by mini-css-extract-plugin","import { FormatNumberWithCommas } from \"../../../../shared/scripts/number-functions\";\r\nimport { AggregatedParticipants } from \"./enrollment.entities\";\r\n\r\n\r\n\r\nexport class ProgressBarSection {\r\n\r\n constructor() { }\r\n\r\n updateProgressBarData(aggregatedParticipants: AggregatedParticipants): void {\r\n\r\n this.updateRecoverCohortData(aggregatedParticipants.RecoverCohort, aggregatedParticipants.Count);\r\n this.updateRaceData(aggregatedParticipants.Race, aggregatedParticipants.Count);\r\n this.updateHispanicData(aggregatedParticipants.Hispanic, aggregatedParticipants.Count);\r\n this.updateNonWhiteHispanicData(aggregatedParticipants.NonWhiteHispanic, aggregatedParticipants.Count);\r\n this.updateSexData(aggregatedParticipants.Sex, aggregatedParticipants.Count);\r\n this.updateAgeData(aggregatedParticipants.Age, aggregatedParticipants.Count);\r\n //this.updateSymptomClusterExIntData(aggregatedParticipants.ClusterExInt, aggregatedParticipants.Count);\r\n //this.updateSymptomClusterCogDysData(aggregatedParticipants.ClusterCogn, aggregatedParticipants.Count);\r\n //this.updateSymptomClusterAutonomicData(aggregatedParticipants.ClusterAuto, aggregatedParticipants.Count);\r\n }\r\n\r\n private setProgressBarValue(label: string, valueElementId: string, labelElementId: string, percent: number, count: number): void {\r\n //both title attributes need to be updated for tooltip to refresh\r\n let tooltipText: string = label + \" (\" + Math.round(percent) + \"%; n=\" + FormatNumberWithCommas(String(count)) + \")\";\r\n $(valueElementId).css('width', percent + '%').attr('aria-valuenow', percent).attr('data-title', tooltipText).attr('data-original-title', tooltipText);\r\n $(labelElementId).css('width', percent + '%').attr('aria-valuenow', percent);\r\n $(valueElementId).tooltip();\r\n\r\n if ((label == \"Unknown\" && percent < 12) || (label != \"Unknown\" && percent < 10)) {\r\n //$(labelElementId).addClass('hide');\r\n $(labelElementId).text(\"\");\r\n $(valueElementId).text(\"\");\r\n\r\n }\r\n else {\r\n $(labelElementId).text(label);\r\n //$(labelElementId).removeClass('hide');\r\n $(valueElementId).text(Math.round(percent) + \"%\");\r\n }\r\n }\r\n\r\n private updateRecoverCohortData(data: number[], totalCount: number): void {\r\n\r\n if (totalCount == 0) { this.hideProgressBar('progressbar-recovercohort'); $('#progressbar-message-recovercohort').show(); return; }\r\n else { $('#progressbar-message-recovercohort').hide(); this.showProgressBar('progressbar-recovercohort'); }\r\n\r\n this.setProgressBarValue('Yes', '#value-recovercohort-yes', '#label-recovercohort-yes', ((data[1] / totalCount) * 100), data[1]);\r\n this.setProgressBarValue('No', '#value-recovercohort-no', '#label-recovercohort-no', ((data[0] / totalCount) * 100), data[0]);\r\n this.setProgressBarValue('Unknown', '#value-recovercohort-unknown', '#label-recovercohort-unknown', ((data[2] / totalCount) * 100), data[2]);\r\n }\r\n\r\n private updateRaceData(data: number[], totalCount: number): void {\r\n if (totalCount == 0) { this.hideProgressBar('progressbar-race'); $('#progressbar-message-race').show(); return; }\r\n else { $('#progressbar-message-race').hide(); this.showProgressBar('progressbar-race'); }\r\n\r\n this.setProgressBarValue('AIAN', '#value-race-aian', '#label-race-aian', (data[1] / totalCount) * 100, data[1]);\r\n this.setProgressBarValue('Asian', '#value-race-asian', '#label-race-asian', (data[2] / totalCount) * 100, data[2]);\r\n this.setProgressBarValue('Black', '#value-race-black', '#label-race-black', (data[3] / totalCount) * 100, data[3]);\r\n this.setProgressBarValue('MENA', '#value-race-mena', '#label-race-mena', (data[4] / totalCount) * 100, data[4]);\r\n this.setProgressBarValue('NHPI', '#value-race-nhpi', '#label-race-nhpi', (data[5] / totalCount) * 100, data[5]);\r\n this.setProgressBarValue('White', '#value-race-white', '#label-race-white', (data[6] / totalCount) * 100, data[6]);\r\n this.setProgressBarValue('Multiple', '#value-race-multiple', '#label-race-multiple', (data[0] / totalCount) * 100, data[0]);\r\n this.setProgressBarValue('Unknown', '#value-race-unknown', '#label-race-unknown', (data[7] / totalCount) * 100, data[7]);\r\n }\r\n\r\n private updateHispanicData(data: number[], totalCount: number): void {\r\n\r\n if (totalCount == 0) { this.hideProgressBar('progressbar-hispanic'); $('#progressbar-message-hispanic').show(); return; }\r\n else { $('#progressbar-message-hispanic').hide(); this.showProgressBar('progressbar-hispanic'); }\r\n\r\n this.setProgressBarValue('Hispanic', '#value-hispanic-yes', '#label-hispanic-yes', ((data[1] / totalCount) * 100), data[1]);\r\n this.setProgressBarValue('Not Hispanic', '#value-hispanic-no', '#label-hispanic-no', ((data[0] / totalCount) * 100), data[0]);\r\n this.setProgressBarValue('Unknown', '#value-hispanic-unknown', '#label-hispanic-unknown', ((data[2] / totalCount) * 100), data[2]);\r\n }\r\n\r\n private updateNonWhiteHispanicData(data: number[], totalCount: number): void {\r\n\r\n if (totalCount == 0) { this.hideProgressBar('progressbar-nonwhitehispanic'); $('#progressbar-message-nonwhitehispanic').show(); return; }\r\n else { $('#progressbar-message-nonwhitehispanic').hide(); this.showProgressBar('progressbar-nonwhitehispanic'); }\r\n\r\n this.setProgressBarValue('Yes', '#value-nonwhitehispanic-yes', '#label-nonwhitehispanic-yes', ((data[1] / totalCount) * 100), data[1]);\r\n this.setProgressBarValue('No', '#value-nonwhitehispanic-no', '#label-nonwhitehispanic-no', ((data[0] / totalCount) * 100), data[0]);\r\n this.setProgressBarValue('Unknown', '#value-nonwhitehispanic-unknown', '#label-nonwhitehispanic-unknown', ((data[2] / totalCount) * 100), data[2]);\r\n }\r\n\r\n private updateSexData(data: number[], totalCount: number): void {\r\n if (totalCount == 0) { this.hideProgressBar('progressbar-sex'); $('#progressbar-message-sex').show(); return; }\r\n else { this.showProgressBar('progressbar-sex'); $('#progressbar-message-sex').hide(); }\r\n\r\n this.setProgressBarValue('Female', '#value-sex-female', '#label-sex-female', ((data[0] / totalCount) * 100), data[0]);\r\n this.setProgressBarValue('Male', '#value-sex-male', '#label-sex-male', ((data[1] / totalCount) * 100), data[1]);\r\n this.setProgressBarValue('Intersex', '#value-sex-intersex', '#label-sex-intersex', ((data[2] / totalCount) * 100), data[2]);\r\n this.setProgressBarValue('Prefer Not To Answer', '#value-sex-notanswered', '#label-sex-notanswered', ((data[3] / totalCount) * 100), data[3]);\r\n this.setProgressBarValue('Unknown', '#value-sex-unknown', '#label-sex-unknown', ((data[4] / totalCount) * 100), data[4]);\r\n }\r\n\r\n private updateAgeData(data: number[], totalCount: number): void {\r\n if (totalCount == 0) { this.hideProgressBar('progressbar-age'); $('#progressbar-message-age').show(); return; }\r\n else { $('#progressbar-message-age').hide(); this.showProgressBar('progressbar-age'); }\r\n\r\n this.setProgressBarValue('18-45', '#value-age-18_45', '#label-age-18_45', (data[0] / totalCount) * 100, data[0]);\r\n this.setProgressBarValue('46-65', '#value-age-46_65', '#label-age-46_65', (data[1] / totalCount) * 100, data[1]);\r\n //this.setProgressBarValue('51-70', '#value-age-51_70', '#label-age-51_70', (data[2] / totalCount) * 100, data[2]);\r\n this.setProgressBarValue('>65', '#value-age-more65', '#label-age-more65', (data[2] / totalCount) * 100, data[2]);\r\n this.setProgressBarValue('Unknown', '#value-age-unknown', '#label-age-unknown', (data[3] / totalCount) * 100, data[3]);\r\n }\r\n\r\n //private updateSymptomClusterExIntData(data: number[], totalCount: number): void {\r\n\r\n // if (totalCount == 0) { this.hideProgressBar('progressbar-exint'); $('#progressbar-message-exint').show(); return; }\r\n // else { $('#progressbar-message-exint').hide(); this.showProgressBar('progressbar-exint'); }\r\n\r\n // this.setProgressBarValue('Yes', '#value-exint-yes', '#label-exint-yes', ((data[1] / totalCount) * 100), data[1]);\r\n // this.setProgressBarValue('No', '#value-exint-no', '#label-exint-no', ((data[0] / totalCount) * 100), data[0]);\r\n // this.setProgressBarValue('Unknown', '#value-exint-unknown', '#label-exint-unknown', ((data[2] / totalCount) * 100), data[2]);\r\n //}\r\n\r\n //private updateSymptomClusterCogDysData(data: number[], totalCount: number): void {\r\n\r\n // if (totalCount == 0) { this.hideProgressBar('progressbar-cogdys'); $('#progressbar-message-cogdys').show(); return; }\r\n // else { $('#progressbar-message-cogdys').hide(); this.showProgressBar('progressbar-cogdys'); }\r\n\r\n // this.setProgressBarValue('Yes', '#value-cogdys-yes', '#label-cogdys-yes', ((data[1] / totalCount) * 100), data[1]);\r\n // this.setProgressBarValue('No', '#value-cogdys-no', '#label-cogdys-no', ((data[0] / totalCount) * 100), data[0]);\r\n // this.setProgressBarValue('Unknown', '#value-cogdys-unknown', '#label-cogdys-unknown', ((data[2] / totalCount) * 100), data[2]);\r\n //}\r\n\r\n //private updateSymptomClusterAutonomicData(data: number[], totalCount: number): void {\r\n\r\n // if (totalCount == 0) { this.hideProgressBar('progressbar-autonomic'); $('#progressbar-message-autonomic').show(); return; }\r\n // else { $('#progressbar-message-autonomic').hide(); this.showProgressBar('progressbar-autonomic'); }\r\n\r\n // this.setProgressBarValue('Yes', '#value-autonomic-yes', '#label-autonomic-yes', ((data[1] / totalCount) * 100), data[1]);\r\n // this.setProgressBarValue('No', '#value-autonomic-no', '#label-autonomic-no', ((data[0] / totalCount) * 100), data[0]);\r\n // this.setProgressBarValue('Unknown', '#value-autonomic-unknown', '#label-autonomic-unknown', ((data[2] / totalCount) * 100), data[2]);\r\n //}\r\n\r\n private hideProgressBar(id: string): void {\r\n $('#' + id).removeClass('d-flex');\r\n $('#' + id).addClass('d-none');\r\n\r\n }\r\n private showProgressBar(id: string): void {\r\n $('#' + id).removeClass('d-none');\r\n $('#' + id).addClass('d-flex');\r\n }\r\n}\r\n\r\n","\r\n\r\nexport class Outcome {\r\n Id: number;\r\n Name: string;\r\n OrderBy: number;\r\n\r\n constructor(id: number, name: string, ordering: number) { this.Id = id; this.Name = name; this.OrderBy = ordering; }\r\n}\r\n\r\nexport class OutcomeEvent {\r\n\r\n StudyId: number;\r\n SiteNumber: number;\r\n AppendixId: number;\r\n OutcomeId: number;\r\n OutcomeStatusId: number;\r\n ReasonId: number;\r\n SubjectId: string;\r\n\r\n initialize(): void {\r\n\r\n //increment ReasonIds to be able to overload status logic\r\n if (this.ReasonId != undefined) { this.ReasonId += 100; }\r\n\r\n //if (this.SubjectId == \"VI0680001\") console.log(this);\r\n\r\n }\r\n}\r\n","import { Appendix } from \"../../../../../../shared/entities/scripts/appendix\";\r\nimport { Study } from \"../../../../../../shared/entities/scripts/study\";\r\nimport { FormatDate, GetDateFromString } from \"../../../../../../shared/scripts/date-functions\";\r\nimport { FormatNumberWithCommas } from \"../../../../../../shared/scripts/number-functions\";\r\nimport { RenderDateMDY } from \"../../../../../../shared/scripts/table-functions\";\r\nimport { SiteInfo } from \"../../../../sites/shared/sites.entities\";\r\nimport { OutcomeEvent } from \"./outcomes.entities\";\r\nimport { OutcomesLookup } from \"./outcomes.lookup\";\r\n\r\nexport class OutcomesDialog {\r\n static table: any = undefined;\r\n\r\n static Initialize() {\r\n OutcomesDialog.table = $('#outcomes-details-modal #dialog-details-table').DataTable({\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n searching: false,\r\n columns: [\r\n { data: \"Study\", title: \"Platform\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Appendix\", title: \"Trial\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"SiteNumber\", title: \"Site\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Outcome\", title: \"Outcome\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"OutcomeStatus\", title: \"Status\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Subject\", title: \"Participant\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Reason\", title: \"Reason Not Available\", className: \"text-left font-size12 nowrap\" },\r\n ]\r\n });\r\n }\r\n\r\n public static ShowDialog(outcomes: OutcomeEvent[]): void {\r\n //console.log(\"show\", outcomes);\r\n let showReasonsColumn: boolean = false;\r\n let tableRows: OutcomeDialogRow[] = outcomes.map((v: OutcomeEvent) => {\r\n if (!showReasonsColumn && v.OutcomeStatusId == 4) { showReasonsColumn = true; } //only when Not Available\r\n return new OutcomeDialogRow(v)\r\n });\r\n\r\n if (OutcomesDialog.table == undefined) { OutcomesDialog.Initialize(); }\r\n\r\n OutcomesDialog.table.column(6).visible(showReasonsColumn);\r\n\r\n OutcomesDialog.table.clear();\r\n OutcomesDialog.table.rows.add(tableRows).draw();\r\n\r\n $('#outcomes-details-modal').on('shown.bs.modal', () => {\r\n OutcomesDialog.table.columns.adjust();\r\n $('#outcomes-details-modal .dataTables_scrollBody').scrollTop(0);\r\n $('#outcomes-details-modal #modal-title').text(\"Number of Outcome Events = \" + FormatNumberWithCommas(outcomes.length + \"\"));\r\n //$('#visits-details-modal-count').text(visits.length);\r\n });\r\n\r\n $('#outcomes-details-modal').modal('show');\r\n\r\n }\r\n}\r\n\r\n\r\nexport class OutcomeDialogRow {\r\n Study: string;\r\n Appendix: string;\r\n SiteNumber: string;\r\n Subject: string;\r\n Outcome: string;\r\n //OutcomeOrdering: number;\r\n OutcomeStatus: string;\r\n Reason: string;\r\n\r\n constructor(event: OutcomeEvent) {\r\n this.Study = Study.GetStudyName(event.StudyId);\r\n this.Appendix = Appendix.GetAppendixName(event.AppendixId);\r\n this.SiteNumber = SiteInfo.FormatSiteNumber(event.SiteNumber);\r\n this.Subject = event.SubjectId;\r\n this.Outcome = OutcomesLookup.GetOutcome(event.OutcomeId);\r\n //this.VisitOrdering = VisitLookup.GetVisitOrdering(event.VisitId);\r\n this.OutcomeStatus = OutcomesLookup.GetOutcomeStatus(event.OutcomeStatusId);\r\n this.Reason = OutcomesLookup.GetReasonMissing(event.ReasonId);\r\n }\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { Appendix } from \"../../../../../../shared/entities/scripts/appendix\";\r\nimport { Study } from \"../../../../../../shared/entities/scripts/study\";\r\nimport { FilterOption } from \"../../../../../../shared/scripts/filtering/filtering.entities\";\r\nimport { SetActiveTab } from \"../../../../../../shared/scripts/tab-utilities\";\r\nimport { SiteInfo } from \"../../../../sites/shared/sites.entities\";\r\nimport { ISiteInfo } from \"../../../scripts/data-completeness.page\";\r\nimport { OutcomesDatatableView } from \"../outcomes-datatable-view/outcomes-datatable-view\";\r\nimport { OutcomesDatatableEntry } from \"../outcomes-datatable-view/outcomes-datatable.entities\";\r\nimport { OutcomesSummaryView } from \"../outcomes-summary-view/outcomes-summary-view\";\r\nimport { OutcomesSummarySeries } from \"../outcomes-summary-view/outcomes-summary.entities\";\r\nimport { Outcome, OutcomeEvent } from \"./outcomes.entities\";\r\nimport { OutcomesLookup } from \"./outcomes.lookup\";\r\n\r\n\r\nexport class OutcomesController {\r\n\r\n siteInfo: ISiteInfo;\r\n\r\n allOutcomes: Outcome[] = [];\r\n allOutcomeEvents: OutcomeEvent[] = [];\r\n\r\n summaryView: OutcomesSummaryView;\r\n datatableView: OutcomesDatatableView;\r\n\r\n constructor(siteInfo: ISiteInfo, outcomesTimingJson: any) {\r\n\r\n this.siteInfo = siteInfo;\r\n\r\n let foundOutcomeIds: number[] = [];\r\n this.allOutcomeEvents = plainToClass(OutcomeEvent, outcomesTimingJson);\r\n this.allOutcomeEvents.forEach((o: OutcomeEvent) => {\r\n o.initialize()\r\n\r\n if (!foundOutcomeIds.includes(o.OutcomeId)) {\r\n this.allOutcomes.push(new Outcome(o.OutcomeId, OutcomesLookup.GetOutcome(o.OutcomeId), OutcomesLookup.GetOutcomeOrdering(o.OutcomeId)));\r\n foundOutcomeIds.push(o.OutcomeId);\r\n }\r\n\r\n });\r\n this.allOutcomes.sort((a: Outcome, b: Outcome) => a.OrderBy - b.OrderBy);\r\n\r\n this.summaryView = new OutcomesSummaryView();\r\n this.datatableView = new OutcomesDatatableView();\r\n\r\n //console.log(this.allOutcomes);\r\n //console.log(this.allOutcomeEvents);\r\n }\r\n\r\n FilterUpdated(studyIds: number[], appendixIds: number[], siteIds: number[], outcomeIds: number[]): void {\r\n\r\n let byOutcomeSummaryMap: Map = new Map();\r\n let bySiteSummaryMap: Map = new Map();\r\n\r\n let noGroupingDataMap: Map = new Map();\r\n let groupingByOutcomeDataMap: Map = new Map();\r\n let groupingBySiteDataMap: Map = new Map();\r\n\r\n //for loop instead of forEach for performance given there could be tens of thousands of visit events across all trials\r\n for (let i = 0; i < this.allOutcomeEvents.length; ++i) {\r\n let outcome: OutcomeEvent = this.allOutcomeEvents[i];\r\n\r\n if (!studyIds.includes(outcome.StudyId) || !appendixIds.includes(outcome.AppendixId) ||\r\n !outcomeIds.includes(outcome.OutcomeId) || !siteIds.includes(outcome.SiteNumber)) continue;\r\n\r\n //Summary View Data\r\n let outcomeSeries: OutcomesSummarySeries;\r\n if (byOutcomeSummaryMap.has(outcome.OutcomeId)) { outcomeSeries = byOutcomeSummaryMap.get(outcome.OutcomeId); }\r\n else { outcomeSeries = new OutcomesSummarySeries(OutcomesLookup.GetOutcome(outcome.OutcomeId), \"outcome\", outcome.OutcomeId); }\r\n outcomeSeries.addOutcomeEvent(outcome);\r\n byOutcomeSummaryMap.set(outcome.OutcomeId, outcomeSeries);\r\n\r\n let siteSeries: OutcomesSummarySeries;\r\n if (bySiteSummaryMap.has(outcome.SiteNumber)) { siteSeries = bySiteSummaryMap.get(outcome.SiteNumber); }\r\n else { siteSeries = new OutcomesSummarySeries(this.siteInfo.GetSiteName(outcome.SiteNumber), \"site\", outcome.SiteNumber); }\r\n siteSeries.addOutcomeEvent(outcome);\r\n bySiteSummaryMap.set(outcome.SiteNumber, siteSeries);\r\n\r\n //Datatable View Data\r\n let dataHash: string;\r\n\r\n let noGroupingData: OutcomesDatatableEntry;\r\n dataHash = OutcomesDatatableEntry.getHash(\"none\", outcome);\r\n if (noGroupingDataMap.has(dataHash)) { noGroupingData = noGroupingDataMap.get(dataHash); }\r\n else { noGroupingData = new OutcomesDatatableEntry(Study.GetStudyName(outcome.StudyId), Appendix.GetAppendixName(outcome.AppendixId), this.siteInfo.GetSiteName(outcome.SiteNumber), SiteInfo.FormatSiteNumber(outcome.SiteNumber), OutcomesLookup.GetOutcome(outcome.OutcomeId)); }\r\n noGroupingData.addOutcomeEvent(outcome);\r\n noGroupingDataMap.set(dataHash, noGroupingData);\r\n\r\n let outcomeGroupingData: OutcomesDatatableEntry;\r\n dataHash = OutcomesDatatableEntry.getHash(\"by-outcome\", outcome);\r\n if (groupingByOutcomeDataMap.has(dataHash)) { outcomeGroupingData = groupingByOutcomeDataMap.get(dataHash); }\r\n else { outcomeGroupingData = new OutcomesDatatableEntry(Study.GetStudyName(outcome.StudyId), Appendix.GetAppendixName(outcome.AppendixId), \"All Sites\", \"All Sites\", OutcomesLookup.GetOutcome(outcome.OutcomeId)); }\r\n outcomeGroupingData.addOutcomeEvent(outcome);\r\n groupingByOutcomeDataMap.set(dataHash, outcomeGroupingData);\r\n\r\n let siteGroupingData: OutcomesDatatableEntry;\r\n dataHash = OutcomesDatatableEntry.getHash(\"by-site\", outcome);\r\n if (groupingBySiteDataMap.has(dataHash)) { siteGroupingData = groupingBySiteDataMap.get(dataHash); }\r\n else { siteGroupingData = new OutcomesDatatableEntry(Study.GetStudyName(outcome.StudyId), Appendix.GetAppendixName(outcome.AppendixId), this.siteInfo.GetSiteName(outcome.SiteNumber), SiteInfo.FormatSiteNumber(outcome.SiteNumber), \"All Outcomes (n=\" + Appendix.GetOutcomeCount(outcome.AppendixId) + \")\"); }\r\n siteGroupingData.addOutcomeEvent(outcome);\r\n groupingBySiteDataMap.set(dataHash, siteGroupingData);\r\n }\r\n\r\n let seriesByVisit: OutcomesSummarySeries[] = [...byOutcomeSummaryMap.values()];\r\n seriesByVisit.sort((a: OutcomesSummarySeries, b: OutcomesSummarySeries) => a.sortValue - b.sortValue);\r\n\r\n let seriesBySite: OutcomesSummarySeries[] = [...bySiteSummaryMap.values()];\r\n seriesBySite.sort((a: OutcomesSummarySeries, b: OutcomesSummarySeries) => b.sortValue - a.sortValue);\r\n\r\n this.summaryView.UpdateData(seriesByVisit, seriesBySite);\r\n\r\n\r\n let tableEntriesNone: OutcomesDatatableEntry[] = [...noGroupingDataMap.values()];\r\n for (let i: number = 0; i < tableEntriesNone.length; ++i) { tableEntriesNone[i].initialize(); }\r\n //sort it somehow\r\n\r\n let tableEntriesByOutcome: OutcomesDatatableEntry[] = [...groupingByOutcomeDataMap.values()];\r\n for (let i: number = 0; i < tableEntriesByOutcome.length; ++i) { tableEntriesByOutcome[i].initialize(); }\r\n\r\n let tableEntriesBySite: OutcomesDatatableEntry[] = [...groupingBySiteDataMap.values()];\r\n for (let i: number = 0; i < tableEntriesBySite.length; ++i) { tableEntriesBySite[i].initialize(); }\r\n\r\n //console.log(noGroupingDataMap);\r\n\r\n this.datatableView.UpdateData(tableEntriesNone, tableEntriesByOutcome, tableEntriesBySite);\r\n }\r\n\r\n setView(newView: string): void {\r\n\r\n //console.log(\"outcomes.setView\", newView);\r\n\r\n if (newView == \"view-summary\") { SetActiveTab(\"outcomes-tabs\", \"outcomes-summary-content\"); this.summaryView.SetView(\"outcomes-summary\"); }\r\n else if (newView == \"view-datatable\") { SetActiveTab(\"outcomes-tabs\", \"outcomes-datatable-content\"); this.datatableView.SetView(\"outcomes-datatable-none\"); }\r\n else {\r\n this.summaryView.SetView(newView);\r\n this.datatableView.SetView(newView);\r\n }\r\n }\r\n\r\n exportTable(): void {\r\n this.datatableView.exportTable();\r\n }\r\n}","import { SumArrayElements } from \"../../../../shared/scripts/array-functions\";\r\nimport { ChartDataPoint } from \"./enrollment.chart-controller\";\r\nimport { AggregatedParticipants, Participant } from \"./enrollment.entities\";\r\nimport { IEnrollmentPageData } from \"./enrollment.page\";\r\n\r\n\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\n//require('highcharts/highcharts-more')(Highcharts);\r\nrequire('highcharts/modules/solid-gauge')(Highcharts);\r\n\r\nexport class EnrollmentGauges {\r\n\r\n parent: IEnrollmentPageData;\r\n\r\n exIntGauge: any;\r\n exIntChart: any;\r\n cogDysGauge: any;\r\n cogDysChart: any;\r\n autoGauge: any;\r\n autoChart: any;\r\n\r\n constructor(parent: IEnrollmentPageData) {\r\n this.parent = parent;\r\n\r\n let cardOptions: any[] = [{ buttonId: '#toggle-sxcluster-exint', cardId: '#card-sxcluster-exint' },\r\n { buttonId: '#toggle-sxcluster-cogdys', cardId: '#card-sxcluster-cogdys' },\r\n { buttonId: '#toggle-sxcluster-auto', cardId: '#card-sxcluster-auto' }];\r\n\r\n cardOptions.forEach((option: any) => {\r\n $(option.buttonId).on('click', (e) => {\r\n e.preventDefault();\r\n $(option.cardId).toggleClass('flipped');\r\n if ($(option.cardId).hasClass('flipped')) {\r\n $(option.buttonId + \" .line-chart-icon\").removeClass('fa-chart-line');\r\n $(option.buttonId + \" .line-chart-icon\").addClass('fa-bars-progress');\r\n }\r\n else {\r\n $(option.buttonId + \" .line-chart-icon\").removeClass('fa-bars-progress');\r\n $(option.buttonId + \" .line-chart-icon\").addClass('fa-chart-line'); \r\n }\r\n })\r\n });\r\n\r\n this.exIntGauge = this.initializeGauge(\"sxcluster-exint-gauge\", 0, 300, \"Participants\");\r\n this.cogDysGauge = this.initializeGauge(\"sxcluster-cogdys-gauge\", 0, 300, \"Participants\");\r\n this.autoGauge = this.initializeGauge(\"sxcluster-auto-gauge\", 0, 300, \"Participants\");\r\n\r\n this.exIntChart = this.initializeChart(\"sxcluster-exint-chart\");\r\n this.cogDysChart = this.initializeChart(\"sxcluster-cogdys-chart\");\r\n this.autoChart = this.initializeChart(\"sxcluster-auto-chart\");\r\n }\r\n\r\n UpdateData(aggregatedParticipants: AggregatedParticipants): void {\r\n //this.updateSymptomClusterGauges(aggregatedParticipants.ClusterExInt[1], aggregatedParticipants.ClusterCogn[1], aggregatedParticipants.ClusterAuto[1]);\r\n\r\n this.exIntGauge.series[0].points[0].update(aggregatedParticipants.ClusterExInt[1]);\r\n this.cogDysGauge.series[0].points[0].update(aggregatedParticipants.ClusterCogn[1]);\r\n this.autoGauge.series[0].points[0].update(aggregatedParticipants.ClusterAuto[1]);\r\n //console.log(this.exIntGauge);\r\n\r\n this.exIntChart.series[0].setData(this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.VitSymExInt == 1)));\r\n this.exIntChart.redraw();\r\n\r\n this.cogDysChart.series[0].setData(this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.VitSymCogDys == 1)));\r\n this.cogDysChart.redraw();\r\n\r\n this.autoChart.series[0].setData(this.createChartData(this.parent.selectedParticipants.filter((p: Participant) => p.VitSymAutoDys == 1)));\r\n this.autoChart.redraw();\r\n }\r\n\r\n private initializeGauge(id: string, current: number, target: number, totalLabel: string): any {\r\n\r\n let gauge: any = Highcharts.chart(id, {\r\n chart: {\r\n type: 'solidgauge'\r\n },\r\n title: null,\r\n credits: { enabled: false },\r\n pane: {\r\n center: ['50%', '90%'],\r\n size: '170%',\r\n startAngle: -90,\r\n endAngle: 90,\r\n background: {\r\n backgroundColor: '#ffc757',\r\n innerRadius: '70%',\r\n outerRadius: '100%',\r\n shape: 'arc'\r\n }\r\n },\r\n exporting: {\r\n enabled: false\r\n },\r\n tooltip: {\r\n enabled: false\r\n },\r\n yAxis: {\r\n lineWidth: 0,\r\n tickWidth: 0,\r\n minorTickInterval: null,\r\n tickAmount: 2,\r\n tickPositions: [0, target],\r\n labels: {\r\n y: 20,\r\n distance: -18,\r\n style: {\r\n fontSize: '14px'\r\n }\r\n },\r\n min: 0,\r\n max: target,\r\n title: {\r\n text: null,\r\n //y: -70\r\n }\r\n },\r\n plotOptions: {\r\n solidgauge: {\r\n dataLabels: {\r\n y: 50,\r\n borderWidth: 0,\r\n useHTML: true\r\n }\r\n }\r\n },\r\n series: [{\r\n name: 'Participants',\r\n data: [{\r\n y: current,\r\n innerRadius: '70%'\r\n }],\r\n dataLabels: {\r\n formatter: function () {\r\n let label: string = '
';\r\n label += '' + Highcharts.numberFormat(this.y, 0, '', ',') + '
';\r\n label += 'Participants
';\r\n label += '(' + Highcharts.numberFormat((this.y / 300.0) * 100, 0, '', ',') + '%)';\r\n label += '
';\r\n return label;\r\n }\r\n\r\n //format:\r\n // '
' +\r\n // '{point.y:,.0f}
' +\r\n // '' + totalLabel + '' +\r\n // '
',\r\n },\r\n tooltip: {\r\n valueSuffix: ' Total ' + totalLabel\r\n }\r\n }]\r\n });\r\n return gauge;\r\n }\r\n\r\n private initializeChart(id: string): any {\r\n\r\n let chart = Highcharts.chart(id, {\r\n chart: {\r\n backgroundColor: 'white',\r\n },\r\n credits: { enabled: false },\r\n title: { text: null },\r\n xAxis: {\r\n type: 'datetime',\r\n //max: maxDate,\r\n showLastLabel: true,\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.dateFormat('%e %b %Y', this.value);\r\n }\r\n }\r\n },\r\n yAxis: {\r\n //max: maxEnrollment,\r\n title: {\r\n text: 'Participants'\r\n },\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.value, 0, '', ',');\r\n }\r\n },\r\n plotLines: [{\r\n value: 300,\r\n dashStyle: 'longdash',\r\n label: {\r\n text: 'Target',\r\n y: -5\r\n },\r\n zIndex: 5\r\n }],\r\n max: 350\r\n },\r\n plotOptions: {\r\n line: {\r\n stickyTracking: false,\r\n findNearestPointBy: 'xy',\r\n marker: {\r\n enabled: false\r\n }\r\n },\r\n },\r\n tooltip: {\r\n xDateFormat: '%e %b %Y',\r\n shared: false\r\n },\r\n legend: {\r\n enabled: false,\r\n //symbolWidth: 0\r\n },\r\n series: [{ name: \"Actual\", color: \"#152850\", data:[] }] //RECOVER dark blue\r\n });\r\n\r\n return chart;\r\n }\r\n\r\n private createChartData(participants: Participant[]): ChartDataPoint[] {\r\n\r\n let data: ChartDataPoint[] = [];\r\n\r\n if (participants.length == 0) return data;\r\n\r\n let dayMonthDictionary: Map = new Map(); //value: array of counts by study (to facilitate rate computations)\r\n\r\n participants.forEach((p: Participant) => {\r\n let studyCounts: number[] = [];\r\n let dateOfInterest: number = p.DateRandomized.getTime();\r\n\r\n if (dateOfInterest > 0) {\r\n if (dayMonthDictionary.has(dateOfInterest)) {\r\n studyCounts = dayMonthDictionary.get(dateOfInterest);\r\n }\r\n if (studyCounts[p.StudyId] == undefined) studyCounts[p.StudyId] = 0;\r\n studyCounts[p.StudyId] += 1;\r\n dayMonthDictionary.set(dateOfInterest, studyCounts);\r\n }\r\n });\r\n\r\n //add up cummulative enrollment over time\r\n let lastDate: number = -1;\r\n let countToDate: number = 0;\r\n dayMonthDictionary.forEach((studyCounts: number[], date: number) => {\r\n countToDate += SumArrayElements(studyCounts);\r\n\r\n if (date != lastDate) {\r\n data.push(new ChartDataPoint(date, countToDate));\r\n lastDate = date;\r\n }\r\n });\r\n\r\n return data;\r\n }\r\n\r\n}","//import { UserExperience } from \"../../../auth/pages/profile/scripts/expertise.objects\";\r\nimport { FormatStringByWordLength, DoArraysOverlap, Split, Join } from \"../../../shared/scripts/array-functions\";\r\n\r\nexport class UserDirectoryEntity {\r\n\r\n FirstName: string;\r\n LastName: string;\r\n ProjectRole: string;\r\n Email: string;\r\n Institution: string = \"\";\r\n Affiliations: string = \"None Selected\";\r\n StudyAccess: string = \"None Selected\";\r\n\r\n DisplayName: string;\r\n SortName: string;\r\n DisplayEmail: string = \"\";\r\n DisplayAffiliation: string = \"\";\r\n DisplayStudy: string = \"\";\r\n DisplayInstitution: string = \"\";\r\n DisplayRole: string = \"\";\r\n AffiliationList: string[];\r\n StudyList: string[];\r\n HiddenFilter: string = \"\";\r\n\r\n constructor() { }\r\n\r\n initialize(): void {\r\n\r\n //console.log(this);\r\n\r\n this.DisplayName = this.FirstName + \" \" + this.LastName;\r\n this.DisplayName = FormatStringByWordLength(this.DisplayName, 4);\r\n this.SortName = this.LastName + \" \" + this.FirstName;\r\n\r\n if (this.Email?.length > 0) {\r\n //this.DisplayEmail = \"\" + this.Email.toLowerCase() + \"\";\r\n this.DisplayEmail = \"\" + this.Email.toLowerCase() + \"\";\r\n }\r\n\r\n\r\n //if (this.Affiliation == \"SAG\") { this.Affiliation = \"Scientific Advisory Group (SAG)\"; }\r\n\r\n this.AffiliationList = Split(this.Affiliations, \"|\");\r\n this.DisplayAffiliation = Join(this.AffiliationList, \", \", true, true);\r\n\r\n this.StudyList = Split(this.StudyAccess, \"|\");\r\n this.DisplayStudy = Join(this.StudyList, \", \", true, true);\r\n\r\n this.DisplayInstitution = FormatStringByWordLength(this.Institution, 4);\r\n this.DisplayRole = FormatStringByWordLength(this.ProjectRole, 4);\r\n }\r\n\r\n //matchesFilter(affiliation: any, institute: any, country: any, basicScienceExpertise: any, diagnosticExpertise: any, helminthExpertise: any, protozoanExpertise: any, bacteriaExpertise: any): boolean {\r\n matchesFilter(affiliation: any, study: any, institute: any): boolean {\r\n\r\n //console.log(affiliation, this.Affiliation);\r\n\r\n if (!DoArraysOverlap(affiliation, this.AffiliationList)) { return false; }\r\n if (!DoArraysOverlap(study, this.StudyList)) { return false; }\r\n if (!DoArraysOverlap(institute, this.Institution)) { return false; }\r\n\r\n return true;\r\n }\r\n}","\r\n\r\n\r\nexport class ContractsLookup {\r\n\r\n //static GetPrimeContract(id: number): string {\r\n // switch (id) {\r\n // case (1): return \"Infrastructure\";\r\n // case (2): return \"VITAL\";\r\n // case (3): return \"NEURO\";\r\n // case (4): return \"SLEEP\";\r\n // case (5): return \"AUTONOMIC\";\r\n // case (6): return \"ENERGIZE\";\r\n // default: return \"Unknown\";\r\n // }\r\n //}\r\n\r\n static GetContractType(id: number): string {\r\n switch (id) {\r\n case (1): return \"CDA\";\r\n case (2): return \"DUA\";\r\n case (3): return \"FUA\";\r\n case (4): return \"Funding Letter\";\r\n case (5): return \"LOI\";\r\n case (6): return \"License Agreement\";\r\n case (7): return \"MOU\";\r\n case (8): return \"MTA\";\r\n case (9): return \"Master Agreement\";\r\n case (10): return \"Member Agreement\";\r\n case (11): return \"Other\";\r\n case (12): return \"Site Agreement\";\r\n case (13): return \"Site Master Agreement\";\r\n case (14): return \"Support Services/Subcontract\";\r\n case (15): return \"Term Letter\";\r\n case (16): return \"Protocol Working Group\";\r\n case (17): return \"Study Coordinator Group\";\r\n case (18): return \"Site Study Contracts\";\r\n case (19): return \"Pre-Screening Agreement\";\r\n case (20): return \"Study Addendum - Site\";\r\n case (21): return \"Protocol Working Groups\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetContractStatus(id: number): string {\r\n switch (id) {\r\n case (1): return \"DCRI e-IAF\";\r\n case (2): return \"Notified\";\r\n case (3): return \"In Draft-DCRI Contracts\";\r\n case (4): return \"In Neg - Risk Management\";\r\n case (5): return \"In Neg-DCRI\";\r\n case (6): return \"In Neg-DCRI Contracts\";\r\n case (7): return \"In Neg-Duke\";\r\n case (8): return \"In Neg-Ext Pty\";\r\n case (9): return \"In Neg-ORA\";\r\n case (10): return \"In Neg-ORC\";\r\n case (11): return \"In Neg-Procurement\";\r\n case (12): return \"In Neg-Sponsor\";\r\n case (13): return \"On Hold\";\r\n case (14): return \"On Hold-Cart\";\r\n case (15): return \"On Hold-Ext Pty\";\r\n case (16): return \"On Hold-K complete\";\r\n case (17): return \"On Hold-PL Attention Needed\";\r\n case (18): return \"On Hold-Pending Budget/Scope\";\r\n case (19): return \"On Hold-Pending SPA PA\";\r\n case (20): return \"In Sig - ORA\";\r\n case (21): return \"In Sig - ORC\";\r\n case (22): return \"In Sig - Procurement\";\r\n case (23): return \"In Sig-CM\";\r\n case (24): return \"In Sig-DCRI Contracts\";\r\n case (25): return \"In Sig-Ext Pty\";\r\n case (26): return \"Signed K Recd-DCRI Contracts\";\r\n case (27): return \"Signed K Recd-Duke\";\r\n case (28): return \"Signed K Recd-Ext. Party\";\r\n case (29): return \"Signed K Recd-ORA\";\r\n case (30): return \"Signed K Recd-ORC\";\r\n case (31): return \"Signed K Recd-Procurement\";\r\n case (32): return \"Executed-Contracts\";\r\n case (33): return \"Executed-Ext Pty\";\r\n case (34): return \"Executed-ORA\";\r\n case (35): return \"Executed-ORC\";\r\n case (36): return \"Executed-Procurement\";\r\n case (37): return \"Executed-Sponsor\";\r\n case (38): return \"Executed\";\r\n case (39): return \"Waiver Received\";\r\n case (40): return \"Withdrawn\";\r\n case (41): return \"In Draft-Ext Pty\";\r\n case (42): return \"Requested/Pending\";\r\n case (43): return \"In Sig - PI\";\r\n case (44): return \"Executed-PI\";\r\n case (45): return \"In Sig-Sponsor\";\r\n case (46): return \"In Sig-DCRI\";\r\n case (47): return \"Executed-CFO\";\r\n case (48): return \"CM Peer Review\";\r\n case (49): return \"On Hold-Pending GPS\";\r\n case (50): return \"Signed K Recd-Sponsor\";\r\n case (51): return \"On Hold-Pending Site IRB\";\r\n case (52): return \"Unknown\";\r\n case (53): return \"Signed K Recd-CFO\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetContractStatusGroup(id: number): string {\r\n switch (id) {\r\n case (1): return \"Requested\";\r\n case (2): return \"Draft\";\r\n case (3): return \"Negotiation\";\r\n case (4): return \"On Hold\";\r\n case (5): return \"Signature\";\r\n case (6): return \"Waiver Received\";\r\n case (7): return \"Fully Executed\";\r\n case (8): return \"Withdrawn\";\r\n case (9): return \"Other\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n}","\r\n//Durstenfeld Approach: https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#The_modern_algorithm\r\nexport function ShuffleArray(array: any[]) {\r\n for (let i = array.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [array[i], array[j]] = [array[j], array[i]];\r\n }\r\n}\r\n\r\nexport function SplitAndJoinDelimited(input: string, splitDelimiter: string, outputDelimiter: string, sort: boolean = false, nowrap: boolean = false): string {\r\n if (input.trim().length == 0) return \"\";\r\n else {\r\n let list: string[] = input.split(splitDelimiter);\r\n if (sort) { list.sort(); }\r\n let output: string = \"\";\r\n list.forEach((item: string, index: number) => {\r\n if (index > 0) output += outputDelimiter;\r\n if (nowrap) output += \"\";\r\n output += item;\r\n if (nowrap) output += \"\";\r\n });\r\n return output;\r\n }\r\n}\r\n\r\nexport function SplitAndJoinContained(input: string, splitDelimiter: string, outputPrefixDelimiter: string, outputSuffixDelimiter: string, sort: boolean = false, nowrap: boolean = false): string {\r\n if (input.trim().length == 0) return \"\";\r\n else {\r\n let list: string[] = input.split(splitDelimiter);\r\n if (sort) { list.sort(); }\r\n let output: string = \"\";\r\n list.forEach((item: string, index: number) => {\r\n output += outputPrefixDelimiter;\r\n if (nowrap) output += \"\";\r\n output += item;\r\n if (nowrap) output += \"\";\r\n output += outputSuffixDelimiter;\r\n });\r\n return output;\r\n }\r\n}\r\n\r\nexport function Split(input: string, delimiter: string): string[] {\r\n if (input.trim().length == 0) return [];\r\n else {\r\n let parts: string[] = input.split(delimiter);\r\n parts = parts.map((p: string) => p.trim());\r\n return parts;\r\n }\r\n}\r\n\r\nexport function Join(list: string[], outputDelimiter: string, sort: boolean, nowrap: boolean = false): string {\r\n if (sort) { list.sort(); }\r\n let output: string = \"\";\r\n list.forEach((item: string, index: number) => {\r\n if (index > 0) output += outputDelimiter;\r\n if (nowrap) output += \"\";\r\n output += item;\r\n if (nowrap) output += \"\";\r\n });\r\n return output;\r\n}\r\n\r\nexport function Unique(values: string[], sort: boolean, lastValues: string[] = []): string[] {\r\n\r\n values = values.map((val: string) => {\r\n if (val.startsWith(\"Other\")) return \"Other\";\r\n else return val;\r\n });\r\n\r\n let unique: string[] = values.filter((n, i) => values.indexOf(n) === i);\r\n if (sort) {\r\n lastValues = lastValues.map((v: string) => v.toLowerCase());\r\n\r\n unique = unique.sort((a: string, b: string) => {\r\n a = a.toLowerCase();\r\n b = b.toLowerCase();\r\n\r\n if (lastValues.length == 0) { return (a > b ? 1 : -1); }\r\n else {\r\n let isALastValue: boolean = false;\r\n let isBLastValue: boolean = false;\r\n\r\n lastValues.forEach((v: string) => {\r\n if (a.startsWith(v)) { isALastValue = true; }\r\n if (b.startsWith(v)) { isBLastValue = true; }\r\n });\r\n\r\n if (!isALastValue && !isBLastValue) { return (a > b ? 1 : -1); }\r\n else if (isALastValue && !isBLastValue) {\r\n return 1;\r\n }\r\n else if (!isALastValue && isBLastValue) {\r\n return -1;\r\n }\r\n else {\r\n return (a > b ? 1 : -1);\r\n }\r\n }\r\n\r\n //if (a.startsWith(v) && b.startsWith(v)) { return (a > b ? 1 : -1); }\r\n //else if (a.startsWith(v)) { return 1; }\r\n //else if (b.startsWith(v)) { return -1; }\r\n //else return (a > b ? 1 : -1);\r\n\r\n\r\n });\r\n\r\n //unique.sort();\r\n }\r\n return unique;\r\n}\r\n\r\nexport function FormatStringByWordLength(value: string, wordsOnLine: number): string {\r\n\r\n //console.log(value);\r\n\r\n if (value == undefined) return \"\";\r\n\r\n let parts: string[] = value.split(\" \");\r\n let output: string = \"\";\r\n for (let i = 0; i < parts.length; ++i) {\r\n output += parts[i] + \" \";\r\n if (i == (wordsOnLine - 1)) {\r\n output += \"\";\r\n }\r\n }\r\n\r\n if (parts.length < (wordsOnLine - 1)) { output += \"\"; }\r\n return output.trim();\r\n}\r\n\r\nexport function DoArraysOverlap(array1: any, array2: any): boolean {\r\n if (array1 == undefined || array2 == undefined) return false;\r\n return array1.some(r => array2.includes(r));\r\n}\r\n\r\nexport function NoWordWrap(input: string): string {\r\n return \"\" + input + \"\";\r\n}\r\n\r\nexport function CheckArrayStartsWith(array: string[], startsWithValue: string, appendValue: string): string[] {\r\n\r\n let includesValue: number = array.findIndex((value) => value.startsWith(startsWithValue));\r\n\r\n if (includesValue == -1) { return array; }\r\n else { array.push(appendValue); return array; }\r\n}\r\n\r\nexport function RemoveElementFromArray(array: any[], valueToRemove: any): any[] {\r\n const index = array.indexOf(valueToRemove, 0);\r\n if (index > -1) {\r\n array = array.splice(index, 1);\r\n }\r\n return array;\r\n}\r\n\r\nexport function SumArrayElements(array: number[]): number {\r\n let sum: number = 0;\r\n for (let i = 0; i < array.length; ++i) {\r\n if (array[i] != undefined) { sum += array[i]; }\r\n }\r\n\r\n //console.log(sum, array);\r\n return sum;\r\n}","import { PopoverOption } from \"bootstrap\";\r\nimport { SiteMetricDetail, SiteMetricSummary } from \"../../scripts/site-activation.entities\";\r\n\r\n\r\nexport type SiteCardData = {\r\n studyId: number;\r\n studyName: string;\r\n metricId: number;\r\n metricName: string;\r\n inPlayId: number;\r\n orderBy: number;\r\n yellowDays?: number;\r\n redDays?: number;\r\n completed?: SiteMetricSummary;\r\n inProgress?: SiteMetricSummary;\r\n sites?: SiteMetricDetail[];\r\n}\r\n\r\nexport class DashboardCard extends HTMLElement {\r\n cardData = {} as SiteCardData;\r\n detailsTabState = true;\r\n isOpen = false;\r\n yellowDays: any;\r\n redDays: any;\r\n studybg: string;\r\n studybglight: string;\r\n studyborder: string;\r\n inProgress: any;\r\n completed: any;\r\n inProgressCount: any;\r\n completedCount: any;\r\n stoplightMax: any;\r\n minDays: any;\r\n plotMin: number;\r\n maxDays: any;\r\n plotMax: number;\r\n greenSites: any;\r\n yellowSites: any;\r\n redSites: any;\r\n completedSites: any;\r\n inprogressTab: any;\r\n inprogressTabContent: any;\r\n completedTab: any;\r\n completedTabContent: any;\r\n\r\n constructor() {\r\n super();\r\n }\r\n\r\n connectedCallback() {\r\n\r\n this.initializeData();\r\n\r\n this.render();\r\n\r\n const summary = this.querySelector('.dsa-summary');\r\n const details = $(this.querySelector('.dsa-details'));\r\n\r\n summary.addEventListener('click', () => {\r\n\r\n this.isOpen = !details.hasClass('show')\r\n details.collapse('toggle');\r\n\r\n if (this.isOpen) {\r\n summary.classList.add('open');\r\n } else {\r\n summary.classList.remove('open');\r\n }\r\n });\r\n\r\n // Only show popover if there is data\r\n if (this.inProgressCount > 0) {\r\n $(this.querySelector('.dsa-timeline-plot-top')).popover(\r\n this.getPopoverOptions(this.inProgress, 'In-Progress')\r\n );\r\n }\r\n\r\n // Only show popover if there is data\r\n if (this.completedCount > 0) {\r\n $(this.querySelector('.dsa-timeline-plot-bottom')).popover(\r\n this.getPopoverOptions(this.completed, 'Completed')\r\n );\r\n }\r\n\r\n this.inprogressTab = this.querySelector('.inprogress-tab');\r\n this.inprogressTabContent = this.querySelector('.inprogress-tab-content');\r\n this.completedTab = this.querySelector('.completed-tab');\r\n this.completedTabContent = this.querySelector('.completed-tab-content');\r\n\r\n this.inprogressTab.addEventListener('click', () => {\r\n this.detailsTabState = true;\r\n this.updatedDetailsTabs();\r\n });\r\n\r\n this.completedTab.addEventListener('click', () => {\r\n this.detailsTabState = false;\r\n this.updatedDetailsTabs();\r\n });\r\n\r\n $(this.querySelectorAll('[data-toggle=\"tooltip\"]')).tooltip();\r\n\r\n }\r\n\r\n render() {\r\n\r\n const inProgressPlotMarkup = `\r\n
\r\n ${(this.inProgressCount > 0) ? this.getPlotMarkup(this.inProgress, true) : ''}\r\n
\r\n `;\r\n\r\n const completedPlotMarkup = `\r\n
\r\n ${(this.completedCount > 0) ? this.getPlotMarkup(this.completed, false) : ''}\r\n
\r\n `;\r\n\r\n const inProgressPercent = (this.inProgressCount / (this.inProgressCount + this.completedCount)) * 100 || 0;\r\n const completedPercent = (this.completedCount / (this.inProgressCount + this.completedCount)) * 100 || 0;\r\n\r\n this.innerHTML = `\r\n
\r\n
\r\n
\r\n
${this.cardData.studyName}
\r\n
${this.cardData.metricName}
\r\n
\r\n
\r\n
\r\n
In Progress Sites
\r\n
\r\n ${this.getStoplightMarkup()}\r\n
\r\n
\r\n\r\n
\r\n
\r\n ${this.inProgressCount} (${inProgressPercent.toFixed()}%) Sites
In-Progress\r\n
\r\n ${inProgressPlotMarkup}\r\n
${this.maxDays} days
\r\n
\r\n
\r\n
\r\n ${this.getCompletedLabelMarkup(completedPercent)}\r\n
\r\n ${completedPlotMarkup}\r\n
\r\n\r\n
\r\n
\r\n
\r\n
    \r\n
  • \r\n \r\n
  • \r\n
  • \r\n \r\n
  • \r\n
\r\n\r\n
\r\n
\r\n
\r\n ${this.getSiteTable(this.redSites, `Needs Attention (More than ${this.redDays} days)`, 'dsa-red')}\r\n
\r\n
\r\n ${this.getSiteTable(this.yellowSites, `Worth Watching (${this.yellowDays}-${this.redDays} days)`, 'dsa-yellow')}\r\n
\r\n
\r\n ${this.getSiteTable(this.greenSites, `On Track (Less than ${this.yellowDays} days)`, 'dsa-green')}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n ${this.getSiteTable(this.completedSites, `Completed`, `${this.studybglight} ${this.studyborder}`)}\r\n
\r\n
\r\n
\r\n
\r\n
`;\r\n\r\n }\r\n\r\n setData(data, maxSites, maxDays, minDays) {\r\n this.cardData = data;\r\n this.stoplightMax = maxSites;\r\n this.plotMax = maxDays;\r\n this.plotMin = minDays;\r\n }\r\n\r\n initializeData() {\r\n this.yellowDays = this.cardData.yellowDays || 9999;\r\n this.redDays = this.cardData.redDays || 9999;\r\n\r\n this.studybg = `study-${this.cardData.studyId}-bg`;\r\n this.studybglight = `study-${this.cardData.studyId}-bg-light`;\r\n this.studyborder = `study-${this.cardData.studyId}-border`;\r\n\r\n this.inProgress = this.cardData.inProgress || {};\r\n this.completed = this.cardData.completed || {};\r\n\r\n this.inProgressCount = this.inProgress.NumberOfSites || 0;\r\n this.completedCount = this.completed.NumberOfSites || 0;\r\n\r\n this.stoplightMax = this.stoplightMax || this.inProgressCount;\r\n\r\n this.minDays = this.plotMin || Math.min(this.inProgress.MinValue, this.completed.MinValue);\r\n this.maxDays = this.plotMax || Math.max(this.inProgress.MaxValue, this.completed.MaxValue);\r\n\r\n this.greenSites = this.getSitesDesc(Number.MIN_SAFE_INTEGER, this.yellowDays, 0);\r\n this.yellowSites = this.getSitesDesc(this.yellowDays, this.redDays, 0);\r\n this.redSites = this.getSitesDesc(this.redDays, Number.MAX_VALUE, 0);\r\n this.completedSites = this.getSitesDesc(Number.MIN_SAFE_INTEGER, Number.MAX_VALUE, 1);\r\n\r\n }\r\n\r\n getPlotMarkup(data, showYellowRed=false) {\r\n\r\n const minPercent = this.getPlotPercent(data.MinValue);\r\n const maxPercent = 100 - this.getPlotPercent(data.MaxValue);\r\n const q1Percent = this.getPlotPercent(data.Q1Value);\r\n const q3Percent = 100 - this.getPlotPercent(data.Q3);\r\n const medianPercent = this.getPlotPercent(data.MedianValue);\r\n const meanPercent = this.getPlotPercent(data.MeanValue);\r\n\r\n const yellowPercent = this.getPlotPercent(this.yellowDays);\r\n const redPercent = this.getPlotPercent(this.redDays);\r\n\r\n const yellowMarkup = (showYellowRed && this.yellowDays && this.yellowDays < this.maxDays && this.yellowDays > this.minDays) ? `
` : '';\r\n const redMarkup = (showYellowRed && this.redDays && this.redDays < this.maxDays && this.redDays > this.minDays) ? `
` : '';\r\n\r\n return `\r\n ${yellowMarkup}\r\n ${redMarkup}\r\n
\r\n
${(data.NumberOfSites === 1) ? '' : data.Min}
\r\n
${(data.NumberOfSites === 1) ? '' : data.Max}
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n ${data.Mean}\r\n
\r\n
\r\n `;\r\n }\r\n\r\n getPlotPercent(value) {\r\n return Math.round(((value - this.minDays) / (this.maxDays - this.minDays)) * 100);\r\n }\r\n\r\n getStoplightPercent(value) {\r\n return Math.round((value / this.stoplightMax) * 100);\r\n }\r\n\r\n getStoplightMarkup() {\r\n\r\n const greenCount = this.cardData.sites.filter((site) => ((site.CompletedId === 0) && (site.DaysValue < this.yellowDays))).length;\r\n const yellowCount = this.cardData.sites.filter((site) => ((site.CompletedId === 0) && (site.DaysValue >= this.yellowDays) && (site.DaysValue < this.redDays))).length;\r\n const redCount = this.cardData.sites.filter((site) => ((site.CompletedId === 0) && (site.DaysValue >= this.redDays))).length;\r\n\r\n const greenPercent = this.getStoplightPercent(greenCount);\r\n const yellowPercent = this.getStoplightPercent(yellowCount);\r\n const redPercent = this.getStoplightPercent(redCount);\r\n\r\n return `\r\n ${this.getStoplightBandMarkup('green', greenPercent, greenCount)}\r\n ${this.getStoplightBandMarkup('yellow', yellowPercent, yellowCount)}\r\n ${this.getStoplightBandMarkup('red', redPercent, redCount)}\r\n `;\r\n }\r\n\r\n getStoplightBandMarkup(color, percent, count) {\r\n const label = `${count} Site${(count === 1) ? '' : 's'}`;\r\n return (percent > 0) ? `\r\n
\r\n
\r\n
${label}
\r\n
\r\n ` : '';\r\n }\r\n\r\n getCompletedLabelMarkup(completedPercent) {\r\n if (this.cardData.metricId === 16) return ''; // Don't show Completed for \"Time Since Most Recent Randomization\"\r\n return `${this.completedCount} (${completedPercent.toFixed()}%) Sites
Completed`;\r\n }\r\n\r\n getSitesDesc(startDays, endDays, completedId) {\r\n return this.getSites(startDays, endDays, completedId).sort((a,b) => b.DaysValue - a.DaysValue)\r\n }\r\n\r\n getSites(startDays, endDays, completedId) {\r\n return this.cardData.sites.filter((site) =>\r\n ((site.DaysValue >= startDays) &&\r\n (site.DaysValue < endDays) &&\r\n (site.CompletedId === completedId))\r\n );\r\n }\r\n\r\n getSiteTable(sites, title, cssClass) {\r\n\r\n const siteCount = sites.length;\r\n const siteString = (siteCount === 1) ? 'Site' : 'Sites'\r\n\r\n const tableRows = sites.map((site) => {\r\n return `\r\n \r\n ${site.SiteName} (${site.SiteIdDisplay})\r\n ${site.Days} days\r\n \r\n `;\r\n }).join('');\r\n\r\n return `\r\n
\r\n ${title}\r\n
${siteCount} ${siteString}
\r\n
\r\n
\r\n \r\n ${tableRows}\r\n
\r\n
\r\n `;\r\n }\r\n\r\n getPopoverOptions(data, title): PopoverOption {\r\n return {\r\n html: true,\r\n title: title,\r\n content: `\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Min:${data.Min}
Q1:${data.Q1}
Mean:${data.Mean}
Median:${data.Median}
Q3:${data.Q3}
Max:${data.Max}
\r\n
`,\r\n delay: { \"show\": 500, \"hide\": 100 },\r\n sanitize: false,\r\n trigger: 'hover',\r\n placement: 'top'\r\n }\r\n }\r\n\r\n updatedDetailsTabs() {\r\n const activeTab = (this.detailsTabState) ? this.inprogressTab : this.completedTab;\r\n const activeTabContent = (this.detailsTabState) ? this.inprogressTabContent : this.completedTabContent;\r\n const inactiveTab = (this.detailsTabState) ? this.completedTab : this.inprogressTab;\r\n const inactiveTabContent = (this.detailsTabState) ? this.completedTabContent : this.inprogressTabContent;\r\n\r\n activeTab.classList.add('active');\r\n inactiveTab.classList.remove('active');\r\n activeTabContent.classList.remove('d-none');\r\n inactiveTabContent.classList.add('d-none');\r\n }\r\n\r\n\r\n}\r\n\r\n","import { TaskTrackerGanttChart } from \"./gantt-chart\";\r\nimport { TaskTrackerDataTable } from \"./data-table\";\r\nimport { FormatDate } from \"../../../shared/scripts/date-functions\";\r\nimport { Task } from \"./task-tracker.entities\";\r\nimport { plainToClass } from \"class-transformer\";\r\n\r\n\r\nexport class TaskTrackerPage {\r\n\r\n tasks: Task[];\r\n ganttChart: TaskTrackerGanttChart;\r\n dataTable: TaskTrackerDataTable;\r\n\r\n constructor(title: string, taskJson: any, lastUpdate: string, showGanttTab: boolean, showMilestoneTaskFilter: boolean, showCriticalTaskFilter: boolean, showStudyFilter: boolean) {\r\n\r\n $(() => {\r\n //console.log(\"Task Tracker\", title, lastUpdate, taskJson);\r\n //console.log(showMilestoneTaskFilter, showCriticalTaskFilter, showStudyFilter);\r\n //console.log(Boolean(showMilestoneTaskFilter), Boolean(showStudyFilter));\r\n\r\n $('#page-title').text(title);\r\n $('#last-update-date').text(lastUpdate);\r\n\r\n this.tasks = plainToClass(Task, taskJson);\r\n this.tasks.forEach((t: Task) => {\r\n t.Initialize();\r\n })\r\n\r\n //console.log(this.tasks);\r\n\r\n if (showGanttTab) {\r\n this.ganttChart = new TaskTrackerGanttChart();\r\n this.ganttChart.initialize(this.tasks, showStudyFilter);\r\n }\r\n\r\n this.dataTable = new TaskTrackerDataTable(this.tasks, showMilestoneTaskFilter, showCriticalTaskFilter, showStudyFilter);\r\n\r\n this.setupTabWatcher();\r\n });\r\n }\r\n\r\n setupTabWatcher(): void {\r\n $('a[data-toggle=\"pill\"]').on('shown.bs.tab', (e) => {\r\n if (e.currentTarget.id == \"content-datatable-tab\") {\r\n this.dataTable.refresh();\r\n }\r\n else if (e.currentTarget.id == \"content-gantt-tab\") {\r\n //this.map.refresh();\r\n //console.log(\"gantt tab\");\r\n }\r\n });\r\n }\r\n\r\n}","\r\n\r\n\r\n\r\nexport class TableColumnVisibilityController {\r\n\r\n tableId: string;\r\n dropdownDivId: string;\r\n dropdownId: string;\r\n columnGroups: TableColumnGroup[];\r\n\r\n constructor(tableId: string, dropdownDivId: string, columnGroups: TableColumnGroup[]) {\r\n this.tableId = tableId;\r\n this.dropdownDivId = dropdownDivId;\r\n this.columnGroups = columnGroups;\r\n\r\n this.dropdownId = tableId + \"-column-filter-dropdown\";\r\n\r\n $('#' + dropdownDivId).empty().html(\"
\");\r\n\r\n $('#' + this.dropdownId).selectpicker({\r\n dropupAuto: false,\r\n selectedTextFormat: \"count\",\r\n\r\n countSelectedText: (numSelected, numTotal) => {\r\n if (numSelected == numTotal) {\r\n return \"All Available\";\r\n }\r\n else {\r\n return numSelected + \" Selected\";\r\n }\r\n }\r\n });\r\n\r\n this.columnGroups.forEach((group: TableColumnGroup) => {\r\n $('#' + this.dropdownId).append(new Option(group.name, group.name, false, group.visible));\r\n });\r\n $('#' + this.dropdownId).selectpicker(\"refresh\");\r\n\r\n $('#' + this.dropdownId).on('changed.bs.select', (e, clickedIndex, isSelected, previousValue) => {\r\n this.updateColumnVisibility();\r\n });\r\n this.updateColumnVisibility();\r\n }\r\n\r\n refresh(): void {\r\n $('#' + this.dropdownId).selectpicker(\"refresh\");\r\n }\r\n\r\n updateColumnVisibility(): void {\r\n\r\n let values: string[] = ($('#' + this.dropdownId).val());\r\n\r\n let visibleColumns: number[] = [];\r\n let visibleStyles: string[] = [];\r\n let hiddenColumns: number[] = [];\r\n let hiddenStyles: string[] = [];\r\n this.columnGroups.forEach((colgroup: TableColumnGroup) => {\r\n if (values.includes(colgroup.name)) {\r\n visibleColumns.push(...colgroup.columns);\r\n if (colgroup.columnStyle.length > 0) { visibleStyles.push(colgroup.columnStyle); }\r\n }\r\n else {\r\n hiddenColumns.push(...colgroup.columns);\r\n if (colgroup.columnStyle.length > 0) { hiddenStyles.push(colgroup.columnStyle); }\r\n }\r\n });\r\n\r\n var table = $('#' + this.tableId).DataTable();\r\n if (hiddenColumns.length > 0) { table.columns(hiddenColumns).visible(false, false); }\r\n if (visibleColumns.length > 0) { table.columns(visibleColumns).visible(true, false); }\r\n\r\n hiddenStyles.forEach((style: string) => {\r\n table.columns('.' + style).visible(false, false);\r\n });\r\n visibleStyles.forEach((style: string) => {\r\n table.columns('.' + style).visible(true, false);\r\n });\r\n\r\n table.columns.adjust().draw(false); // adjust column sizing and redraw\r\n\r\n }\r\n}\r\n\r\n\r\nexport class TableColumnGroup {\r\n name: string;\r\n visible: boolean;\r\n columns: number[];\r\n columnStyle: string;\r\n\r\n constructor(name: string, visible: boolean, columns: number[], columnStyle: string) {\r\n this.name = name;\r\n this.visible = visible;\r\n this.columns = columns;\r\n this.columnStyle = columnStyle;\r\n }\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { GetDateFromString } from \"../../../../shared/scripts/date-functions\";\r\nimport { PadNumber } from \"../../../../shared/scripts/number-functions\";\r\n\r\n\r\nexport class SiteInfo {\r\n StudyId: number;\r\n AppendixIds: number[];\r\n SiteNumber: number;\r\n SiteName: string;\r\n PI: string = \"\";\r\n Randomized: number;\r\n ActivationDate: string;\r\n ActivationTimestamp: number;\r\n\r\n getSiteNameNumber(): string {\r\n return this.SiteName + \" (\" + PadNumber(this.SiteNumber + \"\", 3) + \")\";\r\n }\r\n\r\n getSiteNumberFormatted(): string {\r\n return PadNumber(this.SiteNumber + \"\", 3);\r\n }\r\n\r\n setActivationTimestamp(dayOfMonth: string = \"first\"): void {\r\n if (this.ActivationDate != undefined) {\r\n let date: Date = GetDateFromString(this.ActivationDate, \"slash-month-day-year\");\r\n\r\n if (dayOfMonth == \"first\") { date.setDate(1); }\r\n\r\n this.ActivationTimestamp = date.getTime();\r\n }\r\n }\r\n\r\n static Parse(infoJson: any): SiteInfo[] {\r\n return plainToClass(SiteInfo, infoJson);\r\n }\r\n\r\n static CreateNameMap(infoJson: any = undefined, info: SiteInfo[] = undefined): Map {\r\n\r\n if (infoJson != undefined) {\r\n info = plainToClass(SiteInfo, infoJson);\r\n }\r\n let dictionary: Map = new Map();\r\n info.map((entry: SiteInfo) => {\r\n dictionary.set(entry.SiteNumber, entry.SiteName);\r\n //dictionary.set(entry.SiteNumber, entry.getSiteNameNumber());\r\n });\r\n return dictionary;\r\n } \r\n\r\n static FormatSiteNumber(siteNumber: number): string {\r\n return PadNumber(siteNumber + \"\", 3);\r\n }\r\n}\r\n","// extracted by mini-css-extract-plugin","import { Appendix } from \"../../../../shared/entities/scripts/appendix\";\r\nimport { Site } from \"../../../../shared/entities/scripts/site\";\r\nimport { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { DoArraysOverlap } from \"../../../../shared/scripts/array-functions\";\r\nimport { FilterOption } from \"../../../../shared/scripts/filtering/filtering.entities\";\r\nimport { ResetDropdownFilters } from \"../../../../shared/scripts/filtering/filtering.utilities\";\r\nimport { Outcome } from \"../components/outcomes-tab/scripts/outcomes.entities\";\r\nimport { Visit } from \"../components/visits-tab/scripts/visits.entities\";\r\n\r\nexport interface IFilteringParent {\r\n FilterUpdated();\r\n}\r\n\r\nexport class FilterSection {\r\n\r\n parent: IFilteringParent;\r\n\r\n studies: Study[] = [];\r\n appendices: Appendix[] = [];\r\n sites: Site[] = [];\r\n visits: Visit[] = [];\r\n visitRequired: FilterOption[] = [];\r\n outcomes: Outcome[] = [];\r\n\r\n allStudyIds: number[] = []; activeStudyIds: number[] = []; selectedStudyIds: number[] = [];\r\n allAppendixIds: number[] = []; activeAppendixIds: number[] = []; selectedAppendixIds: number[] = [];\r\n allSiteIds: number[] = []; activeSiteIds: number[] = []; selectedSiteIds: number[] = [];\r\n allVisitIds: number[] = []; activeVisitIds: number[] = []; selectedVisitIds: number[] = [];\r\n allVisitRequiredIds: number[] = []; activeVisitRequiredIds: number[] = []; selectedVisitRequiredIds: number[] = [];\r\n allOutcomeIds: number[] = []; activeOutcomeIds: number[] = []; selectedOutcomeIds: number[] = [];\r\n\r\n studySelectId: string = \"#study-dropdown\";\r\n appendixSelectId: string = \"#appendix-dropdown\";\r\n siteSelectId: string = \"#site-dropdown\";\r\n visitSelectId: string = \"#visit-dropdown\";\r\n visitRequiredSelectId: string = \"#visit-required-dropdown\";\r\n outcomeSelectId: string = \"#outcome-dropdown\";\r\n\r\n constructor(studies: Study[], appendices: Appendix[], sites: Site[], visits: Visit[], visitRequired: FilterOption[], outcomes: Outcome[], parent: IFilteringParent) {\r\n\r\n this.parent = parent;\r\n\r\n this.studies = studies;\r\n this.appendices = appendices;\r\n this.sites = sites;\r\n this.visits = visits;\r\n this.visitRequired = visitRequired;\r\n this.outcomes = outcomes;\r\n\r\n this.allStudyIds = this.studies.map((s: Study) => s.Id);\r\n this.allAppendixIds = this.appendices.map((a: Appendix) => a.Id);\r\n this.allSiteIds = this.sites.map((s: Site) => s.Id);\r\n this.allVisitIds = this.visits.map((v: Visit) => v.Id);\r\n this.allVisitRequiredIds = this.visitRequired.map((v: FilterOption) => v.Id);\r\n this.allOutcomeIds = this.outcomes.map((o: Outcome) => o.Id);\r\n\r\n this.initializeFilters();\r\n this.resetFilters();\r\n }\r\n\r\n initializeFilters(): void {\r\n this.setupDropdown(\"study\", this.studySelectId, \"Platforms\");\r\n this.setupDropdown(\"appendix\", this.appendixSelectId, \"Trials\");\r\n this.setupDropdown(\"site\", this.siteSelectId, \"Sites\");\r\n this.setupDropdown(\"visit\", this.visitSelectId, \"\");\r\n this.setupDropdown(\"visit-required\", this.visitRequiredSelectId, \"\");\r\n this.setupDropdown(\"outcome\", this.outcomeSelectId, \"\");\r\n }\r\n\r\n setupDropdown(type: string, elementId: string, optionName: string): void {\r\n\r\n $(elementId).selectpicker({\r\n dropupAuto: false,\r\n selectedTextFormat: \"count\",\r\n\r\n countSelectedText: (numSelected, numTotal) => {\r\n\r\n let activeCount: number = 0;\r\n if (type == 'study') activeCount = this.activeStudyIds.length;\r\n else if (type == 'appendix') activeCount = this.activeAppendixIds.length;\r\n else if (type == 'site') activeCount = this.activeSiteIds.length;\r\n else if (type == 'visit') activeCount = this.activeVisitIds.length;\r\n else if (type == 'visit-required') activeCount = this.activeVisitRequiredIds.length;\r\n else if (type == 'outcome') activeCount = this.activeOutcomeIds.length;\r\n\r\n if (numSelected == numTotal) {\r\n return \"All \" + optionName + \" (n = \" + numSelected + \")\";\r\n }\r\n else {\r\n return numSelected + \" of \" + activeCount + \" \" + optionName + \" Selected\";\r\n }\r\n }\r\n });\r\n $(elementId).selectpicker(\"refresh\");\r\n\r\n $(elementId).on('changed.bs.select', (e, clickedIndex, isSelected, previousValue) => {\r\n let values: string[] = ($(elementId).val());\r\n this.filterDropdownOptions(type, values.map(i => Number(i)));\r\n $(elementId).selectpicker(\"refresh\");\r\n this.filterUpdated(this.selectedStudyIds, this.selectedAppendixIds, this.selectedSiteIds, this.selectedVisitIds, this.selectedVisitRequiredIds, this.selectedOutcomeIds);\r\n });\r\n }\r\n\r\n setDropdownOptions(type: string, elementId: string, selectedElementIds: number[], activeElementIds: number[], allElements: any[], optionParameterValue: string, optionParameterName: string): void {\r\n\r\n $(elementId).empty();\r\n\r\n allElements.forEach((element: any) => {\r\n let selected: boolean = false;\r\n let disabled: boolean = false;\r\n\r\n if (selectedElementIds.includes(element[optionParameterValue])) {\r\n selected = true;\r\n }\r\n\r\n if (!activeElementIds.includes(element[optionParameterValue])) {\r\n disabled = true;\r\n selected = false;\r\n }\r\n\r\n if (!disabled) {\r\n let option: any = new Option(element[optionParameterName], element[optionParameterValue], false, selected);\r\n //option.disabled = disabled;\r\n $(elementId).append(option);\r\n }\r\n });\r\n $(elementId).selectpicker(\"refresh\");\r\n }\r\n\r\n resetFilters(): void {\r\n this.selectedStudyIds = this.activeStudyIds = this.allStudyIds;\r\n this.selectedAppendixIds = this.activeAppendixIds = this.allAppendixIds;\r\n this.selectedSiteIds = this.activeSiteIds = this.allSiteIds;\r\n this.selectedVisitIds = this.activeVisitIds = this.allVisitIds;\r\n this.selectedVisitRequiredIds = this.activeVisitRequiredIds = this.allVisitRequiredIds;\r\n this.selectedOutcomeIds = this.activeOutcomeIds = this.allOutcomeIds;\r\n\r\n this.setDropdownOptions(\"study\", this.studySelectId, this.selectedStudyIds, this.allStudyIds, this.studies, \"Id\", \"Name\");\r\n this.filterDropdownOptions(\"study\", this.selectedStudyIds);\r\n\r\n ResetDropdownFilters([this.studySelectId, this.appendixSelectId, this.siteSelectId, this.visitSelectId, this.visitRequiredSelectId, this.outcomeSelectId]);\r\n\r\n this.filterUpdated(this.activeStudyIds, this.activeAppendixIds, this.activeSiteIds, this.activeVisitIds, this.activeVisitRequiredIds, this.activeOutcomeIds);\r\n }\r\n\r\n filterDropdownOptions(type: string, currentValues: number[]) {\r\n\r\n //console.log(type, currentValues);\r\n\r\n if (type == 'study') {\r\n this.selectedStudyIds = currentValues;\r\n this.activeAppendixIds = this.appendices.map((a: Appendix) => {\r\n if (this.selectedStudyIds.includes(a.StudyId)) return a.Id;\r\n }).filter((id: number) => id != undefined);\r\n this.activeSiteIds = this.sites.map((s: Site) => {\r\n if (DoArraysOverlap(this.selectedStudyIds, s.StudyIds)) return s.Id;\r\n }).filter((id: number) => id != undefined);\r\n\r\n //cohort selection activates all hubs/sites\r\n this.selectedAppendixIds = this.activeAppendixIds;\r\n this.selectedSiteIds = this.activeSiteIds;\r\n }\r\n else if (type == 'appendix') {\r\n this.selectedAppendixIds = currentValues;\r\n }\r\n else if (type == 'site') {\r\n //no filtering \"left\" to study or appendix based on selected sites\r\n this.selectedSiteIds = currentValues;\r\n }\r\n else if (type == \"visit\") {\r\n this.selectedVisitIds = currentValues;\r\n }\r\n else if (type == \"visit-required\") {\r\n this.selectedVisitRequiredIds = currentValues;\r\n }\r\n else if (type == \"outcome\") {\r\n this.selectedOutcomeIds = currentValues;\r\n }\r\n\r\n if (type != 'study') this.setDropdownOptions(\"study\", this.studySelectId, this.selectedStudyIds, this.allStudyIds, this.studies, \"Id\", \"Name\");\r\n if (type != 'appendix') this.setDropdownOptions(\"appendix\", this.appendixSelectId, this.activeAppendixIds, this.activeAppendixIds, this.appendices, \"Id\", \"Name\");\r\n if (type != 'site') this.setDropdownOptions(\"site\", this.siteSelectId, this.activeSiteIds, this.activeSiteIds, this.sites, \"Id\", \"Name\");\r\n if (type != 'visit') this.setDropdownOptions(\"visit\", this.visitSelectId, this.selectedVisitIds, this.activeVisitIds, this.visits, \"Id\", \"Name\");\r\n if (type != 'visit-required') this.setDropdownOptions(\"visit-required\", this.visitRequiredSelectId, this.selectedVisitRequiredIds, this.activeVisitRequiredIds, this.visitRequired, \"Id\", \"Name\");\r\n if (type != 'outcome') this.setDropdownOptions(\"outcome\", this.outcomeSelectId, this.selectedOutcomeIds, this.activeOutcomeIds, this.outcomes, \"Id\", \"Name\");\r\n }\r\n\r\n filterUpdated(studyIds: number[], appendixIds: number[], siteIds: number[], visitIds: number[], visitRequiredIds: number[], outcomeIds: number[]): void {\r\n\r\n //add \"0\" entry to signify all selected\r\n //if (this.selectedStudyIds.length == this.activeStudyIds.length) this.selectedStudyIds = [0].concat(studyIds);\r\n //if (this.selectedAppendixIds.length == this.activeAppendixIds.length) this.selectedAppendixIds = [0].concat(appendixIds);\r\n //if (this.selectedSiteIds.length == this.activeSiteIds.length) this.selectedSiteIds = [0].concat(siteIds);\r\n //if (this.selectedVisitIds.length == this.activeVisitIds.length) this.selectedVisitIds = [0].concat(visitIds);\r\n //this.parent.FilterUpdated(studyIds, appendixIds, siteIds, visitIds);\r\n this.parent.FilterUpdated();\r\n }\r\n\r\n refreshFilters(): void {\r\n this.filterUpdated(this.selectedStudyIds, this.selectedAppendixIds, this.selectedSiteIds, this.selectedVisitIds, this.selectedVisitRequiredIds, this.selectedOutcomeIds);\r\n }\r\n}","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","import { DetailsTableDialog } from \"../../../../../shared/components/dialogs/details-table-dialog/details-table-dialog.view\";\r\nimport { RenderDateMDY } from \"../../../../../shared/scripts/table-functions\";\r\nimport { Contract } from \"../../scripts/contracts.entities\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\n\r\nexport class ContractSummaryTab {\r\n\r\n dataTable: any;\r\n achievementChart: any;\r\n pieChart: any;\r\n\r\n dataRows: ContractSummaryTableRow[];\r\n detailsTableModal: DetailsTableDialog;\r\n\r\n //public static statusesOfInterest: string[] = [\"Requested\", \"Draft\", \"Negotiation\", \"Signature\", \"Fully Executed\", \"On Hold\", \"Withdrawn\"];\r\n public static statusesOfInterest: string[] = [\"Requested\", \"Draft\", \"Negotiation\", \"Signature\", \"Fully Executed\"];\r\n\r\n constructor() {\r\n\r\n this.initializeTable();\r\n this.initializeAchievementChart();\r\n this.initializePieChart();\r\n this.initiatlizeButtons();\r\n //this.updateContent(contracts);\r\n }\r\n\r\n updateContent(tableContracts: Contract[], chartContracts: Contract[]): void {\r\n\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(this.getTableContent(tableContracts)).draw();\r\n\r\n this.setAchievementChartContent(chartContracts);\r\n }\r\n\r\n private getTableContent(contracts: Contract[]): ContractSummaryTableRow[] {\r\n\r\n let rowHash: Map = new Map();\r\n let overallRow: ContractSummaryTableRow = new ContractSummaryTableRow();\r\n\r\n overallRow.ContractType = \"Overall\";\r\n\r\n contracts = contracts.filter((contract: Contract) => ContractSummaryTab.statusesOfInterest.includes(contract.StatusGroup));\r\n contracts.forEach((contract: Contract) => {\r\n\r\n let row: ContractSummaryTableRow;\r\n if (rowHash.has(contract.ContractType)) { row = rowHash.get(contract.ContractType); }\r\n else { row = new ContractSummaryTableRow(); row.ContractType = contract.ContractType; }\r\n\r\n row.addValue(contract);\r\n overallRow.addValue(contract);\r\n\r\n rowHash.set(row.ContractType, row);\r\n });\r\n\r\n rowHash.set(\"Overall\", overallRow);\r\n\r\n this.dataRows = Array.from(rowHash.values());\r\n this.dataRows = this.dataRows.sort((a: ContractSummaryTableRow, b: ContractSummaryTableRow) => {\r\n if (a.ContractType == \"Overall\") return 1;\r\n else if (b.ContractType == \"Overall\") return -1;\r\n else return a.ContractType.localeCompare(b.ContractType);\r\n });\r\n this.dataRows.forEach((a: ContractSummaryTableRow, index: number) => {\r\n a.OrderBy = index\r\n a.setDisplayValues();\r\n });\r\n\r\n this.setPieChartContent(rowHash.get(\"Overall\"));\r\n\r\n return this.dataRows;\r\n }\r\n\r\n private setAchievementChartContent(contracts: Contract[]) {\r\n\r\n //console.log(contracts);\r\n\r\n //const start = new Date().getTime();\r\n contracts = contracts.filter((contract: Contract) => ContractSummaryTab.statusesOfInterest.includes(contract.StatusGroup));\r\n\r\n //get unique dates\r\n let uniqueDates: number[] = [];\r\n let dateTimes: number[] = [];\r\n contracts.forEach((contract: Contract) => {\r\n contract.HistoryUniqueDates.forEach((d: number) => {\r\n if (!dateTimes.includes(d)) {\r\n dateTimes.push(d);\r\n uniqueDates.push(d);\r\n }\r\n });\r\n });\r\n uniqueDates.sort((a: number, b: number) => a - b);\r\n\r\n //let chartDataLabels: string[] = ['Fully Executed', 'Signature', 'Negotiation', 'Draft', 'Requested'];\r\n //let chartSeriesColors: string[] = ['#0093af', '#5b9bd5', '#4c4c4c', '#f2ba49', '#de4846'];\r\n let chartDataLabels: string[] = ['Fully Executed', 'Signature', 'Negotiation'];\r\n let chartSeriesColors: string[] = ['#0093af', '#5b9bd5', '#4c4c4c'];\r\n let chartData: ContractSummaryChartDataSeries[] = [];\r\n let currentCounts: number[] = [ 0, 0, 0 ];\r\n\r\n chartDataLabels.map((label: string, index: number) => {\r\n chartData.push(new ContractSummaryChartDataSeries(label, chartSeriesColors[index]));\r\n });\r\n \r\n uniqueDates.forEach((date: number) => {\r\n currentCounts = [ 0, 0, 0 ];\r\n contracts.forEach((contract: Contract) => {\r\n\r\n let statusOnDay: string = contract.getContractStatusOnDate(date);\r\n\r\n for (let i: number = 0; i < chartDataLabels.length; ++i) {\r\n if (statusOnDay == chartDataLabels[i]) {\r\n currentCounts[i]++;\r\n }\r\n }\r\n });\r\n\r\n currentCounts.forEach((count: number, index: number) => {\r\n chartData[index].data.push( [date, count] );\r\n });\r\n });\r\n\r\n //const duration = new Date().getTime() - start;\r\n //console.log(uniqueDates);\r\n //console.log(chartData);\r\n //console.log(`contracts chart = ${duration / 1000}s`);\r\n\r\n //console.log(this.achievementChart);\r\n\r\n chartData.forEach((data: ContractSummaryChartDataSeries, index: number) => {\r\n this.achievementChart.series[index].setData(data.data);\r\n });\r\n $('#contract-count-label').html(contracts.length + \"\");\r\n }\r\n\r\n private setPieChartContent(overallCounts: ContractSummaryTableRow): void {\r\n let chartData: any[] = [];\r\n chartData.push({ name: \"Requested\", y: overallCounts.Values[0], color: '#de4846' });\r\n chartData.push({ name: \"Draft\", y: overallCounts.Values[1], color: '#f2ba49' });\r\n chartData.push({ name: \"Negotiation\", y: overallCounts.Values[2], color: '#673284' });\r\n chartData.push({ name: \"Signature\", y: overallCounts.Values[3], color: '#5b9bd5' });\r\n chartData.push({ name: \"Fully Executed\", y: overallCounts.Values[4], color: '#0093af' });\r\n\r\n //console.log(chartData);\r\n this.pieChart.series[0].setData(chartData);\r\n }\r\n\r\n private initializeTable(): void {\r\n this.dataTable = $('#contracts-summary-table').DataTable({\r\n //\"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n searching: false,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n ordering: false,\r\n columns: [\r\n { data: \"ContractType\", title: \"Contract Type\", className: \"text-left font-size12 nowrap\" },\r\n { data: { _: \"DisplayValues.0\", sort: \"Values.0\" }, title: \"Requested\", className: \"text-center font-size12 nowrap\" },\r\n { data: { _: \"DisplayValues.1\", sort: \"Values.1\" }, title: \"Draft\", className: \"text-center font-size12 nowrap\" },\r\n { data: { _: \"DisplayValues.2\", sort: \"Values.2\" }, title: \"Negotiation\", className: \"text-center font-size12 nowrap\" },\r\n { data: { _: \"DisplayValues.3\", sort: \"Values.3\" }, title: \"Signature\", className: \"text-center font-size12 nowrap\" },\r\n { data: { _: \"DisplayValues.4\", sort: \"Values.4\" }, title: \"Fully Executed\", className: \"text-center font-size12 nowrap\" },\r\n { data: { _: \"DisplayValues.5\", sort: \"Values.5\" }, title: \"Overall\", className: \"overall-data text-center font-size12 nowrap\" },\r\n { data: \"OrderBy\", visible: false },\r\n ],\r\n columnDefs: [\r\n { target: 0, orderable: false }\r\n ],\r\n order: [[7, 'asc']],\r\n createdRow: (row, data, dataIndex) => {\r\n if (data[\"ContractType\"] == \"Overall\") { $(row).addClass(\"overall-data\"); }\r\n }\r\n });\r\n\r\n this.detailsTableModal = new DetailsTableDialog([\r\n { data: \"PrimeContract\", title: \"Prime Contract\", className: \"prime-contract text-center font-size12 nowrap\", width: '100px' },\r\n { data: { _: \"ContractNumber\", sort: \"ContractNumber\" }, title: \"Contract ID\", className: \"site-id text-center font-size12 nowrap\", width: '100px' },\r\n { data: { _: \"ContractNameDisplay\", sort: \"ContractName\" }, title: \"Contract Name\", className: \"text-left font-size12\" },\r\n { data: { _: \"StatusDisplay\", sort: \"Status\" }, title: \"Status\", className: \"text-left font-size12\" },\r\n { data: \"DateLastStatusStart\", title: \"Last Status Change\", className: \"completion-date text-left font-size12 nowrap\", render: RenderDateMDY },\r\n ], [[4, 'desc']]);\r\n }\r\n\r\n private initializeAchievementChart(): void {\r\n this.achievementChart = Highcharts.chart('contracts-summary-chart', {\r\n chart: {\r\n zoomType: 'x',\r\n resetZoomButton: {\r\n position: {\r\n align: 'right', // right by default\r\n verticalAlign: 'bottom',\r\n x: -50,\r\n y: 50\r\n },\r\n relativeTo: 'chart'\r\n }\r\n },\r\n tooltip: {\r\n //xDateFormat: '%m/%d/%Y',\r\n xDateFormat: '%d%b%Y',\r\n shared: true,\r\n split: false,\r\n enabled: true,\r\n formatter: function (tooltip) {\r\n //to make points appear in order in tooltip\r\n this.points.reverse();\r\n return tooltip.defaultFormatter.call(this, tooltip);\r\n },\r\n },\r\n title: {\r\n text: ''\r\n },\r\n credits: { enabled: false },\r\n plotOptions: {\r\n line: {\r\n marker: { enabled: false }\r\n }\r\n },\r\n yAxis: {\r\n title: { text: 'Contract Count' }\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n crosshair: {\r\n snap: true\r\n },\r\n labels: {\r\n formatter: function () {\r\n //return Highcharts.dateFormat('%m/%d/%y', this.value);\r\n return Highcharts.dateFormat('%d%b%y', this.value);\r\n }\r\n },\r\n events: {\r\n afterSetExtremes: function (event) {\r\n if (event.max < event.dataMax || event.min > event.dataMin) {\r\n $(\"#contracts-summary-chart-resetZoom\").show();\r\n\r\n }\r\n else {\r\n $(\"#contracts-summary-chart-resetZoom\").hide();\r\n }\r\n }\r\n }\r\n },\r\n legend: {\r\n enabled: true,\r\n reversed: true,\r\n margin: 30,\r\n align: 'right',\r\n verticalAlign: 'middle',\r\n layout: 'vertical'\r\n },\r\n series: [ //need empty to replace when data loaded\r\n { name: 'Fully Executed', data: [], color: '#0093af' },\r\n { name: 'Signature', data: [], color: '#5b9bd5' },\r\n { name: 'Negotiation', data: [], color: '#673284' },\r\n //{ name: 'Draft', data: [], color: '#f2ba49' },\r\n //{ name: 'Requested', data: [], color: '#de4846' },\r\n ] \r\n });\r\n }\r\n\r\n private initializePieChart(): void {\r\n this.pieChart = Highcharts.chart('contracts-summary-pie-chart', {\r\n chart: {\r\n //plotBackgroundColor: null,\r\n //plotBorderWidth: null,\r\n //plotShadow: false,\r\n type: 'pie',\r\n styledMode: false\r\n },\r\n title: {\r\n text: undefined\r\n },\r\n tooltip: {\r\n pointFormat: '{point.percentage:.1f}%'\r\n },\r\n credits: { enabled: false },\r\n //accessibility: {\r\n // point: {\r\n // valueSuffix: '%'\r\n // }\r\n //},\r\n plotOptions: {\r\n pie: {\r\n allowPointSelect: true,\r\n cursor: 'pointer',\r\n dataLabels: {\r\n enabled: false,\r\n format: '{point.percentage:.1f} %'\r\n },\r\n showInLegend: true\r\n }\r\n },\r\n series: [{\r\n colorByPoint: false,\r\n color: 'red',\r\n data: []\r\n }]\r\n });\r\n }\r\n\r\n showDetailTableModal(id: any, type: string): void {\r\n\r\n for (let i = 0; i < this.dataRows.length; ++i) {\r\n if (this.dataRows[i].ContractType == id) {\r\n let data: any[] = this.dataRows[i].getSelectedData(type);\r\n this.detailsTableModal.setData(data);\r\n this.detailsTableModal.show(this.dataRows[i].ContractType + \" (n = \" + data.length + \")\");\r\n break;\r\n }\r\n }\r\n }\r\n\r\n private initiatlizeButtons(): void {\r\n $(\"#contracts-summary-chart-resetZoom\").hide();\r\n\r\n $(\"#contracts-summary-chart-resetZoom\").click(() => {\r\n this.achievementChart.zoomOut();\r\n })\r\n }\r\n}\r\n\r\nexport class ContractSummaryTableRow {\r\n ContractType: string;\r\n OrderBy: number = -1;\r\n\r\n Values: number[] = [0,0,0,0,0,0];\r\n DisplayValues: string[] = [];\r\n Contracts: Contract[][];\r\n\r\n constructor() { this.Contracts = [[], [], [], [], []]; }\r\n\r\n addValue(contract: Contract): void {\r\n\r\n let index: number = -1;\r\n switch (contract.StatusGroup) {\r\n case \"Requested\": { index = 0; break; }\r\n case \"Draft\": { index = 1; break; }\r\n case \"Negotiation\": { index = 2; break; }\r\n case \"Signature\": { index = 3; break; }\r\n case \"Fully Executed\": { index = 4; break; }\r\n }\r\n\r\n if (index >= 0) {\r\n this.Values[index] += 1;\r\n this.Contracts[index].push(contract);\r\n\r\n this.Values[5] += 1; //overall\r\n }\r\n }\r\n\r\n setDisplayValues(): void {\r\n this.DisplayValues[0] = this.getDisplayValue(this.Values[0], \"requested\");\r\n this.DisplayValues[1] = this.getDisplayValue(this.Values[1], \"draft\");\r\n this.DisplayValues[2] = this.getDisplayValue(this.Values[2], \"negotiation\");\r\n this.DisplayValues[3] = this.getDisplayValue(this.Values[3], \"signature\");\r\n this.DisplayValues[4] = this.getDisplayValue(this.Values[4], \"fully-executed\");\r\n this.DisplayValues[5] = this.getDisplayValue(this.Values[5], \"overall\");\r\n }\r\n\r\n private getDisplayValue(count: number, type: string): string {\r\n return \"\" + count + \"\";\r\n }\r\n\r\n getSelectedData(type: string): any[] {\r\n if (type == \"requested\") return this.Contracts[0];\r\n else if (type == \"draft\") return this.Contracts[1];\r\n else if (type == \"negotiation\") return this.Contracts[2];\r\n else if (type == \"signature\") return this.Contracts[3];\r\n else if (type == \"fully-executed\") return this.Contracts[4];\r\n else if (type == \"overall\") return [...this.Contracts[0], ...this.Contracts[1], ...this.Contracts[2], ...this.Contracts[3], ...this.Contracts[4]];\r\n }\r\n}\r\n\r\nexport class ContractSummaryChartDataSeries {\r\n name: string;\r\n color: string;\r\n data: any[]; //Date.getTime(), count\r\n\r\n constructor(name: string, color: string) {\r\n this.name = name;\r\n this.color = color;\r\n this.data = [];\r\n }\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { DateUpdatedSection } from \"../../../../shared/components/date-updated-section/date-updated-section.view\";\r\nimport { RemoveElementFromArray } from \"../../../../shared/scripts/array-functions\";\r\nimport { RenderNullableNumber } from \"../../../../shared/scripts/table-functions\";\r\nimport { ExecutiveSummaryEntry } from \"./executive-summary.entities\";\r\n\r\n\r\n\r\nexport class ExecutiveSummaryPage {\r\n\r\n dataTables: any[] = [];\r\n\r\n openParentHashes: string[] = [];\r\n\r\n constructor(DataJson: any, LastUpdatedJson: any) {\r\n\r\n $(() => {\r\n\r\n new DateUpdatedSection(LastUpdatedJson);\r\n\r\n let data: ExecutiveSummaryEntry[] = plainToClass(ExecutiveSummaryEntry, DataJson);\r\n data.forEach((element: ExecutiveSummaryEntry) => element.initialize());\r\n\r\n let screenedRow: ExecutiveSummaryEntry = data.find(i => i.Label == \"Screened (Post Consent)\");\r\n let randomizedRow: ExecutiveSummaryEntry = data.find(i => i.Label == \"Randomized\");\r\n\r\n data.forEach((element: ExecutiveSummaryEntry) => {\r\n if (element.Type == 0 || element.Type == 2 || element.Type == 4) {\r\n if (element.Group == \"Participant-Screen\") element.createDisplayValues(screenedRow);\r\n else if (element.Group == \"Participant-Random\") element.createDisplayValues(randomizedRow);\r\n }\r\n });\r\n\r\n //console.log(data);\r\n\r\n ////console.log(allRows);\r\n\r\n this.initializeSection(data.filter((entry: ExecutiveSummaryEntry) => entry.Group == \"Site\"), \"executive-summary-sites-table\", \"Sites\");\r\n this.initializeSection(data.filter((entry: ExecutiveSummaryEntry) => entry.Group == \"Participant-Screen\" || entry.Group == \"Participant-Random\"), \"executive-summary-participants-table\", \"Participants\");\r\n //this.initializeSection(data.filter((entry: ExecutiveSummaryEntry) => entry.Group == \"AdverseEffects\"), \"executive-summary-adverse-effects-table\");\r\n\r\n //this.initializeTable(allRows);\r\n this.setRowVisibility();\r\n this.resetColumnVisibility();\r\n\r\n // Need to bind header clicks off body+selector rather than the table\r\n // because the fixedHeaders extension creates new tables when scrolling\r\n $('body').on('click', 'thead th', (event) => {\r\n\r\n this.dataTables.forEach((dt) => {\r\n if (dt.column($(event.currentTarget)).index()) {\r\n this.toggleColumns(dt.column($(event.currentTarget)).index(), dt);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n\r\n private initializeSection(data: ExecutiveSummaryEntry[], tableId: string, tableTitle: string): void {\r\n\r\n //console.log(tableTitle, data);\r\n\r\n let parentRows: ExecutiveSummaryEntry[] = data.filter((element: ExecutiveSummaryEntry) => (element.Type != 2) && (element.Type != 5) && (element.Type != 6));\r\n parentRows.sort((a: ExecutiveSummaryEntry, b: ExecutiveSummaryEntry) => a.OrderBy - b.OrderBy);\r\n\r\n let alphabeticalChildrenRows: ExecutiveSummaryEntry[] = data.filter((entry: ExecutiveSummaryEntry) => entry.Type == 2 || entry.Type == 5); //need to sort child rows\r\n let sortedChildrenRows: ExecutiveSummaryEntry[] = data.filter((entry: ExecutiveSummaryEntry) => entry.Type == 6); //need to sort child rows\r\n alphabeticalChildrenRows.sort((a: ExecutiveSummaryEntry, b: ExecutiveSummaryEntry) => {\r\n // special sorting for reason child rows (Other and Unknown at the end)\r\n if (a.Type === 5) {\r\n if (a.Label.startsWith('Other')) return 1;\r\n if (b.Label.startsWith('Other')) return -1;\r\n if (a.Label.startsWith('Unknown')) return 1;\r\n if (b.Label.startsWith('Unknown')) return -1;\r\n }\r\n\r\n return a.Label.localeCompare(b.Label);\r\n });\r\n sortedChildrenRows.sort((a: ExecutiveSummaryEntry, b: ExecutiveSummaryEntry) => a.OrderBy - b.OrderBy);\r\n\r\n let childrenRows: ExecutiveSummaryEntry[] = [...alphabeticalChildrenRows, ...sortedChildrenRows];\r\n\r\n let allRows: ExecutiveSummaryEntry[] = [];\r\n for (let i = 0; i < parentRows.length; ++i) {\r\n\r\n parentRows[i].HasChildren = (parentRows[i].Type == 1) || (parentRows[i].Type == 4);\r\n parentRows[i].ParentHash = \"AlwaysShow\";\r\n allRows.push(parentRows[i]);\r\n\r\n if ((parentRows[i].Type == 1) || (parentRows[i].Type == 4)) {\r\n let children: ExecutiveSummaryEntry[] = childrenRows.filter((child: ExecutiveSummaryEntry) => child.ParentId == parentRows[i].Id);\r\n //console.log(children);\r\n for (let j = 0; j < children.length; ++j) {\r\n children[j].ParentHash = \"ChildOf\" + parentRows[i].Id;\r\n children[j].HasChildren = false;\r\n children[j].IsLastChild = (j == (children.length - 1));\r\n allRows.push(children[j]);\r\n\r\n if (!this.openParentHashes.includes(children[j].ParentHash)) { this.openParentHashes.push(children[j].ParentHash); }\r\n }\r\n }\r\n }\r\n\r\n this.initializeTable(allRows, tableId, tableTitle);\r\n }\r\n\r\n private initializeTable(data: ExecutiveSummaryEntry[], tableId: string, tableTitle: string): void {\r\n\r\n let dataTable: any = $('#' + tableId).DataTable({\r\n \"dom\": '<\"top-controls\"B0>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n search: false,\r\n scrollX: false,\r\n //scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n ordering: false,\r\n fixedHeader: true,\r\n columns: [\r\n { className: 'details-control', orderable: false, data: null, defaultContent: '', width: '5px' },\r\n { data: \"Label\", title: `
${tableTitle}
`, className: \"text-left font-size12\", width: '400px' },\r\n { data: \"DisplayValues.0\", title: 'VITAL', className: \"text-center font-size12 nowrap protocol-column\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.1\", title: \"Autonomic
Dysfunction\", className: \"text-center font-size12 nowrap trial-column vital-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.2\", title: \"Cognitive
Dysfunction\", className: \"text-center font-size12 nowrap trial-column vital-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.3\", title: \"Exercise
Intolerance\", className: \"text-center font-size12 nowrap trial-column vital-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.4\", title: \"NEURO\", className: \"text-center font-size12 nowrap\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.5\", title: \"tDCS & BrainHQ\", className: \"text-center font-size12 nowrap trial-column neuro-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.6\", title: \"AUTONOMIC\", className: \"text-center font-size12 nowrap protocol-column\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.7\", title: \"IVIG\", className: \"text-center font-size12 nowrap trial-column autonomic-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.8\", title: \"Ivabradine\", className: \"text-center font-size12 nowrap trial-column autonomic-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.9\", title: \"SLEEP\", className: \"text-center font-size12 nowrap protocol-column\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.10\", title: \"Modafinil/Solriamfetol\", className: \"text-center font-size12 nowrap trial-column sleep-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.11\", title: \"Melatonin/Light\", className: \"text-center font-size12 nowrap trial-column sleep-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.12\", title: \"ENERGIZE\", className: \"text-center font-size12 nowrap protocol-column\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.13\", title: \"Cardiopulmonary Rehab\", className: \"text-center font-size12 nowrap trial-column energize-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.14\", title: \"Structured Pacing\", className: \"text-center font-size12 nowrap trial-column energize-trial\", width: '100px', render: RenderNullableNumber },\r\n { data: \"DisplayValues.15\", title: \"TOTAL 1\", className: \"text-center font-size12 nowrap\", width: '100px', render: RenderNullableNumber },\r\n { data: \"OrderBy\", title: \"\", visible: false },\r\n { data: \"ParentHash\", title: \"\", visible: false, searchable: true },\r\n ],\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n order: [[5, 'asc']],\r\n data: data,\r\n rowCallback: (row, data: any, index) => {\r\n //hide expand for rows without children\r\n if (!data.HasChildren) {\r\n $('td:eq(0)', row).removeClass('details-control');\r\n\r\n if (data.Type == 2) {\r\n $(row).addClass('child-row');\r\n\r\n if (data.IsLastChild) {\r\n $(row).addClass('last');\r\n }\r\n }\r\n\r\n if (data.Type == 5 || data.Type == 6) {\r\n $(row).addClass('reason-child-row');\r\n\r\n if (data.IsLastChild) {\r\n $(row).addClass('last');\r\n }\r\n }\r\n }\r\n else {\r\n $(row).addClass('selectable');\r\n if (data.Type == 4) {\r\n $(row).addClass('reason-row');\r\n }\r\n }\r\n\r\n //add indent classes\r\n let cssIndent: string = \"indent-\" + data.Indent;\r\n $('td:eq(1)', row).addClass(cssIndent);\r\n\r\n if (data.Type == 3) {\r\n $('td:eq(1)', row).addClass('font-italic font-bold');\r\n }\r\n }\r\n });\r\n\r\n dataTable.on('click', 'tbody tr', (event) => {\r\n\r\n let selectedEntry: ExecutiveSummaryEntry = dataTable.row($(event.currentTarget)).data();\r\n let tr: any = $(event.currentTarget).closest('tr');\r\n // console.log(selectedEntry);\r\n\r\n if (selectedEntry.HasChildren) {\r\n let parentHash: string = \"ChildOf\" + selectedEntry.Id;\r\n\r\n if (this.openParentHashes.includes(parentHash)) {\r\n RemoveElementFromArray(this.openParentHashes, parentHash);\r\n tr.addClass('opened');\r\n }\r\n else {\r\n this.openParentHashes.push(parentHash);\r\n tr.removeClass('opened');\r\n }\r\n this.setRowVisibility();\r\n }\r\n });\r\n\r\n this.dataTables.push(dataTable);\r\n }\r\n\r\n private setRowVisibility(): any {\r\n let filterString: string = \"\";\r\n\r\n if (this.openParentHashes.length == 0) { filterString = \"ShowEverything\"; }\r\n else {\r\n this.openParentHashes.forEach((parentHash: string) => {\r\n if (filterString.length > 0) filterString += \"|\";\r\n filterString += parentHash;\r\n });\r\n }\r\n\r\n // console.log(\"filter string = \" + filterString);\r\n filterString = \"^((?!\" + filterString + \").)*$\";\r\n\r\n this.dataTables.forEach((dt: any) => { dt.columns(19).search(filterString, true, false).draw(); });\r\n }\r\n\r\n private resetColumnVisibility(clearAll=false) {\r\n\r\n this.dataTables.forEach((dt) => {\r\n // Associated Columns (Appendix/Trial, Symptom Cluster, etc.)\r\n [3,4,5,7,9,10,12,13,15,16].forEach((i) => dt.column(i).visible(false));\r\n // Protocols and Total\r\n [2,6,8,11,14,17].forEach((i) => {\r\n (clearAll) ? dt.column(i).visible(false) : dt.column(i).visible(true);\r\n $(dt.column(i).header()).removeClass('protocol-open');\r\n });\r\n\r\n });\r\n }\r\n\r\n private toggleColumns(idx: any, dataTable: any) {\r\n if ([2, 8, 11, 14].indexOf(idx) > -1) {\r\n const v = dataTable.column(idx + 1).visible();\r\n // this.resetColumnVisibility(!v); // Drill-down to appendices\r\n this.resetColumnVisibility(false); // Expand appendices inline\r\n if (!v) {\r\n this.dataTables.forEach((dt) => {\r\n dt.column(idx).visible(true);\r\n $(dt.column(idx).header()).addClass('protocol-open');\r\n dt.column(idx + 1).visible(true);\r\n if ([2, 8, 11, 14].indexOf(idx) > -1) dt.column(idx + 2).visible(true);\r\n if ([2].indexOf(idx) > -1) dt.column(idx + 3).visible(true);\r\n });\r\n }\r\n } else if (idx > 2) {\r\n this.resetColumnVisibility(false);\r\n }\r\n }\r\n\r\n}","\r\n\r\nexport class Site {\r\n Id: number;\r\n Name: string;\r\n StudyIds: number[] = [];\r\n ActivationTimestamps: number[] = [];\r\n\r\n constructor(id: number, name: string) { this.Id = id; this.Name = name; }\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { DateUpdatedSection } from \"../../../../shared/components/date-updated-section/date-updated-section.view\";\r\nimport { DoArraysOverlap, Unique } from \"../../../../shared/scripts/array-functions\";\r\nimport { IFilter } from \"../../../../shared/scripts/filtering/filtering.entities\";\r\nimport { GetSelectedDropdownValues, InitializeFilterDropdown } from \"../../../../shared/scripts/filtering/filtering.utilities\";\r\nimport { IStudyAppendixSiteFilterParent, StudyAppendixSiteFilterSection } from \"../../../../shared/scripts/filtering/filtering.study-appendix-site\";\r\nimport { CreateSeries_ActualDays, CreateSeries_EverDay } from \"../../../../shared/scripts/graphing/graphing-functions\";\r\nimport { ForecastGraphDataPoint } from \"./forecasts.entities\";\r\nimport { ForecastsLookup } from \"./forecasts.lookup\";\r\nimport { Study } from \"../../../../shared/entities/scripts/study\";\r\nimport { Appendix } from \"../../../../shared/entities/scripts/appendix\";\r\nimport { FormatNumberWithCommas } from \"../../../../shared/scripts/number-functions\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\nrequire('highcharts/modules/lollipop')(Highcharts);\r\nrequire('highcharts/highcharts-more')(Highcharts);\r\nrequire('highcharts/modules/dumbbell')(Highcharts);\r\nHighcharts.setOptions({\r\n lang: {\r\n thousandsSep: ','\r\n }\r\n});\r\n\r\nexport class ForecastsPage implements IStudyAppendixSiteFilterParent {\r\n\r\n filter: StudyAppendixSiteFilterSection;\r\n\r\n msaAspirational: ForecastGraphDataPoint[];\r\n msaActual: ForecastGraphDataPoint[];\r\n //prescreeningAspirational: ForecastGraphDataPoint[];\r\n //prescreeningActual: ForecastGraphDataPoint[];\r\n addendumAspirational: ForecastGraphDataPoint[];\r\n addendumActual: ForecastGraphDataPoint[];\r\n activationAspirational: ForecastGraphDataPoint[]\r\n activationActual: ForecastGraphDataPoint[];\r\n randomizedAspirational: ForecastGraphDataPoint[];\r\n randomizedActual: ForecastGraphDataPoint[];\r\n irbSubmissionsAspirational: ForecastGraphDataPoint[];\r\n irbSubmissionsActual: ForecastGraphDataPoint[];\r\n\r\n siteActivationChart: any;\r\n randomizationChart: any;\r\n addendumChart: any;\r\n //prescreeningChart: any;\r\n irbSubmissionsChart: any;\r\n msaChart: any;\r\n\r\n constructor(MsaAspirationalJson: any, MsaActualJson: any, IrbSubmissionsAspirationalJson: any, IrbSubmissionsActualJson: any, SiteAddendumAspirationalJson: any, SiteAddendumActualJson: any, ActivationAspirationalJson: any, ActivationActualJson: any, RandomizedAspirationalJson: any, RandomizedActualJson: any, LastUpdatedJson: any) {\r\n\r\n $(() => {\r\n\r\n new DateUpdatedSection(LastUpdatedJson);\r\n\r\n //console.log(\"MsaAspirational\", MsaAspirationalJson);console.log(\"MsaActual\", MsaActualJson); console.log(\"PrescreeningAspirational\", PrescreeningAspirationalJson); console.log(\"PrescreeningActual\", PrescreeningActualJson); console.log(\"SiteAddendumAspirational\", SiteAddendumAspirationalJson); console.log(\"SiteAddendumActual\", SiteAddendumActualJson); console.log(\"SiteActivationAspirational\", ActivationAspirationalJson); console.log(\"SiteActivationActual\", ActivationActualJson); console.log(\"RandomizedAspirational\", RandomizedAspirationalJson); console.log(\"RandomizedActual\", RandomizedActualJson);\r\n //console.log(ActivationActualJson);\r\n\r\n this.msaAspirational = this.initializeGraphDataPoints(MsaAspirationalJson);\r\n this.msaActual = this.initializeGraphDataPoints(MsaActualJson);\r\n //this.prescreeningAspirational = this.initializeGraphDataPoints(PrescreeningAspirationalJson);\r\n //this.prescreeningActual = this.initializeGraphDataPoints(PrescreeningActualJson);\r\n this.addendumAspirational = this.initializeGraphDataPoints(SiteAddendumAspirationalJson);\r\n this.addendumActual = this.initializeGraphDataPoints(SiteAddendumActualJson);\r\n this.activationAspirational = this.initializeGraphDataPoints(ActivationAspirationalJson);\r\n this.activationActual = this.initializeGraphDataPoints(ActivationActualJson);\r\n //this.randomizedAspirational = this.initializeGraphDataPoints(RandomizedAspirationalJson).filter((x: ForecastGraphDataPoint) => !x.IsStudyWide); //only study-wide shown in forecasting for now\r\n this.randomizedAspirational = this.initializeGraphDataPoints(RandomizedAspirationalJson); \r\n this.randomizedActual = this.initializeGraphDataPoints(RandomizedActualJson);\r\n this.irbSubmissionsAspirational = this.initializeGraphDataPoints(IrbSubmissionsAspirationalJson);\r\n this.irbSubmissionsActual = this.initializeGraphDataPoints(IrbSubmissionsActualJson);\r\n\r\n //console.log(\"MsaAspirational\", this.msaAspirational); console.log(\"MsaActual\", this.msaActual); console.log(\"SiteAddendumAspirational\", this.addendumAspirational); console.log(\"SiteAddendumActual\", this.addendumActual); console.log(\"SiteActivationAspirational\", this.activationAspirational); console.log(\"SiteActivationActual\", this.activationActual); console.log(\"RandomizedAspirational\", this.randomizedAspirational); console.log(\"RandomizedActual\", this.randomizedActual);\r\n //console.log(\"SiteActivationAspirational\", this.activationAspirational); console.log(\"SiteActivationActual\", this.activationActual);\r\n //console.log(\"SiteAddendumAspirational\", this.addendumAspirational);\r\n //console.log(\"SiteActivationAspirational\", this.activationAspirational);\r\n\r\n this.randomizationChart = this.initializeChart('randomization-forecast-chart', \"Participants\", this.createChartSeries('#152850', true));\r\n this.siteActivationChart = this.initializeChart('siteactivation-forecast-chart', \"Sites\", this.createChartSeries('#152850'));\r\n this.addendumChart = this.initializeChart('addendums-forecast-chart', \"Contracts\", this.createChartSeries('#152850'));\r\n //this.prescreeningChart = this.initializeChart('prescreening-forecast-chart', \"Contracts\", this.createChartSeries('#152850'));\r\n this.irbSubmissionsChart = this.initializeChart('irbsubmissions-forecast-chart', \"IRB Submissions\", this.createChartSeries('#152850'));\r\n this.msaChart = this.initializeChart('msa-forecast-chart', \"Contracts\", this.createChartSeries('#152850'));\r\n\r\n this.initializeFilter();\r\n\r\n $('#loading-indicator').hide();\r\n $('.loaded-content').removeClass('invisible');\r\n\r\n //this.triggerFilter();\r\n\r\n this.initiateZoomButtons();\r\n \r\n });\r\n\r\n }\r\n\r\n private initializeFilter(): void {\r\n let foundPrimeIds: number[] = [];\r\n let foundAppendixIds: number[] = [];\r\n let allPrimes: Study[] = [];\r\n let allAppendices: Appendix[] = [];\r\n\r\n //assumes site forecasts will be comprehensive. can always add a check for randomization forecast\r\n this.activationAspirational.forEach((x: ForecastGraphDataPoint) => {\r\n if (!foundPrimeIds.includes(x.PrimeId)) {\r\n allPrimes.push(new Study(x.PrimeId, Study.GetStudyName(x.PrimeId)));\r\n foundPrimeIds.push(x.PrimeId);\r\n }\r\n if (x.IsOverall == 0 && !foundAppendixIds.includes(x.AppendixId)) {\r\n allAppendices.push(new Appendix(x.AppendixId, x.PrimeId, Appendix.GetAppendixName(x.AppendixId)));\r\n foundAppendixIds.push(x.AppendixId);\r\n }\r\n });\r\n\r\n //console.log(allPrimes, allAppendices);\r\n\r\n this.filter = new StudyAppendixSiteFilterSection(\"#study-dropdown\", \"#appendix-dropdown\", undefined, allPrimes, allAppendices, undefined, this);\r\n\r\n //InitializeFilterDropdown('#prime-contract-dropdown', [\"AUTONOMIC\", \"ENERGIZE\", \"NEURO\", \"SLEEP\", \"VITAL\", \"Infrastructure\"], this);\r\n\r\n //static as not based on filters\r\n this.msaChart.series[0].setData(CreateSeries_ActualDays(this.msaAspirational), true);\r\n this.msaChart.series[1].setData(CreateSeries_EverDay(this.msaActual), true);\r\n $('#msa-count-label').html(this.setCountLabel(this.msaChart.series[1].dataMax));\r\n\r\n\r\n }\r\n\r\n private initializeGraphDataPoints(json: any): ForecastGraphDataPoint[] {\r\n\r\n let output: ForecastGraphDataPoint[] = plainToClass(ForecastGraphDataPoint, json);\r\n output.map((point: ForecastGraphDataPoint) => {\r\n point.initialize();\r\n return point;\r\n });\r\n //output = output.sort((a, b) => a.getTimestamp() - b.getTimestamp());\r\n return output;\r\n }\r\n\r\n private initializeChart(id: string, yAxisLabel: string, series: any[] ): any {\r\n let chart: any = Highcharts.chart(id, {\r\n chart: {\r\n zoomType: 'x',\r\n resetZoomButton: {\r\n position: {\r\n align: 'center', // right by default\r\n verticalAlign: 'bottom',\r\n x: 0,\r\n y: 0\r\n },\r\n relativeTo: 'chart'\r\n }\r\n },\r\n tooltip: {\r\n //xDateFormat: '%m/%d/%Y',\r\n xDateFormat: '%d%b%Y',\r\n shared: true,\r\n split: false,\r\n enabled: true,\r\n formatter: function (tooltip) {\r\n //to make points appear in order in tooltip\r\n this.points.reverse();\r\n return tooltip.defaultFormatter.call(this, tooltip);\r\n },\r\n },\r\n title: {\r\n text: ''\r\n },\r\n credits: { enabled: false },\r\n plotOptions: {\r\n line: {\r\n marker: { enabled: false }\r\n }\r\n },\r\n yAxis: {\r\n title: { text: yAxisLabel },\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.value, 0, '', ',');\r\n }\r\n }\r\n },\r\n xAxis: {\r\n type: 'datetime',\r\n crosshair: {\r\n snap: true\r\n },\r\n labels: {\r\n formatter: function () {\r\n return Highcharts.dateFormat('%d%b%y', this.value);\r\n }\r\n },\r\n events: {\r\n afterSetExtremes: function (event) {\r\n let resetZoomId = \"#\" + id + \"-resetZoom\";\r\n if (event.max < event.dataMax || event.min > event.dataMin) {\r\n $(resetZoomId).show();\r\n \r\n }\r\n else {\r\n $(resetZoomId).hide();\r\n }\r\n }\r\n }\r\n },\r\n legend: {\r\n enabled: true,\r\n reversed: true,\r\n margin: 10,\r\n align: 'center',\r\n verticalAlign: 'bottom',\r\n layout: 'horizontal',\r\n symbolHeight: 8,\r\n symbolWidth: 8,\r\n symbolRadius: 4,\r\n symbolPadding: 7\r\n },\r\n series: series\r\n });\r\n\r\n return chart;\r\n }\r\n\r\n private createChartSeries(color: string, isRandomizationChart: boolean = false): any[] {\r\n let series: any[] = [];\r\n if (isRandomizationChart) {\r\n //series.push({ id: 'Expected w/o site payments', name: 'Expected (w/o + Site Payments)', data: [], color: '#fdc757', type: 'scatter', marker: { radius: 4 } });\r\n series.push({ id: 'Expected w/o site payments', name: 'Expected (w/o + Site Payments)', data: [], color: '#fdc757', type: 'line', lineWidth: 0, marker: { enabled: true, radius: 5, symbol: 'triangle' }, states: { hover: { enabled: false } } });\r\n }\r\n series.push({ id: 'Expected', name: 'Expected', data: [], color: '#de4846', dashStyle: 'dot', type: 'lollipop', connectorWidth: 1, marker: { radius: 3, symbol: 'circle' } });\r\n series.push({ id: 'Actual', name: 'Actual', data: [], color: color, dashStyle: 'solid', step: 'left', type: 'line', marker: { lineWidth: '0', lineColor: color } });\r\n\r\n return series;\r\n }\r\n\r\n FilterUpdated(studyIds: number[], appendixIds: number[], siteIds: number[]) {\r\n //console.log(\"FilterUpdated\", studyIds, appendixIds);\r\n\r\n //console.log(this.randomizedAspirational, this.randomizedActual);\r\n //console.log(this.activationAspirational, this.activationActual);\r\n //console.log(this.randomizedActual.filter((point: ForecastGraphDataPoint) => appendixIds.includes(point.AppendixId)));\r\n //console.log(CreateSeries_EverDay(this.randomizedActual.filter((point: ForecastGraphDataPoint) => appendixIds.includes(point.AppendixId))));\r\n //console.log(this.activationActual);\r\n\r\n this.randomizationChart.series[1].setData(CreateSeries_ActualDays(this.randomizedAspirational.filter((point: ForecastGraphDataPoint) => appendixIds.includes(point.AppendixId) && point.TypeId == 2 && point.IsOverall == 0)), true);\r\n this.randomizationChart.series[2].setData(CreateSeries_EverDay(this.randomizedActual.filter((point: ForecastGraphDataPoint) => appendixIds.includes(point.AppendixId))), true);\r\n\r\n //only show extra out-dated expected when only VITAL appendix is selected\r\n if ((studyIds.length == 1 && studyIds[0] == 2) || (appendixIds.length == 1 && appendixIds[0] == 1)) {\r\n this.randomizationChart.get('Expected w/o site payments').update({ visible: true, showInLegend: true });\r\n this.randomizationChart.series[0].setData(CreateSeries_ActualDays(this.randomizedAspirational.filter((point: ForecastGraphDataPoint) => appendixIds.includes(point.AppendixId) && point.TypeId == 4 && point.IsOverall == 0)), true); \r\n }\r\n else {\r\n this.randomizationChart.get('Expected w/o site payments').update({ visible: false, showInLegend: false });\r\n }\r\n $('#randomization-count-label').html(this.setCountLabel(this.randomizationChart.series[2].dataMax));\r\n\r\n\r\n //if all appendices for a study are selected, use overall, otherwise use appendix-level\r\n let appendicesToShow: number[] = Appendix.GetAppendicesToShow(appendixIds);\r\n this.siteActivationChart.series[0].setData(CreateSeries_ActualDays(this.activationAspirational.filter((point: ForecastGraphDataPoint) => appendicesToShow.includes(point.AppendixId))), true);\r\n this.siteActivationChart.series[1].setData(CreateSeries_EverDay(this.activationActual.filter((point: ForecastGraphDataPoint) => DoArraysOverlap(appendicesToShow, point.AppendixIds))), true);\r\n $('#activated-sites-count-label').html(this.setCountLabel(this.siteActivationChart.series[1].dataMax));\r\n\r\n let studiesToShow: number[] = Study.GetStudiesToShow(appendixIds);\r\n\r\n // this isn't optimal\r\n // bug with the forecast not being cleared on filter change.\r\n // on filter change, reusing the series (like other charts) led to a \"ghost\" set of lollipops not being cleared (the intitial set)\r\n this.addendumChart.series[1].remove();\r\n this.addendumChart.series[0].remove();\r\n let newSeries: any[] = this.createChartSeries('#152850');\r\n this.addendumChart.addSeries(newSeries[0]);\r\n this.addendumChart.addSeries(newSeries[1]);\r\n this.addendumChart.series[0].setData(CreateSeries_ActualDays(this.addendumAspirational.filter((point: ForecastGraphDataPoint) => studiesToShow.includes(point.PrimeId))), false);\r\n this.addendumChart.series[1].setData(CreateSeries_EverDay(this.addendumActual.filter((point: ForecastGraphDataPoint) => studiesToShow.includes(point.PrimeId))), false);\r\n this.addendumChart.redraw();\r\n $('#addendums-count-label').html(this.setCountLabel(this.addendumChart.series[1].dataMax));\r\n\r\n this.irbSubmissionsChart.series[0].setData(CreateSeries_ActualDays(this.irbSubmissionsAspirational.filter((point: ForecastGraphDataPoint) => studiesToShow.includes(point.PrimeId))), true);\r\n this.irbSubmissionsChart.series[1].setData(CreateSeries_EverDay(this.irbSubmissionsActual.filter((point: ForecastGraphDataPoint) => studiesToShow.includes(point.PrimeId))), true);\r\n $('#irbsubmissions-count-label').html(this.setCountLabel(this.irbSubmissionsChart.series[1].dataMax));\r\n\r\n }\r\n\r\n private setCountLabel(amount: number): string {\r\n if (amount == undefined) return \"0\";\r\n else return FormatNumberWithCommas(amount + \"\");\r\n }\r\n\r\n private initiateZoomButtons() {\r\n $(\"#randomization-forecast-chart-resetZoom\").hide();\r\n $(\"#siteactivation-forecast-chart-resetZoom\").hide();\r\n $(\"#addendums-forecast-chart-resetZoom\").hide();\r\n $(\"#irbsubmissions-forecast-chart-resetZoom\").hide();\r\n //$(\"#prescreening-forecast-chart-resetZoom\").hide();\r\n $(\"#msa-forecast-chart-resetZoom\").hide();\r\n\r\n $(\"#randomization-forecast-chart-resetZoom\").click(() => {\r\n this.randomizationChart.zoomOut();\r\n });\r\n\r\n $(\"#siteactivation-forecast-chart-resetZoom\").click(() => {\r\n this.siteActivationChart.zoomOut();\r\n });\r\n\r\n $(\"#addendums-forecast-chart-resetZoom\").click(() => {\r\n this.addendumChart.zoomOut();\r\n });\r\n\r\n //$(\"#prescreening-forecast-chart-resetZoom\").click(() => {\r\n // this.prescreeningChart.zoomOut();\r\n //})\r\n ;\r\n $(\"#irbsubmissions-forecast-chart-resetZoom\").click(() => {\r\n this.irbSubmissionsChart.zoomOut();\r\n });\r\n\r\n $(\"#msa-forecast-chart-resetZoom\").click(() => {\r\n this.msaChart.zoomOut();\r\n });\r\n }\r\n}\r\n","\r\n\r\nexport class FileTimestamp {\r\n Name: string;\r\n FileDate: string;\r\n\r\n initialize(): void { }\r\n}","import { FormatDate, GetDateFromString } from \"../../../../shared/scripts/date-functions\";\r\n\r\nexport class Announcement {\r\n Id: number;\r\n Title: string;\r\n Description: string;\r\n AnnouncementDate: string;\r\n AnnouncementDateFormatted: string;\r\n Link: string;\r\n ImageFile: string;\r\n SortOrder: number;\r\n\r\n Initialize(): void {\r\n const d = GetDateFromString(this.AnnouncementDate, 'hyphens-year-month-day');\r\n this.AnnouncementDateFormatted = FormatDate(d, \"mo-day-year\");\r\n }\r\n}","\r\n\r\n\r\nexport function SetActiveTab(tabGroupId: string, activeTabId: string): void {\r\n\r\n //console.log(\"SetActiveTab\", tabGroupId, activeTabId);\r\n\r\n $('#' + tabGroupId + ' .tab-pane').removeClass('show active');\r\n $('#' + activeTabId).addClass('show active');\r\n\r\n}","import { FormatNumberWithCommas } from \"../../../../shared/scripts/number-functions\";\r\nimport { TableColumnGroup, TableColumnVisibilityController } from \"../../../../shared/scripts/table-column-visibility\";\r\nimport { RenderDateMDY, RenderNullableNumberWithSeparators, RenderProgressBar } from \"../../../../shared/scripts/table-functions\";\r\nimport { FinancialEntry } from \"./financials.entities\";\r\nimport { Unique } from \"../../../../shared/scripts/array-functions\";\r\nimport { IFilter } from \"../../../../shared/scripts/filtering/filtering.entities\";\r\nimport { GetSelectedDate, GetSelectedDropdownValues, InitializeDateSelector, InitializeFilterDropdown } from \"../../../../shared/scripts/filtering/filtering.utilities\";\r\n\r\nexport class InvoicesTable implements IFilter {\r\n\r\n tableId: string = \"invoices-table\";\r\n tableWrapperId: string = this.tableId + \"_wrapper\";\r\n modalTableId: string = \"invoice-modal-table\";\r\n modalTableWrapperId: string = this.modalTableId + \"_wrapper\";\r\n dataTable: any;\r\n modalDataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n modalTableColumnController: TableColumnVisibilityController;\r\n allInvoices: FinancialEntry[];\r\n currentInvoices: FinancialEntry[];\r\n\r\n constructor(financials: FinancialEntry[]) {\r\n\r\n financials.forEach(financial => financial.initialize());\r\n this.allInvoices = financials;\r\n this.currentInvoices = this.allInvoices;\r\n this.initializeDataTable();\r\n\r\n $('a[data-toggle=\"tab\"]').on('shown.bs.tab', (e) => {\r\n //to setup dropdowns to go downwards\r\n\r\n if (e.currentTarget.id == \"invoices-tab\") {\r\n ['#study-dropdown', '#vendor-dropdown', '#invoice-status-dropdown'].forEach((id: string) => $(id).selectpicker(\"refresh\"));\r\n }\r\n });\r\n\r\n return this;\r\n }\r\n\r\n initializeDataTable() {\r\n let columns: any[] = [\r\n { data: { _: \"StudyName\", display: \"StudyNameDisplay\" }, title: \"Category\", className: \"study text-left font-size12 nowrap\" },\r\n { data: { _: \"VendorName\", display: \"VendorNameDisplay\" }, title: \"Vendor\", className: \"vendor-name text-left font-size12 nowrap\" },\r\n { data: { _: \"Subcontract\", display: \"SubcontractDisplay\" }, title: \"Subcontract #\", className: \"subcontract text-left font-size12 nowrap\" },\r\n { data: { _: \"POID\", display: \"POIDDisplay\" }, title: \"PO/Vendor
ID\", className: \"poid text-center font-size12 nowrap\" },\r\n { data: { _: \"ProjectLevel\", display: \"ProjectLevelDisplay\" }, title: \"Project
Code\", className: \"project-level text-center font-size12 nowrap\" },\r\n //{ data: { _: \"SubcontractStartDateCompare\", display: \"SubcontractStartDateDisplay\" }, title: \"Subcontract Start Date\", className: \"subcontract-start-date text-left font-size12 nowrap\" },\r\n //{ data: { _: \"SubcontractEndDateParsed\", display: \"SubcontractEndDateDisplay\" }, title: \"Subcontract End Date\", className: \"subcontract-end-date text-left font-size12 nowrap\" },\r\n //{ data: \"SubcontractType\", title: \"Subcontract Type\", className: \"subcontract-type text-left font-size12 nowrap\" },\r\n //{ data: { _: \"FundedCommitmentAmount\", display: \"FundedCommitmentAmountDisplay\" }, title: \"Total Unrestricted Funds\", className: \"funded-commitment-amount text-left font-size12 nowrap\" },\r\n //{ data: { _: \"RestrictedFunds\", display: \"RestrictedFundsDisplay\" }, title: \"Total Restricted Funds\", className: \"restricted-funds text-left font-size12 nowrap\" },\r\n //{ data: { _: \"SubcontractSubcontractAmount\", display: \"SubcontractSubcontractAmountDisplay\" }, title: \"Total Subcontract Amount\", className: \"subcontract-funded-amount text-left font-size12 nowrap\" },\r\n { data: { _: \"RemainingCommitmentAmount\", display: \"RemainingCommitmentAmountDisplay\" }, title: \"Remaining
Unrestricted
At-Date\", className: \"remaining-commitment-amount text-center font-size12 nowrap\" },\r\n { data: { _: \"InvoicedToDate\", display: \"InvoicedToDateDisplay\" }, title: \"Invoiced
To-Date\", className: \"invoiced-to-date text-center font-size12 nowrap\"},\r\n { data: \"InvoiceNumber\", title: \"Invoice #\", className: \"invoice-number text-left font-size12 nowrap\" },\r\n { data: { _: \"InvoiceDateCompare\", display: \"InvoiceDateDisplay\" }, title: \"Invoice
Date\", className: \"invoice-date text-center font-size12 nowrap\" },\r\n { data: { _: \"InvoicedAmount\", display: \"InvoicedAmountDisplay\" }, title: \"Invoiced
Amount\", className: \"invoiced-amount text-center font-size12 nowrap\" },\r\n { data: \"InvoiceStatus\", title: \"Invoice
Status\", className: \"invoice-status text-center font-size12 nowrap\" },\r\n //{ data: \"EntryType\", title: \"Record
Type\", className: \"entry-type text-center font-size12 nowrap\" },\r\n ];\r\n\r\n let tableColumnGroups: TableColumnGroup[] = [\r\n //new TableColumnGroup(\"Project\", true, [], \"project\"),\r\n\r\n //new TableColumnGroup(\"Category\", true, [], \"study\"),\r\n new TableColumnGroup(\"Vendor\", true, [], \"vendor-name\"),\r\n new TableColumnGroup(\"Subcontract #\", false, [], \"subcontract\"),\r\n new TableColumnGroup(\"PO/Vendor ID\", false, [], \"poid\"),\r\n new TableColumnGroup(\"Project Code\", false, [], \"project-level\"),\r\n //new TableColumnGroup(\"Subcontract Start Date\", false, [], \"subcontract-start-date\"),\r\n //new TableColumnGroup(\"Subcontract End Date\", true, [], \"subcontract-end-date\"),\r\n //new TableColumnGroup(\"Subcontract Type\", false, [], \"subcontract-type\"),\r\n //new TableColumnGroup(\"Total Unrestricted Funds\", false, [], \"funded-commitment-amount\"),\r\n //new TableColumnGroup(\"Total Restricted Funds\", false, [], \"restricted-funds\"),\r\n //new TableColumnGroup(\"Total Subcontract Amount\", false, [], \"subcontract-funded-amount\"),\r\n new TableColumnGroup(\"Remaining Unrestricted At-Date\", false, [], \"remaining-commitment-amount\"),\r\n new TableColumnGroup(\"Invoiced To-Date\", false, [], \"invoiced-to-date\"),\r\n new TableColumnGroup(\"Invoice #\", true, [], \"invoice-number\"),\r\n new TableColumnGroup(\"Invoice Date\", true, [], \"invoice-date\"),\r\n new TableColumnGroup(\"Invoiced Amount\", true, [], \"invoiced-amount\"),\r\n new TableColumnGroup(\"Invoice Status\", true, [], \"invoice-status\"),\r\n //new TableColumnGroup(\"Record Type\", false, [], \"entry-type\"),\r\n ];\r\n\r\n this.dataTable = $('#' + this.tableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"added-since\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: true,\r\n pagingType: 'simple',\r\n pageLength: 50,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 1\r\n },\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n title: \"RECOVER-CT Invoices Export\"\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n order: [\r\n [0, 'asc'],\r\n [1, 'asc'],\r\n [8, 'desc']\r\n ],\r\n data: this.allInvoices\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .spacer\").addClass('col-12 col-md-3');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.tableId, (this.tableId + '-column-select'), tableColumnGroups);\r\n\r\n $('#' + this.tableId).on('search.dt', (e, settings) => {\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n this.setCountFoundLabel(this.allInvoices.length);\r\n\r\n this.initializeDatePickers();\r\n this.initializeFilters(this.allInvoices);\r\n\r\n /*this.initializeModalLinks('#' + this.tableId);\r\n this.dataTable.on('draw', (e, settings) => {\r\n this.initializeModalLinks('#' + this.tableId);\r\n });*/\r\n\r\n $(\"#invoices-tab\").on('click', () => {\r\n setTimeout(() => {\r\n this.dataTable.columns.adjust().draw();\r\n }, 500)\r\n });\r\n \r\n }\r\n\r\n setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.tableId + '-found-count').text(\"No Entries Found\"); break;\r\n case 1: $('#' + this.tableId + '-found-count').text(\"1 Entry Found\"); break;\r\n default: $('#' + this.tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Entries Found\");\r\n }\r\n }\r\n\r\n setModalCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.modalTableId + '-found-count').text(\"No Entries Found\"); break;\r\n case 1: $('#' + this.modalTableId + '-found-count').text(\"1 Entry Found\"); break;\r\n default: $('#' + this.modalTableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Entries Found\");\r\n }\r\n }\r\n\r\n refresh(): void {\r\n this.dataTable.columns.adjust();\r\n this.tableColumnController.refresh();\r\n }\r\n\r\n updateContent(financials: FinancialEntry[]): void {\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(financials).draw();\r\n\r\n this.setCountFoundLabel(financials.length);\r\n\r\n // reinitialize the links in table (old ones have been removed)\r\n //this.initializeModalLinks('#' + this.tableId);\r\n }\r\n\r\n clearSearchBar(): void {\r\n this.dataTable.search('').draw();\r\n }\r\n\r\n initializeDatePickers() {\r\n InitializeDateSelector(\"added-since-date\", this);\r\n InitializeDateSelector(\"added-before-date\", this);\r\n }\r\n\r\n initializeFilters(financials: FinancialEntry[]) {\r\n let studiesLists: string[] = [];\r\n this.allInvoices.map(invoice => {\r\n if (!studiesLists.includes(invoice.StudyName) && invoice.StudyName != null && invoice.StudyName != \"\") {\r\n studiesLists.push(invoice.StudyName);\r\n }\r\n })\r\n studiesLists.sort();\r\n let studiesAtEnd: string[] = [\"Infrastructure\", \"Other CT ACC Subcontracts\", \"Committee Members\"]\r\n studiesAtEnd.forEach(studyName => {\r\n let foundIndex = studiesLists.findIndex(study => study == studyName);\r\n if (foundIndex != -1) {\r\n studiesLists.splice(foundIndex, 1);\r\n studiesLists.push(studyName);\r\n }\r\n })\r\n\r\n InitializeFilterDropdown('#study-dropdown', studiesLists, this);\r\n InitializeFilterDropdown('#invoice-status-dropdown', Unique(this.allInvoices.map((invoice: FinancialEntry) => invoice.InvoiceStatus), true), this);\r\n InitializeFilterDropdown('#vendor-dropdown', Unique(this.allInvoices.map((invoice: FinancialEntry) => invoice.VendorName), true), this);\r\n //InitializeFilterDropdown('#entry-type-dropdown', Unique(this.allInvoices.map(invoice => invoice.EntryType), true), this);\r\n }\r\n\r\n triggerFilter(): void {\r\n //console.log(\"filter triggered\");\r\n let invoices = this.allInvoices;\r\n\r\n // Study\r\n invoices = invoices.filter(invoice => GetSelectedDropdownValues(\"#study-dropdown\").includes(invoice.StudyName)); \r\n // Project\r\n invoices = invoices.filter(invoice => GetSelectedDropdownValues(\"#invoice-status-dropdown\").includes(invoice.InvoiceStatus));\r\n // Status\r\n invoices = invoices.filter(invoice => GetSelectedDropdownValues(\"#vendor-dropdown\").includes(invoice.VendorName));\r\n // Entry Type\r\n //invoices = invoices.filter(invoice => GetSelectedDropdownValues(\"#entry-type-dropdown\").includes(invoice.EntryType));\r\n // Date\r\n if (GetSelectedDate(\"#added-since-date\") != null) {\r\n let addedSinceDateString: string = GetSelectedDate(\"#added-since-date\");\r\n let addedSinceDate: Date = new Date(addedSinceDateString);\r\n\r\n invoices = invoices.filter(invoice => {\r\n if (invoice.InvoiceDateCompare == null) {\r\n return false;\r\n }\r\n if (invoice.InvoiceDateCompare >= addedSinceDate) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n });\r\n }\r\n if (GetSelectedDate(\"#added-before-date\") != null) {\r\n let addedSinceDateString: string = GetSelectedDate(\"#added-before-date\");\r\n let addedSinceDate: Date = new Date(addedSinceDateString);\r\n\r\n invoices = invoices.filter(invoice => {\r\n if (invoice.InvoiceDateCompare == null) {\r\n return false;\r\n }\r\n if (invoice.InvoiceDateCompare <= addedSinceDate) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n });\r\n }\r\n this.currentInvoices = invoices;\r\n this.updateContent(invoices)\r\n }\r\n\r\n initializeModalLinks(tableId: string): void {\r\n let invoicesTable = this;\r\n // remove any existing click events (don't want to have multiple attached)\r\n $(tableId + \" .modal-link\").off('click');\r\n\r\n // add click event\r\n $(tableId + \" .modal-link\").on('click', function () {\r\n //console.log(\"Loading Content...\");\r\n // Show loading for modal\r\n $(\"#invoice-table-modal .loading\").removeClass(\"d-none\");\r\n $(\"#invoice-table-modal .loaded-content\").addClass(\"d-none\");\r\n \r\n let filterField = \"\";\r\n let filterText = $(this).text();\r\n let displayName = \"\";\r\n\r\n if ($(this).hasClass(\"study-modal\")) {\r\n filterField = \"StudyName\";\r\n displayName = \"Category Name\";\r\n }\r\n if ($(this).hasClass(\"project-name-modal\")) {\r\n filterField = \"ProjectName\";\r\n displayName = \"Project Name\";\r\n }\r\n if ($(this).hasClass(\"poid-modal\")) {\r\n filterField = \"POID\";\r\n displayName = \"PO/Vendor ID\"\r\n }\r\n if ($(this).hasClass(\"project-level-modal\")) {\r\n filterField = \"ProjectLevel\";\r\n displayName = \"Project Code / Charge Category\";\r\n }\r\n if ($(this).hasClass(\"project-number-modal\")) {\r\n filterField = \"ProjectNumber\";\r\n displayName = \"Project Number\";\r\n }\r\n if ($(this).hasClass(\"vendor-name-modal\")) {\r\n filterField = \"VendorName\";\r\n displayName = \"Vendor Name\"\r\n }\r\n if ($(this).hasClass(\"subcontract-modal\")) {\r\n filterField = \"Subcontract\";\r\n displayName = \"Subcontract\";\r\n }\r\n if ($(this).hasClass(\"subcontract-company-name-modal\")) {\r\n filterField = \"SubcontractCompanyName\";\r\n displayName = \"Subcontract Company Name\";\r\n }\r\n\r\n // Set Title\r\n $(\"#invoice-table-name\").text(`${displayName}: ${filterText}`);\r\n\r\n invoicesTable.loadModal(filterField, filterText);\r\n\r\n // Show Content\r\n setTimeout(() => {\r\n //console.log(\"Loaded!\");\r\n $(\"#invoice-table-modal .loading\").addClass(\"d-none\");\r\n $(\"#invoice-table-modal .loaded-content\").removeClass(\"d-none\");\r\n invoicesTable.modalDataTable.columns.adjust().draw();\r\n }, 1000)\r\n \r\n });\r\n }\r\n\r\n loadModal(fieldName: string, fieldText: string): void {\r\n // Filter Invoices based on selected field\r\n //let filteredInvoices = this.allInvoices.filter(invoice => invoice[fieldName] == fieldText); \r\n let filteredInvoices = this.currentInvoices.filter(invoice => invoice[fieldName] == fieldText); \r\n\r\n // Create Table\r\n this.loadModalTable(filteredInvoices);\r\n\r\n // Show Modal\r\n if (!$(\"#invoice-table-modal\").hasClass(\"show\")) {\r\n $(\"#invoice-table-modal\").modal(\"show\");\r\n }\r\n\r\n }\r\n\r\n loadModalTable(filteredInvoices: FinancialEntry[]): void {\r\n if (this.modalDataTable) {\r\n this.modalDataTable.destroy();\r\n $('#' + this.modalTableId).empty();\r\n } \r\n\r\n let modalColumns: any[] = [\r\n { data: { _: \"StudyName\", display: \"StudyNameDisplay\" }, title: \"Category\", className: \"modal-study text-left font-size12 nowrap\" },\r\n { data: { _: \"VendorName\", display: \"VendorNameDisplay\" }, title: \"Vendor\", className: \"modal-vendor-name text-left font-size12 nowrap\" },\r\n { data: { _: \"Subcontract\", display: \"SubcontractDisplay\" }, title: \"Subcontract #\", className: \"modal-subcontract text-left font-size12 nowrap\" },\r\n { data: { _: \"POID\", display: \"POIDDisplay\" }, title: \"PO/Vendor ID\", className: \"modal-poid text-left font-size12 nowrap\" },\r\n { data: { _: \"ProjectLevel\", display: \"ProjectLevelDisplay\" }, title: \"Project Code\", className: \"modal-project-level text-left font-size12 nowrap\" },\r\n { data: { _: \"SubcontractStartDateCompare\", display: \"SubcontractStartDateDisplay\" }, title: \"Subcontract Start Date\", className: \"modal-subcontract-start-date text-left font-size12 nowrap\" },\r\n { data: { _: \"SubcontractEndDateCompare\", display: \"SubcontractEndDateDisplay\" }, title: \"Subcontract End Date\", className: \"modal-subcontract-end-date text-left font-size12 nowrap\" },\r\n { data: \"SubcontractType\", title: \"Subcontract Type\", className: \"modal-subcontract-type text-left font-size12 nowrap\" },\r\n { data: { _: \"FundedCommitmentAmount\", display: \"FundedCommitmentAmountDisplay\" }, title: \"Total Unrestricted Funds\", className: \"modal-funded-commitment-amount text-left font-size12 nowrap\" },\r\n\r\n { data: { _: \"SubcontractSubcontractAmount\", display: \"SubcontractSubcontractAmountDisplay\" }, title: \"Total Subcontract Amount\", className: \"modal-subcontract-funded-amount text-left font-size12 nowrap\" },\r\n\r\n { data: { _: \"RestrictedFunds\", display: \"RestrictedFundsDisplay\" }, title: \"Total Restricted Funds\", className: \"modal-restricted-funds text-left font-size12 nowrap\" },\r\n { data: { _: \"RemainingCommitmentAmount\", display: \"RemainingCommitmentAmountDisplay\" }, title: \"Remaining Unrestricted Funds\", className: \"modal-remaining-commitment-amount text-left font-size12 nowrap\" },\r\n { data: \"InvoiceNumber\", title: \"Invoice #\", className: \"modal-invoice-number text-left font-size12 nowrap\" },\r\n { data: { _: \"InvoiceDateCompare\", display: \"InvoiceDateDisplay\" }, title: \"Invoice Date\", className: \"modal-invoice-date text-left font-size12 nowrap\" },\r\n { data: { _: \"InvoicedAmount\", display: \"InvoicedAmountDisplay\" }, title: \"Invoiced Amount\", className: \"modal-invoiced-amount text-left font-size12 nowrap\" },\r\n { data: \"InvoiceStatus\", title: \"Invoice Status\", className: \"modal-invoice-status text-left font-size12 nowrap\" },\r\n { data: \"EntryType\", title: \"Record Type\", className: \"modal-entry-type text-left font-size12 nowrap\" },\r\n //{ data: \"VendorNumber\", title: \"Vendor Number\", className: \"modal-vendor-info modal-vendor-number text-left font-size12 nowrap\" },\r\n //{ data: { _: \"ProjectName\", display: \"ProjectNameDisplay\" }, title: \"Project\", className: \"modal-project text-left font-size12 nowrap\" },\r\n //{ data: { _: \"ProjectNumber\", display: \"ProjectNumberDisplay\" }, title: \"Project Number\", className: \"modal-project-info modal-project-number text-left font-size12 nowrap\" },\r\n //{ data: { _: \"POEndDateCompare\", display: \"POEndDateDisplay\" }, title: \"PO End Date\", className: \"modal-po-end-date text-left font-size12 nowrap\" },\r\n //{ data: \"POReleaseNumber\", title: \"PO Release Number\", className: \"modal-project-info modal-po-release-number text-left font-size12 nowrap\" },\r\n //{ data: { _: \"SubcontractCompanyName\", display: \"SubcontractCompanyNameDisplay\" }, title: \"Subcontract Company Name\", className: \"modal-subcontract-info modal-subcontract-company-name text-left font-size12 nowrap\" },\r\n ]; \r\n\r\n this.modalDataTable = $('#' + this.modalTableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: true,\r\n pagingType: 'simple',\r\n pageLength: 25,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '50vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 1\r\n },\r\n columns: modalColumns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n order: [\r\n [0, 'asc'],\r\n [1, 'asc'],\r\n [13, 'desc']\r\n ],\r\n data: filteredInvoices,\r\n /*\"initComplete\": function (settings, json) {\r\n \r\n }*/\r\n });\r\n\r\n let selectedColumns: string[] = GetSelectedDropdownValues(\"#invoices-table-column-filter-dropdown\");\r\n\r\n let modalTableColumnGroups: TableColumnGroup[] = [\r\n new TableColumnGroup(\"Category\", selectedColumns.includes(\"Category\"), [], \"modal-study\"),\r\n new TableColumnGroup(\"Vendor\", selectedColumns.includes(\"Vendor\"), [], \"modal-vendor-name\"),\r\n new TableColumnGroup(\"Subcontract #\", selectedColumns.includes(\"Subcontract #\"), [], \"modal-subcontract\"),\r\n new TableColumnGroup(\"PO/Vendor ID\", selectedColumns.includes(\"ID\"), [], \"modal-poid\"),\r\n new TableColumnGroup(\"Project Code\", selectedColumns.includes(\"Project Code / Charge Category\"), [], \"modal-project-level\"),\r\n new TableColumnGroup(\"Subcontract Start Date\", selectedColumns.includes(\"Subcontract Start Date\"), [], \"modal-subcontract-start-date\"),\r\n new TableColumnGroup(\"Subcontract End Date\", selectedColumns.includes(\"Subcontract End Date\"), [], \"modal-subcontract-end-date\"),\r\n new TableColumnGroup(\"Subcontract Type\", selectedColumns.includes(\"Subcontract Type\"), [], \"modal-subcontract-type\"),\r\n new TableColumnGroup(\"Total Unrestricted Funds\", selectedColumns.includes(\"Total Unrestricted Funds\"), [], \"modal-funded-commitment-amount\"),\r\n new TableColumnGroup(\"Total Restricted Funds\", selectedColumns.includes(\"Total Restricted Funds\"), [], \"modal-restricted-funds\"),\r\n new TableColumnGroup(\"Total Subcontract Amount\", selectedColumns.includes(\"Total Subcontract Amount\"), [], \"modal-subcontract-funded-amount\"),\r\n new TableColumnGroup(\"Remaining Unrestricted Funds\", selectedColumns.includes(\"Remaining Unrestricted Funds\"), [], \"modal-remaining-commitment-amount\"),\r\n new TableColumnGroup(\"Invoice #\", selectedColumns.includes(\"Invoice #\"), [], \"modal-invoice-number\"),\r\n new TableColumnGroup(\"Invoice Date\", selectedColumns.includes(\"Invoice Date\"), [], \"modal-invoice-date\"),\r\n new TableColumnGroup(\"Invoiced Amount\", selectedColumns.includes(\"Invoiced Amount\"), [], \"modal-invoiced-amount\"),\r\n new TableColumnGroup(\"Invoice Status\", selectedColumns.includes(\"Invoice Status\"), [], \"modal-invoice-status\"),\r\n new TableColumnGroup(\"Record Type\", selectedColumns.includes(\"Record Type\"), [], \"modal-entry-type\"),\r\n ];\r\n\r\n $(\"#\" + this.modalTableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.modalTableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.modalTableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.modalTableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.modalTableWrapperId + \" .spacer\").addClass('col-12 col-md-3');\r\n $(\"#\" + this.modalTableWrapperId + \" .count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.modalTableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.modalTableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.modalTableColumnController = new TableColumnVisibilityController(this.modalTableId, (this.modalTableId + '-column-select'), modalTableColumnGroups);\r\n\r\n $('#' + this.modalTableId).on('search.dt', (e, settings) => {\r\n this.setModalCountFoundLabel(this.modalDataTable.rows({ search: 'applied' }).count());\r\n });\r\n\r\n this.setModalCountFoundLabel(filteredInvoices.length);\r\n\r\n this.initializeModalLinks(\"#\" + this.modalTableId);\r\n this.modalDataTable.on('draw', () => {\r\n this.initializeModalLinks(\"#\" + this.modalTableId);\r\n }) \r\n \r\n }\r\n\r\n /*initializeModal(): void {\r\n // Runs after modal has finished opening\r\n $('#invoice-table-modal').on('shown.bs.modal', (e) => {\r\n // Readjust columns\r\n //this.modalDataTable.columns.adjust().draw();\r\n })\r\n }*/\r\n}","// extracted by mini-css-extract-plugin","\r\nfunction GetMonthAbbr(date: Date): string {\r\n return [\r\n \"Jan\",\r\n \"Feb\",\r\n \"Mar\",\r\n \"Apr\",\r\n \"May\",\r\n \"Jun\",\r\n \"Jul\",\r\n \"Aug\",\r\n \"Sep\",\r\n \"Oct\",\r\n \"Nov\",\r\n \"Dec\",\r\n ][date.getMonth()];\r\n}\r\n\r\n/*\r\nexport function FormatDate(date): string {\r\n\r\n if (date !== undefined && date !== \"\") {\r\n var myDate = new Date(date);\r\n var month = GetMonthAbbr(myDate);\r\n var str = myDate.getDate() + \" \" + month + \" \" + myDate.getFullYear();\r\n return str;\r\n }\r\n return \"\";\r\n}\r\n\r\nexport function FormatDateMonthAbbrDayYear(date): string {\r\n if (date !== undefined && date !== \"\") {\r\n var myDate = new Date(date);\r\n var month = GetMonthAbbr(myDate);\r\n return `${month} ${myDate.getDate()} ${myDate.getFullYear()}`;\r\n }\r\n return \"\";\r\n}\r\n*/\r\n\r\nexport function FormatDate(date: Date, format: string = \"day-mo-year\"): string {\r\n if (date == undefined) return \"\";\r\n let month: string = GetMonthAbbr(date);\r\n\r\n if (format == \"mo-day-year\") { //Jan 15 2024\r\n return month + \" \" + String(date.getDate()).padStart(2, '0') + \" \" + date.getFullYear();\r\n }\r\n else if (format == \"day-mo-year\") { //15 Jan 2024\r\n return String(date.getDate()).padStart(2, '0') + \" \" + month + \" \" + date.getFullYear();\r\n }\r\n}\r\n\r\nexport function GetDateFromString(dateString: string, format: string): Date {\r\n\r\n if (dateString == undefined || dateString.length == 0) return undefined;\r\n\r\n if (format == \"hyphens-year-month-day\") {\r\n let parts: string[] = dateString.split(\"-\");\r\n return new Date(Number.parseInt(parts[0]), Number.parseInt(parts[1]) - 1, Number.parseInt(parts[2]), 12, 0, 0);\r\n }\r\n else if (format == \"hyphens-year-month-day-time\") {\r\n let dateTime: string[] = dateString.split(\" \");\r\n let parts: string[] = dateTime[0].split(\"-\");\r\n return new Date(Number.parseInt(parts[0]), Number.parseInt(parts[1]) - 1, Number.parseInt(parts[2]), 12, 0, 0);\r\n }\r\n else if (format == \"hyphens-year-month-day-timezone\") {\r\n let trimmed = dateString.substr(0, dateString.indexOf(\"T\"));\r\n return this.GetDateFromString(trimmed, \"hyphens-year-month-day\");\r\n }\r\n else if (format == \"slash-month-day-year\") {\r\n let parts: string[] = dateString.split(\"/\");\r\n return new Date(Number.parseInt(parts[2]), Number.parseInt(parts[0]) - 1, Number.parseInt(parts[1]), 12, 0, 0);\r\n }\r\n else return null;\r\n}\r\n\r\nexport function SortDates(d1: Date, d2: Date): number {\r\n if (d1 == undefined) { d1 = new Date(new Date(8640000000000000)); }\r\n if (d2 == undefined) { d2 = new Date(new Date(8640000000000000)); }\r\n return d1.getTime() - d2.getTime();\r\n}\r\n\r\nexport function GetMonthFromNumber(monthNum: number, useShortName: boolean = false): string {\r\n // if number is outside month range\r\n if (monthNum > 12 || monthNum < 1) {\r\n return \"\";\r\n }\r\n\r\n const monthNames = [\"\", \"January\", \"February\", \"March\", \"April\", \"May\", \"June\",\r\n \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"\r\n ];\r\n\r\n const shortMonthNames = [\"\", \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"June\",\r\n \"July\", \"Aug\", \"Sept\", \"Oct\", \"Nov\", \"Dec\"\r\n ];\r\n\r\n if (useShortName) {\r\n return shortMonthNames[monthNum];\r\n }\r\n\r\n return monthNames[monthNum];\r\n}","import { ComputePercent } from \"../../../../shared/scripts/number-functions\";\r\n\r\n\r\nexport class ExecutiveSummaryEntry {\r\n Id: number;\r\n Group: string;\r\n Label: string;\r\n Type: number; //0: main row (no children), 1: main row (with children), 2: child row, 3: header row\r\n OrderBy: number;\r\n ParentId: number;\r\n Counts: number[];\r\n Indent: number;\r\n\r\n ParentHash: string; //assumes a single nesting by GROUP\r\n HasChildren: boolean;\r\n IsLastChild: boolean;\r\n\r\n DisplayValues: string[] = [];\r\n\r\n StudyColumns = [0,4,6,9,12];\r\n TrialColumns = [1,2,3,5,7,8,10,11,13,14];\r\n\r\n initialize(): void {\r\n if (this.Type == 3) { this.Counts = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]; }\r\n else {\r\n const total = this.StudyColumns.reduce((acc, cv) => acc + this.Counts[cv], 0);\r\n this.Counts[15] = total;\r\n }\r\n\r\n //if (this.Type == 1 || 2 || 5 || 6) {\r\n this.DisplayValues = this.Counts.map((count: number) => count + \"\");\r\n //}\r\n\r\n // Take out the total for reason rows\r\n if (this.Type == 5 || this.Type == 6) {\r\n this.DisplayValues[this.DisplayValues.length-1] = '-';\r\n }\r\n\r\n // Take out Appendix/Trial values on rows containing data for unassigned participants\r\n if (this.shouldSkipValue()) {\r\n this.TrialColumns.forEach((idx) => this.DisplayValues[idx] = '');\r\n }\r\n\r\n // Remove site values for VITAL symptom clusters\r\n if ([1,2].indexOf(this.Id) > -1) {\r\n [1,2,3].forEach((idx) => this.DisplayValues[idx] = '');\r\n }\r\n\r\n }\r\n\r\n createDisplayValues(parentEntry: ExecutiveSummaryEntry): void {\r\n\r\n this.DisplayValues = this.Counts.map((count: number, index: number) => {\r\n\r\n if ((this.shouldSkipValue()) && this.TrialColumns.indexOf(index) > -1) return \"\";\r\n else if (count == -1 || parentEntry.Counts[index] == -1) return \"\";\r\n else {\r\n let percent: number = ComputePercent(count, parentEntry.Counts[index]);\r\n if (percent >= 0) return count + \" (\" + percent.toFixed(0) + \"%)\";\r\n else return count + \"\";\r\n }\r\n });\r\n }\r\n\r\n shouldSkipValue() {\r\n return (([4,5,6].indexOf(this.Id) > -1) || (this.ParentId === 4));\r\n }\r\n\r\n\r\n}","\r\n\r\nexport class Appendix {\r\n Id: number;\r\n StudyId: number;\r\n Name: string;\r\n\r\n constructor(id: number, studyId: number, name: string) { this.Id = id; this.StudyId = studyId; this.Name = name; }\r\n\r\n static GetAppendixName(id: number): string {\r\n switch (id) {\r\n case (0): return \"VITAL (Overall)\";\r\n case (1): return \"VITAL-1 (Paxlovid)\";\r\n case (2): return \"NEURO (Overall)\";\r\n case (3): return \"NEURO-1 (tDCS & BrainHQ)\";\r\n case (4): return \"SLEEP (Overall)\";\r\n case (5): return \"SLEEP-1 (Modafinil/Solriamfetol)\";\r\n case (6): return \"SLEEP-2 (Melatonin/Light)\";\r\n case (7): return \"AUTONOMIC (Overall)\";\r\n case (8): return \"AUTONOMIC-1 (IVIG)\";\r\n case (9): return \"AUTONOMIC-2 (Ivabradine)\";\r\n case (10): return \"ENERGIZE (Overall)\";\r\n case (11): return \"ENERGIZE-1 (Cardiopulmonary Rehab)\";\r\n case (12): return \"ENERGIZE-2 (Structured Pacing)\";\r\n case (90): return \"VITAL-Unassigned\";\r\n case (91): return \"NEURO-Unassigned\";\r\n case (92): return \"AUTONOMIC-Unassigned\";\r\n case (93): return \"SLEEP-Unassigned\";\r\n case (94): return \"ENERGIZE-Unassigned\";\r\n default: return \"Unknown\";\r\n }\r\n }\r\n\r\n static GetOutcomeCount(appendixId: number): number {\r\n switch (appendixId) {\r\n case (1): return 3;\r\n case (3): return 1;\r\n default: return 0;\r\n }\r\n }\r\n\r\n //sorts in-place, with Unassigned at end of list\r\n static SortByName(list: Appendix[]): void {\r\n list.sort((a: Appendix, b: Appendix) => {\r\n if ((a.Id >= 90 && b.Id >= 90) || (a.Id < 90 && b.Id < 90)) { return a.Name.localeCompare(b.Name); }\r\n else if (a.Id >= 90 && b.Id < 90) { return 1; }\r\n else if (a.Id < 90 && b.Id >= 90) { return -1; }\r\n else return 0;\r\n });\r\n }\r\n\r\n static GetAppendicesToShow(appendixIds: number[]): number[] {\r\n let appendicesToShow: number[] = [];\r\n\r\n if (appendixIds.includes(1)) { appendicesToShow.push(1); } //VITAL-1\r\n if (appendixIds.includes(3)) { appendicesToShow.push(3); } //NEURO-1\r\n\r\n //SLEEP\r\n if (appendixIds.includes(5) && appendixIds.includes(6)) { appendicesToShow.push(4); }\r\n else if (appendixIds.includes(5)) { appendicesToShow.push(5); }\r\n else if (appendixIds.includes(6)) { appendicesToShow.push(6); }\r\n\r\n //AUTO\r\n if (appendixIds.includes(8) && appendixIds.includes(9)) { appendicesToShow.push(7); }\r\n else if (appendixIds.includes(8)) { appendicesToShow.push(8); }\r\n else if (appendixIds.includes(9)) { appendicesToShow.push(9); }\r\n\r\n //ENERGIZE\r\n if (appendixIds.includes(11) && appendixIds.includes(12)) { appendicesToShow.push(10); }\r\n else if (appendixIds.includes(11)) { appendicesToShow.push(11); }\r\n else if (appendixIds.includes(12)) { appendicesToShow.push(12); }\r\n\r\n return appendicesToShow;\r\n }\r\n\r\n}\r\n","import { FormatNumberWithCommas } from \"../../../../../../shared/scripts/number-functions\";\r\nimport { TableColumnGroup, TableColumnVisibilityController } from \"../../../../../../shared/scripts/table-column-visibility\";\r\nimport { RenderDateMDY, RenderDateYMD, RenderNullableNumberWithSeparators, RenderNullableString } from \"../../../../../../shared/scripts/table-functions\";\r\nimport { MilestonesBySite } from \"../../scripts/site-activation.entities\";\r\nimport { SiteActivationLookup } from \"../../scripts/site-activation.lookup\";\r\n\r\nexport class SiteLevelMilestoneDetailsTab {\r\n\r\n tableId: string = \"site-milestone-details-table\";\r\n tableWrapperId: string = this.tableId + \"_wrapper\";\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n\r\n constructor(milestonesBySite: MilestonesBySite[], milestoneIdsToShow: number[]) {\r\n\r\n let columns: any[] = [\r\n { data: { _: \"SiteNameDisplay\", sort: \"SiteName\" }, title: \"Site Name\", className: \"text-left font-size12\" },\r\n { data: { _: \"SiteNumberDisplay\", sort: \"SiteNumber\" }, title: \"Site Id\", className: \"site-id text-center font-size12 nowrap\" },\r\n { data: \"PrimeContract\", title: \"Platform\", className: \"prime-contract text-center font-size12 nowrap\" },\r\n { data: \"PI\", title: \"Investigator\", className: \"contacts text-center font-size12 nowrap\", render: RenderNullableString }\r\n ];\r\n\r\n let tableColumnGroups: TableColumnGroup[] = [\r\n new TableColumnGroup(\"Site Id\", true, [], \"site-id\"),\r\n new TableColumnGroup(\"Platform\", true, [], \"prime-contract\"),\r\n new TableColumnGroup(\"Investigator\", true, [], \"contacts\"),\r\n new TableColumnGroup(\"Selection\", true, [], \"site-selection\"),\r\n new TableColumnGroup(\"Contracts\", true, [], \"site-contracts\"),\r\n new TableColumnGroup(\"Initiation\", true, [], \"site-initiation\"),\r\n new TableColumnGroup(\"Activation\", true, [], \"site-activation\"),\r\n ];\r\n\r\n milestoneIdsToShow.forEach((id: number) => {\r\n let name: string = SiteActivationLookup.GetMilestone(id);\r\n let css_name: string = \"\";\r\n if (id == 1 || id == 6 || id == 22 || id == 25) { css_name = \"site-selection\"; }\r\n else if (id == 32 || id == 24 || id == 33 || id == 30 || id == 34 || id == 26) { css_name = \"site-contracts\"; }\r\n else if (id == 27 || id == 8 || id == 9 || id == 10 || id == 14 || id == 31 || id == 16 || id == 36) { css_name = \"site-initiation\"; }\r\n else if (id == 17 || id == 19 || id == 35) { css_name = \"site-activation\"; }\r\n\r\n if (css_name.length > 0) {\r\n columns.push({ data: \"MilestoneCompletionDates.\" + id, title: name.split(\" \").join(\"
\"), className: (css_name + \" text-center font-size12 nowrap\"), render: RenderDateMDY, defaultContent: '' });\r\n }\r\n });\r\n\r\n columns.push({ data: \"RandomizedCount\", title: \"Participants
Randomized\", className: \"site-activation text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators });\r\n\r\n this.dataTable = $('#' + this.tableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: true,\r\n pagingType: 'simple',\r\n pageLength: 50,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 1\r\n },\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n }\r\n ],\r\n //order: [[1, 'asc'], [7, 'asc']],\r\n data: milestonesBySite\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .spacer\").addClass('col-12 col-md-3');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.tableId, (this.tableId + '-column-select'), tableColumnGroups);\r\n\r\n $('#' + this.tableId).on('search.dt', (e, settings) => {\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n this.setCountFoundLabel(milestonesBySite.length);\r\n }\r\n\r\n setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.tableId + '-found-count').text(\"No Sites Found\"); break;\r\n case 1: $('#' + this.tableId + '-found-count').text(\"1 Site Found\"); break;\r\n default: $('#' + this.tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Sites Found\");\r\n }\r\n }\r\n\r\n refresh(): void {\r\n this.dataTable.columns.adjust();\r\n this.tableColumnController.refresh();\r\n }\r\n\r\n updateContent(milestonesBySite: MilestonesBySite[]): void {\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(milestonesBySite).draw();\r\n this.setCountFoundLabel(milestonesBySite.length);\r\n }\r\n\r\n clearSearchBar(): void {\r\n this.dataTable.search('').draw();\r\n }\r\n}","import { FinancialGraphData } from './financials.entities' \r\nimport { TableColumnGroup, TableColumnVisibilityController } from \"../../../../shared/scripts/table-column-visibility\";\r\nimport { FormatNumberWithCommas } from \"../../../../shared/scripts/number-functions\";\r\n\r\nvar Highcharts = require('highcharts/highcharts');\r\nrequire('highcharts/modules/drilldown')(Highcharts);\r\n\r\nexport class FinancialCharts {\r\n\r\n expendituresChart: any;\r\n lastInvoiceDateChart: any;\r\n performedDrilldown: boolean;\r\n chartCategories: string[];\r\n\r\n tableId: string = \"subcontract-table\";\r\n tableWrapperId: string = this.tableId + \"_wrapper\";\r\n dataTable: any;\r\n tableColumnController: TableColumnVisibilityController;\r\n allSubcontracts: FinancialGraphData[];\r\n currentSubcontracts: FinancialGraphData[];\r\n\r\n containerId: string = \"#financial-summary-by-study\";\r\n constructor() {\r\n Highcharts.setOptions({\r\n lang: {\r\n drillUpText: '◁ Back',\r\n thousandsSep: ','\r\n }\r\n });\r\n\r\n $('a[data-toggle=\"tab\"]').on('shown.bs.tab', (e) => {\r\n //to setup dropdowns to go downwards\r\n if (e.currentTarget.id == \"summary-tab\") {\r\n ['#subcontract-table-column-filter-dropdown', '#subcontract-vendor-table-column-filter-dropdown'].forEach((id: string) => $(id).selectpicker(\"refresh\"));\r\n }\r\n });\r\n\r\n\r\n this.performedDrilldown = false;\r\n }\r\n\r\n setGraphContent(graphData: FinancialGraphData[]): void {\r\n this.setExpendituresChart(graphData);\r\n this.setLastInvoiceDateChart(graphData);\r\n\r\n this.chartCategories = [];\r\n graphData.forEach((study) => this.chartCategories.push(study.Name));\r\n\r\n this.allSubcontracts = graphData;\r\n this.currentSubcontracts = graphData;\r\n this.setSubcontractDataTable(graphData);\r\n }\r\n\r\n private setExpendituresChart(graphData: FinancialGraphData[]): void {\r\n\r\n $(this.containerId).find('#project-expenditure-graph').empty();\r\n $(this.containerId).find('#project-expenditure-graph').height(this.getChartHeight(graphData.length));\r\n\r\n let series = this.getExpenditureSeries(graphData);\r\n\r\n this.expendituresChart = Highcharts.chart('project-expenditure-graph', {\r\n chart: {\r\n type: 'bar',\r\n events: {\r\n drilldown: (e) => {\r\n $(this.containerId).find('#project-expenditure-graph').height(this.getChartHeight(e.seriesOptions.data.length));\r\n let clickedCategory: string = e.seriesOptions.id.substring(0, e.seriesOptions.id.indexOf(\"-\")).trim();\r\n //this.expendituresChart.setTitle(null, { text: 'Category: ' + clickedCategory });\r\n let undoButton: string = ``\r\n this.expendituresChart.setTitle({ text: `${undoButton} Displaying vendors for: ${clickedCategory}` }, null);\r\n\r\n if (!this.performedDrilldown) {\r\n\r\n this.performedDrilldown = true;\r\n let point: any = this.lastInvoiceDateChart.get('days-since-last-invoice-series').points.find((pt: any) => pt.name == clickedCategory);\r\n if (point) {\r\n point.doDrilldown(false);\r\n } \r\n this.drilldownTable(clickedCategory);\r\n }\r\n\r\n this.expendituresChart.reflow();\r\n this.expendituresChart.redraw();\r\n\r\n $(this.containerId).find(\".chart-drillup-btn\").on('click', () => {\r\n this.drillupTable();\r\n });\r\n //this.fadeLabels(\"#project-expenditure-graph\"); \r\n },\r\n drillup: (e) => {\r\n $(this.containerId).find('#project-expenditure-graph').height(this.getChartHeight(e.seriesOptions.data.length));\r\n //this.expendituresChart.setTitle(null, { text: 'Click a category to learn more' });\r\n this.expendituresChart.setTitle({ text: 'Click a category to learn more' }, null);\r\n\r\n if (this.performedDrilldown) {\r\n this.performedDrilldown = false;\r\n this.lastInvoiceDateChart.drillUp();\r\n }\r\n this.expendituresChart.reflow();\r\n this.expendituresChart.redraw();\r\n\r\n //this.fadeLabels(\"#project-expenditure-graph\");\r\n }\r\n },\r\n zoomType: 'y',\r\n panning: true,\r\n marginTop: 70\r\n },\r\n credits: { enabled: false },\r\n //title: { text: null },\r\n //subtitle: { text: 'Click a category to learn more', align: 'left', style: {color: 'black'} },\r\n title: { text: 'Click a category to learn more', align: 'left', margin: 0, style: { color: 'black', fontSize: '14px' }, useHTML: true },\r\n tooltip: {\r\n valuePrefix: '$',\r\n valueDecimals: 2\r\n //pointFormat: \"$ {point.y:,.2f}\"\r\n },\r\n xAxis: {\r\n type: 'category'\r\n },\r\n yAxis: {\r\n min: 0,\r\n endOnTick: false, // helps with cropping data labels\r\n maxPadding: 0.2, // larger value has more space for data labels (default is 0.05)\r\n //reversedStacks: false,\r\n title: { text: '' },\r\n labels: {\r\n formatter: function () {\r\n if (this.value >= 100000) {\r\n return '$' + (this.value / 1000000) + 'M'\r\n }\r\n else {\r\n return '$' + this.value\r\n }\r\n \r\n }\r\n },\r\n stackLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n if (this.total >= 100000) {\r\n let millionsVal = (this.total / 1000000);\r\n let styledVal = Highcharts.numberFormat(millionsVal, 2, '.', ',');\r\n return \"$\" + styledVal + 'M'\r\n }\r\n else {\r\n let styledVal = Highcharts.numberFormat(this.total, 0, '.', ',');\r\n return \"$\" + styledVal\r\n }\r\n\r\n },\r\n inside: false, //label issues\r\n //crop: false,\r\n //overflow: 'none'\r\n }\r\n },\r\n legend: { reversed: true, verticalAlign: 'top' },\r\n plotOptions: {\r\n series: { stacking: 'normal' },\r\n bar: { borderWidth: 0 }\r\n },\r\n series: series.primarySeries,\r\n drilldown: {\r\n drillUpButton: {\r\n position: {\r\n align: 'left',\r\n y: -40,\r\n x: -40\r\n },\r\n theme: {\r\n display: 'none'\r\n }\r\n },\r\n series: series.drillDownSeries\r\n }\r\n });\r\n }\r\n\r\n private setLastInvoiceDateChart(graphData: FinancialGraphData[]): void {\r\n\r\n $(this.containerId).find('#days-since-last-invoice-graph').empty();\r\n $(this.containerId).find('#days-since-last-invoice-graph').height(this.getChartHeight(graphData.length));\r\n\r\n let series = this.getLastInvoiceDateSeries(graphData);\r\n\r\n this.lastInvoiceDateChart = Highcharts.chart('days-since-last-invoice-graph', {\r\n chart: {\r\n type: 'bar',\r\n events: {\r\n drilldown: (e) => {\r\n $(this.containerId).find('#days-since-last-invoice-graph').height(this.getChartHeight(e.seriesOptions.data.length));\r\n let clickedCategory: string = e.seriesOptions.id.substring(0, e.seriesOptions.id.indexOf(\"-\")).trim(); \r\n //this.lastInvoiceDateChart.setTitle(null, { text: 'Category: ' + clickedCategory });\r\n\r\n if (!this.performedDrilldown) {\r\n this.performedDrilldown = true;\r\n //this.expendituresChart.xAxis[0].drilldownCategory(e.category);\r\n\r\n let clickedIndex = this.chartCategories.findIndex((category) => category == clickedCategory);\r\n if (clickedIndex != -1) {\r\n this.expendituresChart.xAxis[0].drilldownCategory(clickedIndex);\r\n this.drilldownTable(clickedCategory);\r\n }\r\n }\r\n\r\n this.fadeLabels(\"#days-since-last-invoice-graph\");\r\n this.fadeLabels(\"#project-expenditure-graph\");\r\n this.lastInvoiceDateChart.reflow();\r\n },\r\n drillup: (e) => {\r\n $(this.containerId).find('#days-since-last-invoice-graph').height(this.getChartHeight(e.seriesOptions.data.length));\r\n //this.lastInvoiceDateChart.setTitle(null, { text: 'Click a category to learn more' });\r\n\r\n if (this.performedDrilldown) {\r\n this.performedDrilldown = false;\r\n this.expendituresChart.drillUp();\r\n }\r\n\r\n this.fadeLabels(\"#days-since-last-invoice-graph\");\r\n this.fadeLabels(\"#project-expenditure-graph\");\r\n this.lastInvoiceDateChart.reflow();\r\n }\r\n },\r\n zoomType: 'y',\r\n panning: true,\r\n marginTop: 70\r\n },\r\n\r\n credits: { enabled: false },\r\n title: { text: '-', align: 'left', margin: 0, style: { color: 'transparent', fontSize: '14px' }, useHTML: true },\r\n //subtitle: { text: 'Click a category to learn more', align: 'left' },\r\n xAxis: {\r\n type: 'category'\r\n },\r\n yAxis: {\r\n min: 0,\r\n endOnTick: false, // helps with cropping data labels\r\n maxPadding: 0.2, // larger value has more space for data labels (default is 0.05)\r\n //reversedStacks: false,\r\n title: { text: '' },\r\n labels: {\r\n //formatter: function () {\r\n // //return '$' + this.axis.defaultLabelFormatter.call(this);\r\n // return '$' + (this.value / 1000000) + 'M'\r\n //}\r\n },\r\n stackLabels: {\r\n enabled: true,\r\n formatter: function () {\r\n return Highcharts.numberFormat(this.total, 0, '.', ','); \r\n },\r\n inside: false, //label issues\r\n //crop: false,\r\n //overflow: 'none'\r\n }\r\n },\r\n legend: { reversed: true, verticalAlign: 'top' },\r\n plotOptions: {\r\n series: { stacking: 'normal' },\r\n bar: { borderWidth: 0 }\r\n },\r\n series: series.primarySeries,\r\n drilldown: {\r\n drillUpButton: {\r\n position: {\r\n y: -40\r\n },\r\n theme: {\r\n display: 'none'\r\n }\r\n },\r\n series: series.drilldownSeries\r\n }\r\n });\r\n }\r\n\r\n\r\n private setSubcontractDataTable(data: FinancialGraphData[]): void {\r\n\r\n let chart = this;\r\n let columns: any[] = [\r\n { data: { _: \"Id\", display: \"StudyNameDisplay\" }, title: \"Category\", className: \"sub-category text-left font-size12 nowrap\", orderable: false },\r\n { data: { _: \"Name\", display: \"VendorNameDisplay\" }, title: \"Vendor\", className: \"sub-vendor text-left font-size12 nowrap\" },\r\n { data: \"SubcontractNumber\", title: \"Subcontract #\", className: \"sub-number text-left font-size12 nowrap\" },\r\n { data: \"POID\", title: \"PO/Vendor
ID\", className: \"sub-poid text-center font-size12 nowrap\" },\r\n { data: \"ProjectLevel\", title: \"Project
Code\", className: \"sub-project-code text-center font-size12 nowrap\" },\r\n { data: { _: \"SubcontractStartDateCompare\", display: \"SubcontractStartDate\" }, title: \"Subcontract
Start Date\", className: \"sub-subcontract-start-date text-center font-size12 nowrap\" },\r\n { data: { _: \"SubcontractEndDateCompare\", display: \"SubcontractEndDate\" }, title: \"Subcontract
End Date\", className: \"sub-subcontract-end-date text-center font-size12 nowrap\" },\r\n { data: \"SubcontractType\", title: \"Subcontract
Type\", className: \"sub-subcontract-type text-center font-size12 nowrap\" },\r\n\r\n { data: { _: \"TotalSubcontractAmount\", display: \"TotalSubcontractAmountDisplay\" }, title: \"Total
Subcontract
Amount\", className: \"sub-subcontract-amount text-center font-size12 nowrap\" },\r\n { data: { _: \"TotalRestrictedFunds\", display: \"TotalRestrictedFundsDisplay\" }, title: \"Total
Restricted
Funds\", className: \"sub-restricted-funds text-center font-size12 nowrap\" },\r\n { data: { _: \"TotalUnrestrictedFunds\", display: \"TotalUnrestrictedFundsDisplay\" }, title: \"Total
Unrestricted
Funds\", className: \"sub-unrestricted-funds text-center font-size12 nowrap\" },\r\n { data: { _: \"RemainingUnrestrictedFunds\", display: \"RemainingUnrestrictedFundsDisplay\" }, title: \"Remaining
Unrestricted
Funds\", className: \"sub-remaining-unrestricted text-center font-size12 nowrap\" },\r\n\r\n { data: { _: \"TotalInvoicedToDate\", display: \"TotalInvoicedToDateDisplay\" }, title: \"Total
Invoiced
To Date\", className: \"sub-invoiced-to-date text-center font-size12 nowrap\" },\r\n { data: { _: \"LastInvoiceDateCompare\", display: \"LastInvoiceDate\" }, title: \"Last
Invoice
Date\", className: \"sub-last-invoice-date text-center font-size12 nowrap\" },\r\n //{ data: \"StudyName\", title: \"Study Name\", visble: false, className: \"d-none\" }\r\n ];\r\n\r\n let tableColumnGroups: TableColumnGroup[] = [\r\n\r\n //new TableColumnGroup(\"Category\", true, [], \"sub-category\"),\r\n new TableColumnGroup(\"Vendor\", false, [], \"sub-vendor\"), // auto show on drilldown\r\n new TableColumnGroup(\"Subcontract #\", false, [], \"sub-number\"),\r\n new TableColumnGroup(\"PO/Vendor ID\", false, [], \"sub-poid\"),\r\n new TableColumnGroup(\"Project Code\", false, [], \"sub-project-code\"),\r\n new TableColumnGroup(\"Subcontract Start Date\", false, [], \"sub-subcontract-start-date\"),\r\n new TableColumnGroup(\"Subcontract End Date\", false, [], \"sub-subcontract-end-date\"), // auto show on drilldown\r\n new TableColumnGroup(\"Subcontract Type\", false, [], \"sub-subcontract-type\"), // auto show on drilldown\r\n\r\n new TableColumnGroup(\"Total Subcontract Amount\", true, [], \"sub-subcontract-amount\"),\r\n new TableColumnGroup(\"Total Restricted Funds\", true, [], \"sub-restricted-funds\"),\r\n new TableColumnGroup(\"Total Unrestricted Funds\", true, [], \"sub-unrestricted-funds\"),\r\n new TableColumnGroup(\"Remaining Unrestricted Funds\", true, [], \"sub-remaining-unrestricted\"),\r\n new TableColumnGroup(\"Total Invoiced to Date\", true, [], \"sub-invoiced-to-date\"),\r\n new TableColumnGroup(\"Last Invoice Date\", true, [], \"sub-last-invoice-date\")\r\n ];\r\n\r\n this.dataTable = $('#' + this.tableId).DataTable({\r\n \"dom\": '<\"top-controls\"<\"column-select\"><\"added-since\"><\"search-bar\"f><\"spacer\"><\"count-found\"B>>rtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: true,\r\n pagingType: 'simple',\r\n pageLength: 50,\r\n search: true,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n /*fixedColumns: {\r\n leftColumns: 1\r\n },*/\r\n columns: columns,\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n title: \"RECOVER-CT Financials Export\"\r\n //exportOptions: {\r\n // columns: [1, 2, 3, 4]\r\n //}\r\n },\r\n {\r\n extend: 'csv',\r\n text: 'Export All',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n title: \"RECOVER-CT Financials Export All\",\r\n customize: function (csv) {\r\n let allExportItems = [];\r\n chart.allSubcontracts.map(item => {\r\n item.VendorNameDisplay = \"TOTAL\"\r\n allExportItems.push(item);\r\n item.DrillDown.map(drillDownItem => {\r\n allExportItems.push(drillDownItem);\r\n })\r\n });\r\n let modifiedCSV = chart.convertToCSV(allExportItems);\r\n return modifiedCSV;\r\n }\r\n }\r\n ],\r\n order: [0, 'asc'],\r\n data: this.allSubcontracts,\r\n initComplete: (settings, json) => {\r\n // Set up Drillup Button\r\n $(this.containerId).find(\"th.sub-category\").html(`\r\n
\r\n
\r\n \r\n
\r\n
Category
\r\n
\r\n `);\r\n\r\n $(this.containerId).find(\".table-drillup-btn\").on('click', () => {\r\n this.drillupTable();\r\n });\r\n\r\n // Set up Drilldown\r\n let charts = this;\r\n $(this.containerId).find(\".table-drilldown-btn\").on('click', function () {\r\n // Drilldown the charts\r\n let clickedCategory = $(this).text();\r\n let clickedIndex = charts.chartCategories.findIndex((category) => category == clickedCategory);\r\n charts.expendituresChart.xAxis[0].drilldownCategory(clickedIndex);\r\n\r\n // Update the Table\r\n charts.drilldownTable(clickedCategory);\r\n });\r\n }\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").addClass('col-12 col-md-3 px-0');\r\n $(\"#\" + this.tableWrapperId + \" .column-select\").empty().html('
');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n $(\"#\" + this.tableWrapperId + \" .spacer\").addClass('col-12 col-md-1');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").addClass('col-12 col-md-5 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n $(\"#\" + this.tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n this.tableColumnController = new TableColumnVisibilityController(this.tableId, (this.tableId + '-column-select'), tableColumnGroups);\r\n\r\n $('#' + this.tableId).on('search.dt', (e, settings) => {\r\n this.setCountFoundLabel(this.dataTable.rows({ search: 'applied' }).count());\r\n });\r\n\r\n $(\"#\" + this.tableWrapperId).find(\"th.sorting\").on('click', () => {\r\n this.dataTable.columns.adjust().draw();\r\n })\r\n \r\n this.setCountFoundLabel(this.allSubcontracts.length);\r\n\r\n //this.initializeTableLinks();\r\n this.dataTable.on('draw', (e, settings) => {\r\n this.initializeTableLinks();\r\n });\r\n\r\n $(\"#summary-tab\").on('click', () => {\r\n setTimeout(() => {\r\n this.dataTable.columns.adjust().draw();\r\n }, 500)\r\n }); \r\n\r\n $(\"#summary-chart-switch\").on('change', () => {\r\n setTimeout(() => {\r\n this.dataTable.columns.adjust().draw();\r\n }, 250)\r\n });\r\n }\r\n\r\n private setCountFoundLabel(count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + this.tableId + '-found-count').text(\"No Entries Found\"); break;\r\n case 1: $('#' + this.tableId + '-found-count').text(\"1 Entry Found\"); break;\r\n default: $('#' + this.tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Entries Found\");\r\n }\r\n }\r\n\r\n private initializeTableLinks() {\r\n let charts = this;\r\n\r\n $(this.containerId).find(\".table-drilldown-btn\").off('click');\r\n $(this.containerId).find(\".table-drilldown-btn\").on('click', function() {\r\n // Drilldown the charts\r\n let clickedCategory = $(this).text();\r\n let clickedIndex = charts.chartCategories.findIndex((category) => category == clickedCategory);\r\n charts.expendituresChart.xAxis[0].drilldownCategory(clickedIndex);\r\n });\r\n }\r\n\r\n private drilldownTable(category: string): void {\r\n $(this.containerId).find(\".table-drillup-container\").removeClass(\"d-none\");\r\n let subcontracts = this.allSubcontracts.find(subcontract => subcontract.StudyName == category).DrillDown;\r\n if (!subcontracts) {\r\n return\r\n }\r\n this.currentSubcontracts = subcontracts;\r\n\r\n // Gives you selected column Names\r\n let selectedColumnNames: string[] = $(`#${this.tableId}-column-filter-dropdown`).val(); \r\n\r\n // Gives you all the names of the datatable\r\n let columnHeaders = this.dataTable.columns().header().toArray();\r\n let allColumnNames = [];\r\n columnHeaders.forEach(header => {\r\n let columnName = $(header).html().replace(\"
\", \" \").replace(\"
\", \" \").trim();\r\n allColumnNames.push(columnName);\r\n });\r\n\r\n // Get Selected Column Indexes\r\n let selectedColumnIndexes = [1,6,7] // Defaults\r\n for (let i = 0; i < allColumnNames.length; i++) \r\n {\r\n if (selectedColumnNames.indexOf(allColumnNames[i]) != -1 && selectedColumnIndexes.indexOf(i) == -1) {\r\n selectedColumnIndexes.push(i);\r\n }\r\n }\r\n\r\n // Show columns for drilldown \r\n this.dataTable.columns(selectedColumnIndexes).visible(true, false);\r\n \r\n\r\n this.updateTableContent(this.currentSubcontracts);\r\n this.clearSearchBar();\r\n }\r\n\r\n private drillupTable(): void {\r\n // Drilldown the charts\r\n $(this.containerId).find(\".table-drillup-container\").addClass(\"d-none\");\r\n this.expendituresChart.drillUp();\r\n\r\n // Hide unused columns for top level\r\n this.dataTable.columns([1, 2, 3, 4, 5, 6, 7]).visible(false, false); // Blank for top level\r\n\r\n // Update the Tables\r\n this.updateTableContent(this.allSubcontracts);\r\n this.clearSearchBar();\r\n }\r\n\r\n private updateTableContent(subcontracts: FinancialGraphData[]): void {\r\n this.dataTable.clear();\r\n this.dataTable.rows.add(subcontracts);\r\n this.dataTable.order([0, 'asc']).draw();\r\n\r\n this.setCountFoundLabel(subcontracts.length);\r\n\r\n setTimeout(() => {\r\n //this.dataTable.order([0, 'asc']);\r\n this.dataTable.columns.adjust().draw();\r\n }, 250)\r\n \r\n }\r\n\r\n\r\n private getChartHeight(entries: number): number {\r\n let value: number = 150 + (entries * 30 * 1.5);\r\n return value;\r\n }\r\n\r\n\r\n\r\n private getExpenditureSeries(data: FinancialGraphData[]) {\r\n let dataLabels: string[] = ['Committed Restricted', 'Remaining Unrestricted', 'Invoiced To-Date']; // Readable Data Labels\r\n let dataLabelIds: string[] = ['reserved-series', 'unreserved-series', 'invoiced-series']; // Data Label IDs\r\n let dataFields: string[] = ['CommittedRestricted', 'RemainingUnrestricted', 'InvoicedToDate']; // FinanacialGraphData fields mapped to Data Labels\r\n let seriesColors: string[] = ['#6e6e6e', '#77a6b6 ', '#E9C46A ']; // Colors for each data label\r\n\r\n let drillDownSeries = [];\r\n let primarySeries = dataLabels.map((label: string, index: number) => {\r\n let primaryData: any[] = [];\r\n data.forEach((study: FinancialGraphData) => {\r\n\r\n primaryData.push({ \r\n name: study.Name, // Study Name\r\n y: study[dataFields[index]], // Amount of Money (per category)\r\n drilldown: study.Name + \"-\" + label // id of relative drilldown\r\n });\r\n\r\n let filteredRecords: FinancialGraphData[] = study.DrillDown; // Get vendors and other folks assoicated with study\r\n let detailedDrilldownData: any[] = [];\r\n filteredRecords.forEach((record: FinancialGraphData) => {\r\n detailedDrilldownData.push(\r\n [record.Name, record[dataFields[index]]] // [Vendor Name, Amount of Money (per category)]\r\n );\r\n });\r\n\r\n drillDownSeries.push({\r\n name: label, // Data Label\r\n id: study.Name + \"-\" + label, // id to help drilldown\r\n data: detailedDrilldownData // [Vendor Name, Amount of Money]\r\n });\r\n });\r\n\r\n return {\r\n id: dataLabelIds[index],\r\n name: label,\r\n data: primaryData,\r\n //drilldown: label,\r\n color: seriesColors[index],\r\n };\r\n });\r\n\r\n return {\r\n primarySeries: primarySeries,\r\n drillDownSeries: drillDownSeries\r\n };\r\n }\r\n\r\n private getLastInvoiceDateSeries(graphData: FinancialGraphData[]) {\r\n let drilldownLastInvoicedSeries: any[] = [];\r\n let invoiceData: any[] = graphData.map((study: FinancialGraphData) => {\r\n\r\n let filteredRecords = study.DrillDown;\r\n let detailedDrilldownData: any[] = [];\r\n filteredRecords.forEach((record: FinancialGraphData) => {\r\n detailedDrilldownData.push(\r\n [record.Name, record.DaysSinceLastInvoice]\r\n );\r\n });\r\n\r\n drilldownLastInvoicedSeries.push({\r\n name: \"Days Since Last Invoice\",\r\n id: study.Name + \"-\",\r\n data: detailedDrilldownData\r\n });\r\n\r\n return {\r\n name: study.Name,\r\n y: study.DaysSinceLastInvoice,\r\n drilldown: study.Name + \"-\"\r\n };\r\n });\r\n\r\n let primarySeries = [{\r\n id: 'days-since-last-invoice-series',\r\n name: \"Days Since Last Invoice\",\r\n data: invoiceData,\r\n //color: \"#152850\",\r\n color: \"#E9C46A\"\r\n }];\r\n\r\n return {\r\n primarySeries: primarySeries,\r\n drilldownSeries: drilldownLastInvoicedSeries \r\n }\r\n }\r\n\r\n private fadeLabels(chartId: string): void {\r\n let stackLabel = $(chartId).find('.highcharts-stack-labels').first();\r\n stackLabel.addClass(\"d-none\");\r\n stackLabel.removeClass(\"show-label\");\r\n setTimeout(() => {\r\n stackLabel.addClass(\"show-label\");\r\n stackLabel.removeClass(\"d-none\");\r\n this.hideExcessLabels(chartId);\r\n }, 20);\r\n \r\n }\r\n\r\n private hideExcessLabels(chartId: string): void {\r\n let stackLabels = $(chartId).find('.highcharts-stack-labels').children('.highcharts-label');\r\n let isHidden = false;\r\n if (stackLabels.length > 0) {\r\n if (stackLabels[0].getAttribute('visibility') == 'hidden') {\r\n return;\r\n }\r\n }\r\n for (let i = 0; i < stackLabels.length; i++) {\r\n // if the label is hidden\r\n if (stackLabels[i].getAttribute('visibility') == 'hidden') {\r\n isHidden = true;\r\n }\r\n\r\n if (isHidden && stackLabels[i].getAttribute('visibility') == 'visible') {\r\n //console.log(\"Hide This:\")\r\n //console.log(stackLabels[i]);\r\n stackLabels[i].setAttribute('visibility', 'hidden');\r\n }\r\n } \r\n }\r\n\r\n private convertToCSV(objArray: FinancialGraphData[]): string {\r\n let csvArray = [\r\n [\r\n \"\\\"Category\\\"\",\r\n \"\\\"Vendor\\\"\",\r\n \"\\\"Subcontract #\\\"\",\r\n \"\\\"PO/Vendor ID\\\"\",\r\n \"\\\"Project Code\\\"\",\r\n \"\\\"Subcontract Start Date\\\"\",\r\n \"\\\"Subcontract End Date\\\"\",\r\n \"\\\"Subcontract Type\\\"\",\r\n \"\\\"Total Subcontract Amount\\\"\",\r\n \"\\\"Total Restricted Funds\\\"\",\r\n \"\\\"Total Unrestricted Funds\\\"\",\r\n \"\\\"Remaining Unrestricted Funds\\\"\",\r\n \"\\\"Total Invoiced To Date\\\"\",\r\n \"\\\"Last Invoice Date\\\"\"\r\n ],\r\n \r\n ...objArray.map(item => [\r\n `\\\"${item.StudyName}\\\"`,\r\n `\\\"${item.VendorNameDisplay}\\\"`,\r\n `\\\"${item.SubcontractNumber}\\\"`,\r\n `\\\"${item.POID}\\\"`,\r\n `\\\"${item.ProjectLevel}\\\"`,\r\n `\\\"${item.SubcontractStartDate}\\\"`,\r\n `\\\"${item.SubcontractEndDate}\\\"`,\r\n `\\\"${item.SubcontractType}\\\"`,\r\n `\\\"${item.TotalSubcontractAmountDisplay}\\\"`,\r\n `\\\"${item.TotalRestrictedFundsDisplay}\\\"`,\r\n `\\\"${item.TotalUnrestrictedFundsDisplay}\\\"`,\r\n `\\\"${item.RemainingUnrestrictedFundsDisplay}\\\"`,\r\n `\\\"${item.TotalInvoicedToDateDisplay}\\\"`,\r\n `\\\"${item.LastInvoiceDate}\\\"`\r\n ])\r\n \r\n ];\r\n let csvJoined = csvArray.map(item => item.join(\",\"));\r\n let csvString = csvJoined.join(\"\\n\");\r\n \r\n return csvString;\r\n }\r\n\r\n clearSearchBar(): void {\r\n this.dataTable.search('').draw();\r\n }\r\n\r\n}","import { OutcomeEvent } from \"../scripts/outcomes.entities\";\r\n\r\n\r\nexport class OutcomesDatatableEntry {\r\n Study: string;\r\n Appendix: string;\r\n Site: string;\r\n SiteNumber: string;\r\n Outcome: string;\r\n\r\n PotentialOutcomes: number;\r\n ExpectedOutcomes: number;\r\n Completed: number[] = [];\r\n Overdue: number[] = [];\r\n NotDone: number[] = [];\r\n DiscPrior: number[] = [];\r\n NotYetDue: number;\r\n\r\n CompletedOutcomes: OutcomeEvent[] = [];\r\n OverdueOutcomes: OutcomeEvent[] = [];\r\n NotDoneOutcomes: OutcomeEvent[] = [];\r\n DiscPriorOutcomes: OutcomeEvent[] = [];\r\n\r\n sortValue: number;\r\n\r\n constructor(study: string, appendix: string, site: string, siteNumber: string, outcome: string) {\r\n this.Study = study;\r\n this.Appendix = appendix;\r\n this.Site = site;\r\n this.SiteNumber = siteNumber;\r\n this.Outcome = outcome;\r\n\r\n this.PotentialOutcomes = 0;\r\n this.ExpectedOutcomes = 0;\r\n this.NotYetDue = 0;\r\n }\r\n\r\n addOutcomeEvent(outcome: OutcomeEvent): void {\r\n this.PotentialOutcomes += 1;\r\n\r\n switch (outcome.OutcomeStatusId) {\r\n case 1: this.Completed[0] = (this.Completed[0] == undefined) ? 1 : (this.Completed[0] + 1); this.ExpectedOutcomes += 1; this.CompletedOutcomes.push(outcome); break;\r\n case 2: this.DiscPrior[0] = (this.DiscPrior[0] == undefined) ? 1 : (this.DiscPrior[0] + 1); this.ExpectedOutcomes += 1; this.DiscPriorOutcomes.push(outcome); break;\r\n case 3: this.Overdue[0] = (this.Overdue[0] == undefined) ? 1 : (this.Overdue[0] + 1); this.ExpectedOutcomes += 1; this.OverdueOutcomes.push(outcome); break;\r\n case 4: this.NotDone[0] = (this.NotDone[0] == undefined) ? 1 : (this.NotDone[0] + 1); this.ExpectedOutcomes += 1; this.NotDoneOutcomes.push(outcome); break;\r\n case 5: this.NotYetDue = (this.NotYetDue == undefined) ? 1 : (this.NotYetDue + 1); break;\r\n }\r\n }\r\n\r\n initialize(): void {\r\n if (this.ExpectedOutcomes > 0) {\r\n if (this.Completed[0] != undefined) { this.Completed[1] = (this.Completed[0] / this.ExpectedOutcomes); }\r\n if (this.Overdue[0] != undefined) { this.Overdue[1] = (this.Overdue[0] / this.ExpectedOutcomes); }\r\n if (this.NotDone[0] != undefined) { this.NotDone[1] = (this.NotDone[0] / this.ExpectedOutcomes); }\r\n if (this.DiscPrior[0] != undefined) { this.DiscPrior[1] = (this.DiscPrior[0] / this.ExpectedOutcomes); }\r\n }\r\n }\r\n\r\n static addValue(currentValue: number, valueToAdd: number): number {\r\n if (currentValue == undefined) { currentValue = 0; }\r\n currentValue += valueToAdd;\r\n return currentValue;\r\n }\r\n\r\n static getHash(grouping: string, outcome: OutcomeEvent): string {\r\n if (grouping == \"none\") { return outcome.StudyId + \"-\" + outcome.AppendixId + \"-\" + outcome.SiteNumber + \"-\" + outcome.OutcomeId; }\r\n else if (grouping == \"by-outcome\") { return outcome.StudyId + \"-\" + outcome.AppendixId + \"-\" + outcome.OutcomeId; }\r\n else if (grouping == \"by-site\") { return outcome.StudyId + \"-\" + outcome.AppendixId + \"-\" + outcome.SiteNumber; }\r\n else return \"unknown\";\r\n }\r\n}","import { plainToClass } from \"class-transformer\";\r\nimport { DateUpdatedSection } from \"../../../../shared/components/date-updated-section/date-updated-section.view\";\r\nimport { Unique } from \"../../../../shared/scripts/array-functions\";\r\nimport { IFilter } from \"../../../../shared/scripts/filtering/filtering.entities\";\r\nimport { GetSelectedDropdownValues, InitializeFilterDropdown } from \"../../../../shared/scripts/filtering/filtering.utilities\";\r\nimport { SiteInfo } from \"../../sites/shared/sites.entities\";\r\nimport { PrescreeningChart } from \"./prescreening.chart\";\r\nimport { PrescreeningEntry, PrescreeningGraphDataPoint } from \"./prescreening.entities\";\r\nimport { PrescreeningTable } from \"./prescreening.table\";\r\n\r\n\r\n\r\nexport class PrescreeningPage implements IFilter {\r\n\r\n summaryData: PrescreeningEntry[] = [];\r\n //summaryMap: Map = new Map();\r\n \r\n //chart: PrescreeningChart;\r\n table: PrescreeningTable;\r\n\r\n constructor(DataJson: any, SiteInfoJson: any, LastUpdatedJson: any) {\r\n\r\n $(() => {\r\n\r\n new DateUpdatedSection(LastUpdatedJson);\r\n\r\n let siteDictionary: Map = SiteInfo.CreateNameMap(SiteInfoJson, undefined);\r\n\r\n let data: PrescreeningEntry[] = plainToClass(PrescreeningEntry, DataJson);\r\n //data = data.filter((el: PrescreeningEntry) => el.SiteNumber == 226);\r\n\r\n let weeklyData: PrescreeningEntry[] = [];\r\n\r\n data.forEach((element: PrescreeningEntry) => {\r\n element.SiteName = siteDictionary.get(element.SiteNumber);\r\n element.initialize();\r\n if (element.Type == 0) {\r\n this.summaryData.push(element);\r\n //this.summaryMap.set(element.getSeriesName(), element);\r\n }\r\n else if (element.Type == 1) { weeklyData.push(element); }\r\n else if (element.Type == 2) {\r\n this.summaryData.push(element);\r\n //console.log(element); \r\n }\r\n });\r\n\r\n this.summaryData.forEach((summary: PrescreeningEntry) => {\r\n summary.WeeklyEntries = weeklyData.filter((entry: PrescreeningEntry) => summary.SiteHash == entry.SiteHash);\r\n summary.createChartSeries(); \r\n });\r\n\r\n InitializeFilterDropdown('#prime-contract-dropdown', Unique(this.summaryData.map((entry: PrescreeningEntry) => entry.PrimeContract), true), this);\r\n\r\n $('#loading-indicator').hide();\r\n $('.loaded-content').removeClass('invisible');\r\n\r\n //this.chart = new PrescreeningChart(this.summaryMap);\r\n //this.chart = new PrescreeningChart(new Map(this.summaryData.map((entry: PrescreeningEntry) => [entry.ChartSeriesName, entry])));\r\n //this.table = new PrescreeningTable(this.summaryData, GetSelectedDropdownValues('#prime-contract-dropdown'), this.chart);\r\n this.table = new PrescreeningTable(this.summaryData, GetSelectedDropdownValues('#prime-contract-dropdown'));\r\n\r\n //console.log(this.data);\r\n //console.log(SiteDictionaryJson);\r\n this.triggerFilter();\r\n \r\n });\r\n }\r\n\r\n triggerFilter(): void {\r\n\r\n let selectedPrimeContracts: string[] = GetSelectedDropdownValues('#prime-contract-dropdown');\r\n\r\n if (selectedPrimeContracts.length == 0) {\r\n $('#page-content').hide();\r\n }\r\n else {\r\n $('#page-content').show();\r\n this.table.updateData(selectedPrimeContracts);\r\n }\r\n }\r\n}","import { FormatNumberWithCommas } from \"../../../../../../shared/scripts/number-functions\";\r\nimport { SetActiveTab } from \"../../../../../../shared/scripts/tab-utilities\";\r\nimport { RenderNullableNumberWithSeparators, RenderProgressValue } from \"../../../../../../shared/scripts/table-functions\";\r\nimport { ISiteInfo } from \"../../../scripts/data-completeness.page\";\r\nimport { VisitsController } from \"../scripts/visits.controller\";\r\nimport { VisitsDialog } from \"../scripts/visits.dialog\";\r\nimport { VisitsDatatableEntry } from \"./visits-datatable.entities\";\r\n\r\n\r\nexport class VisitsDatatableView {\r\n\r\n selectedGrouping: string; //none, visit, site\r\n\r\n tableNone: any; tableNoneId: string = \"visit-datatable-none\";\r\n tableByVisit: any; tableVisitId: string = \"visit-datatable-byvisit\";\r\n tableBySite: any; tableSiteId: string = \"visit-datatable-bysite\";\r\n\r\n constructor() {\r\n this.selectedGrouping = \"none\";\r\n\r\n this.tableNone = this.initializeTable(this.tableNoneId, this.tableNoneId + \"_wrapper\");\r\n this.tableByVisit = this.initializeTable(this.tableVisitId, this.tableVisitId + \"_wrapper\");\r\n this.tableBySite = this.initializeTable(this.tableSiteId, this.tableSiteId + \"_wrapper\");\r\n\r\n this.initializeDialog([this.tableNoneId, this.tableVisitId, this.tableSiteId]);\r\n }\r\n\r\n\r\n SetView(newView: string): void {\r\n\r\n //console.log(newView);\r\n\r\n if (!newView.startsWith(\"visit-datatable\")) { return; }\r\n\r\n if (newView.includes(\"none\")) { this.selectedGrouping = \"none\"; }\r\n else if (newView.includes(\"byvisit\")) { this.selectedGrouping = \"visit\"; }\r\n else if (newView.includes(\"bysite\")) { this.selectedGrouping = \"site\"; }\r\n\r\n if (this.selectedGrouping == \"none\") { SetActiveTab(\"visit-datatable-tabs\", \"content-visit-datatable-none\"); this.tableNone.columns.adjust(); }\r\n else if (this.selectedGrouping == \"visit\") { SetActiveTab(\"visit-datatable-tabs\", \"content-visit-datatable-byvisit\"); this.tableByVisit.columns.adjust(); }\r\n else if (this.selectedGrouping == \"site\") { SetActiveTab(\"visit-datatable-tabs\", \"content-visit-datatable-bysite\"); this.tableBySite.columns.adjust(); }\r\n }\r\n\r\n UpdateData(tableEntriesNone: VisitsDatatableEntry[], tableEntriesByVisit: VisitsDatatableEntry[], tableEntriesBySite: VisitsDatatableEntry[]): void {\r\n this.tableNone.clear();\r\n this.tableByVisit.clear();\r\n this.tableBySite.clear();\r\n\r\n this.tableNone.rows.add(tableEntriesNone).draw();\r\n this.tableByVisit.rows.add(tableEntriesByVisit).draw();\r\n this.tableBySite.rows.add(tableEntriesBySite).draw();\r\n\r\n //this.setCountFoundLabel(milestonesBySite.length);\r\n }\r\n\r\n private initializeTable(tableId: string, tableWrapperId: string): any {\r\n\r\n let dataTable: any = $('#' + tableId).DataTable({\r\n \"dom\": 'lrtip',\r\n autoWidth: true,\r\n info: false,\r\n paging: false,\r\n //pagingType: 'simple',\r\n //pageLength: 50,\r\n search: false,\r\n scrollX: true,\r\n scrollY: '70vh',\r\n scrollCollapse: true,\r\n orderCellsTop: true,\r\n fixedColumns: {\r\n leftColumns: 4\r\n },\r\n columns: [\r\n { data: \"Study\", title: \"Platform\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Appendix\", title: \"Trial\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"SiteNumber\", title: \"Site\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"Visit\", title: \"Visit\", className: \"text-left font-size12 nowrap\" },\r\n { data: \"PotentialVisits\", title: \"Potential
Visits\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { data: \"ExpectedVisits\", title: \"Expected
Visits\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators },\r\n { data: \"Completed.0\", title: \"Completed
Visits\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '', visible: false },\r\n { data: \"Completed.1\", title: \"Percent
Completed\", className: \"text-center font-size12 nowrap gray font-underline clickable-completed\", render: RenderProgressValue, defaultContent: '' },\r\n { data: \"Overdue.0\", title: \"Overdue
Visits\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '', visible: false },\r\n { data: \"Overdue.1\", title: \"Percent
Overdue\", className: \"text-center font-size12 nowrap gray font-underline clickable-overdue\", render: RenderProgressValue, defaultContent: '' },\r\n { data: \"NotDone.0\", title: \"Not Done
Visits\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '', visible: false },\r\n { data: \"NotDone.1\", title: \"Percent
Not Done\", className: \"text-center font-size12 nowrap gray font-underline clickable-notdone\", render: RenderProgressValue, defaultContent: '' },\r\n { data: \"DiscPrior.0\", title: \"Disc. Prior
Visits\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '', visible: false },\r\n { data: \"DiscPrior.1\", title: \"Percent
Disc. Prior\", className: \"text-center font-size12 nowrap gray font-underline clickable-discprior\", render: RenderProgressValue, defaultContent: '' },\r\n { data: \"NotYetDue\", title: \"Not Yet Due
Visits\", className: \"text-center font-size12 nowrap\", render: RenderNullableNumberWithSeparators, defaultContent: '' },\r\n { data: \"Site\", title: \"Site Name\", className: \"text-left font-size10 nowrap\", visible: false },\r\n ],\r\n buttons: [\r\n {\r\n extend: 'csv',\r\n text: '',\r\n titleAttr: 'CSV',\r\n charset: 'utf-8',\r\n }\r\n ],\r\n createdRow: (row, data: any, index) => {\r\n //cell formatting on percentages\r\n if (data.Completed[1] != undefined) { this.setCellPercentValue(row, 'td:eq(6)', this.getCellColorByValue(\"Completed\", data.Completed[1]), data.Completed[0]); }\r\n if (data.Overdue[1] != undefined) { this.setCellPercentValue(row, 'td:eq(7)', this.getCellColorByValue(\"Overdue\", data.Overdue[1]), data.Overdue[0]); }\r\n if (data.NotDone[1] != undefined) { this.setCellPercentValue(row, 'td:eq(8)', this.getCellColorByValue(\"NotDone\", data.NotDone[1]), data.NotDone[0]); }\r\n if (data.DiscPrior[1] != undefined) { this.setCellPercentValue(row, 'td:eq(9)', this.getCellColorByValue(\"DiscPrior\", data.DiscPrior[1]), data.DiscPrior[0]); }\r\n\r\n //tooltip config for percentages and site number\r\n //$(row).attr('title', data.Site);\r\n //$(row).find('td').each(function (index, td) {\r\n // $(td).attr('data-toggle', 'tooltip');\r\n // $(td).attr('data-placement', 'top');\r\n //});\r\n }\r\n //order: [[1, 'asc'], [7, 'asc']],\r\n });\r\n\r\n dataTable.on('column-visibility.dt', function () {\r\n $('[data-toggle=\"tooltip\"]').tooltip()\r\n });\r\n $('[data-toggle=\"tooltip\"]').tooltip()\r\n\r\n //$(\"#\" + tableWrapperId + \" .top-controls\").addClass('row mx-0');\r\n\r\n //$(\"#\" + tableWrapperId + \" .search-bar\").addClass('col-12 col-md-3');\r\n\r\n //$(\"#\" + tableWrapperId + \" .spacer\").addClass('col-12 col-md-3');\r\n //$(\"#\" + tableWrapperId + \" .count-found\").addClass('col-12 col-md-3 d-flex justify-content-end vertical-align-middle align-self-end mt-2 pr-0');\r\n // \r\n //$(\"#\" + tableWrapperId + \" .count-found\").prepend('
');\r\n //$(\"#\" + tableWrapperId + \" .count-found\").prepend('
');\r\n\r\n //$('#' + tableId).on('search.dt', (e, settings) => {\r\n // this.setCountFoundLabel(tableId, dataTable.rows({ search: 'applied' }).count());\r\n //});\r\n\r\n return dataTable;\r\n }\r\n\r\n private getCellColorByValue(dataElement: string, value: number): string {\r\n if (dataElement == \"Completed\") {\r\n if (value >= 0.85) return \"#7fb87f\";\r\n else if (value >= 0.65) return \"#FCE77D\";\r\n else return \"#F07D7D\";\r\n }\r\n else if (dataElement == \"Overdue\" || dataElement == \"NotDone\") {\r\n if (value < 0.10) return \"#7fb87f\";\r\n else if (value <= 0.20) return \"#FCE77D\";\r\n else return \"#F07D7D\";\r\n }\r\n else if (dataElement == \"DiscPrior\") {\r\n if (value < 0.10) return \"#7fb87f\";\r\n else if (value <= 0.20) return \"#FCE77D\";\r\n else return \"#F07D7D\";\r\n }\r\n }\r\n\r\n private initializeDialog(tableIds: string[]): void {\r\n\r\n tableIds.forEach((tableId: string) => {\r\n $('#' + tableId).on('click', 'td.clickable-completed', function () {\r\n var row = $('#' + tableId).DataTable().row(this).data();\r\n VisitsDialog.ShowDialog(row.CompletedVisits);\r\n });\r\n $('#' + tableId).on('click', 'td.clickable-overdue', function () {\r\n var row = $('#' + tableId).DataTable().row(this).data();\r\n VisitsDialog.ShowDialog(row.OverdueVisits);\r\n });\r\n $('#' + tableId).on('click', 'td.clickable-notdone', function () {\r\n var row = $('#' + tableId).DataTable().row(this).data();\r\n VisitsDialog.ShowDialog(row.NotDoneVisits);\r\n });\r\n $('#' + tableId).on('click', 'td.clickable-discprior', function () {\r\n var row = $('#' + tableId).DataTable().row(this).data();\r\n VisitsDialog.ShowDialog(row.DiscPriorVisits);\r\n });\r\n });\r\n }\r\n\r\n private setCellPercentValue(row: any, cell: string, color: string, count: number): void {\r\n $(cell, row).css('background-color', color);\r\n $(cell, row).attr('title', 'n = ' + count);\r\n $(cell, row).attr('data-toggle', 'tooltip');\r\n $(cell, row).attr('data-placement', 'top');\r\n }\r\n\r\n exportTable(): void {\r\n\r\n let tableId: string = undefined;\r\n if (this.selectedGrouping == \"none\") { tableId = this.tableNoneId; }\r\n else if (this.selectedGrouping == \"byvisit\") { tableId = this.tableVisitId; }\r\n else if (this.selectedGrouping == \"bysite\") { tableId = this.tableSiteId; }\r\n if (tableId != undefined) {\r\n let table = $(\"#\" + this.tableNoneId).DataTable();\r\n (table).button(0).trigger(); \r\n }\r\n }\r\n\r\n private setCountFoundLabel(tableId: string, count: number): void {\r\n\r\n switch (count) {\r\n case 0: $('#' + tableId + '-found-count').text(\"No Records Found\"); break;\r\n case 1: $('#' + tableId + '-found-count').text(\"1 Record Found\"); break;\r\n default: $('#' + tableId + '-found-count').text(FormatNumberWithCommas(count + \"\") + \" Records Found\");\r\n }\r\n }\r\n\r\n private refresh(): void {\r\n //this.dataTable.columns.adjust();\r\n //this.tableColumnController.refresh();\r\n }\r\n\r\n private clearSearchBar(): void {\r\n //this.dataTable.search('').draw();\r\n }\r\n}","import { Task } from \"./task-tracker.entities\";\r\n\r\nvar Highcharts = require('highcharts/highcharts-gantt');\r\n\r\nexport class TaskTrackerGanttChart {\r\n\r\n chart: any;\r\n\r\n constructor() { }\r\n\r\n initialize(milestones: Task[], showStudyAreaPrefix: boolean): void {\r\n\r\n //console.log(milestones);\r\n\r\n let minDate: number = null;\r\n let maxDate: number = null;\r\n let startSpacerData: MilestoneDisplayData;\r\n let endSpacerData: MilestoneDisplayData;\r\n\r\n let chartHash: Map = new Map();\r\n let completionMap: Map = new Map();\r\n let taskCompletionMap: Map = new Map();\r\n let tempCategory = \"\";\r\n for (let i = 0; i < milestones.length; ++i) {\r\n let milestone = milestones[i];\r\n if (milestone.ActualStartDate != \"\" && milestone.ActualEndDate == \"\") {\r\n taskCompletionMap.set(milestone.Name, (milestone.ActualStartDate != \"\" && milestone.ActualEndDate == \"\"));\r\n }\r\n console.log(taskCompletionMap);\r\n if (showStudyAreaPrefix) {\r\n //milestone.Name = milestone.StudyArea + \" - \" + milestone.Name;\r\n milestone.GanttTaskCategory = milestone.StudyArea;\r\n }\r\n else { milestone.GanttTaskCategory = milestone.TaskCategory; }\r\n\r\n\r\n if (milestone.GanttTaskCategory != tempCategory && !completionMap.has(milestone.GanttTaskCategory)) {\r\n\r\n completionMap.set(milestone.GanttTaskCategory, true);\r\n tempCategory = milestone.GanttTaskCategory;\r\n }\r\n if (milestone.ActualEndDate == \"\" && (milestone.PlannedEndDate != \"\" || milestone.ActualStartDate != \"\")) {\r\n completionMap.set(milestone.GanttTaskCategory, false);\r\n }\r\n }\r\n\r\n let groupPrefix = \"group-\";\r\n\r\n for (let i = 0; i < milestones.length; ++i) {\r\n let milestone = milestones[i];\r\n \r\n //if (milestone.StartDate == \"\") milestone.DueDate = \"2021-06-01\";\r\n //if (milestone.DueDate == \"\") milestone.DueDate = \"2022-08-31\";\r\n\r\n //console.log(milestone.StartDate, milestone.DueDate, milestone.ActualStartDate, milestone.DeliveredDate);\r\n\r\n let categoryData: MilestoneDisplayData = chartHash.get(groupPrefix + milestone.GanttTaskCategory.toLowerCase());\r\n if (categoryData == null) {\r\n categoryData = new MilestoneDisplayData(milestone.GanttTaskCategory, \"group\", groupPrefix + milestone.GanttTaskCategory.toLowerCase(), null, null, null, (showStudyAreaPrefix) ? false : true);\r\n //categoryData = new MilestoneDisplayData(milestone.GanttTaskCategory, \"group\", milestone.SortOrder + \"\", null, null, (showStudyAreaPrefix) ? false : true);\r\n if (completionMap.get(milestone.GanttTaskCategory)) {\r\n categoryData.setColorByStatus(\"Completed\");\r\n }\r\n else {\r\n categoryData.setColorByStatus(\"Not Started\");\r\n }\r\n\r\n //the first category\r\n if (chartHash.size == 0) {\r\n startSpacerData = new MilestoneDisplayData(milestone.GanttTaskCategory, \"spacer\", null, null, null, null, null);\r\n endSpacerData = new MilestoneDisplayData(milestone.GanttTaskCategory, \"spacer\", null, null, null, null, null);\r\n }\r\n }\r\n\r\n categoryData.checkDates(this.getDate(milestone.PlannedEndDate), this.getDate(milestone.PlannedEndDate), this.getDate(milestone.ActualStartDate), (milestone.Status == \"Completed\") ? this.getDate(milestone.ActualEndDate) : (milestone.Status == \"In Progress\") ? this.today() : null);\r\n chartHash.set(groupPrefix + milestone.GanttTaskCategory.toLowerCase(), categoryData);\r\n\r\n //to set the bounds of the x-axis\r\n if (minDate == null || (categoryData.start != null && categoryData.start < minDate)) minDate = categoryData.start;\r\n if (maxDate == null || (categoryData.end != null && categoryData.end > maxDate)) maxDate = categoryData.end;\r\n\r\n let actualWork: MilestoneDisplayData = this.createActualWork(milestone, groupPrefix + milestone.GanttTaskCategory.toLowerCase(), this.today());\r\n //let plannedWork: MilestoneDisplayData = this.createPlannedWork(milestone, groupPrefix + milestone.GanttTaskCategory.toLowerCase());\r\n let actualMilestone: MilestoneDisplayData = this.createActualMilestone(milestone, groupPrefix + milestone.GanttTaskCategory.toLowerCase());\r\n let plannedMilestone: MilestoneDisplayData = this.createPlannedMilestone(milestone, groupPrefix + milestone.GanttTaskCategory.toLowerCase());\r\n\r\n //order matters\r\n if (actualWork != null) { chartHash.set(\"actualWork-\" + this.getMilestoneName(milestone).toLowerCase(), actualWork); }\r\n //if (plannedWork != null) { chartHash.set(\"plannedWork-\" + milestone.Name.toLowerCase(), plannedWork); }\r\n if (actualMilestone != null) { chartHash.set(\"actualDeliv-\" + this.getMilestoneName(milestone).toLowerCase(), actualMilestone); }\r\n if (plannedMilestone != null) { chartHash.set(\"plannedDeliv-\" + this.getMilestoneName(milestone).toLowerCase(), plannedMilestone); }\r\n }\r\n\r\n //to sort the hashed values\r\n let chartDataArray: MilestoneDisplayData[] = Array.from(chartHash.values());\r\n chartDataArray = chartDataArray.sort((a: MilestoneDisplayData, b: MilestoneDisplayData) => (a.sort < b.sort) ? -1 : 1);\r\n //console.log(chartDataArray);\r\n\r\n //push hidden data to end and beginning last so scroll sets to far left and not far right\r\n endSpacerData.start = maxDate + (30 * 24 * 60 * 60 * 1000); //30 days after latest event\r\n endSpacerData.end = endSpacerData.start;\r\n //chartHash.set(\"end-spacer\", endSpacerData);\r\n maxDate = endSpacerData.end;\r\n\r\n startSpacerData.start = minDate - (30 * 24 * 60 * 60 * 1000); //30 days before earliest event\r\n startSpacerData.end = startSpacerData.start;\r\n //chartHash.set(\"start-spacer\", startSpacerData);\r\n minDate = startSpacerData.start;\r\n\r\n chartDataArray.push(endSpacerData);\r\n chartDataArray.push(startSpacerData);\r\n //console.log(Array.from(chartHash.values()));\r\n //console.log(chartDataArray);\r\n\r\n // THE CHART\r\n Highcharts.ganttChart('gantt-chart', {\r\n credits: { enabled: false },\r\n chart: {\r\n styledMode: false,\r\n },\r\n xAxis: {\r\n min: minDate,\r\n max: maxDate,\r\n tickInterval: (24 * 3600 * 1000 * 30), //stay at month view\r\n currentDateIndicator: {\r\n width: 3,\r\n dashStyle: 'solid',\r\n color: 'rgba(39,73,110)',\r\n label: {\r\n format: ''\r\n }\r\n }\r\n },\r\n yAxis: {\r\n uniqueNames: true,\r\n staticScale: 30, //line height\r\n labels: {\r\n style: {\r\n width: '350px',\r\n wordwrap: 'break-word',\r\n fontSize: '12px',\r\n textOverflow: 'ellipsis'\r\n }\r\n }\r\n },\r\n tooltip: {\r\n headerFormat: '',\r\n dateTimeLabelFormats: {\r\n hour: \"%B %e, %Y\",\r\n },\r\n useHtml: true,\r\n formatter: function () {\r\n let tooltip: string = '' + this.key + '

';\r\n\r\n if (this.point.type == \"planned\") {\r\n tooltip += 'Planned Completion: ' + Highcharts.dateFormat('%b %d %Y', this.x2);\r\n }\r\n else {\r\n\r\n if (this.x != this.x2) {\r\n tooltip += '
Start: ' + Highcharts.dateFormat('%b %d %Y', this.x);\r\n if (this.point.type === \"group\") {\r\n if (!completionMap.get(this.key)) {\r\n tooltip += '
In Progress ';\r\n }\r\n else {\r\n tooltip += '
Completion: ' + Highcharts.dateFormat('%b %d %Y', this.x2);\r\n }\r\n }\r\n else {\r\n let name = this.point.name;\r\n if (name.includes(\"[\")) {\r\n name = name.substring(0, name.indexOf(\"[\")-1);\r\n }\r\n if (!taskCompletionMap.get(name)) {\r\n \r\n tooltip += '
Completed ';\r\n }\r\n else {\r\n tooltip += '
In Progress ';\r\n }\r\n }\r\n }\r\n else {\r\n tooltip += '
Completion: ' + Highcharts.dateFormat('%b %d %Y', this.x2);\r\n }\r\n }\r\n return tooltip;\r\n\r\n //+ 'Start: ' + Highcharts.dateFormat('%A, %b %d %Y', this.x) + '
' + 'Go live: ' + Highcharts.dateFormat('%A, %b %d %Y', this.x2)\r\n }\r\n },\r\n legend: { enabled: false },\r\n scrollbar: {\r\n enabled: true,\r\n },\r\n rangeSelector: {\r\n enabled: true,\r\n inputEnabled: false,\r\n selected: 3,\r\n buttonPosition: {\r\n align: 'right'\r\n },\r\n buttons: [{\r\n type: 'month',\r\n count: 3,\r\n text: '3m',\r\n events: { click: (event) => { this.setZoom(7862400000); } }\r\n }, {\r\n type: 'month',\r\n count: 6,\r\n text: '6m',\r\n events: { click: (event) => { this.setZoom(15897600000); } }\r\n }, {\r\n type: 'year',\r\n count: 1,\r\n text: '1y',\r\n events: { click: (event) => { this.setZoom(31536000000); } }\r\n }, {\r\n type: 'all',\r\n text: 'All',\r\n events: { click: (event) => { this.setZoom(-1); } }\r\n }]\r\n },\r\n\r\n series: [{ data: chartDataArray }]\r\n //series: [{ data: Array.from(chartHash.values()) }]\r\n\r\n }, (chart) => this.chart = chart);\r\n }\r\n\r\n today(): Date {\r\n let today: Date = new Date();\r\n\r\n // Set to 00:00:00:000 today\r\n today.setHours(24);\r\n today.setMinutes(0);\r\n today.setSeconds(0);\r\n today.setMilliseconds(0);\r\n return today;\r\n }\r\n\r\n createActualWork(milestone: Task, parent: string, today: Date): MilestoneDisplayData {\r\n\r\n let actual: MilestoneDisplayData = new MilestoneDisplayData(this.getMilestoneName(milestone), \"actual\", milestone.SortOrder + \"-actualWork\", parent, milestone.SortOrder, milestone.DependencyList, null);\r\n actual.checkDates(null, null, this.getDate(milestone.ActualStartDate), (milestone.Status == \"Completed\") ? this.getDate(milestone.ActualEndDate) : (milestone.Status == \"In Progress\") ? today : null);\r\n actual.setColorByStatus(\"Completed\"); //or in progress - doesn't matter - just need the non-planning color\r\n actual.milestone = false;\r\n\r\n if (actual.start != null && actual.end != null && actual.start != actual.end) return actual;\r\n else return null;\r\n }\r\n\r\n createActualMilestone(milestone: Task, parent: string): MilestoneDisplayData {\r\n\r\n if (milestone.ActualEndDate != null && milestone.ActualEndDate != \"\") {\r\n let actual: MilestoneDisplayData = new MilestoneDisplayData(this.getMilestoneName(milestone), \"actual\", milestone.SortOrder + \"actualMilestone\", parent, milestone.SortOrder, milestone.DependencyList, null);\r\n actual.setDates(this.getDate(milestone.ActualEndDate).getTime(), this.getDate(milestone.ActualEndDate).getTime());\r\n actual.setColorByStatus(\"Completed\"); //or in progress - doesn't matter - just need the non-planning color\r\n actual.milestone = true;\r\n return actual;\r\n }\r\n else return null;\r\n }\r\n\r\n //createPlannedWork(milestone: Task, parent: string): MilestoneDisplayData {\r\n // let planned: MilestoneDisplayData = new MilestoneDisplayData(milestone.Name, \"planned\", null, parent, null);\r\n // planned.checkDates(this.getDate(milestone.ActualStartDate), this.getDate(milestone.ActualEndDate), null, null);\r\n // planned.setColorByStatus(\"Not Started\");\r\n // planned.milestone = false;\r\n\r\n // if (planned.start != null && planned.end != null && planned.start != planned.end) return planned;\r\n // else return null;\r\n //}\r\n\r\n createPlannedMilestone(milestone: Task, parent: string): MilestoneDisplayData {\r\n\r\n if (milestone.PlannedEndDate != null && milestone.PlannedEndDate != \"\") {\r\n\r\n let planned: MilestoneDisplayData = new MilestoneDisplayData(this.getMilestoneName(milestone), \"planned\", milestone.SortOrder + \"-plannedMilestone\", parent, milestone.SortOrder, milestone.DependencyList, null);\r\n planned.setDates(this.getDate(milestone.PlannedEndDate).getTime(), this.getDate(milestone.PlannedEndDate).getTime());\r\n planned.setColorByStatus(\"Not Started\");\r\n planned.milestone = true;\r\n return planned;\r\n }\r\n else return null;\r\n }\r\n\r\n getMilestoneName(milestone: Task): string {\r\n if (milestone.VersionLabel && milestone.VersionLabel.length > 0) return milestone.Name + \" [\" + milestone.VersionLabel + \"]\";\r\n else return milestone.Name;\r\n }\r\n\r\n setZoom(delta: number): void {\r\n let start: number = this.chart.xAxis[0].dataMin;\r\n let end: number = (delta == -1) ? this.chart.xAxis[0].dataMax : start + delta\r\n\r\n this.chart.xAxis[0].setExtremes(start, end);\r\n this.chart.redraw();\r\n }\r\n\r\n getDate(dateString: string): Date {\r\n if (dateString == null || dateString == \"\") return null;\r\n\r\n let tempDate: Date = new Date(dateString);\r\n tempDate.setHours(12);\r\n tempDate.setMinutes(0);\r\n tempDate.setSeconds(0);\r\n tempDate.setMilliseconds(0);\r\n\r\n return tempDate;\r\n }\r\n\r\n}\r\n\r\nclass MilestoneDisplayData {\r\n\r\n name: string = null;\r\n id: string = null;\r\n parent: string = null;\r\n dependency: string[] = null;\r\n start: number = null;\r\n end: number = null;\r\n sort: number = null;\r\n color: string = null;\r\n type: string = null;\r\n milestone: boolean = null;\r\n collapsed: boolean = null;\r\n pointWidth: number = 20; //default\r\n\r\n constructor(name: string, type: string, id: string, parent: string, sort: number, dependency: string[], collapsed: boolean) {\r\n this.name = name;\r\n this.type = type;\r\n this.id = id;\r\n this.parent = parent;\r\n this.sort = sort;\r\n this.dependency = dependency;\r\n this.collapsed = collapsed;\r\n }\r\n\r\n //once a milestone is made active, don't let it revert to scheduled\r\n setColorByStatus(status: string) {\r\n if (status == 'Completed' || status == 'In Progress') this.color = 'rgba(21,40,80)';\r\n else if (this.color == null) {\r\n this.color = 'rgba(255, 199, 87)';\r\n this.pointWidth = 10;\r\n }\r\n }\r\n\r\n setDates(start: number, end: number): void {\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n checkDates(plannedStart: Date, plannedEnd: Date, actualStart: Date, actualEnd: Date): void {\r\n this.checkDateBounds(plannedStart);\r\n this.checkDateBounds(plannedEnd);\r\n this.checkDateBounds(actualStart);\r\n this.checkDateBounds(actualEnd);\r\n }\r\n\r\n checkDateBounds(date: Date): void {\r\n if (date != null) {\r\n if (this.start == null) this.start = date.getTime();\r\n else if (date.getTime() < this.start) this.start = date.getTime();\r\n\r\n if (this.end == null) this.end = date.getTime();\r\n else if (date.getTime() > this.end) this.end = date.getTime();\r\n }\r\n }\r\n}\r\n"],"sourceRoot":""}